Friday, January 9, 2026
22 changes · saas-18.4
Enhancements to existing features
French accounting reports now ensure MOA amounts are shown as positive whole numbers. This helps keep tax report figures consistent and avoids confusing negative or empty calculated values.
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 chart of accounts for Odoo's Vietnamese localization to comply with new accounting regulations (Circular 99/2025). This change is necessary to ensure accurate financial reporting starting in January 2026, aligning with current Vietnamese accounting standards.
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#103769 Forward-Port-Of: odoo/enterprise#102843
Resolved issues and error corrections
Corrected duplicated and inaccurate Brazilian tax names and labels, including Portuguese translations. This prevents failures when loading the Brazil chart of accounts for a new company and makes tax descriptions clearer for users.
Original PR description
In 17.0, some taxes have had their incorrect name for the cashback taxes. This renames the invoice_label and name fields of such taxes to better represent what they are as well as add portuguese translations where necessary. task-5470453 Forward-Port-Of: odoo/odoo#242747 Forward-Port-Of: odoo/odoo#242446
Features or functions removed from Odoo
This update removes outdated configuration settings from tests related to the CO Dian localization module. These settings were no longer needed after the saas-18.4 release and were causing unnecessary complexity in the test suite. This cleanup improves test efficiency and maintainability.
Original PR description
The configuration parameter `account_edi_ubl_cii.use_new_dict_to_xml_helpers` was removed in saas-18.4. However, this parameter was still being set in various tests across `account_edi_ubl_cii`, `l10n_account_edi_ubl_cii_tests`, `l10n_hr_edi`, and `l10n_co_dian`. This commit removes these unnecessary configuration lines to clean up the tests. Related PR : https://github.com/odoo/odoo/pull/242749
This fix prevents an unexpected error screen when a Danish Nemhandel invoice submission times out. Users will now get the intended business error handling instead of a confusing system traceback, improving reliability during invoice sending.
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 update removes references to an outdated configuration setting from electronic invoicing tests. It helps keep the test suite aligned with the current system version and reduces maintenance noise, with no expected impact on day-to-day users.
Original PR description
The configuration parameter `account_edi_ubl_cii.use_new_dict_to_xml_helpers` was removed in saas-18.4. However, this parameter was still being set in various tests across `account_edi_ubl_cii`, `l10n_account_edi_ubl_cii_tests`, `l10n_hr_edi`, and `l10n_co_dian`. This commit removes these unnecessary configuration lines to clean up the tests. Related PR : https://github.com/odoo/enterprise/pull/103766
Typing `B)` will now remain as written instead of being automatically changed into a sunglasses emoji. This preserves user input more accurately and avoids accidental changes in messages or text fields.
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
PDF reports now keep long company taglines within the report header instead of pushing address details out of view. This makes the PDF output match the preview more reliably and prevents important company information from being misplaced.
Original PR description
In the report when a company_tagline is long it offsets the address outside of the visible area but only in PDF. This creates a mismatch between the preview and the PDF rendering, creating unpredictable behavior. Adding a width ensures the tagline wraps instead of pushing the address out. task-5367661 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#238110
The Point of Sale optional products popup now allows the Add button to adjust its width for longer translations. This keeps the button readable in languages such as German, improving the checkout experience for multilingual users.
Original PR description
**Steps to reproduce:** - Make a product that has some optional products - Switch the language to German - Open the PoS and order the product - The "+ Add" button will be cut and not shown correctly **Why the fix:** Whenever the translation for "Add" was too long, it didn't fit in the button anymore and was unreadable. We now changed the width of the button to be flexible as to accept longer words. opw-5385398 Forward-Port-Of: odoo/odoo#240698
This fix makes automated tests for website image editing wait until the editing sidebar is fully ready before checking its options. It reduces intermittent test failures, helping keep website editing quality checks stable without changing end-user behavior.
Original PR description
Image edit tests using the builder sidebar were failing intermittently because image elements rely on async actions with non-deterministic timing, causing the sidebar options to be unavailable sometimes. Use `waitSidebarUpdated` to ensure the sidebar is fully updated before asserting on its content. Here is an example of an error: error-234951 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
The attendance feature now reuses its standard location helper, which can rely on GeoIP data when available. This reduces unnecessary map service requests, improving reliability and reducing external lookup usage without changing the employee experience.
Original PR description
Backport of #243117
Applicant matching and application counts now use the same criteria in multi-company setups. This helps recruiters see consistent counts when identifying similar applications across companies.
Original PR description
This commit fixes the issue where applications are not matched are not mathced with thier count among companies in a multi-company environment. The domain on company was removed from `_get_similar_applicants_domain` since there is no domain on company in `_compute_application_count`. task-5375876 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update prevents unnecessary email reminders for timesheet approvals. The system now only sends reminders when there are actual timesheets needing approval, ensuring users aren't overwhelmed with notifications. This change optimizes the approval workflow and reduces email clutter.
Original PR description
prevent cron from sending approver reminder if no timesheet assigned to approver Send the reminder email if: - there are timesheets to validate - AND if the user is set as either the manager or timesheet approver of an employee with timesheets left to be validated - OR if the said employee has no manager or timesheet approver set Task-3624610 Forward-Port-Of: odoo/enterprise#102860 Forward-Port-Of: odoo/enterprise#52355
This update fixes an issue where the summary lines in the Barcode app appeared in light colors when Dark Mode was enabled. The fix uses dynamic color variables to ensure the summary lines correctly adapt to the user's chosen theme, improving the user experience across different settings. This ensures consistent visual presentation regardless of the user's preferred dark mode setting.
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
This update fixes a UI issue where long email messages would overflow the message bubble, causing a broken display. The change makes email content scrollable within the bubble, ensuring a consistently readable experience for users sending and receiving messages. This improves usability for the subscription module.
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#242934 Forward-Port-Of: odoo/odoo#237878
This update fixes an issue where refund alerts were incorrectly triggered due to rounding differences in order totals. The change ensures that the system accurately compares refund amounts to order totals, preventing false alerts and improving the reliability of the Point of Sale system. This ensures accurate financial reporting and reduces potential customer service issues.
Original PR description
Before this commit, if the total amount of the order had rounding differences compared to the sum of its lines, the system could incorrectly trigger an alert stating that the refund amount exceeds the original order amount. This was due to a direct comparison between the two amounts without considering potential rounding issues. opw-5402240 Forward-Port-Of: odoo/enterprise#103551 Forward-Port-Of: odoo/enterprise#102224
This update corrects a technical issue where the IoT test button incorrectly reported successful connections even when errors occurred (like timeouts or other websocket problems). By standardizing the data format and adding timeout checks, the button now accurately reflects the true status of the IoT device, improving reliability.
Original PR description
This commit fixes several situations where a positive status would be given by the test button despite the presence of an error: - If the websocket connection was used but there was a timeout - If the websocket connection was used but there was any other error - If any 6-digit error code was returned when using the stable IoT box To fix these issues, we stop using the `data['message']` field, since it gets ignored by the websocket confirmation controller. We now use the same result format as the other requests (and the stable IoT box). We also add a check for the `"timeout"` that we receive when a websocket request times out.
This update resolves a technical issue where order completion with UrbanPiper resulted in an 'undefined street' error. The fix ensures the system correctly checks if a customer is assigned before completing the order, preventing this error and allowing users to successfully mark orders as ready and print receipts.
Original PR description
Steps to produce: ==== - Place an online delivery order through urbanpiper - Edit the order and remove customer - Complete the order as Marks as Ready - Print Reciept Issue: ==== - TB occurs stating undefined street Fix: ==== - Check whether partner is assigned or not task-5407001 Forward-Port-Of: odoo/enterprise#103633 Forward-Port-Of: odoo/enterprise#102100
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#103284 Forward-Port-Of: odoo/enterprise#103019
This update resolves an issue where read-only accounting users couldn't access customer statements. The fix corrects a restriction in the system that previously limited button visibility to 'Invoicing' users, ensuring all authorized users can now view customer statements. This improves usability for a wider range of users.
Original PR description
Steps to reproduce: - Have a user with Accounting rights set to 'Read-only' - Login with the user - Open customer record - Button 'Customer Statement' won't be there Analysis: This occurs because we restrict the button visibility to 'Invoicing' users, even if all fields and views are accessible also for 'Read-only' users. opw-5357692 Forward-Port-Of: odoo/enterprise#103148 Forward-Port-Of: odoo/enterprise#102683
This update resolves a technical issue that caused a traceback when users accessed the bank reconciliation popover in debug mode, specifically when reconciling statements with invoices in different currencies. The fix ensures the popover component receives the correct data, improving stability and usability for users.
Original PR description
In Bank reconciliation widget, when reconciling a statement with a move in different currency, users may display a popover to access some reconciliation info. Currently, accessing this component in debug mode may raise a traceback. Steps to reproduce: - Have a Bank statement in company currency - Reconcile with an invoice in foreign currency - Go in debug mode - From the reconciliation widget, locate the reconciled bank statement - Click on the reconciled bank statement popover button Issue: Traceback is shown `OwlError: Invalid props for component 'BankRecLineInfoPopOver': 'exchangeMove' is not a object` It occurs because props validation of the Owl component will fail BankRecLineInfoPopOver opw-5355964 Forward-Port-Of: odoo/enterprise#103731
This update fixes an issue where the 'Out of Contract' duration was incorrectly calculated, leading to inaccurate reporting of employee contract overlap with payslips. The change ensures that contract overlap dates are accurately limited to the payslip period, improving payroll accuracy and reporting.
Original PR description
Steps to Reproduce: 1. Create a contract ending early in the year (e.g., February). 2. Compute a payslip for a much later period (e.g., November). 3. The "Out of Contract" line shows an excessive number of days (counting from Feb to Nov). Reason: - If a contract ends before the payslip period, it adds all days from the end of the contract until the end of the payslip period as "Out of Contract", ignoring the payslip start date. - If a contract starts after the payslip period, it adds all days from the payslip start date until the contract start date, ignoring the payslip end date. Solution: Constrain the calculated "Out of Contract" dates using `max()` and `min()` to ensure they never exceed the payslip's `date_from` and `date_to`. Task: 5350519 Forward-Port-Of: odoo/enterprise#103500 Forward-Port-Of: odoo/enterprise#100700