Thursday, August 14, 2025
10 changes · master
Resolved issues and error corrections
Fixed an issue where opening My Requests in the Approvals app could fail when the same person appeared twice as an approver on one request. The system now safely uses one matching approver record, preventing the error and allowing users to view their approval requests normally.
Original PR description
#### Reproduce Approvals app -> My Approvals -> My Requests (Traceback Error) #### Issue The demo data contains a duplicate record for an approver (the user is set as default approver for the approval category and added again as record in xml data), so the request had 2 approvers with the same user. #### Fix Get the first record of filtered approvers for current user if there are many. task-4984137 Forward-Port-Of: odoo/enterprise#91806
A document sharing email template was corrected so it no longer references unavailable creator information. This prevents errors when document access records are created during upgrades, helping document sharing work reliably after migrations.
Original PR description
As `documents.access` records do not have `create_uid`, it isn't possible to reference it. This only comes up now as we've fixed the upgrade scripts to actually create this record (in odoo/upgrade#7959). Task-4480388 Forward-Port-Of: odoo/enterprise#92291
Portal templates in Field Service Sales were corrected after a recent subsection change caused display issues. This helps ensure customers and users see the intended layout without template errors.
Original PR description
\* industry_fsm_sale This commit fixes templates broken after the introduction of subsection in the section and note field ([1]). We wrote owl like "t-att-class" in python templates. task-5005432 [1]: https://github.com/odoo/enterprise/pull/91411
The default Swiss payroll rate for the contractual 13th month has been adjusted from 8.33% to 8.3333%. This improves payroll calculation precision for Swiss employees and helps avoid small rounding discrepancies.
Original PR description
-changed the default contractual thirteen month rate for Switzerland from 8.33 to 8.3333 Forward-Port-Of: odoo/enterprise#92231 Forward-Port-Of: odoo/enterprise#92095
This fix stops OCR processing from replacing an expense name that a user has already edited after upload. It helps ensure employee-entered expense descriptions are preserved and avoids confusion from unexpected name changes.
Original PR description
This commit https://github.com/odoo/odoo/commit/ca1f644a3c15f17482f56a2ece2a57f0f03098ff introduced the "untitled expense" title for expense when being uploaded. The user can then change manually the name. However, if the OCR is called after, it overrides the name previously set by the user. Therefore, if the name of an expense starts with "Untitled Expense", the OCR should not override the name. task-4653999
Fixes an issue where Mexican POS orders paid with eWallet could be stopped before the payment screen because a tiny tax rounding difference appeared as a negative remaining balance. The system now treats these near-zero amounts correctly, helping cashiers complete affected sales smoothly.
Original PR description
Before this commit, paying an order with eWallet could result in a small negative residual amount (due to tax calculation), instead of zero. This prevented users from proceeding to the payment screen. With this commit, the "lt" function is used to compare amounts while taking rounding precision into account, ensuring the residual is treated as zero when appropriate. opw-4867365 Forward-Port-Of: odoo/enterprise#91756 Forward-Port-Of: odoo/enterprise#88275
This fixes an internal subscription test that could fail when run outside the year 2025. It helps keep automated quality checks stable over time without changing customer-facing subscription behavior.
Original PR description
Before this commit, when test_uninvoiced_upsell_close_log was launched in a year different than 2025, it would fail with the following error: ``` File…
Before this commit, when test_uninvoiced_upsell_close_log was launched in a year different than 2025, it would fail with the following error:
```
File "/data/build/enterprise/sale_subscription/tests/test_sale_subscription.py", line 2085, in test_uninvoiced_upsell_close_log
action = subscription.prepare_upsell_order()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/sale_subscription/models/sale_order.py", line 1042, in prepare_upsell_order
action = self._prepare_renew_upsell_order('7_upsell', upsell_msg_body)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/sale_subscription/models/sale_order.py", line 1012, in _prepare_renew_upsell_order
order = self._create_renew_upsell_order(subscription_state, message_body)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/test_sale_subscription/models/sale_order.py", line 228, in _create_renew_upsell_order
order = super()._create_renew_upsell_order(subscription_state, message_body)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/sale_subscription/models/sale_order.py", line 998, in _create_renew_upsell_order
values = self._prepare_upsell_renew_order_values(subscription_state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/project_sale_subscription/models/sale_order.py", line 40, in _prepare_upsell_renew_order_values
res = super()._prepare_upsell_renew_order_values(subscription_state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/partner_commission/models/sale_order.py", line 72, in _prepare_upsell_renew_order_values
values = super()._prepare_upsell_renew_order_values(subscription_state)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/build/enterprise/sale_subscription/models/sale_order.py", line 1182, in _prepare_upsell_renew_order_values
raise UserError(_('You cannot create an upsell for this subscription because it :\n'
odoo.exceptions.UserError: You cannot create an upsell for this subscription because it :
- Has not started yet.
- Has no invoiced period in the future.
```
runbot-task-230716
Forward-Port-Of: odoo/enterprise#92307This update corrects access permissions used by automated tests for Australian payroll accounting. It helps ensure payroll and accounting checks run reliably without failing because the test user lacks the right access groups.
Original PR description
[FIX] l10n_au_hr_payroll_account: missing groups The common test file is accessing models in account and hr modules but the user miss groups to have access to them. runbot-230912
Demo employee records in several country-specific payroll modules now use the correct payroll structure type. This helps demo environments show accurate payroll behavior and reduces confusion during evaluations, testing, or training.
Original PR description
Some employees on demo data don't have the correct structure type. This solves this issue. Task: 4890507 Forward-Port-Of: odoo/enterprise#88487
This update adjusts the appointment website test configuration so newly exposed snippet layouts are recognized correctly. It helps keep automated quality checks stable after a related website editor change, with no expected impact on daily users.
Original PR description
Starting from [1], the various dynamic snippet layouts are directly accessible from the snippet selection dialog instead of using the "Templates" option. The goal of this commit is to simply add the new snippets keys in the "sub-snippet templates" config to prevent the snippets drag and drop test from failing. [1]: https://github.com/odoo/odoo/commit/e3b062e5d3820ddfcee2eb669f21edc0c53c3330 runbot-230822 Community PR: https://github.com/odoo/odoo/pull/223010