Wednesday, February 11, 2026
12 changes · saas-18.2
Enhancements to existing features
The point of sale customer display now shows the appropriate currency symbol for the total amount and change due. This makes prices clearer for customers and supports scale certification requirements by formatting amounts according to the selected currency.
Original PR description
This PR adds the currency symbol on the customer display for point of sale for the total amount + change. (formatted based on the currency, e.g. $ before, eur after the amount) This is required by the scale certification Before: <img width="777" height="604" alt="image" src="https://github.com/user-attachments/assets/28688075-b387-477a-930d-410f1107cc83" /> After: <img width="787" height="638" alt="image" src="https://github.com/user-attachments/assets/724a1360-78a7-4630-a034-e115dd09f057" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#247591
Resolved issues and error corrections
This change adds automated checks to ensure loyalty points are not applied more than once when a point-of-sale order is saved, reopened, cancelled, or still in draft. It helps protect customer balances from accidental over-crediting and keeps loyalty program totals accurate.
Original PR description
Step to reproduce:
- have a trusted pos and a loyalty program which gives points per $ spent
- start pos and select order and a partner (he should already have some LPs)
- notice the loyalty points assgined
- save the order, you are redirected to new order
- switch back to original order
Observation:
- Notice, the loyalty points are reassigned for example :
- if initially partner's LP = 50, product added is 100$ , LP = 50+100 = 150
- After saving, LP becomes 150 + 100 = 250
Cause:
- LP's are processed after every `sync_from_ui` call from `_postProcessLoyalty` which updates the customer's lp, even before the order is fullfilled or when order is still in `draft` state
Fix:
- Issue is fixed in https://github.com/odoo/odoo/commit/a4b37ec474656c7af23d0134251d589e9a6a61ca
- This commit adds related test for the fix
opw-5609964
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#245400This fixes a visual issue in kanban cards where ribbons could shift out of place when users pressed ALT to select records. The change keeps cards looking consistent during selection without affecting business workflows.
Original PR description
The CSS rules of `.o_record_selection_available` are used to add a selection overlay on kanban cards. These rules relied on `filter: brightness()` to slightly dim all child elements when pressing `ALT`. However, using filter creates a new stacking context. As a result, when a ribbon is present, it no longer sticks to the card border and becomes misplaced. This commit updates the rules to avoid that behavior and keep the ribbon correctly positioned. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A website editing test was updated to wait for background interface changes before continuing. This reduces random test failures and helps keep website editing quality checks stable.
Original PR description
The test `test_31_website_edit_megamenu_big_icons_subtitles` is failing randomly and more often with watch=True When selecting the link, `_updateRightPanelContent` is called, which in turns calls `_closeWidgets`. We should wait for that call to be finished before interacting with the sidebar. When the widgets are closed, the active class is removed from `Big Icons Subtitles´. It is already too late because we already changed the MegaMenuLayout option. Since nothing changes inside the DOM, we need to wait a certain amount of time before proceeding. runbot-163061 Forward-Port-Of: odoo/odoo#219942
This fixes a Belgian tax setting so the 21% S.INC tax is correctly treated as included in the displayed price. It helps ensure Belgian invoices and tax calculations reflect the intended price-inclusive tax behavior.
Original PR description
The tax was not marked as included in the price. During the forward-port of a recent fix[^1], it was also missed with the CSV merge conflict. [^1]: https://github.com/odoo/odoo/commit/90c54f5616aecd83f4410b466f9b2a7943429afc
This change makes popover behavior consistent during automated testing by avoiding rare timing differences in animations. It reduces false test failures and helps keep development and releases more stable without changing the user experience.
Original PR description
Because the popover had his animation enabled in tests, it could in very rare occasion end too fast and call it's finished callback, triggering extra repositionning (and thus extra expect.steps). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244491
Resetting a customized SVG illustration color now restores the website theme palette instead of leaving the color blank. This prevents media library illustrations from disappearing, keeping page editing predictable for website users.
Original PR description
Steps to reproduce: - Insert a media library SVG illustration. - Change one of its Dynamic Colors. - Click the reset button in the colorpicker. => The SVG disappears. Before this commit, resetting a dynamic SVG color could send an empty color value and the image failed to render. After this commit, resetting restores the theme palette colors so the SVG stays visible. task-5868584 Forward-Port-Of: odoo/odoo#245778
This change makes an automated point of sale tax test wait properly before finalizing an invoiced order. It helps prevent false test failures in localization scenarios, improving confidence in release checks without changing customer-facing behavior.
Original PR description
The `test_point_of_sale_custom_tax_with_extra_product_field` test does a `PaymentScreen.clickInvoiceButton()` and then directly after that a `PaymentScreen.clickValidate()`. In l10n scenarios, the logic behind triggering the `toInvoice` field can take longer. This would cause the validation to execute before the `toggleIsToInvoice` finishes executing and then it would throw an error that the order was already finalized. This PR ads an extra wait on the `Invoice` button to make sure that the toggle is executed properly before finalizing the order. Runbot Error: [233024](https://runbot.odoo.com/odoo/runbot.build.error/233024) Task: [5897371](https://www.odoo.com/odoo/project/1737/tasks/5897371) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes an automated barcode scanner test wait for the screen to finish updating before checking results. It helps prevent random test failures, improving confidence in release validation without changing end-user behavior.
Original PR description
This commit ensure to await the view to be correctly re-rendered. runbot-error-233551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246523
This update resolves a crash that occurred when using the budget filter in accounting reports. The fix ensures the system handles report configurations without necessary budget columns gracefully, preventing errors and allowing users to create budget filters without disruption. This improves report stability and usability.
Original PR description
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation…
**Steps to reproduce:** * In **Accounting**, create a new accounting report. * Set **Root Report** to **Profit and Loss**. * Add a report line with **Figure Type = Percentage**. * set **Computation Engine = External Value** and **Formula = 0** on report line. * Add a report column with **Figure Type = Monetary**. * Create a menu item for the report. * Open the report and click **Budget**. * Create a new budget filter and click **Create**. **Observed behavior:** * The system crashes with `TypeError: 'NoneType' object is not subscriptable`. * The error occurs while accessing budget column values. **Cause:** * Budget comparison logic assumes required budget columns always exist. * When the report configuration lacks compatible budget columns, internal variables remain unset and are accessed anyway. **Fix:** * Add a safety check to skip budget comparison when required columns are missing. * Prevents the crash and allows budget filters to be created safely. opw-5357339 Forward-Port-Of: odoo/enterprise#104162
This update resolves an issue where branch companies in Guatemala were incorrectly flagged with a 'Missing required field' error when saving settings. The fix ensures the 'Service Provider' field is only required for the main company, streamlining the process for branch office management. This prevents unnecessary disruptions for users.
Original PR description
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no…
Currently, saving the General Settings in a branch of a Guatemalan company raises a "Missing required field" error for the 'Service Provider' field (`l10n_gt_edi_service_provider`), even if no changes were made. ### **Steps to reproduce:** 1) Install `l10n_gt_edi` and switch to a GT company. 2) Create a branch of the GT company. 3) In the parent company, go to Accounting Settings, set the Guatemala Localization to 'Demo', and save. 4) Switch to the branch company. 5) Open Accounting Settings and click Save. ### **Observed Behavior:** An error occurs because `l10n_gt_edi_service_provider` is empty but required. ### **Root Cause:** The `l10n_gt_edi_service_provider` field is marked as `required` whenever `country_code == 'GT'` (see[1]). However, the field is hidden in branch companies via the `invisible="not l10n_gt_edi_is_root_company"` domain on the settings block. Because the field is required but empty (and invisible to the user), the form validation fails. [1]- https://github.com/odoo/enterprise/blob/6f3265aad51a264bee754ca239e8a5019487b38c/l10n_gt_edi/views/res_config_settings_views.xml#L19-L22 ### **FIX:** Update the `required` domain to include `l10n_gt_edi_is_root_company`. This ensures the field is only mandatory in the root company where it is actually visible and configurable and also set the `l10n_gt_edi_service_provider` for branch company same as parent company. **opw-5385819** Forward-Port-Of: odoo/enterprise#106323
This update incorporates new statistical trade codes (2026) to comply with European reporting requirements. These codes, sourced from official Belgian statistics, ensure Odoo Enterprise accurately reports international trade data for compliance purposes. This change supports accurate reporting for businesses involved in cross-border transactions.
Original PR description
This commit adds 2026 codes based on https://www.nbb.be/en/statistics/foreign-trade/nomenclature-and-codes opw-5504187 Forward-Port-Of: odoo/enterprise#106896