Saturday, March 14, 2026
27 changes · saas-19.2
New functionality added to Odoo
This update incorporates the National Bank of Georgia (NBG) as a source for automatic currency rates. This is required to comply with Georgian tax regulations, ensuring all transactions are accurately translated into Georgian Lari (GEL) using the official exchange rate. This change improves compliance and reporting accuracy for transactions in Georgia.
Original PR description
This commit adds the National Bank of Georgia (NBG) as a supported service provider for automatic currency rate updates. Purpose: To comply with the Georgian Tax Code (Article 73), taxable transactions must be translated into the national currency (GEL) using the official exchange rate defined by the NBG for the transaction day. Functionality: -Enables fetching official exchange rates directly from NBG. -Automatically handles rates defined for different quantities (e.g, rates quoted per 100 units instead of 1 unit). task-5894623 Forward-Port-Of: odoo/enterprise#107375
Enhancements to existing features
This update ensures Odoo’s accounting system aligns with the latest Peppol codelist version 9.5. This is a necessary step to comply with evolving European regulations for electronic invoicing and improve data exchange with trading partners using the Peppol network.
Original PR description
A new version of codelist (v9.5) has been released. This commit aligns the Peppol EAS field selection with the Peppol codelist v9.5 See the changelog here : https://docs.peppol.eu/edelivery/codelists/changelog.html Updates applied according to the official v9.5 changes. task-5461213 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243990
Resolved issues and error corrections
This update corrects a recent change that was causing incorrect time formatting in the attendance list. The systray button for attendance has been moved to the right for improved display, and demo data has been adjusted to accurately reflect timesheet durations. This ensures accurate attendance tracking and reporting.
Original PR description
Task-5956044
This update corrects a reporting issue where Odoo's code analysis tool (cloc) incorrectly counted installed design themes as custom modules. Removing a specific module that previously handled this exclusion has resulted in themes being included in the analysis. A new 'test_themes' module has been implemented to address this and ensure accurate code reporting.
Original PR description
In saas-19.2 the module theme_common was remove, this module was use by the cloc to ignore the addons in the same folder. Since it has been remove, all the themes installed count as custom modules. Of course we want to avoid that, so we need a new beacon modules: test_themes sounds good. opw: 6036549, 6035869, 6035726, 6035293, 6031718, .... --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When a bill import fails, Odoo now displays a clearer message in the chat indicating an error occurred and attaching the original XML file. This prevents confusion for users and provides more information for troubleshooting failed imports, particularly those from Peppol.
Original PR description
When a bill import (including Peppol) fails, an empty bill is created with the XML attached in the chatter, which can be confusing for users. This commit adds a clearer chatter message indicating that an error occurred and that the incoming XML is attached. task-5932172 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250586
This update fixes a minor visual issue where the down payment percentage in sale orders displayed a slight floating-point inaccuracy. The fix ensures that the percentage is rounded correctly, providing a more precise and professional display for users. This improves the user experience when processing payments.
Original PR description
Issue: --- Due to this issue, a small floating point is shown in down payment percentage of a sale order. Steps to reproduce: --- 1- Create a sale order with lines. 2- From `other info` tab, uncheck `online signature` and check `online payment`, and set it to 14 percent. 3- Click on preview. 4- Click on `Accept & Pay`. The percentage shown is `14.000000000000002`, which is unexpected. Fix: --- By setting the percentage as `float` widget it will be rounded properly: https://github.com/odoo/odoo/blob/0fe2023dc57b6cc02bd399d3c8fc5d6c8ed6e833/odoo/addons/base/models/ir_qweb_fields.py#L185-L208 opw-5975047 Forward-Port-Of: odoo/odoo#253205 Forward-Port-Of: odoo/odoo#252169
This update resolves a display issue where the 'Threads' popover in the Discuss app was unexpectedly wide. The fix adjusts the popover's styling to ensure it has a consistent, limited width, and allows content to scroll if needed. This improves the overall user experience for this key feature.
Original PR description
Before this commit, the "Threads" action in Discuss app had its popover width that would take the browser width. This happens because, althought there's a classname to limit its size…
Before this commit, the "Threads" action in Discuss app had its popover width that would take the browser width. This happens because, althought there's a classname to limit its size (`o-mail-Discuss-threadActionPopover`), this was applied on a part of popover and was ignored due to `mw-100 w-100`. This commit fixes the issue by replacing the classname `.o-mail-Discuss-threadActionPopover` with 2 CSS rules for all action panels in popover: ``` .popover:has(ActionPanel) => max-width .popover .ActionPanel-content => max-height ``` These 2 rules handle popover sizing as desired: fixed width for all these popovers, and max-height on the content part of the action panel. This fixes the problem of limited width for both 'Threads' and 'Invite People' popovers, in addition to handle scrollable content thanks to max-height. Before / After <img width="911" height="384" alt="Screenshot 2026-03-10 at 16 12 23" src="https://github.com/user-attachments/assets/f4b77fdb-f946-4d71-904a-d0b273fbe955" /> <img width="915" height="398" alt="Screenshot 2026-03-10 at 16 12 10" src="https://github.com/user-attachments/assets/b2e461e7-a39a-4698-bae0-421d9d87eccb" /> Forward-Port-Of: odoo/odoo#253437 Forward-Port-Of: odoo/odoo#253100
This update resolves an issue where users without write access to product templates couldn't print labels. The change adjusts how access rights are checked, now permitting label printing for users with read-only permissions. This ensures all users can utilize the product label printing feature.
Original PR description
## Issue Users who do not have the "write" right access on `product.template` cannot print product labels. ## Steps to reproduce 1. Install *Sales* (`sale_management`) 2. In Settings > User &…
## Issue Users who do not have the "write" right access on `product.template` cannot print product labels. ## Steps to reproduce 1. Install *Sales* (`sale_management`) 2. In Settings > User & Companies > Users, make sure Marc Demo does not have any write access on `product.template` 3. Log in as Marc Demo 4. In Sales > Products > Products, open a product and click *Print Labels* from the cogwheel menu 5. **An Access Error is shown, saying that the operation is allowed for the `Products/Create` group.** ## Cause [This commit](https://github.com/odoo/odoo/commit/95ace0a694eaf83329b50e6b89f774f0c59fec5e) removed Products-related rights from the `base.group_user`. This made a difference in terms of access rights, as the `IrActionServe.run` method checks for the "write" access by calling `_can_execute_action_on_records`: https://github.com/odoo/odoo/blob/d15685304f479541879fabd55ea1cae4252a2a90/odoo/addons/base/models/ir_actions.py#L1230-L1239 When a `group_ids` field is added to the action, this check is no longer performed. opw-5914988 Forward-Port-Of: odoo/odoo#248672
This update removes a temporary feature that automatically disabled longpolling after device connection errors. Previously, the system would wait 5 minutes before switching to WebSocket. Now, with the recommended LNA setup, the system assumes a correctly configured network and automatically recovers from errors, improving reliability.
Original PR description
We used to disable longpolling for 5 min after a failure, in order not to lose time while making requests to an unreachable device, and jump directly to WebSocket. As we now recommand using LNA, clients should have a correctly configured network: if an error occurs the next one should work correctly. We then removed the longpolling auto disable feature. Forward-Port-Of: odoo/enterprise#108778 Forward-Port-Of: odoo/enterprise#108335
This update corrects a naming inconsistency within the HR Payroll module. The template's name was previously set to a subdirectory, which has now been updated to align with standard Odoo module naming conventions. This ensures better organization and clarity within the system.
Original PR description
Currently in hr_payroll, the template name is set as l10n_be_hr_payroll.DropdownSelectionBadge. Generally, it should follow the module name. Therefore, in this commit, I replaced l10n_be_hr_payroll with hr_payroll Forward-Port-Of: odoo/enterprise#110243
This update fixes an issue where the system couldn't correctly process invoices with embedded PDFs (like Peppol invoices). The change ensures that thumbnails are generated properly for these types of attachments, improving the visual representation of invoices within the system. This enhances the user experience when viewing and managing invoices.
Original PR description
The pdf_first_page route failed when called on non-PDF attachments that contain an embedded PDF (e.g. XML invoices generated via Peppol). This fix makes the route correctly extract and process the embedded PDF, allowing proper thumbnail generation in those cases. task-5246989 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251260 Forward-Port-Of: odoo/odoo#236864
This update fixes a display issue with XML invoices received through Peppol. Previously, the preview page showed unnecessary information, preventing thumbnail generation. Now, thumbnails are correctly displayed for these invoices, improving the user experience and ensuring proper invoice viewing.
Original PR description
Before this commit: - The preview page of XML invoices received via Peppol was split into two parts: one showing the PDF preview, and another showing the plain HTML of the PDF viewer page - Thumbnail were not generated for these XML invoices After the commit: - The second part of the preview (Text part) was removed. As the users won't be interested to see the raw XML content of the invoice, neither the plain HTML of the pdf preview page. - Thumbnails now are correctly generated for the XML invoices. Notes: This fix is part of the bug-fix task to ensure users can correctly open XML invoices received via Peppol. task-5246989 --- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#109100 Forward-Port-Of: odoo/enterprise#100137
This update addresses an issue where the Odoo upgrade process was creating unnecessary data in the system's registry. Specifically, custom models were being repeatedly processed during upgrades, leading to performance slowdowns. This change ensures a more stable and efficient upgrade experience.
Original PR description
During upgrades we observed an uncontrolled growth of the mappings `field_depends` and `field_depends_context` in the registry. The Field instances that serve as keys are duplicated for custom models. This comes from the fact that custom models are completely reloaded during registry setup, even incremental setup. To avoid duplication we consider custom models to be re-setup, which they actually are.
Co-authored-by: Raphael Collet <rco@odoo.com>
Co-authored-by: Xavier Dollé (xdo) <xdo@odoo.com>
Forward-Port-Of: odoo/odoo#253377This update resolves a potential error in the HTML Builder component that could occur when asynchronous operations complete in a changed context. The fix ensures that the builder gracefully handles situations where the underlying component or related elements are no longer available, preventing unexpected errors and improving overall stability. This enhances the reliability of dynamic content generation.
Original PR description
[FIX] html_builder: make async useDomState robust to destroyed context Option components may define an asynchronous `useDomState`. When the asynchronous part of the callback resolves, the execution context may no longer be valid. For example, the editing element, iframe, or even the component itself may have been destroyed in the meantime. This change ensures that async `useDomState` handlers safely abort when their context is no longer available, preventing unnecessary errors from being thrown. task-6003213 Forward-Port-Of: odoo/odoo#252998 Forward-Port-Of: odoo/odoo#251931
This update fixes a potential issue with how Odoo handles WebSocket sessions when a connection closes. Previously, session rotation wasn't correctly disabled for the '/websocket/on_closed' route, which could lead to unexpected behavior. This change ensures session rotation is properly disabled in this scenario, improving stability and reliability of the WebSocket connection.
Original PR description
In [1], session rotation was disabled for websocket routes. However, the `/websocket/on_closed` route was forgotten. This commit ensures session rotation is also disabled for this route. [1]: https://github.com/odoo/odoo/pull/250826 opw-5445323 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#253766 Forward-Port-Of: odoo/odoo#253615
A bug was preventing users from deleting files when pressing the backspace key within the HTML editor. This update corrects a technical issue related to how the HTML editor's deletion functionality interacts with editable elements. The fix ensures files can now be properly removed.
Original PR description
Steps to reproduce: =================== 1- Go to website & add a file using /file or /upload file 2- Click on the file box and press backspace -> Nothing happens. Cause: ====== After this commit [1], `is_node_editable_predicates` was added to prevent color from being applied to the file box so when removing the file box, The delete plugin's removeNode checks `isNodeEditable(node)` which returns false for the file box and thus prevents it from being removed. Solution: ========= a non-editable node that sits inside an editable parent should still be removable so now : node is not removable if !isNodeEditable(node) & its parent is also not contentEditable [1]: https://github.com/odoo/odoo/pull/226927/changes/7f4eedd76c833f3a162070563f3982a1fbdb77c7 opw-5995236 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252764
This update fixes a technical issue where archiving a product linked to an open restaurant order caused a 'TB' error in the POS. Previously, archiving a product associated with a future order also triggered this error. This change ensures a smoother POS experience by correctly handling product archiving scenarios.
Original PR description
When we archived a product which was in a open order not already synced with the backend, when we went back to the POS, a TB appeared. In the same way, if we had an order in the future with a product and we closed the POS, archive the product and went back to the POS, the same TB appeared. task: 6002762 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252796 Forward-Port-Of: odoo/odoo#252211
This update prevents an infinite loop in the credit note claim status polling process. The fix restricts the cron job to only process invoices, addressing a technical issue where credit notes were incorrectly polled, leading to unnecessary processing and potential delays. This improves system stability and efficiency.
Original PR description
Claimed credit notes (DTE 61) were being polled indefinitely by the _l10n_cl_ask_claim_status cron. The SII endpoint listarEventosHistDoc does not support DTE 61 and always returns codResp 3 "Tipo de…
Claimed credit notes (DTE 61) were being polled indefinitely by the _l10n_cl_ask_claim_status cron. The SII endpoint listarEventosHistDoc does not support DTE 61 and always returns codResp 3 "Tipo de documento no corresponde". Since the response never contains event data, l10n_cl_claim is never set, the record permanently matches the cron domain, and polling repeats every 4 hours forever. Root cause: the cron domain included out_refund move types, but the SII endpoint used to fetch claim events does not support credit note document types. There is no point querying the SII for claim details on credit notes through this endpoint. Fix: restrict the cron domain to out_invoice only Before: claimed credit notes matched the cron domain, _get_dte_claim was called on every run, SII returned codResp 3, l10n_cl_claim stayed False, record never exited the domain. After: credit notes are excluded from the cron domain entirely and are never polled, stopping the infinite loop. opw-5933833 Forward-Port-Of: odoo/enterprise#109995
This update fixes an issue where 'ship later' orders were incorrectly showing a zero total cost due to stock valuation delays. The fix now uses the product's standard price when stock hasn't been valued, ensuring accurate order costing and preventing incorrect calculations for FIFO/AVCO order types. This improves the reliability of pricing and reporting for these orders.
Original PR description
When "ship later" is selected, stock moves are created at order time but not yet valued. This caused `_compute_total_cost` to set `total_cost = 0` for FIFO/AVCO order lines because `_get_price_unit()` returns 0 on unvalued moves, and the existing fallback to the refunded line's cost only covered the refund case. Fix by also falling back to `product.standard_price` when the move cost is zero, `shipping_date` is set, and the line is not a refund. opw-5997872 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#251799
This update ensures that refunds processed through the backend of Odoo now accurately reflect the positive price shown in the user interface. Previously, refunds created through the backend had incorrect negative pricing, leading to discrepancies. This fix standardizes the refund display across all channels for improved accuracy and consistency.
Original PR description
Before this commit, when creating a refund from backend, the refunded lines had negative price, which is not the case when creating a refund from the UI. This commit makes sure that the refunded lines have positive price. opw-5459378 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249548
When `selection` is a recordset, `==` is an unsupported operand type Forward-Port-Of: odoo/odoo#253661
Original PR description
When `selection` is a recordset, `==` is an unsupported operand type Forward-Port-Of: odoo/odoo#253661
This update restores a previous implementation of the static file box within the Knowledge articles module. This change resolves a printing issue that was occurring with wkhtmltopdf, ensuring that knowledge articles can now be correctly printed. The fix was necessary after a previous update introduced a problem.
Original PR description
### Purpose of this PR: - Restore the static file box implementation and drop the embedded component, as it breaks printing with wkhtmltopdf. - The original issue with the static file box was fixed in [#241591](https://github.com/odoo/odoo/pull/241591) Reverts: https://github.com/odoo/enterprise/pull/88929 community: https://github.com/odoo/odoo/pull/251098 Forward-Port-Of: odoo/enterprise#109376 Forward-Port-Of: odoo/enterprise#108999
This update enhances the 'My Team' filter in Odoo's Live Chat reports. It now accurately includes not just the current user's chat records, but also those of their direct managers, providing a more complete view of team activity. This ensures reporting is more comprehensive and reliable.
Original PR description
Replace the department-based domain with a hierarchy-based domain in livechat reports. The new filter includes the current user's records and the records of employees whose manager is the current user. task-6030147 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#253567
This update resolves an issue where a key field wasn't properly loaded in the point-of-sale system. By adding this field, the system now functions correctly, ensuring accurate data and improved performance for point-of-sale operations. This change enhances the overall reliability of the POS module.
Original PR description
Before this commit, the field iface_fiscal_data_module was not loaded in the pos_self_data, which caused it to be unavailable in the js side of the pos. This commit adds the field to the list of loaded fields, making it available for use in the js code. opw-6034196 Forward-Port-Of: odoo/enterprise#110519
This update corrects a minor visual issue with the Odoo menu toggle. Previously, some browsers would display a broken or incomplete arrow due to a missing unit in the CSS. This change ensures the arrow appears correctly and consistently across all browsers, improving the overall user experience.
Original PR description
Before this commit, some browsers showed a warning or, even worse, dropped this CSS rule because the unit was missing. This line ensures that the tip of the arrow is rounded instead of truncated. 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#253557
This update fixes a problem in the Invoicing Dashboard where the date fields weren't correctly matching invoice data. The change ensures the dashboard uses 'Invoice Date' for matching, which is the most accurate field for this dashboard. This improvement was made after a previous deletion was corrected.
Original PR description
The Date field matching is wrong. Since we are in an Invoicing Dashboard, the best field to match would be "Invoice Date" anyway rather than "Date" Other field matchings were deleted by mistake with commit c6ad6e87bd0d1c64f7a983f9b067b9e460cb998a reported by LUVG opw-5462246 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#244285
This update resolves an error preventing users from applying the 'My Department' filter in the Time Off module. The issue stemmed from insufficient permissions to access a specific data field within employee records. This fix ensures the filter functions correctly for all users, improving usability.
Original PR description
Steps to reproduce: 1- Install Time off app with demo data 2- Log in as Marc Demo 3- Go to Time Off > Overview 4- Enable My Department filter Issue: An access error is raised because of not having enough rights to access the field version_id on hr.employee. task-5948520 Forward-Port-Of: odoo/odoo#249237