== Dox POS changelog ==

Every version, newest first. The readme on WordPress.org shows only the recent ones.

= 0.47.1 =
* Improved: with Colciudades on a store in Colombia, a city typed by hand in the register ("medellin", "MEDELLIN", "bogota") is saved with its name from the list ("Medellín", "Bogotá"), ignoring accents, capital letters and extra spaces. The register fixes it when you leave the field, and the server does it again when the order is saved. A place that is not on the list (a rural district, for instance) is saved as typed.

= 0.47.0 =
* Changed: on the phone, Sell and Inventory no longer have the two tabs at the top. When you add something, a bar appears at the bottom ("View the order" or "Review and save") that opens what you picked, with an arrow to keep searching and an "Empty all" button that asks first.
* New: a size that is already in the order (or in what arrived) shows how many with a "+2" and has a minus button next to it to remove one without going to review.
* Changed: on the phone, "Download Excel" and "Upload costs" sit under the Inventory search.
* Changed: Products opens with the list of products and a "New product" button. Each product opens in its own card with an arrow to go back (to the list, or to the tab you came from). If you leave with unsaved changes, the register asks whether to save, discard or keep editing.
* Changed: when the register opens on the Dashboard, the Dashboard goes first in the bottom bar on the phone.

= 0.46.0 =
* New: the actual size of a piece. When several sizes share the same units (a bodysuit labelled 18-24 months that also fits 12-18), mark the size on the label with the `_dox_pos_real_size` meta (`yes`) on that variation. The register then highlights it in the product sizes (Sell, Inventory and the product card), and the sizes that share it say "Also fits · it is the 18-24 months one".
* New: when the register or the website sells another size of that group, the order line says "Actual size: 18-24 months", so whoever packs knows which piece to take. It shows in the register orders, in the WooCommerce order and in the emails to the store, but not to the customer.
* Fixed: the units in stock on the Dashboard counted the sizes of hidden products.

= 0.45.0 =
* New: the register sign-in screen can offer "Sign in with a code by email" next to the password, when another plugin on the site provides one-time codes (through the `dox_pos_login_code_enabled`, `dox_pos_login_code_send` and `dox_pos_login_code_verify` filters). The cashier types the 6-digit code from their phone into the register, with no password. Codes are only sent to accounts that can use the register, and the register checks the session that was really opened before letting anyone in. Without such a plugin nothing changes: the register asks for username and password as always, and Dox POS sends no email of its own for this.

= 0.44.0 =
* New: on a phone, the register sections move to a bar at the bottom of the screen, like an app. The four used every day (Sell, Orders, Inventory and the Dashboard, or My day for the cashier) are always in view and within reach of the thumb; when there are more than five sections, "More" opens a sheet with the rest. Orders shows the number of orders waiting on its icon. On a tablet or a computer the tabs stay at the top as before.
* Improved: while typing on a phone, the bottom bar steps aside so the keyboard and the order total have room.

= 0.43.0 =
* New: Settings > Sales suggests the payment methods that are turned on in WooCommerce and the register does not have yet (Addi, Wompi, Mercado Pago...), as one button each under "Add payment method". One click adds it with its name, ready to rename. Nothing is added on its own: many of them only make sense on the website. A sale recorded with one counts as paid and keeps its own key, so WooCommerce never offers to refund it through that gateway.
* Fixed: with a light bar and a main color close to it (a lime green bar with the same green as main color), the tabs of the register disappeared: their text took the main color. Text on the bar, links and the "not paid yet" button now use the main color only when it reads well, and otherwise the soft color or the text color. The settings preview does the same.

= 0.42.0 =
* New: a **Help** link at the top of the settings, next to the version, opens the Dox POS guide in the Dox Studio help center (in Spanish on a site in Spanish). Administrators also find it as "Guide" in the gear menu of the register. It is a plain link: the plugin still calls no outside server.
* Fixed: the sample total in the settings preview and in the layaway message was a fixed 189,000, which reads well in Colombian pesos but showed "$189,000.00" in a store that sells in dollars. It is now a believable price in the currency of the store.
* Fixed: the size and color of the sample product in the settings preview ("M · Pink") was written in Spanish on sites in any language.

