Wednesday, January 7, 2026
30 changes · saas-18.3
Resolved issues and error corrections
This update corrects a bug in the l10n_vn_edi_viettel module that prevented the creation of invoices with very high exchange rates (like those involving USD). The fix rounds exchange rates to two decimal places, aligning with documentation requirements and ensuring invoices can be properly processed. This resolves an issue that could have caused invoice creation failures.
Original PR description
* STEP TO REPRODUCE: create USD invoice to issue sinvoice, have currency rate like 26337.9186666777 , when issue we will get error because too many decimal * SOLUTION: round exchange rate up to 2 decimal because documentation said that is maximum 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#241061
This update resolves an issue where deleting 'Booking Fees' products caused an access error. The fix ensures the system can always access these products, regardless of the currently selected company, preventing disruptions to the appointment scheduling process. This improves stability and usability.
Original PR description
**Steps to produce:** - Install `appointment_account_payment` and `l10n_be` with demo data. - Go to product `Booking Fees` and assign company `YourCompany`. - Switch the current company to `Belgium Company`. - Try to delete any product. **Issue:** - An access error is raised when deleting a product. **Root cause:** - During product deletion, method `_unlink_except_booking_fee_product_template` is executed [1]. - If the 'Booking Fees' product is assigned to another company, the current company cannot access its record, which triggers an access error. **Solution:** - Use `sudo()` when fetching the "Booking Fees" product template so that the record can be accessed regardless of the current company. [1]: https://github.com/odoo/enterprise/blob/0ba44def7fd961e1c17aa218e1a86a48f0918371/appointment_account_payment/models/product_template.py#L9-L15 opw-5255991 --- Forward-Port-Of: odoo/enterprise#101582
This update simplifies bank reconciliation by preventing the creation of duplicate bank accounts when using the reconciliation widget. It ensures that existing account numbers are not duplicated, reducing confusion and improving data accuracy within the system. This change is specifically focused on the reconciliation process and does not impact other bank account management features.
Original PR description
When using the bank reconciliation widget, avoid creating a new bank account on the selected partner if the same account number already exists on another active partner. This change is intentionally limited to the reconciliation flow only, to reduce noise caused by duplicate bank accounts, and does not affect other partner or bank account creation use cases. task- 5236503 Forward-Port-Of: odoo/odoo#234531
This update corrects an issue with how Odoo sends electronic invoices to the Taiwanese tax authority (ECPay). The change removes the company name from the EDI address and formats the address as a comma-separated line, ensuring compliance with tax regulations. This ensures accurate and timely invoice submissions, avoiding potential delays or errors.
Original PR description
In this commit: --- Update EDI address formatting to remove the company name and send a comma-separated single-line address. task-5410619 Forward-Port-Of: odoo/odoo#241964 Forward-Port-Of: odoo/odoo#241108
This update ensures that the accounting application doesn't automatically contact our external Odoo Fin server when opened. Previously, displaying favorite institutions in the accounting dashboard triggered a call to production.odoofin.com. This fix uses a mock to prevent unnecessary external requests, improving efficiency and reducing potential load on the Odoo Fin service.
Original PR description
The aim of this commit is making sure that the click all won't try to contact our external server odoo fin when the accounting application is opened. Indeed, the accounting application is displaying the favorite institutions for a particular country in the accounting dashboard which is doing a call to production.odoofin.com. This commit adds a mock using _request_handler to patch the call to odoo fin. runbot-error-231151 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223602
This update fixes an issue where the "Add" button in the Point of Sale (PoS) interface was cut off when using the German language due to long translations. The fix increased the button's width to accommodate longer words, ensuring the button remains fully visible and readable for all 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
This update resolves a validation error that occurred when creating new leave requests in the l10n_fr_hr_holidays module. The issue stemmed from incorrect default settings in the company's time off configuration, specifically a missing reference to the correct leave type. This change ensures proper validation and functionality for new leave requests.
Original PR description
**Steps to reproduce:** - Install l10n_fr_hr_holidays module. - Go to Time Off > Configuration > Settings. - Company Paid Time Off field should blank. - Employee `resource_calendar_id` is not same as company's. - Create new leave > a validation error will occur. **Cause:** - The demo data for 'res.company' did not correctly set the `l10n_fr_reference_leave_type` field. - 'l10n_fr_reference_leave_type' field should be required. **Fix:** - Updated demo record to correctly assign `l10n_fr_reference_leave_type` field. - Set the `l10n_fr_reference_leave_type` field as required. Task - 5139488 Forward-Port-Of: odoo/odoo#231385
This update resolves a problem preventing the correct display of KPD category lists within the HR module. The fix aligns the module's functionality with the latest version (19.0), ensuring accurate reporting and data processing related to KPD categories. This improves the reliability of HR data.
Original PR description
Fixing the loading error for KPD category list, consistent with 19.0 version of the module. runbot-237639 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242188
This update resolves a bug where image styles (like width and transform) were incorrectly applied to new media types after an image was replaced. Now, styles are properly removed when switching between image and other media types, ensuring consistent formatting within the HTML editor.
Original PR description
**Current behavior before PR:** - When an image had styles applied to it (such as transform or width) and was replaced with another media type like an icon or document, those styles were incorrectly carried over to the replaced media. **Desired behavior after PR is merged:** - Since transform and width styles are meant to apply only to images, they are now removed when an image is replaced with other media types. task-5373362 Forward-Port-Of: odoo/odoo#238319
This update corrects a visual issue with the carousel's indicators, specifically when using 'Numbers' as the indicator style. The previous design resulted in unreadable numbers and misaligned buttons. This fix ensures the indicators are correctly sized and colored, improving the overall user experience.
Original PR description
The css rules for indicators outside the carousel were not adapted for number indicators, and used the button color intended for dots and bar as background of the numbers, making them unreadable and…
The css rules for indicators outside the carousel were not adapted for number indicators, and used the button color intended for dots and bar as background of the numbers, making them unreadable and ugly. The height of the indicators when outside influences the margin needed to align the bottom of the prev/next buttons. That caused the bottom of the next/prev buttons to not reach the bottom of the slide with "Numbers" or "Hidden" as indicators. This commit adds the necessary css rules to correctly size and colors the number indicators (and the hidden one) when positioned outside. Steps to reproduce - Add a carousel - Set "Indicators" to "Numbers" - Set "Style" to "Indicators outside" - Bug: The colors are all wrong, we cannot see the numbers - Bug: The bottom of the previous/next buttons do not reach the bottom of the carousel - Set "Indicators" to "Hidden" - Bug: The bottom of the previous/next buttons is even further from the bottom of the carousel task- 5358507 Forward-Port-Of: odoo/odoo#237397
This update corrects a display issue where archived recurring plans continued to show up on the website product pages. The fix ensures that pricing is only displayed for active plans, improving the user experience and preventing outdated information from being shown. This improves the accuracy of product pricing displayed to customers.
Original PR description
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car…
**Steps to produce:** - Install `sale_subscription,website_sale` module. - `Subscription > Configuration > Recurring Plans`. - `Archive` the `Monthly` plan. - Go to website > Shop > Open product `Car Leasing (SUB)`. **Issue:** - Even after archiving the Monthly recurring plan, its pricing still appears on the website product page. **Root cause:** - At [1], when searching for a suitable recurring price, the system does not filter out pricing records belonging to archived recurring plans. - As a result, inactive plans are still considered during pricing selection. **Solution:** - In this fix, we ensure that recurring plan pricing is included only if the related plan is active. - Archived plans are now ignored, preventing them from appearing on the website. [1]: https://github.com/odoo/enterprise/blob/25edaac85f8fd1699bb78163b01efb966e7fb680/sale_subscription/models/sale_subscription_pricing.py#L78-L79 before <img width="340" height="184" alt="recurring_plan_before" src="https://github.com/user-attachments/assets/abac39fb-5765-4bc4-aec3-87eef7135a18" /> after <img width="337" height="168" alt="recurring_plan_after" src="https://github.com/user-attachments/assets/35ee92e8-e66b-4612-add3-58b277560ea5" /> **opw-5266333** Forward-Port-Of: odoo/enterprise#103223 Forward-Port-Of: odoo/enterprise#100587
This update resolves a duplication issue in the stream post dropdown menu, ensuring a consistent user experience across the 'social' and 'social_crm' modules. The fix also restores a key functionality related to button visibility for user-owned posts, maintaining proper editing and deletion controls.
Original PR description
Following https://github.com/odoo/enterprise/commit/c9ddf1c a new dropdown has been added to "social" to allow the edition and deletion of a social stream post. This new dropdown didn't take into account the one already existing in "social_crm" resulting in a duplicated dropdown menu. Fixing the issue by making sure the dropdown from "social_crm" is correctly extending the one from "social". As the "Create Lead" action is set above the "Edit" and "Delete" ones, making sure it's also the case for the stream post comments dropdown menu for consistency. Re-inserting the "is_author" field (removed here https://github.com/odoo/enterprise/pull/69650) in the kanban view to make sure the "Edit", "Delete" and "Create Lead" buttons visibility are correctly managed for your own posts. Task-5270180 Forward-Port-Of: odoo/enterprise#101679
This update resolves an issue where the pivot table export feature would fail when no data was provided. The system now returns a standard error message (422) to indicate invalid data, ensuring a smoother user experience and preventing unexpected errors during data exports.
Original PR description
Currently an exception is generated when controlled `/web/pivot/export_xlsx' tries to export xlsx with empty data. `KeyError: 'title'` This PR resolves the issue by raising an `UnprocessableEntity` exception when empty data is provided. The resulting 422 response indicates that the server understood the request and its syntax, but cannot process it because the data is invalid. sentry-6321555617 Forward-Port-Of: odoo/odoo#241415
This update fixes an issue where the floating order name in the restaurant POS system was incorrectly showing the POS reference instead of the tracking number. Now, the order name accurately reflects the tracking number, ensuring correct order identification and management for restaurant staff. This improves order clarity and accuracy.
Original PR description
Before this commit, when making a direct sale, the floating order name was the pos reference instead of the tracking number. This is now fixed. task-id: 5470874 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where recruitment officers couldn't move applicants to the qualified stage, causing errors in email notifications. The fix utilizes a temporary workaround to bypass access restrictions, ensuring that recruitment staff can correctly update applicant statuses without generating errors.
Original PR description
Problem: Recruitment officers don't have the rights to create `appointment.type` nor `appointment.interview`, Hence when they move an applicant to the qualified stage an error is raised during the rendering the body of the qweb mail template. Fix: Override the controller to use sudo and pybass the access check. Task-5262936
This update corrects a visual issue where the OCR label for expense documents was incorrectly displayed alongside the data, causing a misalignment in the expense report grid. The fix ensures that labels and data are properly aligned, improving the user experience when viewing OCR-processed expenses. This was triggered by a change in how OCR data is handled.
Original PR description
Prerequisites ------------- To test this scenario you need either OCR credits, a free trial or to use the IAP account we have in the spreadsheet. Steps To Reproduce ------------------ 1- Go to Expenses > My Expenses. 2- Upload a receipt to trigger OCR. 3- Open the expense in Normal Mode (It works fine in Debug Mode). Issue ----- "Payment Method" field is misaligned - label appears in the value column and field appears in the label column. Cause ----- The label for "ID of the request to IAP-OCR" (`extract_document_uuid`) is visible when OCR data exists, but its field is only visible in Debug Mode. This orphan label breaks the grid layout. opw-5369619 Forward-Port-Of: odoo/enterprise#103189
This update resolves an issue where the analytic distribution field contained unexpected data types, specifically the '__update__' string, causing errors during account ID retrieval. The fix now safely processes only strings that can be interpreted as numbers, providing a more robust and reliable system for managing analytic accounts.
Original PR description
Issue: Before this commit, the analytic distribution field contained a mix of integers (account IDs) and strings (such as '__update__'). When attempting to retrieve the account ID, converting the '__update__' string to an integer caused an error. Fix: As a generic solution, instead of skipping only the '__update__' key—which may not be the only non-numeric string in the future—we now process only the strings that can be safely interpreted as numbers. opw-5450293 Forward-Port-Of: odoo/odoo#242021
This update resolves an issue preventing Odoo from working correctly with Tailscale, a secure remote access tool. The change adds a necessary file, fixing a 'file not found' error that was impacting users. This ensures seamless remote access for our team.
Original PR description
This PR adds a compatibility with Tailscale after upgrading 25_06/25_07 images to 19.1. It fixes the error ``` FileNotFoundError: [Errno 2] No such file or directory: 'tailscale' ``` Forward-Port-Of: odoo/odoo#242292
This update corrects calculations for Belgian withholding taxes in the HR payroll module, ensuring accurate reporting up to the year 2026. This fix addresses a discrepancy in tax rates, improving the reliability of payroll data for our Belgian clients. It’s a routine maintenance update to maintain compliance.
Original PR description
TaskID: 5403525 Forward-Port-Of: odoo/enterprise#103271 Forward-Port-Of: odoo/enterprise#103215
This update resolves a bug in the Salary Configurator that prevented users from successfully canceling the selection of an employee photo. The fix ensures the system correctly handles image uploads and cancellations, improving the user experience. This prevents a potential error message from appearing.
Original PR description
**Version:** - 17.0 **Steps to reproduce:** - Install the hr_contract_salary module. - Go to Employee contract and click the Generate Offer. - Click on 'Send By Email' button and open Salary Configurator. - Upload an employee photo the first time. then cancel the image selection the second time. **Issue:** - Error occurs when canceling the image selection on Salary Configurator page. **cause:** - The condition to check whether the file exists properly was missing. **solution:** - Added the missing condition to properly check that file exist. Task-5423390 Forward-Port-Of: odoo/enterprise#102410
This update removes an unnecessary step from the website tour process. Previously, a step was present that didn't perform any action, now that the underlying functionality has been adjusted. This change simplifies the tour and avoids potential confusion for users.
Original PR description
Following PR [^1], the step about copying the tracker link doesn't do anything as the only actual "action" made in the custom "run()" function has been removed (sic), leaving only the mocking of the Clipboard API (which isn't called anymore, anyway). This commit removes this unused step to avoid confusion. [^1]: https://github.com/odoo/odoo/pull/170548 Forward-Port-Of: odoo/odoo#241358
This update adjusts the timeout duration in the SMTPD tests to prevent unnecessary failures. Previously, a short timeout caused frequent test disruptions. Increasing the timeout allows the tests to complete successfully, improving overall system stability and reducing the need for manual intervention.
Original PR description
There are multiple cases where the SMTPD tests fail due to a timeout error. It is much worse to get a red runbot due to a silly timeout than to sometime wait a bit longer than .1 second. 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#242214
This update fixes a crash that occurred when deleting an employee within a hierarchical structure (like departments). The change ensures the system correctly handles record existence during filter operations, preventing the 'Missing Record' error. This improves stability and reliability for employee management.
Original PR description
Reproduce the crash: 1- Create departement in Employees. 2- Create a default filter with child_of or parent_of on the previously created departement. 3- Delete the departement. 4- Go back to Employees => Crash 'Missing Record' This commit adds a check for record exitence in `child_of_domain` and `parent_of_domain` in the case where `_parent_store` is True. This change prevents the `Missing Record` Error. task-5217722 Forward-Port-Of: odoo/odoo#242138 Forward-Port-Of: odoo/odoo#240013
This update corrects a visual inconsistency in the Odoo chatter interface. Previously, paragraphs added in the composer didn't maintain the correct bottom margin when posted to the chat. This change ensures that messages sent via chatter display with consistent spacing, matching the composer and email versions, improving the overall user experience.
Original PR description
Problem: When adding a paragraph in the composer and sending the message, the paragraph posted in the chatter has a `margin-bottom` of 0. Cause: Paragraphs in the chatter rendering override the default bottom margin, resulting in inconsistent spacing compared to the composer and the sent email. Solution: Update selector to only target the last `p`. Steps to reproduce: - Open the chatter composer. - Add a paragraph using "/Paragraph". - Add some text. - Send the message. - Observe that the message posted in the chatter has no bottom margin, unlike in the composer. opw-5378129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240082
This update fixes a technical problem related to how the system acknowledges PEPPOL messages. Previously, continuous acknowledgments caused issues on the IAP side, leading to serialization errors. Now, acknowledgments are handled after the loop, ensuring smoother processing and preventing these errors.
Original PR description
The acknowledgment should not happen in the loop, but after. In a case a problem happened in the loop, it's acceptable that we end up not acknowledging messages, their status will be retrieved again at the next call. At the moment those continuous acks cause serialization issues on IAP side. task-none Forward-Port-Of: odoo/odoo#242187
This update corrects a technical detail in the processing of xRechnung invoices, specifically related to the 'leitweg-id' field within the invoice XML. The change ensures accurate invoice formatting for this important German tax document. The fix was triggered by a test update and addresses a minor inconsistency.
Original PR description
Correction of the forward port for the leitweg-id in the 'cbc:BuyerReference' field for the xRechnung invoice. The 'export_invoice_vals' function is an old helper that is not used by default anymore (but used by the tests, that is why the tests did not catch the error). I added the if statement in the corresponding new helper: '_add_invoice_header_nodes' and changed the test for it to catch the error. Related: #236333 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241982
This update resolves an issue where grouped Kanban cards were displaying incorrectly due to a change in the Kanban templates. The fix simply removes a no-longer-needed CSS class, ensuring consistent and correct card heights are displayed within the knowledge module.
Original PR description
Since commit https://github.com/odoo/enterprise/pull/70460 and the reworking of the Kanban templates, the h-100 class was no longer correct. This PR fixes the issue by removing this class. task-5439265 Forward-Port-Of: odoo/enterprise#102801
This update corrects a problem where invoice XML files generated for Danish Nemhandel transactions were failing validation due to an incorrect assumption about the ‘PrepaidAmount’ field. The fix ensures the ‘PrepaidAmount’ node is only removed when the value is actually zero, resolving the validation issue and allowing invoices to be correctly processed.
Original PR description
To reproduce: create an invoice that is reconciled (typically a credit note) before Send&Print. Check the validity of the xml with a schematron => it fails due to the value of the PrepaidAmount The node PrepaidAmount gets removed because it was wrongly thought to be always empty. We now only remove it if the value is at 0. 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#242008
This update resolves an issue where creating a new spreadsheet template within the Quality Control app would trigger a validation error due to a missing default name. The fix provides a default name, ensuring the template creation process functions correctly and avoids the error.
Original PR description
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control…
**Issue** A validation error is raised when creating a new spreadsheet template from a Quality Control Point. **Steps to reproduce** 1. Open the Quality app. 2. Go to Quality Control > Control Points. 3. Click "New". 4. Set the type to "Spreadsheet". 5. Click on Spreadsheet Template > Search More. 6. Click "New". -> A validation error is raised. **Cause** In `quality_view`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/quality_control/views/quality_views.xml#L840C17-L845C19 the `many2one_spreadsheet` widget (see [`many2one_spreadsheet_field.js`](https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L36)) overrides "Create and Edit" to create a new spreadsheet through `Many2XSpreadsheetAutocomplete`: https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/spreadsheet_edition/static/src/assets/components/many2one_spreadsheet_field.js#L11C9-L14C51 This flow does not set a default value for the required `name` field, nor does `action_open_new_spreadsheet`:https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/spreadsheet_edition/models/spreadsheet_mixin.py#L348 Since `name` is required: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/quality_control/models/quality_spreadsheet_template.py#L12 validation fails. **Solution** Provide a default value for the `name` field, using the same default as in `documents_document.py`: https://github.com/odoo/enterprise/blob/8365feab396679f0323e89c2f4e0c825a0b2ee7e/documents_spreadsheet/models/documents_document.py#L321 opw-5340710 Forward-Port-Of: odoo/enterprise#101671
Features or functions removed from Odoo
This update removes a specific test file related to Excel files that was causing issues with our automated testing process. This test was dependent on a recent update to a core library and wasn't compatible with our standard operating systems. Removing it improves the reliability of our automated testing and ensures smoother builds.
Original PR description
This commit removes the xslx-2025 test case. That file contains a `trash` folder and libmagic only started supporting those files with file/file@3660a2ccb77cdea0ce678d9e71fbb7aceca2adbe, this commit is notably absent from Ubuntu Jammy which is a supported OS in this Odoo version. Keeping the test makes the Runbot Distro-build CI red on Jammy which is worse than making sure we always support those (rare, arguably broken) files. 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#242211