Wednesday, September 23, 2026
3 changes · saas-19.2
Enhancements to existing features
Point of Sale now calculates customer outstanding balances in batches instead of checking each customer one by one. This reduces database load and makes opening PoS sessions faster and more reliable on large systems.
Original PR description
Issue ----- Opening a PoS sends every partner cached on the device to `get_all_total_due`. On a production database, six of those calls within 30 minutes ran 7061 queries, the worst one 4837 queries…
Issue ----- Opening a PoS sends every partner cached on the device to `get_all_total_due`. On a production database, six of those calls within 30 minutes ran 7061 queries, the worst one 4837 queries in 46.7 seconds, keeping a worker busy for the whole duration and slowing down the entire system. Cause ----- `get_all_total_due` loops over the recordset and calls `get_total_due` once per partner. Each iteration runs its own `pos.order` search for the open pay later orders and re-reads `point_of_sale.group_pos_user`, hence exactly two queries per partner. Every other value the method needs (`total_due`, `pos_orders_amount_due`, `invoices_amount_due` and the `_load_pos_data_read` payload) is already computed for the whole recordset at once by the ORM prefetching, so only those two remained unbatched. That search is also the expensive one: `commercial_partner_id` is not indexed, so each of them scans the whole set of orders in state 'paid'. Fix ----- Move the computation to `_get_total_due_data`, which queries the orders, the pay later payments and the partners data once for the whole recordset. `get_total_due` and `get_all_total_due` keep their signature and their return value, and both delegate to it. Measured on a database with 300k pos orders, for 1000 partners: 2193 queries / 3.98s before, 16 queries / 0.27s after. opw-6530561 Forward-Port-Of: odoo/enterprise#130334
Automatic reconciliation now matches payment references to invoice names even when uppercase and lowercase letters differ. This reduces manual follow-up for payments that should already match, improving accounting efficiency.
Original PR description
Currently, when a payment reference isn't in the same letter case as the invoice name, it wouldn't automatically reconcile. task-6562440 Forward-Port-Of: odoo/enterprise#131418
The Vietnam accounting setup now includes dedicated accounts for revenue and costs from selling or liquidating investment property. This supports compliance with Circular 99/2025/TT-BTC and helps report these gains or losses separately in Profit & Loss statements.
Original PR description
Circular 99/2025/TT-BTC adds a dedicated Profit & Loss line for gains/losses on the sale and liquidation of investment property, computed from dedicated sub-accounts rather than the main revenue and cost-of-goods-sold accounts. Add the two accounts to the chart of accounts: - 5117 Revenue from sale and liquidation of investment property - 6327 Cost of sale and liquidation of investment property Task-6518304 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287572