= 0.41.1 =
* Since WooCommerce 11.0, an order that goes to failed payment gives back the stock it had taken. The stock history now records that movement under its order ("Payment failed #1234"), among the returned ones, instead of as a change with no order and a guessed reason.
* The order history in the register leaves out the notes that WooCommerce 10.9 and later adds for every email it sends ("Email "Completed order" sent."), which pushed the shop's own notes out of the list. They are still in the order in WooCommerce.

= 0.41.0 =
* New: **shipping costs, set from the register.** The gear at the top of the screen (administrators and shop managers) opens Shipping costs: a fixed price, by weight, free from an amount or store pickup, for the whole country or for some of its regions. Nothing is kept apart: they are the WooCommerce shipping zones and methods, so the web checkout and the register charge the same. What the screen cannot edit (a price written as a formula, free shipping that asks for a coupon, the method of another plugin) is shown as it is and can only be turned on or off.
* New: **shipping by weight**, a WooCommerce shipping method with ranges ("up to 1 lb, 6; up to 5 lb, 10"), a price for heavier orders and an optional amount per extra unit of weight. It works in the web checkout too, with no table rate plugin.
* New: **weight and size of the product** in the Products tab, in the units of the store. The packages the store uses the most show up as buttons, so a shop that ships almost everything in the same bag sets them with one tap. They go to the product and its sizes inherit them; if someone gave a size its own weight in WooCommerce, the form leaves it alone unless you type a new one.
* New: **categories from the register.** The product form has a "New category…" button: a name and, if it goes inside another one, which. It is created on the spot and stays chosen. Categories with no products yet now show up too, behind "More categories", so a store that is just starting (no products at all) can create its first product from the register.
* Changed: when other Dox Studio plugins are installed, the settings of Dox POS move into the shared **Dox Plugins** menu (Dox Plugins > POS), next to the rest. Installed on its own from WordPress.org nothing changes: they stay in WooCommerce > Dox POS. The copy installed from GitHub carries that shared menu with it, so there the settings always live in Dox Plugins > POS. The address is the same either way, and shop managers still get in.
* New: the sale asks for the **postcode** in the countries that use one (ZIP Code in the United States), saves it in the order and uses it to find the shipping zone. A country that does not require it, such as Colombia, sees no change.
* When the store charges nothing for the place of a sale, the register now says so instead of asking for the city again, and the amount can still be typed by hand.
* Fixed: with WP_DEBUG on, a shipping cost written as a formula WooCommerce cannot evaluate ("[qty] > 2 ? 24000 : 12000") made WooCommerce print a notice into the answer, and the sale showed no shipping options at all. What a shipping method prints while it calculates no longer reaches the register.
* Fixed: a few texts of the register showed up in Spanish on a site in another language ("Editar este producto", "Buscando…", "Guardando…", the hint under the categories, the badge of the main photo and the page count of the product search, "1-20 de 134").
* Fixed (copy installed from GitHub): the updater took the first file attached to a release, whatever it was, and releases carried the WordPress.org zip first, which has no Spanish translation and no updater. It now asks for its own zip by name, and releases attach only that one.

= 0.40.0 =
* New: Dox POS now shows up in the shared **Dox Plugins** menu when other Dox Studio plugins are installed, with a link to its settings. The register itself does not move: it stays under WooCommerce > Dox POS, which is where anyone using it looks for it. On a site where Dox POS is the only Dox plugin, no extra menu is added at all.
* Fixed (copy installed from GitHub): a site set to a Spanish variant other than Spain, such as Spanish (Colombia) or Spanish (Mexico), showed the register in English, because the bundled translation is es_ES and WordPress does not fall back between variants on its own. Any Spanish variant now gets the Spanish translation, unless the site has its own translation for that variant.

