Daily updates from Odoo
Wednesday, July 1, 2026
7 changes
3 changes
Resolved issues and error corrections
This change prevents the Italian fiscal printer from getting stuck after printing the first receipt in POS. It ensures receipts follow the correct printing path so the printer can continue handling later actions like price displays and opening the cash register.
Original PR description
Module: l10n_it_pos Steps to reproduce: - In the POS settings, enable "Automatic Receipt Printing"; - Enable "ePos Printer" to make the "Skip Preview Screen" option appear; - Disable "Skip Preview…
Module: l10n_it_pos Steps to reproduce: - In the POS settings, enable "Automatic Receipt Printing"; - Enable "ePos Printer" to make the "Skip Preview Screen" option appear; - Disable "Skip Preview Screen"; - Disable "ePos Printer"; - Set up an Italian Fiscal Printer; - Open a POS session and process a first order. Issue: After the first receipt, no other messages (price display, receipt, open register) are sent to the fiscal printer. A page reload is required. Issue: After the first receipt, no other messages (price display, receipt, open register) are sent to the fiscal printer. A page reload is required. Cause: When "Automatic Receipt Printing" is true but "Skip Preview Screen" is false, a race condition occurs. `afterOrderValidation` triggers a print job while simultaneously transitioning to the `ReceiptScreen`. When the `ReceiptScreen` mounts, it triggers a second fiscal print job before the first has resolved. This creates a deadlock in `toHtml` of `renderService`, permanently blocking the printer queue. Solution: Since the italian localisation sending the receipt to the fiscal printer is mandatory, the printing route is now tied to the "Skip Preview Screen" option. Enterprise PR: https://github.com/odoo/enterprise/pull/112654 [opw-5979212](https://www.odoo.com/odoo/project/49/tasks/5979212) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272112 Forward-Port-Of: odoo/odoo#256932
Fixed an issue that could cause the website checkout page to crash for Peruvian customers after an upgrade. The address form now uses the correct underlying template, so checkout continues to work normally.
Original PR description
Issue: ------ `l10n_pe.address_form_fields` inherits from `portal.address_form_fields` but targets a `<div>` element that has been moved to `portal_address_extended.address_extended_form_fields` in…
Issue:
------
`l10n_pe.address_form_fields` inherits from `portal.address_form_fields` but targets a `<div>` element that has been moved to `portal_address_extended.address_extended_form_fields` in [saas~19.2].
Traceback:
----------
```py
Error while rendering the template:
ValueError: Element '<div id="div_city_id">' cannot be located in parent view (view: l10n_pe.address_form_fields)
Template: website_sale.address
Reference: 1973
Path: /t/t/div/div/form/div/t
Element: <t t-call="website_sale.address_form_fields"/>
```
Steps to reproduce:
-------------------
1. Install `l10n_pe` and `website` in v19
2. Upgrade to v19.2
3. Go to the website and add a product to the cart
4. Go to checkout → Traceback
Root cause:
-----------
The view is adapting an element owned by a sibling view, making the inheritance hierarchy conceptually wrong and fragile.
Solution:
---------
Update the `inherit_id` of `l10n_pe.address_form_fields` to `portal_address_extended.address_extended_form_fields` so it correctly inherits from the view that owns the targeted element.
opw: [6302145]
[saas~19.2]: https://github.com/odoo/odoo/commit/026c6f9f2a388ee509a135c53e38f5bb3d08ff73#diff-83bb066f4477532b76aadd957ae736d0c0b67bc66b48d6f47c035e8cfb4773deR7-R21
[6302145]: https://www.odoo.com/odoo/70/tasks/6302145?debug=1
Description of the issue/feature this PR addresses:
Current behavior before PR:
Desired behavior after PR is merged:
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#271246This update keeps split payments in sync with the original order in POS Restaurant when Germany Fiskaly is enabled. It prevents already paid items from staying visible on the parent order, so staff cannot accidentally charge the same items multiple times from the Orders view.
Original PR description
In POS Restaurant with Germany Fiskaly enabled, splitting and paying from a table works once, but repeating the same flow from the Orders tab lets the parent order show lines that were already paid…
In POS Restaurant with Germany Fiskaly enabled, splitting and paying from a table works once, but repeating the same flow from the Orders tab lets the parent order show lines that were already paid in previous splits. Functionally, the cashier can keep splitting and paying the same line again and again because the parent draft order is not updated consistently in that path. Steps to reproduce: ------------------- * Enable POS Restaurant with l10n_de Fiskaly * Create a table order (e.g. 3 meals + 3 drinks) * Open Split Bill, move 1 meal + 1 drink, and pay * From Orders tab, open the remaining parent order and repeat split + pay * Reopen the parent order from Orders tab > Observation: The parent order still contains quantities that were already split/paid, so the same items can be paid multiple times from the Orders tab. Why the fix: ------------ The Fiskaly `syncAllOrders` override diverged from core sync behavior in the split flow: it ignored explicit `options.orders` and did not await transaction creation for inactive transactions. In the split-bill path this could skip or desynchronize parent-order updates, leaving stale quantities on the parent order. The fix restores expected sync semantics by honoring `options.orders` and awaiting transaction creation before deciding sync eligibility. opw-6175880 Forward-Port-Of: odoo/enterprise#117206
1 change
Resolved issues and error corrections
This update keeps parent POS orders correctly in sync after repeated split-and-pay actions in the Orders tab. It prevents already paid items from remaining on the draft order, which avoids the same items being charged more than once.
Original PR description
In POS Restaurant with Germany Fiskaly enabled, splitting and paying from a table works once, but repeating the same flow from the Orders tab lets the parent order show lines that were already paid…
In POS Restaurant with Germany Fiskaly enabled, splitting and paying from a table works once, but repeating the same flow from the Orders tab lets the parent order show lines that were already paid in previous splits. Functionally, the cashier can keep splitting and paying the same line again and again because the parent draft order is not updated consistently in that path. Steps to reproduce: ------------------- * Enable POS Restaurant with l10n_de Fiskaly * Create a table order (e.g. 3 meals + 3 drinks) * Open Split Bill, move 1 meal + 1 drink, and pay * From Orders tab, open the remaining parent order and repeat split + pay * Reopen the parent order from Orders tab > Observation: The parent order still contains quantities that were already split/paid, so the same items can be paid multiple times from the Orders tab. Why the fix: ------------ The Fiskaly `syncAllOrders` override diverged from core sync behavior in the split flow: it ignored explicit `options.orders` and did not await transaction creation for inactive transactions. In the split-bill path this could skip or desynchronize parent-order updates, leaving stale quantities on the parent order. The fix restores expected sync semantics by honoring `options.orders` and awaiting transaction creation before deciding sync eligibility. opw-6175880 Forward-Port-Of: odoo/enterprise#117206
1 change
Resolved issues and error corrections
This update corrects the Peru Kardex PLE stock report so balances, costs, invoices, and return movements are calculated consistently in Odoo 19. It also improves support for related stock operations and landed costs, helping reduce reporting errors and manual corrections.
Original PR description
## Summary Forward-port of PR #88592 (Kardex PLE 12.1/13.1 report fixes) adapted to 19.0's `stock.move` architecture, where `stock.valuation.layer` was removed as an independent model. - **Running…
## Summary
Forward-port of PR #88592 (Kardex PLE 12.1/13.1 report fixes) adapted to 19.0's `stock.move` architecture, where `stock.valuation.layer` was removed as an independent model.
- **Running balances**: Replace per-move `remaining_qty`/`remaining_value` with accumulated `data_per_products` dict for correct cumulative totals
- **Fix broken `_append_historic_valuation_lines()`**: The existing 19.0 code called `self.env.cr.dictfetchall()` without prior SQL execution — replaced with proper `_read_group` tuple unpacking
- **Fix `_append_valuation_line()`**: Use `_read_group` on `stock.move` (is_in/is_out aggregation) instead of `qty_available` with `to_date` which doesn't provide correct cost data
- **Fix invoice association**: Use `.sorted('id')[:1]` to consistently pick the first-created invoice, matching 18.0's SQL `ORDER BY am.id NULLS LAST` behavior
- **Return operation types**: Add `stock_picking_return.py` to assign operation types 24/25/21 for return pickings
- **MRP support**: Detect `mrp_operation` picking type and assign operation types 19/27
- **Float formatting**: Add `float_repr` with 2-decimal precision for all numeric fields
- **19.0 API adaptations**: `is_storable` filter (replaces `type='product'`), `fields_list` parameter naming, security comment on `sudo()`
Related: #88592, #1066791 change
Resolved issues and error corrections
This update prevents situations where a restaurant POS order could look paid on the screen even though the saved order totals did not match the payment. It now uses the actual saved order data to validate payments and correctly alerts the system when a mismatch happens, reducing broken orders and payment inconsistencies.
Original PR description
In POS Restaurant, order lines are synced incrementally as a series of create/update/delete commands rather than as a full snapshot. This could leave the backend with fewer lines than the frontend in two ways: 1. A network interruption during a draft sync silently dropped some create/update commands, or a line was deleted directly from the backend while the frontend still held it with a server ID. 2. Even when all commands arrived, `_process_order` overwrote the server-computed `amount_total` with the client-supplied value, so `action_pos_order_paid` was comparing the client's claimed total against the payment instead of the actual sum of persisted lines. Additionally, `_process_saved_order` was swallowing the `UserError` raised by `action_pos_order_paid` when totals did not match, so the mismatch was only logged and the frontend never knew the order was broken. opw-6263116 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
1 change
Resolved issues and error corrections
This change ensures that databases which were neutralized before Peppol is installed will still use demo mode. It prevents these databases from accidentally connecting to the live Peppol network when users activate the feature later.
Original PR description
When Peppol is installed on a database that was already neutralized (ex: a staging database where the feature is enabled after the neutralization happened), the account_peppol.edi.mode parameter is not set: data/neutralize.sql only runs at neutralization time, not when the module is installed afterwards. The demo/ data that also sets this parameter is not loaded on databases without demo data (real production/staging databases). As a result, _get_peppol_edi_mode() falls back to 'prod' and the neutralized database registers and sends documents against the live Peppol network. Steps to reproduce: - Neutralize a database on which Peppol is not installed yet - Install the account_peppol module - Open the Peppol settings / registration wizard: the mode is Production instead of Demo Force the demo mode in the pre_init_hook when the database is neutralized, mirroring data/neutralize.sql opw-6307710