Friday, January 9, 2026
11 changes · saas-18.2
Enhancements to existing features
French accounting tax report calculations now ensure MOA values are shown as positive whole numbers. This improves report consistency and helps avoid confusion or invalid negative values in French reporting fields.
Original PR description
All MOA fields should be positive integer. task-5380637 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239587
This update adjusts the Vietnamese localization's chart of accounts to comply with new accounting regulations (Circular 99/2025) issued in January 2026. This change ensures our system accurately reflects current Vietnamese accounting standards and is a necessary update for compliance.
Original PR description
Update the COA for the vietnamese localization, which is based on the circular 200/2014 by the new one based on the circular 99/2025. This new COA applies starting in Jan. 2026 task-5357470 Forward-Port-Of: odoo/enterprise#102843
Resolved issues and error corrections
This fix prevents duplicate group identifiers from being included when user group changes trigger Discuss channel auto-subscriptions. It helps keep group-based channel matching cleaner and avoids unnecessary duplicate processing during user access updates.
Original PR description
When updating group(s) of a user, we search discuss channels with the same group for auto-subscription. To do this, we need to pass a list of groups of the user to match against channels. Previously, we extracted the new groups from the commands, added them to a list, and then appended their implied groups to it. This caused duplication because the implied groups already include the original groups. This commit fixes the issue by overwriting the list instead of appending to it. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Features or functions removed from Odoo
This update removes unnecessary debugging code from the Point of Sale (POS) module, specifically within the Urban Piper integration. This cleanup improves the stability and performance of the POS system by eliminating extraneous logging that could potentially impact speed or cause errors. The change is a routine maintenance task to ensure optimal system performance.
Original PR description
Following this commit: - remove t-debug="" task-5407001
Typing B) will now stay exactly as entered instead of being automatically changed into a sunglasses emoji. This prevents unintended changes to user messages or notes and helps preserve the user's original text.
Original PR description
Before this PR, typing `B)` was automatically converted into a 😎 emoji, which could unintentionally alter user input. This PR disables that conversion. task-[5221032](https://www.odoo.com/odoo/project/1519/tasks/5221032) Forward-Port-Of: odoo/odoo#242831
Long email template content in message threads now stays contained within the message bubble instead of spilling into the page. Users can scroll within the message content, keeping sales and communication screens easier to read and use.
Original PR description
Current behavior before PR: When the email template (message_type = `comment`) has content that is longer (in width), the content tends to overflow out of the bubble which breaks the UI. Desired behavior after PR is merged: This commit fixes the issue by making the content scrollable inside the bubble. Task-5363388 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237878
This fix prevents the HTML editor from showing an error when pasted content is fully removed during cleanup, such as pasting only a line break. It also guards against rare cases where the editor selection points to content that is no longer available, improving editing reliability.
Original PR description
During an `DomPlugin.insert`, the inserted content is added. Then some transformations are applied to clean up, including the removal of some nodes which are inventoried into `candidatesForRemoval`,…
During an `DomPlugin.insert`, the inserted content is added. Then some transformations are applied to clean up, including the removal of some nodes which are inventoried into `candidatesForRemoval`, and some specific `<br>` nodes. Ultimately, the selection is set after the last inserted node. In some cases, none of the inserted content remains after the clean up. When this happens, the selection is being set after the last inserted node, which is not part of the DOM anymore, and therefore leads to an error. This commit prevents this from happening by detecting when all inserted content was actually already removed. Steps to reproduce: - In a plain web page, copy a <br> into the clipboard - In an editor, put a character on a line - Paste => An error popup was displayed task-5429909 [FIX] html_editor: avoid failing when selection nodes are disconnected This commit addresses a traceback that was spotted but for which the actual scenario remains undetermined. The only possible way this traceback may occur is if nodes inside a selection are disconnected. The test added by this commit produces the same traceback as the observed one. task-5429909 Forward-Port-Of: odoo/odoo#242488
This fixes an issue in the Danish Nemhandel invoicing flow where a timeout could cause an unexpected error screen instead of being handled properly. Users should now get a more reliable experience when sending invoices, even if the external service does not respond in time.
Original PR description
In case of timeout when sending an invoice there is a traceback due to the following error. ``` AttributeError: 'UserError' object has no attribute 'message' ``` It is fixed in this commit. task-None Forward-Port-Of: odoo/odoo#242811
This fix prevents HTML fields from crashing when browser input tools send incomplete keyboard events, such as when entering Arabic numbers with Google Input Tool. Users can continue editing HTML content normally with these input tools, improving reliability for multilingual data entry.
Original PR description
Problem: When using Google Input Tool, typing Arabic numbers causes a traceback in HTML fields. Cause: The tool triggers a fake `keydown` event without the `key` attribute. This is failing before c10fd06320b013057831a6a46b2922b5386b71ef. Solution: Explicitly check that the `key` attribute exists on the event before using it. Steps to reproduce: - Install Google Input Tool in your browser. - Open any HTML field. - Add any character using the extension. - Observe a traceback. opw-5447680 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242498
This update ensures the Helpdesk dashboard's styling is consistent with other Odoo dashboards. Specifically, the conditional formatting for the Top Customers pivot has been extended to include all rows, and border styles have been aligned. This improves the overall visual appearance and user experience.
Original PR description
## Description - The Top Customers pivot shows 10 rows, but the conditional format covered only 9. Extend the CF range so the last row is formatted. - Adjust border ranges so the helpdesk dashboard matches the styling used in other dashboards. Task: [5448434](https://www.odoo.com/odoo/project/2328/tasks/5448434) Forward-Port-Of: odoo/enterprise#103019
This update fixes a visual issue in the Barcode app where summary lines appeared in light colors when Dark Mode was enabled. The fix utilizes dynamic color variables to ensure summary lines correctly adapt to the user's chosen theme, improving the user experience across different settings. This ensures consistent and professional appearance regardless of the user's preference for dark or light mode.
Original PR description
## Issue In the Barcode app (`stock_barcode`), the summary line appears in its light color scheme, even if the user is using dark mode. <img width="1914" height="989" alt="before"…
## Issue In the Barcode app (`stock_barcode`), the summary line appears in its light color scheme, even if the user is using dark mode. <img width="1914" height="989" alt="before" src="https://github.com/user-attachments/assets/39f47454-6dc5-4fe6-927d-8ebc984b13b7" /> ## Cause The `background` property was set to a constant (light) color. ## Steps to reproduce 1. Install the Barcode (`stock_barcode`) and Purchase (`purchase`) apps. 2. In Inventory / Configuration / Settings, enable *Lots & Serial Numbers*. 3. Turn on Dark Mode by clicking in the upper-right corner and toggling *"Dark Mode"* 3. Create a product tracked *By Unique Serial Number*. 4. Create a Purchase Order for the product created in step 3 with a quantity greater or equal than 2, then click *Confirm*. 5. Go to the Barcode app, click *Operations*, then *Receipts*, and select the picking created from the PO. 6. The summary line appears in white (or light blue when selecting it). ## Solution We can use variables instead of constant colors. The `--list-group-bg` variable holds a different color depending on whether the line is selected, faulty, or completed. https://github.com/odoo/enterprise/blob/999009c859a1fb8e244f754a530fe39d71ede506/stock_barcode/static/src/components/line.scss#L27-L47 ## After this commit <img width="1912" height="983" alt="after" src="https://github.com/user-attachments/assets/899366fc-0290-42e8-9c50-fd3298e262d6" /> opw-5364654 Forward-Port-Of: odoo/enterprise#102270