= 0.39.0 =
* The totals and the headings of the register now use the font of the phone or the computer, the same one as the rest of the screen, instead of always falling back to Georgia. A shop that prefers a serif picks it in WooCommerce > Dox POS > Brand from a list of fonts every device already has (Georgia, Charter, Iowan Old Style, Palatino, Baskerville, Times New Roman): nothing is downloaded and nothing is requested from outside. With Google Fonts on, the one you pick here is what shows if Google does not answer.
* The register shows the site icon in the browser tab again, and carries it when you add the register to the home screen of a phone. It was missing on sites whose theme replaces the WordPress icon tags with its own, because the register is a page outside the theme; it now prints them itself, and falls back to the icon the theme stores if WordPress has none.

= 0.38.1 =
* Deleting the plugin no longer erases anything of yours. Until now, removing it from Plugins took the settings, the brand, the address of the register and the Cashier role with it, because that is what its uninstall file did. Now it keeps all of it, so installing it again picks up where you left off. WordPress asks nothing while it deletes a plugin, so a new switch in WooCommerce > Dox POS > Screen lets a shop say beforehand that it does want everything gone; with it on, the plugins list says so right next to the plugin. Orders, stock, the stock entries and the ledger were never touched and still are not.

= 0.38.0 =
* The register follows the store country (WooCommerce > Settings > General). Payment methods: Nequi only for a Colombian store, Zelle and Venmo for a US one, and card, cash, bank transfer and cash on delivery everywhere. Suggested carriers: Coordinadora, Servientrega, Interrapidísimo, TCC, Envía, Deprisa and 4-72 in Colombia; USPS, UPS, FedEx and DHL in the United States; Estafeta, Redpack, Paquetexpress and 99minutos in Mexico; Correos, SEUR, MRW, GLS and Nacex in Spain; the local ones in Argentina, Chile, Peru and Ecuador; DHL, UPS and FedEx anywhere else. A store that never saved its carriers now gets the ones of its country suggested when it marks an order as shipped. Default sales channels: Instagram, TikTok, Facebook and In person where WhatsApp is not the norm.
* Text messages where WhatsApp is not used (the United States, Canada, Australia, New Zealand, Japan, Korea, China): the layaway message, the shipping notice and every "write to them" button open the phone's Messages app with the text written, and the customer field says Phone. A new "Messages to the customer" setting in WooCommerce > Dox POS > Sales switches between the two for any store.
* "Use the site's one" for the logo now finds the logo of themes that keep it in their own settings (UiCore, Flatsome, WoodMart, Avada, Divi), not only the one from Appearance > Customize, and says so when there is none to use.
* The switches in the settings (costs, website orders, dashboard, shipping email, Google Fonts) are rows with a title and a line that says what they do, so the costs card no longer reads as a wall of text.
* The Pro tab says what the add-on is: an AI assistant that runs the shop with you, and what it does.

= 0.37.4 =
* Under the hood: the notes that translators read next to each text, and the three context labels that tell them what a word means, were written in Spanish. They are in English now, so the plugin can be translated into any language from translate.wordpress.org.

= 0.37.3 =
* The "Shipped" order status reads Shipped on an English site: the counter next to it in the orders list was written in Spanish in the code, and on a Spanish site the status itself showed as "Shipped" because its translator context was in Spanish too.

= 0.37.2 =
* The settings page is headed by the Dox POS logo instead of a letter in a box.
* The plugin page is now doxstudio.com/dox-pos.
* A "Pro" tab in the settings says what the paid add-on adds and links to the plans. It is not there if Dox POS Pro is already installed, and nothing else in the register changes.

= 0.37.1 =
* The Spanish translation is no longer bundled with the plugin: it comes from translate.wordpress.org, as the directory requires. The default address on a Spanish site (/caja) now follows the site language directly, so it does not depend on translation files.

