Changelog¶
What changed in each release of B2B Pricing, in terms of what it means for you rather than which files moved.
1.2.1 — 3 October 2026¶
Corrections only. No setting is added, nothing in the database changes shape, and the JSON API's routes and fields are as they were.
If you run more than one shopfront, update. Until now, every install and every update wrote B2B Pricing's settings for each of your stores, switched off, so every shopfront but the default came back from an update with your price lists not applied there, whatever the settings screen said. 1.2.1 writes the settings once, for the whole installation, and removes the copies earlier releases left on your other stores, so updating puts each shopfront back on the settings you saved.
- Bulk set refuses an amount written with a comma.
9,95used to be read as nine and written as 9.00 into every matched row. It is now refused, with a sentence saying to write9.95, the same rule the import already followed. - A price row or an assignment date that is not a real number or a real day
is refused rather than saved. A blank or mistyped price used to be saved as
free, and an end date typed as
31/12/2026as no end date at all, which kept a negotiated price on sale forever. The API's assignment endpoint refuses the same dates. - A Model or SKU containing
&,",<or>now matches. A supplier's file and the API never found such a product, and Download CSV wrote the code as&. Both now work on the code as you typed it. - A supplier file saved by Excel in a Windows encoding imports cleanly. An accented product code in it used to leave you with an empty reply after the rows had already been written; the refused-lines report now comes back.
- A save that gets no answer says so. If the store does not reply, because your session ran out or the server timed out, the import, the rows, the assignments, case quantities, Bulk set and the two personal-data screens now tell you the change may not have been made, rather than doing nothing visibly.
- Names print as written on the admin screens. A product, customer or list
name with an
&in it no longer shows as&in the filter boxes, Price check or the Bulk set sentence, and pressing Filter again no longer searches for the mangled form. - An API user whose key has been emptied is refused. OpenCart's own form will not save an empty key, but one emptied by hand in the database used to let in a caller presenting no key at all.
- An update no longer grants the personal-data screen a second time. Each update used to add another copy of that permission to your user group; it is now granted once.
1.2.0 — 28 September 2026¶
Three additions to the admin. Nothing you had set changes, and no price a customer pays moves because you updated.
- Bulk set can include subcategories. Tick Include subcategories beside the category and a price or a case quantity reaches every product under the category's children too, so a parent category is set in one go rather than child by child. It is off unless you tick it, and the sentence above the button names the category and says so before anything is written.
- Copy a price list. Tick one or more lists on Catalog → B2B Pricing → Price Lists and press Copy. Each copy has the same prices, nobody on it, and starts switched off, so next quarter's list can start from this quarter's without touching anybody who buys on it.
- Download a price list as CSV. The Rows tab of a list has a Download CSV button, matched on Model or SKU, in the same format the import reads. Download it, edit it, and import it back, ideally into a copy.
1.1.0 — 26 September 2026¶
Advanced Product Filters' price range now bounds the price each buyer sees, including their price list's price. Nothing changes if you do not use it.
1.0.0 — 22 September 2026¶
The first release. Everything in it is new, so the list below is what B2B Pricing is rather than what changed.
- Price lists as objects of their own. A named set of prices with as many products and quantity rungs as you like, assignable to a customer group or to one named customer, and switched on and off in one edit. A list is a draft until you enable it, so next quarter's prices can be built on a live store in the middle of the afternoon.
- One price, from the product page to the order line. The catalogue, the listings, the modules, search, compare, the wishlist, the cart and orders you key in yourself are all answered by one piece of code.
- Case quantities: a minimum and a multiple, per customer group and per store, replacing OpenCart's own minimum in both directions. Every add-to-cart button in the store posts the first legal quantity, and the checkout refuses one that has been typed over.
- Price check, which names the list that set a price, every list that lost and why, and OpenCart's own discounts sitting there not consulted.
- A CSV import into a new list, with the refused lines handed back as a file, and Bulk set for a percentage off a category or a brand, with a sentence carrying your own numbers above the button.
- A JSON API of twelve routes, shipped switched off, for an ERP that loads prices nightly: create the list, upsert its rungs in batches of a thousand, move one assignment onto it.
- It needs OpenCart 4.1.0.1 or newer, and 4.1.0.1, 4.1.0.3 and 4.1.0.4 are the releases a full pass has been through. Requirements and install says why the floor is where it is.
This page will list each version as it ships: what became possible, and what changed about behaviour you may have relied on.
What an update keeps¶
Your settings come back, with the exceptions below. An update is an uninstall and then an install, and OpenCart deletes an extension's settings at the uninstall step. B2B Pricing keeps its own copy of them and puts them back afterwards. They are one set for the whole installation rather than one per store.
These are asked for again rather than put back:
module_b2b_pricing_diary_verbose_until— Detailed logging comes back off after an update, the way a fresh install does. An upgrade is an uninstall and a reinstall, and putting a diagnostic window back is how a store ends up verbose months after the support exchange that asked for it ended.
A setting a release adds does not change what your store does. Its default is what B2B Pricing did before the setting existed, so an update never asks you to go and set something to get back the behaviour you already had.
What this cannot tell you is whether a release changed how a setting behaves, as against whether it survives. Nothing derives that from the code, so it is written by hand: a release that changes an answer you relied on says so in its own entry above, as its own paragraph and never among what is new.