Thursday, June 4, 2026
15 changes · saas-18.2
Resolved issues and error corrections
This fix prevents a rare internal error that could occur when Odoo runs on newer Python versions. It improves reliability during background processing without changing user-facing workflows or features.
Original PR description
In Python 3.14, iterating over weak references (like `transaction.envs`) can trigger a `RuntimeError: dictionary changed size during iteration`. This happens mostly because the Garbage Collector can remove a weakref while `OrderedSet.copy()` is rebuilding the set via `dict.fromkeys()`. Instead of re-initializing the set by iterating over its elements, we now directly use the dictionary's native `.copy()` method. This atomic operation prevents the GC from modifying the size of the underlying `_map` during the copy. Forward-Port-Of: odoo/odoo#267947
The Indian point of sale flow now makes sure the invoice option is selected before an order is validated. This prevents a validation error and helps affected orders complete successfully.
Original PR description
### After this commit: - It ensure invoice checkbox is selected before validation, preventing the error and allowing the order to validate correctly. runbot error: 229737
This update resolves an internal test naming issue in the French PDP module that was causing automated quality checks to fail. It helps keep the release pipeline healthy without changing customer-facing behavior.
Original PR description
```
FAIL: TestPyLint.test_pylint
Traceback (most recent call last):
File "/data/build/odoo/odoo/addons/test_lint/tests/test_pylint.py", line 109, in test_pylint
self.fail(f"pylint test failed:\n\n{r.stdout}\n{r.stderr}".strip())
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: pylint test failed:
************* Module l10n_fr_pdp.tests.test_partner
function already defined line 134 (E0102) at odoo/addons/l10n_fr_pdp/tests/test_partner.py:152
--------------------------------------------------------------------
Your code has been rated at 10.00/10 (previous run: 10.00/10, +0.00)
```
runbot.build.error-939452
Forward-Port-Of: odoo/odoo#267472This fixes an issue that prevented companies from sending electronic documents to partners using the 0225 Peppol identifier unless a French-specific module was installed. Businesses using standard Peppol can now work with those partners as expected, and French trial demo setup is no longer blocked by this restriction.
Original PR description
Previously we blocked the 0225 peppol_eas when `l10n_fr_pdp` is not installed. But you should still be able to send to 0225 partners with just peppol. Since the PDP module is auto installed with the French localization and we block the 0225 EAS server side on the peppol (non-PDP) server it should be fine to just allow it for everyone. It also caused an issue when installing the demo data for the `hair_salon` industry in a French company on trial. opw-6268629 Forward-Port-Of: odoo/odoo#267993
For Taiwan ECPay e-invoices, B2C customer contact details now use the mobile number first and only use the phone number when no mobile is available. This prevents incorrect phone data in invoice submissions and avoids errors when only a mobile number is provided.
Original PR description
Current behavior: -- B2C partner type used `partner.phone` instead of `partner.mobile` for the `CustomerPhone` EDI JSON field, ignoring mobile even when present. Expected behavior: -- B2C prioritizes `partner.mobile`, falls back to `partner.phone` when mobile is absent. Steps to reproduce: -- 1. Create B2C partner with both mobile and phone set. 2. Generate EDI invoice JSON. 3. Observe `CustomerPhone` uses phone instead of mobile. If the `phone` field is instead empty for B2C, an error occurs Cause of the issue: -- B2C branch resolved `partner.phone` as primary instead of `partner.mobile`. Fix: -- B2C now resolves `partner.mobile or partner.phone` before calling `_reformat_phone_number`, ensuring mobile is prioritized with phone as fallback. opw-6120115 - I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260924
This fixes an issue where changing text color in the mobile HTML editor could appear to do nothing when typing from an empty cursor position. Users can now reliably select a new color and continue typing with that color applied.
Original PR description
Steps to Reproduce: - Apply color on a collapsed selection in mobile - Type some text - Change color from the color picker Description of the issue: - The color picker closes, but the selected color is not applied. Cause: - The color was being applied correctly, but the selection was positioned at offset 0 of the newly created font node. As a result, the browser normalized the selection back to the previous font node, making it appear as though the color was not applied. Solution: - When applying color on a collapsed selection, set the selection offset to 1 instead of 0. This prevents browser normalization and keeps the cursor inside the newly created font tag, ensuring the color is applied correctly. task-6201171 Forward-Port-Of: odoo/odoo#265438
Authorize.Net payments no longer fail when customer address or contact fields exceed the provider's length limits. Odoo now shortens overly long values before sending them, helping customers complete card payments successfully.
Original PR description
Steps to reproduce: - install payment_authorize module; - complete a credit card payment using Authorize.net with more than 60 characters on any other field than first name, last name or company; - confirm the payment. Issue: An error message appears. Cause: The Authorize.net API define the max length of information. It is possible that some information exceeds the maximum length. (https://apitest.authorize.net/xml/v1/schema/AnetApiSchema.xsd) Solution: Truncate information if the number of character is too large. opw-6141441 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#262154
This update prevents users from selecting properties in the field selector when that option is not allowed. It helps avoid incorrect field choices and supports related enterprise functionality with added test coverage.
Original PR description
- Backporting this [commit], for adding the `allow_properties` option to `field_selector` widget in `saas-18.2` for using the functionality in linked enterprise commit. - Also, added a test for `allow_properties` option. - For forward ports, only the test will be merged, as `allow_properties` is already included in the original commit. [commit]: https://github.com/odoo/odoo/pull/215767/changes/7cd18c07b5e008bff072d10375c908eb77434fde sentry-7378769090 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spreadsheet accounting formulas now correctly interpret company IDs entered as text, such as values coming from spreadsheet cells. This prevents server errors and keeps reports working when users filter accounting data by company.
Original PR description
Current behavior before PR: - The `ODOO.CREDIT`, `ODOO.DEBIT`, and `ODOO.BALANCE` formulas passed `companyId.value` directly to the server without converting it to a number. - If a user passed company_id as a string (e.g., '1' from a cell), it was sent to the server as a string, causing a server error. Desired behavior after PR is merged: - `companyId` is converted using toNumber() before being passed to the getter and the server, so '1' becomes 1. - null is preserved as-is (no company filter) while any non-null value is safely cast to an integer. Task: [6240005](https://www.odoo.com/odoo/project/2328/tasks/6240005) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267982 Forward-Port-Of: odoo/odoo#266009
Users can now save a journal even when the next check number contains letters or other non-numeric characters. This prevents an unexpected error in check printing settings and keeps payment configuration usable.
Original PR description
Currently, an error occurs when a user sets a non-numeric value as the journal's next check number. **Steps to Reproduce:** - Install the `account_check_printing` module with demo data. - Go to…
Currently, an error occurs when a user sets a non-numeric value as the journal's next check number. **Steps to Reproduce:** - Install the `account_check_printing` module with demo data. - Go to `Invoicing` > `Configuration` > `Accounting` > `Journals`. - Open the `bank journal`. - In the `Outgoing Payments` tab > Enable `Manual Numbering`. - Set the `next check number` to a `non-numeric` value `(e.g. FA1234)` and `save`. `ValueError: invalid literal for int() with base 10: 'FA1234'` After [this commit], the next check number is converted to an integer without first validating that it contains only numeric characters [1]. Since the value can be non-numeric, converting it directly to an integer raises the error. This commit ensures that the next check number is converted to an integer only after verifying that it contains numeric characters only. [this commit]: https://github.com/odoo/odoo/commit/cc2004404462ecb523f7877569ce6a06b05341b4 [1]- https://github.com/odoo/odoo/blob/00dd75f345d7f5ddb04cecf52eca07e5a22c7d3c/addons/account_check_printing/models/account_journal.py#L57-L61 sentry-7498755988 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#266280
Website carousels no longer automatically resume sliding while a page is being edited. This prevents slides from stealing focus and makes editing carousel content smoother and less disruptive.
Original PR description
Commit [3ba3e45] paused carousels upon focus, and resumed it upon focusout. However, that behavior should be disabled in edit mode, as cycling is disabled (moving through the slides is only done manually). Otherwise, the carousel cycles and, after each slide, takes the focus, which makes editing the page a nightmare. [3ba3e45]: https://github.com/odoo/odoo/commit/3ba3e45b2ab995412e1a7ced2c46b9294dc353b8 task-6264462
This update fixes an issue where the General Ledger and Balance Sheet reports were incorrectly exporting all accounts instead of the selected one when changing date filters. The fix removes unnecessary filtering logic, ensuring the report accurately reflects the user's chosen account. This improves report accuracy and usability.
Original PR description
Steps: - Open Balance Sheet report and unfold lines - Open the General Ledger from a line with an account - On GL report, change date filter - Export XLSX report -> We export all accounts instead of the one selected in the search bar Cause: Since f8dceec74e44ffe4aef67655be8811c96da91eba we filter out the filter if a default account is defined in the context which is the case in the `caret_option_open_general_ledger` method Fix: Remove the filtering as the behavior that was fixed by the mentioned commit does not happen anymore. opw-6234427 Forward-Port-Of: odoo/enterprise#119156
This update fixes a calculation error in the executive summary report that was underreporting the length of time periods. Previously, the report was calculating the gap between dates instead of the number of days. This change ensures the report accurately reflects the period length, specifically for metrics like Average Debtor Days, leading to more reliable reporting.
Original PR description
`_report_custom_engine_executive_summary_ndays` returned `date_to - date_from`, which is the gap between the two dates, not the count of days they span. For example April 2026-04-01 to 2026-04-30 will returned 29 instead of 30, making Average Debtor Days incorrect. Add +1 so the day count is inclusive of both endpoints, matching the rest of the report's date handling. opw-6215362 Forward-Port-Of: odoo/enterprise#118953
This update addresses an issue where manual operations were incorrectly being matched during account reconciliation. This reversion restores the previous system behavior, ensuring accurate reconciliation processes. It's a technical fix to improve the reliability of our accounting system.
Original PR description
This reverts commit 038f527793757c3148b775af1657c5a70a5abc66. opw-6230807 Forward-Port-Of: odoo/enterprise#118169
This update fixes an issue where the ICP export generated inconsistent XML reports by using values from multiple company contexts. The change ensures a single, reliable company context is used for identifier values, improving the accuracy and clarity of the exported data. This enhances the reliability of the ICP reporting process.
Original PR description
Description of the issue this commit addresses: The ICP export could mix values from different company contexts. In some cases, the main identifier and the fiscal entity division value did not come from the same source, which could create confusing or inconsistent XML output. --- Desired behavior after this commit is merged: This commit makes the ICP export use one consistent company context for identifier values, reuses precomputed values when available, and avoids overwriting them with unrelated defaults. --- task-6065382 Forward-Port-Of: odoo/enterprise#119152 Forward-Port-Of: odoo/enterprise#112995