Monday, January 12, 2026
8 changes · 17.0
Enhancements to existing features
This update adds two new unit of measure (UoM) codes – MIN (Minute) and KWH (Kilowatt hour) – to Odoo, aligning with UNECE Recommendation No. 20 for Peppol. Previously, Odoo relied on a default 'Units' code, leading to issues with UBL/CII electronic invoices. This change ensures broader compatibility and supports localization modules that require these specific UoMs.
Original PR description
**Issue:** 2 UoM that is in the UNECE Recommendation No.20 for Peppol don't exist in Odoo: - MIN: Minute - KWH: Kilowatt hour Even if they are created manually, they are not used in the UBL/CII electronic invoices. Instead, the default code (i.e. "C62" for "Units" is used). Some localization modules create the "Kilowatt hour" UoM as they need it. (l10n_cl and l10n_tr_nilvera) So it's better to have a "generic" one available for every module. opw-5269119 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update prevents a bug where clicking on list view group headers while in edit mode would trigger incorrect 'required field' error messages. The fix ensures that edit mode calls complete before other actions are taken, eliminating data inconsistencies and improving the user experience.
Original PR description
Steps to reproduce: - Have a record where modifying a field triggers another field to be required in the frontend only - Apply a group by on a list view of this record - Edit a record and modify that field - While still in edit mode, click on another group header Before: Clicking on the group header triggers both `onGroupHeaderClicked` and `onGlobalClick` simultaneously, causing `leaveEditMode` to call `save` twice. The `save` mutex prevents duplicate API calls, but the second call then runs `checkValidity` with stale data, raising a false "required field" error. After: While clicking on the group header still triggers both `onGroupHeaderClicked` and `onGlobalClick` simultaneously, each `leaveEditMode` call waits for any ongoing call to complete before executing. No "required field" error is raised. opw-5388825
This update corrects a validation error within Odoo Studio that occurred when users attempted to add help tooltips to fields in the Contacts list view. The issue stemmed from a missing 'help' attribute in the field definition, which Odoo Studio was incorrectly interpreting. This fix ensures proper functionality and compatibility with Odoo Studio customizations.
Original PR description
Steps to reproduce ================== - Install web_studio,contacts - Go to Contacts - Open the list view - Click on a field - Set a "Help tooltip" => Validation Error Invalid view Odoo Studio: res.partner.tree customization Cause of the issue ================== The help attribute is missing from the field definition opw-5379357
This fix prevents the 'Update Prices' button from appearing on sales orders when a pricelist hasn't been configured. Previously, the button was incorrectly displayed, potentially leading to users manually adjusting prices without using the standard pricelist system. This change ensures a cleaner user experience and enforces the correct pricelist workflow.
Original PR description
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is…
**Steps to produce:** - Install the `Sales` module. - Enable `Pricelists` in settings and set the `default quotation template`. - Create a new Sales Order. **Issue:** - The `Update Prices` button is visible even when no pricelist is set on the sales order. **Root cause:** - In the onchange logic (see [1]), show_update_pricelist is set to True based solely on the presence of order lines, without checking whether a pricelist is defined. **Solution**: - Update the condition so that button is shown only when sale order line is present and the current pricelist value is not the previous one. [1]: https://github.com/odoo/odoo/blob/849ec71acbaea0061fd4b13888a486e4aebb6463/addons/sale/models/sale_order.py#L801-L803 Before: <img width="1215" height="466" alt="image" src="https://github.com/user-attachments/assets/f29b1ccf-eec8-4114-b4c9-a8083947ad28" /> After: <img width="1207" height="428" alt="image" src="https://github.com/user-attachments/assets/e358b633-d11b-413d-94c4-3837c430eac4" /> opw-5414897 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This pull request addresses a small error in the French tax reporting (l10n_fr) module. Specifically, a mistake was identified and corrected within a specific tax box (15_2). This ensures accurate tax calculations and reporting for French businesses using Odoo.
Original PR description
During this commit: 869f80b we made a mistake in the box 15_2. no task id --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects minor errors in the 2026 balance sheet and profit & loss reports for the Danish localization. These changes involve adjusting formulas and text within the reports, likely due to an oversight during development. This ensures accurate financial reporting for Danish businesses using Odoo Enterprise.
Original PR description
In this commit: https://github.com/odoo/enterprise/commit/0d431fe2cc6556a040888ecc5d6a71be4a435447 we introduce a new balance sheet report for 2026 but there was a mistake in the sign of a formula and in the text of a line. Same for the profit and loss, some errors in sign of accounts and naming. The errors don't come from a ticket but more of a logical fix, those errors were probably an oversight during development. no task id
This update fixes a potential issue with how Odoo tours mock Clipboard API calls, particularly in headless environments. By delaying cleanup until the action's listener has finished, the system avoids delays and ensures accurate mocking, preventing browser wait states or permission errors. This change was prompted by a new Chrome policy.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode.
This update fixes a potential issue with how Odoo tours mock the Clipboard API, particularly in headless environments. By delaying cleanup steps, the system now ensures the API call is fully processed before attempting to clean up, preventing browser waits or permission errors. This improves tour reliability and performance.
Original PR description
Reliably mocking Clipboard API calls in tours should be done in two steps: - the step that will actually do the call should do the patching, followed by the actual action. - the cleanup should only be done in the following step to ensure the action's listener has actually finished. This commit applies this principle to avoid the "cleanup" to be executed before the action's listener has actually reached the call to the Clipboard API (because of slower processing, slower network...), which would defeat the mocking purpose (and either get the browser to indefinitely wait for the user's clipboard usage approval or a permission error depending on the browser's default behavior). Note: this was mainly brought to light by the new Chrome 143+ default policy which revoke all permissions in headless mode.