= 0.37.0 =
* Google Fonts are off until the shop turns them on in WooCommerce > Dox POS > Brand: a fresh install uses the fonts of the phone or the computer and does not connect to any outside service. A shop that had already made its choice keeps it.
* Font names go into the register stylesheet as letters, digits, spaces and hyphens only, and the line that starts the register is added through the WordPress script system instead of being printed by the template.
* The register and the sign-in page declare the language of the site instead of a fixed one.
* The default address of the register follows the language of the site: /pos on an English site, /caja on a Spanish one. It is written to the settings when the plugin is installed, so it never moves afterwards, and shops that were already using /caja stay there. In English the screen is called POS instead of Register, which on a website reads like signing up.

= 0.36.0 =
* The lists of the register no longer leave half a line empty: a long one splits into two columns that still read top to bottom.
* Add-ons can now draw the same figure cards and strip cells the Dashboard uses, so every screen of the register counts in the same shapes.

= 0.35.0 =
* The Dashboard is laid out again: today's figures in three big cards, then one strip with the week, the month and whatever the add-ons contribute, and the lists in two columns. No more half-empty rows or cards stretched to fill a gap.
* The chart of the last days switches between 7, 14, 30 and 90 days, and remembers the choice on that device. Its total is now the headline of the card, saying what it covers and what it averages a day.
* Best sellers lists six products.

= 0.34.0 =
* Hardening after a full code review. A sale only takes the channels set in Sales, a discount larger than the products is rejected, and the sales, entries and shipping routes skip malformed lines instead of failing.
* The Cashier role can no longer confirm the payment of a website order, cancel an order that was already shipped or delivered, or void a stock entry from another day or another person: those are for administrators and shop managers.
* A stock entry refuses a product that does not track stock and a date that does not exist, and the units and the entry are saved together: if the entry cannot be saved, the stock is not touched.
* Sizes that share units by colour now move by the difference instead of copying the number, so two sales of different sizes of the same colour at the same instant both count.
* Amounts with decimals: the register reads and shows prices, costs, discounts and shipping with the store's decimal separator, and the phone keyboard offers the decimal key when the store uses decimals. Stores with whole amounts (COP) see no change.
* The Sales tab warns when WooCommerce has "Manage stock" turned off, because then nothing lowers the stock.
* Uninstalling no longer deletes the settings of Dox POS Pro and removes the plugin's scheduled tasks.
* Cost imports skip the "(no SKU)" rows in any language, the Excel files and the history get more memory and time for long periods, and the unit price in the order detail keeps the store's decimals.

= 0.33.3 =
* In Reports > Movements, filtering by a product now shows a coloured strip with the product's name and a "See them all" button, instead of a line of small text that was easy to miss.

= 0.33.2 =
* The Inventory list is titled just "All products", with the count.

= 0.33.1 =
* Inventory no longer starts empty either: before you search it lists the whole catalogue from A to Z, twenty products at a time, and loads more as you reach the bottom. Searching by name or SKU works as before, and the list refreshes after each entry so the stock is current.

= 0.33.0 =
* Several groups of sizes can share units within the same colour: 0-6 and 6-12 months from one pool, 2-3 and 3-4 years from another. The "Shares" box on each size is now a small menu (does not share, shares, or shares in another group), the colour card gets one "Shared units" box per group, and the register, the website checkout, the kardex and the Excel treat each group as its own pool. With one colour and one group everything stays exactly as before.

= 0.32.1 =
* The Units block of the product form is now one card per colour: its sizes in rows, each with its number and a small "Shares" box, and under them the colour's shared units with a line saying which sizes share them. Cards stack on a phone and sit in a grid on a wide screen, so a product with six colours no longer turns into a table that scrolls sideways. "All sizes share" in the card header ticks every size of that colour at once.

