Daily updates from Odoo
Monday, July 13, 2026
17 changes · 17.0
Enhancements to existing features
This update improves the performance and reliability of our website's image galleries by upgrading the Owl library to the latest version (2.8.4). Specifically, it fixes a bug that caused lost coalesced renders and adds support for running Owl with Node.js, enhancing our development flexibility.
Original PR description
- [FIX] runtime: don't lose coalesced renders - [IMP] loadable with nodejs See https://github.com/odoo/owl/commits/owl-2.x/ for more details Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#275568
This update enhances the display of Peppol error messages within Odoo. Previously, technical error details were difficult for users to understand and act upon. Now, errors are presented as a clear, human-readable HTML list in the chatter, making it easier to diagnose and resolve issues related to Peppol integration.
Original PR description
Before this commit, Peppol error messages (e.g. Schematron errors) were logged in the chatter as a single unformatted line and without any humanization. The errors were too technical and the user could not easily know what action to take. This PR splits the raw error payload into individual entries, maps known error codes to human-readable explanations, and renders them as an HTML list in the chatter. task-6144909 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This fix registers the WhatsApp Identifiers translation template so it is included in the translation workflow. It helps ensure translated text for this module can be properly managed and kept up to date.
Original PR description
pot files must be registered there. See 9966b160972a053e051f2213846acc64d133f2a3
Swiss QR-IBAN payment files now remove unsupported characters from payment references before the file is generated. This helps prevent ISO 20022 payment files from being rejected by Swiss banks when references contain characters such as the degree symbol.
Original PR description
**Steps to reproduce:** * Configure a Swiss company with the Swiss accounting localization. * Install `account_sepa`. * Configure a bank journal with a valid Swiss **QR-IBAN**. * Create a vendor with…
**Steps to reproduce:** * Configure a Swiss company with the Swiss accounting localization. * Install `account_sepa`. * Configure a bank journal with a valid Swiss **QR-IBAN**. * Create a vendor with a valid Swiss bank account. * Under **Accounting -> Configuration -> Settings** enable QR Payments. * Go to the vendor and enter the correct QR-IBAN number under the Accounting Section. * Navigate to **Accounting -> Configuration -> Journals** and in the **bank** journal, add the account number of QR-IBAN. * Create and post a vendor payment using the bank journal. * Set the payment reference (`ref`) to contain the `°` character. * Add the payment to a batch payment and generate the ISO 20022 payment file. * Inspect the generated XML. **Observed Behaviour:** The `°` character is preserved in the payment reference for QR-IBAN payments, producing an ISO 20022 file that may be rejected by Swiss banks because it does not comply with the EPC minimum character set. **Cause:** The QR-IBAN branch validates the structured reference before sanitizing it, allowing unsupported characters to remain in the generated XML. **Fix:** Sanitize the payment reference before validating it as a QR structured reference, ensuring invalid characters are removed while preserving valid QR references. opw - 6350931
The Dutch reports module information no longer shows an outdated website link that now points to unrelated content. This avoids sending users to the wrong external site and keeps module details accurate.
Original PR description
The URL leads to a website that has nothing to do with what it used to be so it needs to be removed. Task-6360682
This fix ensures payroll rule parameter data stays consistent when reused by the system. It prevents one payroll calculation or process from unintentionally changing cached values used elsewhere, reducing the risk of hard-to-trace payroll issues.
Original PR description
Cached functions with `@ormcache` should not return immutable values, yet `_get_parameter_from_code()` could return dicts/sets/lists/etc. It could lead to very obscure bugs such as: ```python def…
Cached functions with `@ormcache` should not return immutable values, yet `_get_parameter_from_code()` could return dicts/sets/lists/etc.
It could lead to very obscure bugs such as:
```python
def some_innocent_code():
category_dict = self.env["hr.rule.parameter"]._get_parameter_from_code('l10n_be_work_entry_categories')
incapacity_codes = category_dict['partial_incapacity']
incapacity_codes |= category_dict['total_incapacity']
# ... then use incapacity_codes
def print_rule_param():
print(self.env["hr.rule.parameter"]._get_parameter_from_code('l10n_be_work_entry_categories')['partial_incapacity'])
print_rule_param() # OrderedSet(['LEAVE281'])
some_innocent_code()
print_rule_param() # OrderedSet(['LEAVE281', 'LEAVE264', 'LEAVE266', 'LEAVE217', 'LEAVE218', 'LEAVE219', 'MEDIC01'])
```
The solution was to either deepcopy the returned value each time, or to change all the rule parameters to their frozen equivalent. Since we don't have access to frozen objects in rule parameters's xml definitions, we opted for the deepcopy approach.
task-6329380This update addresses a potential issue where product combinations could get stuck in an infinite loop, causing Odoo instances to freeze. The change sets a maximum iteration limit to prevent this, ensuring smoother operation and preventing prolonged downtime. This was triggered during a recent database migration and, while a rare occurrence, could have significant impact.
Original PR description
Sometimes, products get stuck for a long time while getting variant combinations in production. Sets a maximum iteration limit to prevent an infinite loop. The issue occurred on a production database migrated from Odoo 11.0 to 17.0. Even if it is a corner case, it can block Odoo workers in an infinite loop and bring the entire instance down
This update fixes a mapping issue with Worldline's Cofidis payment method. Previously, the system used an outdated payment product ID, leading to incorrect payment processing. Now, the mapping is updated to the latest Worldline documentation, ensuring accurate and reliable payment transactions.
Original PR description
opw-6368979 Description of the issue/feature this PR addresses: Update the Worldline Cofidis payment method mapping to match the latest payment product ID defined in the Worldline documentation. Current behavior before PR: The Cofidis payment method was mapped to the outdated payment product ID (3012), causing payment requests to use an incorrect mapping. Desired behavior after PR is merged: The Cofidis payment method is mapped to the correct payment product ID (5129) as per the latest Worldline documentation, ensuring payment requests use the correct mapping.
This update ensures that the default placeholder in the Klipy search feature displays "Search KLIPY", as required by Klipy's attribution guidelines. This change maintains proper compliance and enhances the user experience when using Klipy within Odoo. It's a minor fix to improve consistency.
Original PR description
Klipy requires attribution with "Search KLIPY" as the default placeholder [1]. This commit complies these guidelines. [1]: https://docs.klipy.com/attribution
This update ensures the Odoo spreadsheet component is running the latest version, addressing potential bugs and improving performance. The changes include fixes for conditional formatting and updates to the underlying technology. This ensures the spreadsheet functionality continues to operate smoothly within Odoo.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/209fe7cdc [REL] 17.0.102 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/209fe7cdc [REL] 17.0.102 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/23f83e0cb [FIX] conditional_formatting: handle zero color scale midpoint [Task: 6312961](https://www.odoo.com/odoo/2328/tasks/6312961) https://github.com/odoo/o-spreadsheet/commit/b016fb42b [FIX] config: filter-out claude folder from prettier [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/bc58e58d7 [REL] Ghost-rel [](https://www.odoo.com/odoo/2328/tasks/) https://github.com/odoo/o-spreadsheet/commit/22a817fe5 [FIX] config: bump node version in GH action [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
This update fixes an issue where the Worldline Cofidis payment method was incorrectly mapped to an outdated payment product ID. The change updates the mapping to the latest ID specified in Worldline documentation, ensuring accurate payment processing and preventing potential payment failures. This improves the reliability of Worldline payments.
Original PR description
opw-6368979 Description of the issue/feature this PR addresses: Update the Worldline Cofidis payment method mapping to match the latest payment product ID defined in the Worldline documentation. Current behavior before PR: The Cofidis payment method was mapped to the outdated payment product ID (3012), causing payment requests to use an incorrect mapping. Desired behavior after PR is merged: The Cofidis payment method is mapped to the correct payment product ID (5129) as per the latest Worldline documentation, ensuring payment requests use the correct mapping.
This update fixes a problem where users were repeatedly receiving duplicate vendor bills. The system was incorrectly creating new invoices for each incoming message, leading to unnecessary processing. Now, the system checks for existing invoices before processing new ones, preventing duplicates and improving efficiency.
Original PR description
Many users were receiving duplicate vendor bills. The issue was that duplicates were never detected in the receiving flow. Every incoming message returned by the proxy was processed and turned into a new `account.move`, even if it had already been imported previously. This commit filters out messages whose UUID already matches an existing `account.move` before processing them, and acknowledges those duplicates on the IAP side so they are not received again on the next run. task-5930116 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a technical issue related to how the Odoo website modules (website, website_sale) process data. By replacing synchronous `forEach` loops with standard `for` loops, the system's performance has been enhanced. This ensures smoother operation and avoids potential errors within these key website functionalities.
Original PR description
*: website, website_sale `forEach` is a synchronous operation, so it doesn't support promises. We refactor its usage to use `for` loops. task-4794299
This update resolves an issue where Odoo incorrectly identified valid invoices with negative tax amounts as credit notes when importing UBL or Factur-X (CII) invoices. The change updates how Odoo interprets tax amounts during import, ensuring invoices are correctly recognized and processed. This improves data accuracy and prevents misclassification of financial documents.
Original PR description
Before this commit: - When importing a **UBL** or **Factur-X (CII)** invoice, Odoo determines whether the document should be imported as an invoice or a credit note based on the `TaxExclusiveAmount…
Before this commit: - When importing a **UBL** or **Factur-X (CII)** invoice, Odoo determines whether the document should be imported as an invoice or a credit note based on the `TaxExclusiveAmount (UBL)` /` TaxBasisTotalAmount (Factur-X)`. - In some rare cases, a valid invoice can contain a negative `TaxExclusiveAmount` / `TaxBasisTotalAmount` while still having a positive `TaxInclusiveAmount` / `GrandTotalAmount`. - In such situations, Odoo incorrectly imports the document as a credit note. Technical reason: - The method `_get_import_document_amount_sign()` uses `TaxExclusiveAmount` / `TaxBasisTotalAmount `to determine whether the imported document is an invoice or a refund. After this commit: - **UBL** now uses `TaxInclusiveAmount` instead of `TaxExclusiveAmount`, and **Factur-X** now uses `GrandTotalAmount `instead of `TaxBasisTotalAmount` to determine whether the document should be imported as an invoice or a credit note. - Prevent valid invoices with negative `TaxExclusiveAmount` / `TaxBasisTotalAmount` from being incorrectly converted into credit notes. Task-6321262
This update fixes an issue where self-billing invoices created in sales journals caused traceability problems. It now ensures unique invoice sequences are used per partner, aligning with recent versions and preventing confusion during accounting firm workflows with quick edit mode. This improves data accuracy and reporting.
Original PR description
This PR handles 2 cases : ===== PART 1 ===== Self-billing bill sequences should be unique per partner, as implemented in v19+. This PR backports that behavior to 17.0. ===== PART 2 ===== Previously, the `is_self_billing` option on `account.journal` was available only for purchase journals. This caused an issue when importing a self-billing invoice into a regular sales journal with quick edit mode (accounting firm) enabled. In such cases, the newly created invoices would use the self-billing sequence pattern, leading to traceability issues. This PR allows the creation of self-billing sales journals to prevent this issue. task-6103142 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a confusing error message related to zero amounts in account reconciliation settings. The change ensures that error messages accurately reflect the type of amount being validated, leading to a clearer and more user-friendly experience. This improves the accuracy of reconciliation processes.
Original PR description
In _validate_amount(), setting a "Percentage of balance" line to 0 raises "Statement line percentage can't be 0", and setting a "Percentage of statement line" to 0 raises "Balance percentage can't be 0". Align each error message with the amount type being validated. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Documentation and clarification updates
This update formally recognizes the contributions from Royal Import & Export Ltd and Colin Van den Akker by recording their signed Contributor License Agreements. This allows Odoo to accept code changes and features from this valuable contributor. The CLA signatures are now stored for future use and to ensure compliance with Odoo's open-source licensing.
Original PR description
Description of the issue/feature this PR addresses: Contributor License Agreement signatures for Royal Import & Export Ltd and Colin Van den Akker, per https://github.com/odoo/odoo/blob/17.0/doc/cla/sign-cla.md - Corporate CLA: `doc/cla/corporate/royalimport.md` - Individual CLA: `doc/cla/individual/colinvandenakker.md` Targeted at **17.0** (oldest supported LTS) so robodoo can forward-port to 18.0/19.0. Current behavior before PR: No corporate or individual CLA on file for Royal Import / Colin Van den Akker. Desired behavior after PR is merged: CCLA and ICLA are recorded so contributions from https://github.com/royalimport can be accepted. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr