0.9.6
- The till and the stockroom are now switches of their own, under a new **Modules** heading on the Add-ons screen. A shop that only wants a counter switches the stockroom off; one that only wants stock management switches the till off. Neither deletes anything
- Switching a module off takes its options with it — no more answering "yes, stock counts are on" for a shop with no stockroom — but it never overwrites what you chose. Switch it back on and every option is exactly where you left it, and the screen says so while it waits
- Stock still moves with the stockroom switched off. The write path is not a feature and cannot be switched off; a sale still takes stock off the shelf. You simply stop having screens to manage it on
- Add-ons can no longer hide its own switch. It used to live under the stockroom menu, so switching that off would have left the database as the only way back. It now follows whichever menu exists, and becomes a menu of its own if neither does
- Outlets & Registers follows the same rule, because an outlet is where stock lives and a register is how it sells — a shop needs that screen whichever half it is running
- The till switch now reaches the till itself, not only its menus. Switching Point of sale off closes the register's address and its endpoints, rather than hiding the menu while `/pos/` carried on taking money
- It will not switch off from under an open shift. That is a counted drawer with somebody stood behind it, and taking the screens away first would leave a database edit as the only way to close it. The refusal names the register, who is on it and how long for, and links to Login Sessions so it takes a few seconds to clear
- No equivalent guard on the stockroom, deliberately. An open stock take is a document and it keeps; nobody is holding cash for it
- `/pos/` shows a plain page rather than a 404. That address is bookmarked and pinned to home screens on machines nobody has signed into for months, and a browser finding nothing there reports a broken shop
- Sales taken offline still land after the till is switched off. They already happened — the customer has the goods and the receipt, and the money is in the drawer — so refusing them would not undo the sale, only lose the record of it. The page at `/pos/` finds what a device is still holding and sends it. New sales are refused; work already done is not
- Stopping a person selling is still a permission, not a switch. Take `codebold_use_pos` off their role: it applies to that person, immediately, and a bookmark does not get round it
- **Sales reports can be read one outlet at a time.** They could not before, which was a problem worth naming rather than quietly fixing: more locations is what the paid plugin is sold on, and every figure on the reports screen was answering for the whole business. A manager with two branches has one question — which one is making money — and the screen could not answer it. Takings, sales, items, best sellers, hourly, daily, per cashier and the shifts table are all scoped now, including the fallback query used on hosts without MySQL's timezone tables
- The outlet picker only appears when there is more than one outlet, so a single shop sees nothing new
- Where the free plugin stops is now written down in one place rather than implied. One location, one register, thirty tracked products and fifty labels a print run, with the till — offline selling included — complete and free. Restaurant service, transfers, stock valuation, more locations and unlimited labels are CodeBold Commerce Pro, a separate plugin
- The Add-ons screen lists what Pro adds rather than hiding it, as a labelled row with a link instead of a switch that does nothing when pressed
- Switching Pro off loses screens, never records. What a shop chose is remembered while it is gone, so renewing puts everything back rather than starting them over
0.9.5
- No more "translation loading was triggered too early" in the log. Two places built a translated catalogue only to read its keys: the capability list, and the shop-type list behind every "what kind of shop is this?" question. Both now answer from a plain list of names, and the labelled versions are built only for the screens that show them
- Role names are stored untranslated, as WordPress core stores its own. add_role() freezes whatever it is given, so translating it guessed the site language once and kept that answer forever. CodeBold Members renames a role to anything you like, which is a better answer than a guess
0.9.4
- Barcode labels: a test sheet. It prints the same grid as outlines on plain paper with a 100mm ruler, so the scale and the position can both be checked before a sheet of labels is committed. A test sheet costs one piece of paper; getting it wrong costs the labels
- The four print-dialog settings that decide whether a sheet is usable are now named on the screen itself, where they are needed, rather than in a manual nobody opens
- The label size, quantity and chosen fields are remembered per user, so the daily job is two clicks. Remembered per user rather than per site: two people stocking shelves may be feeding two different printers
- The screen says how many labels a run will produce before it is printed, so nobody meets a limit for the first time on a printed sheet
- One run prints at most 50 labels. Over that it prints the first 50 and says how many were left out and what to do about it — the purchase-order picker's rule, that truncation is reported rather than silent, applied here too. Every label size stays available
0.9.3
- The inventory Dashboard opens. It was registered before the menu that owns it, so WordPress filed its page under one name and looked it up under another. The menu item drew correctly and answered a click by refusing access
- Reports no longer come back empty when asked for a range that already carries a time. The time was appended a second time, the result could not be parsed, and an unparseable date was being read as 1970 — so a trading day reported nothing
- Units sold, best sellers and the X and Z reports count order lines rather than stock ledger rows. A shop that does not track stock, or has not switched tracking on yet, now sees its real figures instead of zeroes beside real takings
- A product nobody has counted yet is no longer reported as out of stock. It was counted twice over — once as untracked, and once, in red, as out
- The shifts table no longer prints the opening float under a heading reading "Expected". Expected cash is worked out when a shift closes; until then that column is blank, as the two columns beside it already were
0.9.2
- The till beeps when an item goes on the sale, and gives a lower double note when something is refused. A shop floor is noisy and a cashier is looking at the customer, not the screen
- The sound is synthesised rather than played from a file, so it still works with the register offline and adds nothing to download
- A speaker button in the toolbar turns it off, remembered on that device
0.9.1
- The till shows a garment's size as its own badge instead of appending it to the product name, where a two-line caption cut it off. A rail of one dress in six sizes is six tiles with the same photograph — the size was the only thing telling them apart, and it was the part being hidden
- Attribute values show the name the shop typed, not the slug: "Extra Large", not "extra-large"
0.9.0
- Recipes. Set what a dish is made of on the product's own Recipe tab; selling it takes the ingredients out of stock, through the same single write path as everything else
- Recipes can nest, and a recipe that would contain itself is refused when it is saved
- A dish's cost is worked out from its ingredients rather than stored, so it never goes stale
- Refunding a meal returns its ingredients
0.8.0
- Kitchen tickets: send a round to the kitchen, watch it on a screen, mark it started, ready and served
- Sending is safe to retry. A till that lost its connection and sent again does not put the same food on twice
- Cancelling a line after it was sent shows the kitchen a cancellation instead of removing the row
0.7.5
- Added this readme, and corrected the plugin description: product filters and memberships are separate plugins and were never part of this one
- The suite now tells any installed role editor what its permissions are called
0.7.4
- Stock Central uses the full width of the screen, and its columns can be chosen
- The POS landing page explains itself, and opens the till in a new tab
- Purchase orders can be entered as a size-by-colour grid == Upgrade Notice ==
0.9.2
0.9.1
0.9.0
0.8.0
0.7.5
Every plugin is GPL.
Updates are a service.
The subscription pays for updates and support, not for permission to keep selling.