Wednesday, October 29, 2025
20 changes · saas-18.2
Enhancements to existing features
The accounting accrued orders wizard now includes a customization point for creating reversal entries. This helps businesses support accruals spread over several periods, allowing future modules to match reversals more accurately against actual invoices.
Original PR description
Add a dedicated hook method to facilitate customization of reversal entry generation in the accrued orders wizard. Reason: The current implementation creates a single reversal entry that is applied in the next period. For scenarios requiring accrual allocation across multiple periods, modules need the ability to generate multiple reversal entries (one per period) to properly net-off against actual invoices --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233295 Forward-Port-Of: odoo/odoo#233142
Resolved issues and error corrections
A test for timesheets during time off with public holidays now uses the correct user account instead of an employee record. This helps ensure the project timesheet holiday checks run consistently and reduces the risk of false test failures.
Original PR description
In the 'test_timesheet_time_off_including_public_holiday' test case, 'employee' was mistakenly passed to 'with_user'. This commit replaces 'employee' with 'user' for consistency. task-4809916 Forward-Port-Of: odoo/odoo#233366
Fixes an issue in the Website editor where removing a background color from a Countdown block using the Boxes layout could trigger an error. The change adds a safe default color value so users can preview and edit the block smoothly even when no custom color is set.
Original PR description
Steps to Reproduce: 1. Add a Countdown snippet. 2. Change the layout to Boxes. 3. Apply a background color to the layout. 4. Hover over the delete button in the color picker. 5. A traceback error occurs. Issue: A traceback error occurs because the does not have a default value assigned. This is necessary for the snippet to preview correctly when no additional color is applied. Fix: Assign a default value to ensure that the hover behavior works properly, even when no color is set. The issue was produced here: https://github.com/odoo/odoo/commit/03c552690b15#diff-a0262b81bb090b8c62afbd342b2a30f054cf353a35f9fc0ceeb0f86b7b9cd645 task-4752497 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224012
This update restores the correct accounting setup for rounding differences in the French localization. It prevents rounding adjustments from being assigned to the wrong type of account, helping keep financial records consistent.
Original PR description
These accounts were changed by mistake. Even more, they're of the wrong type. Re-add account to be consistent with 758 opw-5180702 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232902
Repair order lines now require saving before a serial number can be selected, preventing the serial number from disappearing when the order is saved. This helps users avoid lost tracking information and reduces rework when handling serialized repair products.
Original PR description
When creating a repair order, if you add a line and assign a serial number before saving the line, the serial number is removed when saving. Steps to reproduce: - Create a repair order and save it. - Add a repair line with a product tracked by serial number. - Without saving the repair order, add a serial number on the line. - Save the repair order. - You will notice that the serial number is no longer assigned to the repair line. This PR fixes the issue by making the serial number field read-only until the repair line is saved. opw-5156267 Forward-Port-Of: odoo/odoo#233264 Forward-Port-Of: odoo/odoo#232973
This fix adjusts how Peppol-related partner screens extend existing accounting views so they load in the correct order. It helps avoid upgrade test failures and view loading errors when Peppol support is backported or upgraded across versions.
Original PR description
Currently the following views inherit from `base.view_partner_tree`: - `res_partner_form_account_peppol` - `res_partner_view_tree` The views mentioned about contain xpath expressions based on the `ubl_cii_format` field. But the view in `base` does not include the field yet. It is added in module `account_edi_ubl_cii`. This commit changes the inheritance to be from the equivalent views in `account_edi_ubl_cii` instead. Otherwise there is an error in a test when upgrading from 16.0 to 17.0 with the backported `account_peppol` to 16.0. task-4925169 Forward-Port-Of: odoo/odoo#233461 Forward-Port-Of: odoo/odoo#231637
This fix prevents errors when Odoo updates analytic accounting lines that do not have distribution details. It keeps accounting workflows running smoothly by safely skipping empty distribution lines while processing the rest of the update.
Original PR description
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions,…
Description of the issue/feature this PR addresses: This pull request addresses a bug in Odoo's analytic accounting module. Specifically, when updating analytic lines that have empty distributions, the vals_list[0] ends up being empty. This situation causes an error in the write method, which prevents the system from properly updating analytic lines without distributions. Current behavior before PR: Before this fix, attempting to update analytic lines with empty distributions triggers an error in the write method. As a result, operations that involve updating such lines fail, potentially interrupting normal accounting workflows. Desired behavior after PR is merged: After merging this PR, the system will first check whether an analytic line has a valid distribution before attempting to update it. Lines with empty distributions will be safely skipped, preventing errors and allowing the rest of the analytic updates to proceed smoothly. This ensures more robust handling of analytic lines and avoids runtime exceptions during updates. Video: https://app.screencastify.com/watch/03zuCLh984kWun2Q71tK Odoo Task: https://www.odoo.com/es_ES/my/tasks/5181171 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232176
The Point of Sale navigation bar will again show the connection status for hardware devices that use a proxy. This helps store staff quickly see whether connected devices such as printers or payment hardware are available, reducing confusion during checkout.
Original PR description
Description of the issue/feature this PR addresses: The presence of proxy status of hardware devices depends conditionally on pos.config.use_proxy in template of NavBar. However, use_proxy was removed in [PR 51000](https://github.com/odoo/enterprise/pull/51000) and [PR 142566](https://github.com/odoo/odoo/pull/142566). As a consequence, the proxy status is never shown in the NavBar of odoo 18.0. It's already fixed in odoo 19.0 Current behavior before PR: ProxyStatus is not displayed in PoS NavBar even if proxy is used for hardware devices. Desired behavior after PR is merged: ProxyStatus is displayed in PoS NavBar depending on proxy configuration (useProxy() of pos_store.js). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233144
This fix prevents course pages from showing an incorrect browser tab title when a slide name contains the '|' character. Learners now see the correct website name after navigating between slides, keeping the course experience polished and consistent.
Original PR description
How to reproduce: - Go to a course with a slide containing "|" in its name. (e.g. Basics of Gardening) - Change slide to this special named slide. - Change back to another slide. - The browser title contains the string part after the "|" instead of the website name. This commit now handles slides with name containing the "|" character. Task-5152858 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#230489
The Tasks shortcut on a sales order now keeps the user's selected language when opening related tasks. This prevents parts of the interface, such as the top menu, from unexpectedly switching back to English.
Original PR description
Repro:
- Activate any language different than english
- Create a service product with create Project & Task
- Create a sales order with the product
- Navigate with smart buttons Project > Tasks > Activate Top Menu
- All good
- Now navigate directly to Tasks from the sales order
- Top Menu is in English
Issue:
- The issue here is the context language being lost due to context overriding in the code.
Fix:
- In this commit, I have updated the method from `with_context({'active_id': self.id})` to
`with_context(active_id=self.id)`. This fix ensures that the previous context is retained.
opw-5160373
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#233362This update makes the wishlist test start from a clean wishlist before continuing. It helps prevent random test failures, improving release confidence without changing the customer-facing shopping experience.
Original PR description
Add a step to make sure the wishlist is empty before continuing the tour runbot-229616 Forward-Port-Of: odoo/odoo#233262
This commit is a follow-up of this commit [[1]]. The aim of this commit is improving the Finnish translations for the localization. no task id Co-authored-by: [sahak-fin](https://github.com/sahak-fin) <sahak@odoo.com> [1]: https://github.com/odoo/odoo/commit/d0017410646500928bf8fe08077f21569c1fa47e --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233042
Original PR description
This commit is a follow-up of this commit [[1]]. The aim of this commit is improving the Finnish translations for the localization. no task id Co-authored-by: [sahak-fin](https://github.com/sahak-fin) <sahak@odoo.com> [1]: https://github.com/odoo/odoo/commit/d0017410646500928bf8fe08077f21569c1fa47e --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233042
This update lets Odoo installations use the newer PDF library package when the older one is no longer available. It helps ensure deployments continue to work on Debian 13 and upcoming Ubuntu releases with minimal disruption.
Original PR description
pypdf2 is not present anymore in debian/trixie Fallback on pypdf if pypdf2 is not available Note that it should mainly fix the deb_install but future fixes may be needed Forward-Port-Of: odoo/odoo#233598
This fix improves automated test reliability by detecting processes that are still running after a test case finishes. It also logs a warning during server shutdown when such processes are found, helping teams prevent stuck or unstable test runs.
Original PR description
In some case a process could remain aive at the end of a tests In addition to possible race condition, this can also cause a program to remain stuck at the end of the tests. This commit proposes to - catch all remaining processes at the end of a base case. - log a message if a process is found at the shutdown of the server. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#231942
This fixes an unreliable manufacturing test that could pass or fail depending on tiny timing differences during work order processing. The change improves confidence in automated checks without changing business functionality or user workflows.
Original PR description
### Issue: The test `test_mrp_backorder_operations` behaves non-deterministically. It may fail at this assertion:…
### Issue: The test `test_mrp_backorder_operations` behaves non-deterministically. It may fail at this assertion: https://github.com/odoo/odoo/blob/6e37542b53f9c9ec1baf8d58b1eeca376252186f/addons/mrp/tests/test_backorder.py#L986-L989 Because the `duration` of done workorder can vary. ### Cause: The delta time between `button_start()` and `button_finish()` https://github.com/odoo/odoo/blob/6e37542b53f9c9ec1baf8d58b1eeca376252186f/addons/mrp/tests/test_backorder.py#L983-L985 `button_finish()` triggers `Productivity._close()` https://github.com/odoo/odoo/blob/6e37542b53f9c9ec1baf8d58b1eeca376252186f/addons/mrp/models/mrp_workcenter.py#L572-L576 Which sets `Productivity.duration` to 0 if delta time is zero. Consequently, `workorder.duration` also becomes zero. When `bo_2.button_mark_done()` is called, the duration is set to `duration_expected` (240 in this test), which the assertion only can pass in that case. If delta time isn't zero, then duration will also be non-zero. So it will not set to `duration_expected`. As a result the assertion will fail. runbot-233247 Forward-Port-Of: odoo/odoo#231650
Users can now update the email template for customer statements even after removing all recipients. This prevents an error during statement sending and keeps the workflow from being interrupted.
Original PR description
Currently, an error occurs if the recipients of the statement report are removed and the user tries to update the email template. **Steps to Reproduce:** 1. Install Accounting. 2. Customers (list view) > select any record > Actions > Customer Statement > Send. 3. Remove recipients and try to update the email template. **Error:** `KeyError - False` **Cause:** The system tries to fetch mail field values from an empty recipient list, leading to a KeyError. **Fix:** This commit recomputes the recipient partners before updating the email subject and body from the template. sentry-6918345730 Forward-Port-Of: odoo/enterprise#96273
Corrects Swedish payment processing so IBAN payments are no longer mistakenly treated as local BBAN-style payments when account type details are missing. This helps prevent payment batches from being classified incorrectly and avoids related processing failures.
Original PR description
The method `_is_se_bban` is supposed to flag if payments are bban or iban. But since 8d77c0442d7912880c5da5976c92b24d3f9885ca,
the method returns True for batch of iban payments when you don't provide the `partner_acc_type` params, because
`len({'bban_se', 'plusgiro', 'bankgiro', *(partner_acc_type or {})}) == 3`
is always True if `partner_acc_type` is None.
This commit fix that behaviour, by replacing the empty set by `{'iban'}`, meaning the second condition will always be
False when `partner_acc_type` is None.
This bug has been found by failing runbot tests (error: 233465)
no-task
Forward-Port-Of: odoo/enterprise#97876Opening the duplicate transaction wizard without a linked journal no longer causes an error. This improves reliability for accounting users accessing the view directly or before a journal has been selected.
Original PR description
When user opens the ``account.duplicate.transaction.wizard.form`` view, a traceback appears.
Steps to reproduce the error:
- Install ``Accounting`` module
- Using Open View, Open ``account.duplicate.transaction.wizard.form`` view
Traceback:
```py
UndefinedFunction: operator does not exist: integer = boolean
LINE 5: WHERE st_line.journal_id = false
^
```
https://github.com/odoo/enterprise/blob/8146cfc7b47ba8536f0fa5208cc69685371b55b8/account_online_synchronization/models/account_journal.py#L278
When the view is opened, the ``_compute_provider_duplicate_ids`` method is triggered,
which calls ``_get_provider_duplicate_transactions`` method.
Since no journal is linked to the wizard, it will raise the traceback from the above line.
ref: 218e8a365b153a202d062152ff69234482bcccf2
sentry-6943450225This fixes an issue in SAF-T accounting reports where entries without a linked customer or supplier could be handled incorrectly. The report filtering now accounts for this case, helping prevent reporting errors and improving reliability for accounting exports.
Original PR description
### Issue: After #95804 , some of the code was improved but the consideration for partner_id being None was not expected. To fix this issue, we add partner_id on the domain. OPW-5177365 Forward-Port-Of: odoo/enterprise#98240
Deleting a signer role from a Sign template no longer causes an error when that role includes radio buttons. This prevents interruptions while editing templates and keeps the signing setup workflow reliable.
Original PR description
Before this commit, when deleting a Signer role that already had a radio button dropped in the Template, it would trigger a traceback since the were trying to delete radio buttons individually. This was problematic because radio buttons are deleted in chain, so when deleting the first, we already delete all the remaining radio buttons and its chain link. After this commit, no issue is raised anymore when deleting a signer role, as radio buttons already deleted are now skipped in the code. task-5130925