= 0.32.0 =
* Shared units by colour. In a product with several colours, "Shares units" now works per colour: the Coral sizes share Coral's units and the Rosa sizes share Rosa's, each with its own box under the table. Selling a size only lowers the units of its colour, the register warns with the colour's figure ("Romper Marian · Coral has 3 left for all its sizes together"), and the website checkout counts the whole colour while it holds stock during a payment, so two customers cannot take two sizes when one unit is left. The inventory Excel, the Dashboard, the product card and the cost average count each colour's units once. A product with one colour keeps the plain product total, as before.

= 0.31.2 =
* A Dashboard tab for administrators and shop managers, before Sell: sold today with yesterday next to it, today's profit, what is owed (cash on delivery on the way and layaways), the week and the month against the previous ones at the same point, the last fourteen days as bars, what came in today by payment method, the best sellers of the last thirty days, the orders to handle and the stock. Every card opens the tab it comes from. The register opens on it for whoever manages the shop (a switch in Settings > Register turns that off); salespeople keep landing on Sell.
* Sell no longer starts empty: before you type anything it lists the best sellers of the last thirty days, with their sizes and stock, ready to tap.
* The Units table of the product form is simpler: the "All to 1" and "All to 0" buttons are gone, and each size has a "Shares units" checkbox instead of the "from the total" and "its own" links. Ticking it takes that size out of its own box and onto the shared units, which get one box under the table together with the list of sizes that share them.

= 0.30.0 =
* Each size decides where its units come from. In the product form, creating or editing, every size (and colour) has a small link: "from the total" moves it onto the product's shared total, "its own" gives it separate units. The shared total gets its own box as soon as one size uses it, and "One total for all" switches every size at once. So a product can have, say, 2-3 and 3-4 years drawing from one pool while 6-12 months keeps its own count, without opening WooCommerce.

= 0.29.2 =
* A product where some sizes take their units from the product's total and others carry their own (the usual case in a shop that grew over time) now shows all its sizes when you edit it: the shared ones are marked "from the total" and the rest are typed in as always. Before, the whole table was hidden and those units could only be changed in WooCommerce.
* The three controls in the Units header no longer run into each other, and "One total for all" looks like the switch it is.

