Tuesday, January 20, 2026
9 changes · 17.0
Enhancements to existing features
This update adjusts the size of the 'Fapiao' field in the Chinese localization (l10n_cn) module to 20 characters. Previously, it was limited to 8 characters, which caused issues with longer invoice numbers. This change ensures accurate data capture and avoids data loss when recording Chinese invoices.
Original PR description
with this commit:- - We're changing the char size to 20 from 8. - We remove the constraint that prevents us from saving the record if the size is not 8. task-5501485
This update ensures our Peruvian EDI (l10n_pe_edi) tests accurately reflect recent changes in the UBL standard. Specifically, the tests now account for a new 'DeliveryParty' node that was added, ensuring proper processing of invoices according to current regulations. This improves the reliability of our Peruvian accounting module.
Original PR description
This commit is a part of a bigger commit on the community PR side. Tests on `l10n_pe_edi` have been updated to reflect the latest change; where the `DeliveryParty` node is now added (previously it was never filled). related-community-PR: https://github.com/odoo/odoo/pull/243590 task-4891206
Resolved issues and error corrections
This update fixes an issue where Odoo created duplicate vendor contacts when receiving invoices with slightly different VAT number formats (with or without dots). Now, invoices with the same VAT number, even with variations in formatting, will consistently map to the same contact, streamlining our accounting processes.
Original PR description
Description of the issue/feature this PR addresses: Odoo can create two contacts for the same VAT number Current behavior before PR: If you have two incoming vendor bills (over a period of time)…
Description of the issue/feature this PR addresses: Odoo can create two contacts for the same VAT number Current behavior before PR: If you have two incoming vendor bills (over a period of time) where the first bill has these details: - VAT number: `BE0477472701` - Name: `Odoo` And the second bill (e.g three months later) has these details: - VAT number: `BE0477.472.701` - Name: `Odoo S.A` Odoo will do something interesting and will create a second new contact. The reason is because the fallback on `name` from `res.partner` fails (since "Odoo S.A" is not equal to "Odoo". However, the `vat` number matching also fails! Since the VAT number "BE0477.472.701" is not identical to "BE0477472701". Throughout Odoo however VAT numbers are parsed and stored without dots in it. The function `_retrieve_partner_with_vat` however is an exception because the `vat` number here is sanitized for spaces but not for dots. Because of the combination of no exact match on neither `name` nor `vat` it now creates a second contact although the VAT number is technically the same. Desired behavior after PR is merged: Both an incoming vendor bill with `0477.472.701` and `0477472701` match to the same contact even if there are dots in it and if the name of the company is different. P.S: please find two sample XML's here: [sample_odoo_sa_bill.xml](https://github.com/user-attachments/files/24718225/sample_odoo_sa_bill.xml) [sample_odoo_bill.xml](https://github.com/user-attachments/files/24718226/sample_odoo_bill.xml) If you upload both back to back on a default V19 you will see two contacts. After this code change you will only see one contact where both bills are mapped to the same contacts. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue related to the transmission of ELM (Einnahmen-Lohn-Meldung) tax data for Switzerland, specifically for the 2026 canton import. The change ensures accurate reporting of payroll taxes for businesses operating in multiple cantons, aligning with updated Swiss tax regulations.
This update corrects a technical detail related to the translation of Odoo's Greek language support. The team identified and fixed an incorrect language code (`gr`) used in several modules, ensuring accurate translations for Greek-speaking users. This ensures proper localization and a better user experience for our Greek-speaking customers.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a previous issue where newly added modules to the Odoo Enterprise system were not automatically included in the translation process. Adding these modules to the `.weblate.json` file ensures they will be properly translated, improving the quality and availability of the software for all users. This prevents modules from appearing untranslated.
Original PR description
Modules added into stable without being properly added to .weblate.json file = never translatable.
This update resolves an issue preventing non-admin website editors from saving images they upload from Unsplash. The fix ensures editors with appropriate permissions can successfully save changes to website content, improving the usability of the website editor feature. It addresses a security concern related to user access rights.
Original PR description
Scenario: - Setup Unsplash and install website - Set a user as "Website: Editor and Designer" - Login as that user and go to any website page with a qweb view - Go to edit mode and drop Text-Image in…
Scenario: - Setup Unsplash and install website - Set a user as "Website: Editor and Designer" - Login as that user and go to any website page with a qweb view - Go to edit mode and drop Text-Image in a view - Replace the image with an unsplash image and then save Result: the save fails without any message shown, and there is a security access WARNING in the logs. Note: a similar scenario can be done for a restricted editor that is editing a HTML field it has write access to. Issue: to save a model with res_id 0, we need to either be admin (base.group_system) or the record creator. Since 9c9c58a5a10101532cbf046d21d4a63c2b7d2838 to bypass the mimetype neutering of happening, we create the attachment as SUPERUSER. Then when we modify the attachment url (for unsplash images), we have no access right to the attachment since we are not the creator. Fix: create the attachment with the current user, and only use SUPERUSER to set the mimetype if it was neutered (ie. the user doesn't have write access right to ir.ui.view, which in normal use case should only happen for "Restricted Editor"). This way the image is created by the user that uploaded it and not SUPERUSER. opw-4850611 opw-5387258 opw-5489219
This update corrects a typo in the tests for Odoo's search highlight feature. This ensures the search functionality is working correctly and reliably for users. The fix prevents potential issues with search results.
Original PR description
Intoduced by https://github.com/odoo/odoo/pull/118794
A recent test for the HR Contract Reports module was unreliable due to a timing issue during chart animations. This fix ensures the chart is fully rendered before test clicks are triggered, making the test consistently pass and improving overall system stability. This resolves a flaky test that could potentially impact report generation.
Original PR description
The test *“click on HrContractEmployeeReportGraphView opens 'hr.contract' list view”* was flaky due to a race condition between the Chart.js entry animation and the simulated click. The test was clicking on bar coordinates computed from the final chart state while the initial animation was still running, causing the click handler to miss the target element. Adding `await nextTick()` ensures the graph is fully rendered before the click is triggered, making the test reliable. runbot-75191