Saturday, September 26, 2026
6 changes · saas-19.3
Resolved issues and error corrections
Point of Sale loyalty discounts now add up correctly when an order includes both regular products and negative-priced lines with different taxes. This prevents customers from being overcharged when fixed discounts are split across tax groups.
Original PR description
Steps to reproduce: - Product A with a price-included tax, product B with a negative price and another tax (or none) - Promotion with a fixed amount discount on specific products (or on the order),…
Steps to reproduce: - Product A with a price-included tax, product B with a negative price and another tax (or none) - Promotion with a fixed amount discount on specific products (or on the order), both products eligible - Add both products to a PoS order Issue: The discount is split per tax group with a common factor, so the negative line gets a positive reward line, which is expected. But the reward lines add up to less than the discount and the customer pays too much. Cause: Since 7280f3597ece each tax group is capped with `Math.min(get_total_with_tax(), amount)`. A single tax group is compared with the total of the whole order: here the total includes the negative line, so the positive group is lowered while the negative one is kept as is. Fix: Apply the cap proportionally: every tax group is scaled by the ratio between the order total and the discountable amount when the total is lower. The scenario of 7280f3597ece gives the same result, and the reward lines add up to the discount whatever the number of tax groups. opw-6567973 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288985 Forward-Port-Of: odoo/odoo#288853
Indian e-Way Bill generation now correctly factors in global discounts applied to invoices. This helps ensure the reported bill values match the actual discounted transaction amounts, reducing compliance and reconciliation issues.
Original PR description
Before this commit- We didn't consider, global discount for ewaybill After this commit- We consider the global discount for ewaybill opw-6592878 task-[6596257](https://www.odoo.com/odoo/project/967/tasks/6596257) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#290217
This update corrects internal test data definitions and validation rules used across several Odoo Enterprise apps. It helps catch invalid test records earlier and makes automated testing more reliable, reducing the risk of hidden issues reaching users.
Original PR description
- https://github.com/odoo/odoo/pull/256814 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#132754 Forward-Port-Of: odoo/enterprise#131914
This update fixes several issues in Odoo's automated test tools and test data across accounting, calendar, live chat, mail, and point of sale. The changes help developers catch mistakes earlier and make test results clearer, reducing the risk of regressions reaching users.
Original PR description
- https://github.com/odoo/enterprise/pull/131914 Various Hoot/web tests fixes. See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#290221 Forward-Port-Of: odoo/odoo#256814
This fix makes an automated mail template test wait until the selected model is fully loaded before continuing. It reduces false test failures caused by slow server responses, helping keep release validation stable without changing user-facing behavior.
Original PR description
Before this commit, mail_template_dynamic_placeholder_tour could fail when the server answers the onchange of "Applies to" slowly: Tour mail_template_dynamic_placeholder_tour failed at step Check if…
Before this commit, mail_template_dynamic_placeholder_tour could fail when the server answers the onchange of "Applies to" slowly:
Tour mail_template_dynamic_placeholder_tour failed at step Check if
the dynamic placeholder popover is opened
(trigger: div.o_model_field_selector_popover)
This happens because the tour waits a fixed 200ms after picking "Contact" before typing "#" in the subject. The popover needs the model, and the record only holds the model once the onchange answers. On runbot the answer came after 230ms, so "#" showed the "select a model" notification instead of the popover.
This commit fixes the issue by waiting for the internal link button of the many2one, which only renders once the record holds the model.
Note that this step relies on "[FIX] web: cancel the pending search on autocomplete select": without it, a search still pending on the picked value marks the input as edited, which hides that button.
https://runbot.odoo.com/odoo/error/947209
Ref commit: https://github.com/odoo/odoo/pull/287888
Forward-Port-Of: odoo/odoo#290364
Forward-Port-Of: odoo/odoo#290185The Swiss payroll employee form now includes the work permit expiration date in the Personal Information section. This ensures HR teams can see and maintain the date needed for contract status updates, helping avoid missed or incorrect updates for employees with expiring permits.
Original PR description
…_date in employee form Add work_permit_expiration_date in Personnal Information page field is added in the standard view here: https://github.com/odoo/odoo/blob/18.0/addons/hr/views/hr_employee_views.xml#L184 this module override standard employee form view by making the entire Personal Information page invisible if CH and rewriting it: https://github.com/odoo/enterprise/blob/18.0/l10n_ch_hr_payroll_elm_transmission/views/l10n_ch_hr_payroll_employee_views.xml#L23 standard module hr_contract use this field in method [update_state](https://github.com/odoo/odoo/blob/18.0/addons/hr_contract/models/hr_contract.py#L184) called by cron [ir_cron_data_contract_update_state](https://github.com/odoo/odoo/blob/18.0/addons/hr_contract/data/hr_contract_data.xml#L53) Forward-Port-Of: odoo/enterprise#129875