= 0.29.0 =
* The tab is called Reports, not History: what is in there (sales, the day's cash, stock movements and performance) are reports on how the shop is doing. The order detail keeps its own History with the order's notes.
* A new product can carry one total for all its sizes, the way many shops keep their stock: under Units, "One total for all". The store then discounts from that total whichever size is sold, and you can spread it by size later from Edit one.

= 0.28.1 =
* An add-on can choose which tab the register opens on when there is no address to follow (Dox POS Pro uses it to open on Today for whoever manages the shop). Everyone else keeps opening on Sell.

= 0.28.0 =
* Tap a product anywhere (the assistant, the history, the stock entries) and its card opens right there: photo, code, price, cost and what each unit leaves for those who manage the shop, units per size (or the shared total), category, and the buttons to edit it or see it in the store. Before, it jumped straight to the editor.
* The loss on an order stands out: a proper "Note a loss" button on the detail, a red tag with the amount once noted, and the same tag on the orders list and in the history. The profit comes out in colour: green when it reaches the shop's target margin, amber when it falls short, red when it is low.

= 0.27.0 =
* Losses. From the order detail, an administrator or shop manager can note what an order cost beyond the goods (a shipment that cost more than what was charged, a freight refunded, a repair), with the reason. It comes off the profit of that sale, shows in the history, the cash report and their Excel files, and the order keeps a note of who wrote it.
* Your own payment methods. Settings > Sales has "Add payment method": a second Nequi account, Daviplata, Addi, whatever the shop takes. They can be turned off, renamed and removed, and a sale recorded with one counts as paid.
* Sizes that share one stock total. When a product keeps one total for all its sizes (the parent manages the stock and the sizes inherit it), the register says so ("5 left for all sizes") instead of repeating the number on every size and adding them up, the order cannot take more than that total across sizes, and the message when it does not fit names the product and what is really left. Recording stock on one of those sizes says it goes to the shared total, and the product editor can spread that total by size so each one carries its own units from then on.

= 0.26.0 =
* The stock tab is called Inventory, and the latest entries show each garment with its photo, name and quantity; tapping one opens its product card.

= 0.25.4 =
* The "View" button of each check in the assistant's review no longer opens a "That order does not exist" window: the register only opens an order when there is a real order number.

= 0.25.3 =
* A refund in the shop left the Orders tab blank: the list asked for orders without saying which type and got the refunds too. And the settings cards no longer leave an empty column.

= 0.25.1 =
* Photos are reduced on the phone before uploading (to the size the shop keeps), so a 48-megapixel photo goes up as about 100 KB and works on any hosting.

= 0.25.0 =
* Photos from new phones (24 and 48 megapixels) no longer take minutes to convert: the memory given to ImageMagick fits the photo and the reduction happens in two steps.

= 0.24.8 =
* The sales card in the history said "Sales" in English on a Spanish site: the plural form was missing from the translation.

= 0.24.6 =
* The total, the figures in the history and the headings are set in Manrope instead of Libre Baskerville: the register reads as a tool, not as a book. If your shop already picked its own fonts in Settings, nothing changes.

= 0.24.5 =
* The "No logo: the name shows" notice on the settings page follows the color of the bar: with a dark bar it was black on black.

= 0.24.4 =
* The date on the order detail follows the language of the site: it was written in Spanish inside the code, so an English shop read "8 de September".

= 0.24.3 =
* Housekeeping: the code that updates the plugin outside the WordPress.org directory lives in its own file, and the directory build carries neither that file nor the line that loads it.

= 0.24.1 =
* The plugin page and the author page are now two different addresses, as WordPress.org requires.

= 0.24.0 =
* New factory colors: a warm white, a dark bar and an orange button. They are only the starting point; the five colors keep being yours to change in WooCommerce > Dox POS > Brand, and a shop that already saved its own colors does not change.
* The placeholders in the WhatsApp messages are now in English: {name}, {items}, {hours}, {order}, {store}, {carrier} and {tracking}. Messages and tracking links you had already written are translated on their own when the plugin updates.
* Under the hood: table names go through $wpdb->prepare, and the code passes the WordPress coding standard with no findings.

= 0.23.0 =
* The texts inside the register itself (the JavaScript) are now translated too, through the WordPress script translation system. The plugin is fully in English, with the Spanish translation included; nothing changes on a Spanish site.

= 0.22.0 =
* The plugin now ships in English, with the Spanish translation included. Nothing changes on a Spanish site.

= 0.21.1 =
* The WooCommerce cost field is no longer turned on when the plugin is installed: it is turned on when you save the settings with the costs switch on, and the card says so.
* New switch to stop loading the fonts from Google Fonts (WooCommerce > Dox POS > Brand): with it off, the plugin does not connect to any outside service.
* Under the hood: the register stylesheet and script are enqueued through WordPress, and the settings icons are printed through wp_kses.

= 0.21.0 =
* Costs and profit. Each product carries a cost per unit in the WooCommerce cost field: set it when you create or edit a product in the register, or all at once from the inventory Excel with the Cost column filled in. Every stock entry carries what each unit cost and recalculates the product's weighted average cost. Every sale freezes the cost in its order, so raising a cost later does not change history. The history shows the profit and the margin, the stock ledger shows the unit cost of each movement, and the Excel files carry the cost, profit and value at cost columns. Only administrators and shop managers see any of it.

= 0.20.0 =
* While the plugin is not on WordPress.org, it updates itself from the GitHub releases.

= 0.19.0 =
* The plugin is split in two: Dox POS (this one, the whole register) and Dox POS Pro (the assistant). The free one works fully without the Pro.

= 0.18.0 and earlier =
* The register itself: selling, layaways, stock entries, orders from the website, creating and editing products with photos, the history with sales, daily cash and the stock ledger, the Excel files, shipping with tracking, the settings for any brand, two registers at once and working with no signal.
