Friday, November 28, 2025
24 changes · saas-18.4
Enhancements to existing features
This update enhances how sales information is displayed on customer-facing pages within Odoo. Specifically, the system now supports passing additional data (kwargs) to the page view value generation process in key modules like Sales, Accounting, Project, and Purchase. This allows for more flexible and customized sales page content.
Original PR description
kwargs is added to the `_get_page_view_values()` method in other modules: `account` (https://github.com/odoo/odoo/blob/fdfa573fef5de83a77310e650dd950bddd7b0554/addons/account/controllers/portal.py#L47), `project` (https://github.com/odoo/odoo/blob/fdfa573fef5de83a77310e650dd950bddd7b0554/addons/project/controllers/portal.py#L58), or `purchase` (https://github.com/odoo/odoo/blob/fdfa573fef5de83a77310e650dd950bddd7b0554/addons/purchase/controllers/portal.py#L110). @Tecnativa TT57124 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237270
This update simplifies the process of retrieving matched debit and credit entries associated with an account move line. Previously, this was a complex process, and this change provides a new helper function to streamline data access. This enhancement improves the efficiency of account reconciliation workflows.
Original PR description
This commit add a new helper to easily get matched_debit_ids and matched_credit_ids from an account.move.line. Linked:https://github.com/odoo/enterprise/pull/100493 opw-5184679 Forward-Port-Of: odoo/odoo#237367
Resolved issues and error corrections
This update resolves an error that occurred when users tried to view time off information for contracts without a defined working schedule. The fix skips a calculation that caused the error when a working schedule wasn't present, ensuring the Time Off overview can be accessed without interruption.
Original PR description
Currently, an error occurs when a contract has no working schedule set and the user tries to open the Time Off overview in the Gantt view. **Steps to Reproduce:** 1. Install `hr_holidays_contract_gantt` with demo data. 2. Open the **Marc Demo** employee and remove the **Working Schedule** from the contract. 3. Navigate to: Time off > Overview **Error:** `AttributeError - 'bool' object has no attribute 'upper'` **Cause:** The error occurs because at [1], the contract does not have a `resource_calendar_id` (working schedule) assigned. As a result, it attempts to access attributes of a False value, causing the error. **Fix:** This commit skips the computation when the contract does not have a working schedule set. [1] - https://github.com/odoo/enterprise/blob/e60429fce3875a282172cd81d18322d472d7fee4/hr_holidays_contract_gantt/models/hr_leave.py#L52 sentry-7017326141 Forward-Port-Of: odoo/enterprise#99262
Features or functions removed from Odoo
This pull request removes outdated configuration files related to FedEx, UPS, and USPS delivery settings within the Odoo Enterprise platform. These files were no longer required and were contributing to unnecessary complexity. This change ensures a cleaner and more streamlined system.
Original PR description
Oversight of 83d5bc4b0df37e0786348238b7379cb9f62fd5e4 and fw ports Forward-Port-Of: odoo/enterprise#100482
This update resolves an issue where scanning invalid GS1 barcodes caused Odoo to crash with a technical error message. The fix corrects a formatting error in the error message, ensuring users receive a clear and understandable notification when a barcode is invalid, improving data entry reliability.
Original PR description
**Steps to reproduce:** 1. Install Inventory. 2. Open Inventory → Configuration 3. Barcode Nomenclature and select the default GS1 Nomenclature. 4. Open Barcode → scan the code:154105510000000244.…
**Steps to reproduce:** 1. Install Inventory. 2. Open Inventory → Configuration 3. Barcode Nomenclature and select the default GS1 Nomenclature. 4. Open Barcode → scan the code:154105510000000244. **Observation:** - Scanning a GS1 barcode with an invalid date crashes Odoo and raises a traceback. **Cause:** - The translated ValidationError message uses the wrong interpolation syntax: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/barcodes_gs1_nomenclature/models/barcode_nomenclature.py#L58 and therefore fails during rendering. - Correct syntax should be: https://github.com/odoo/odoo/blob/e4e2dca73213c33c487033dd404a7ca335960a66/addons/account/models/account_move.py#L5647 **Fix:** - Fix faulty interpolation placeholder in ValidationError message to use `%(error_message)s` instead of `'%(error_message)'`, preventing the traceback and allowing the error message to display correctly. **opw-5253564** Forward-Port-Of: odoo/odoo#236858
This update resolves a technical issue that prevented users from consistently accessing the Documents app, particularly when using mobile view. The problem stemmed from a misadaptation of code during a recent port from a previous Odoo version, and has now been corrected.
Original PR description
Steps to reproduce =================== 1. Toggle mobile view. 2. Open documents app. List prop is replaced by groupByField here https://github.com/odoo/odoo/pull/189109/commits/b5e821f0383caf6126a0d3c915cb4bccc8345b2b in 18.2. Here https://github.com/odoo/enterprise/pull/90647, we missed adapting the code in the forward port. Task-5363758 Forward-Port-Of: odoo/enterprise#100713
This update ensures that all B2C invoices generated by our Saudi Arabia localization module (l10n_sa) correctly display 'Simplified Tax Invoice' as the invoice title. Previously, this requirement was only applied to phase 2 ZATCA invoices. This change aligns with regulatory requirements and improves invoice clarity for customers.
Original PR description
For B2C invoices, the invoice's title must be "Simplified Tax Invoice". This was only applied to phase 2 ZATCA in "l10n_sa_edi". This change makes sure to apply the same requirement for phase 1 invoices. Task-5322118 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#237505
This update corrects a visual issue in the check printing process for US layouts. Previously, the payment date would overlap with the table below when using manual check sequencing. The fix ensures the date is displayed correctly, preventing overlapping and improving the appearance of generated checks.
Original PR description
In the Accounting app, users can print checks created to pay Vendor Bills. When using any of the US Checks Layout (from `l10n_us_check_printing`), the payment date would overlap the table beneath it…
In the Accounting app, users can print checks created to
pay Vendor Bills. When using any of the US Checks Layout (from
`l10n_us_check_printing`), the payment date would overlap
the table beneath it when the journal's manual sequencing option was
disabled.
<img width="1201" height="624" alt="image" src="https://github.com/user-attachments/assets/cd3aa46a-1952-4652-9034-e4bc2ea9a44d" />
This occured because the `.summary_line` container collapsed to a height
of 0 whenever its first child wasn't displayed, as the remaining child
elements are absolutely positioned and therefore do not contribute to
the parent's height.
https://github.com/odoo/enterprise/blob/f54585f84b0fa7a73efb3f0e14266972d510f0a6/l10n_us_check_printing/report/print_check.xml#L24-L34
By assigning a minimum height to the `.summary_line` class, we make sure
that it always occupies space above the table, even when only the date
is shown.
### Steps to reproduce:
**/!\ To reproduce the bug locally, you must have a version of wkhtmltopdf with patched qt. Use `wkhtmltopdf -V` and make sure that _"(with patched qt)"_ is specified after your wkhtmltopdf version.**
1. Install Accounting (`accountant`) and US Checks Layout (`l10n_us_check_printing`)
2. In Settings > Accounting, toggle on *Checks* if it is not, and set *Check Layout* to any "US" layout.
3. Go to Accounting > Vendors > Bills
4. Create a new Vendor Bill:
- Set any Vendor
- Set any Bill Date
- Add any Product (with a positive price, the total price of the bill must be positive)
- Confirm
5. Click *Pay*, set the *Payment Method* to *Checks* and click *Create Payment*
6. Click on the *Payments* smart button
7. Click *Print Check* > *Print* (> *Continue*)
8. In the generated PDF, the date overlaps the table beneath it.
This fix moves the date right above the table.
<img width="1189" height="634" alt="image" src="https://github.com/user-attachments/assets/8858098e-b39b-4ad2-aa65-cc0cea550343" />
opw-5165112
Forward-Port-Of: odoo/enterprise#100487This update resolves a bug where a previously unlinked call continued to appear in the Odoo softphone. The fix ensures that calls are immediately removed from the softphone interface when they are no longer linked, improving the user experience and data accuracy.
Original PR description
A call that was unlinked previously remained visible in the VOIP softphone. This fix ensures that the call is correctly removed from the softphone view as soon as it is unlinked. Task-5262162 Forward-Port-Of: odoo/enterprise#100138 Forward-Port-Of: odoo/enterprise#100036
This update fixes an issue where a header in the spreadsheet dashboard action pushed content downwards, obscuring the bottom of the spreadsheet. The change ensures the full spreadsheet view is accessible, improving usability and data visibility for users. This resolves a minor layout problem.
Original PR description
The current rule applied on the spreadsheet action assumes that the action takes the full page but if we add a header , the full action is pushed downwards, which hides the bottom of the spreadsheet. Task: 5212448
This update resolves an access error that prevented users without HR permissions from completing appraisals. The fix ensures that managers can correctly mark appraisals as done, regardless of their specific user group. This improves usability for all users involved in the appraisal process.
Original PR description
STEP TO REPRODUCE: 1- Set Marc demo as a manager on an employee 2- Be sure he doesn't have the group group_hr_user 3- Log as Marc Demo 4- Create an appraisal for this employee 5- Confirm this appraisal 6- Click on "mark as done" You will have an access error; you shouldn't have it task-5349554
This update resolves an issue where the search function on the VoIP contacts tab wasn't correctly filtering results. The fix ensures that search terms are now accurately reflected in the contact listings, improving user efficiency and data accuracy. This enhancement ensures users can quickly find the contacts they need.
Original PR description
On recent/contacts tab, search rpc didn't take search term into account. Fix it. Task-5262162 Forward-Port-Of: odoo/enterprise#100478
This update corrects a calculation error in rental order quantity tracking, specifically when returns are processed within linked pickings. The previous issue resulted in incorrect inventory counts for rental products. This fix ensures accurate tracking of product quantities during rental transactions.
Original PR description
Steps to reproduce: - Enable multi-step & Rental transfers - Set warehouse to 2 steps reception/delivery - Create a rental order for a product with a qty of 5 - Process the PICK - Change the quantity in the rental order to 3 and save - Change the quantity back to 5 and save again Issue: The Rental IN picking has now a `product_uom_qty` of 1. This is due to a wrong computation of incoming/outgoing moves when there are returns (e.g. here a return PICK) in the linked pickings. opw-5028794 Forward-Port-Of: odoo/enterprise#100645 Forward-Port-Of: odoo/enterprise#98473
This update resolves a technical issue in the l10n_ae_reports module that prevented accurate tax calculations for returns outside of the United Arab Emirates. Adding a necessary call to the parent function ensures the correct logic is executed, improving the reliability of financial reporting.
Original PR description
We have an override of `_evaluate_amount_to_pay_from_tax_closing_accounts` in l10n_ae_reports, but it should only be executed when the country_code of the return is 'AE'. This commit add a super in case it's not 'AE' runbot-234445
A bug was causing the Original Bills report to generate an empty PDF within the web_studio interface. This was due to a complex report generation process that studio couldn't handle. To resolve this, the report has been blacklisted, ensuring users receive the correct report output.
Original PR description
Steps to reproduce ================== - Install account_accountant,web_studio - Go to Invoices - Open studio - Click on "Reports" - Select the "Original Bills" report => The report is empty Cause of the issue ================== The Original Bills is a very specific report. Multiple streams are created and then combined to make the final PDF See: odoo/odoo#85150 Solution ======== Since studio cannot handle this usecase, we blacklist this report opw-5108198 Forward-Port-Of: odoo/enterprise#100769 Forward-Port-Of: odoo/enterprise#100729
This update adds a test to verify that accounts marked as 'archived' (deprecated) still appear in the General Ledger report. This ensures accurate reporting, even after a recent system update. The test serves as a safeguard against future changes that might inadvertently hide these accounts.
Original PR description
Add test to ensure deprecated (archived) accounts with transactions continue to appear in the General Ledger report. The original bug where deprecated accounts were missing no longer exists in the current codebase due to the custom engine refactoring. However, this test serves as a regression safeguard for future changes. Note: The `active_test=False` fix is not needed in forward ports, as the new SQL-based architecture handles inactive accounts correctly by default. opw-5092275 Forward-Port-Of: odoo/enterprise#98387
This update corrects a bug where pressing arrow keys while the table picker was open caused incorrect navigation within tables. Now, arrow keys only control the table picker itself, preventing unintended cell movement. This improves the user experience when working with tables in the HTML editor.
Original PR description
Description of the issue this PR addresses: Current behavior before PR: When the table picker was open inside a table, pressing the up/down arrow keys incorrectly moved the selection to the cell above or below. Desired behavior after PR is merged: While the table picker is open, arrow up/down no longer navigate between table cells. task-5349547 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where Odoo server errors occurred when uploading vendor bills from UBL XML files with missing order references and empty item descriptions. The fix prevents a type error that arose during the XML processing, now allowing users to successfully upload bills even with blank descriptions. This ensures smoother bill import functionality.
Original PR description
Vendor bills import from UBL XML fails whenever the `<cac:OrderReference>`/`<cbc:ID>` is missing **and** all the `<cac:Item>`/`<cbc:Description>` have no text. The `invoice_origin` field computation results in the second condition `' '.join([None])` traceback-ing. https://github.com/odoo/odoo/blob/2217d5220640531828eb5b2ae7a9d41ba9c97e78/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_20.py#L1166-L1170 Steps to reproduce: 1. Install the Accounting `accountant` app. 2. Go to Accounting > Vendors > Bills. 3. Click *Upload*. 4. Upload the test XML file `addons/account_edi_ubl_cii/tests/test_files/bis3/test_vendor_bill_empty_description.xml` 5. An *Odoo Server Error* appears. Ticket [link](https://www.odoo.com/odoo/project.task/5269474) opw-5269474
This update resolves an issue where PDF merging failed due to malformed PDF files. The fix prevents a technical error from displaying, providing a more user-friendly experience when attempting to download merged bills. This ensures reliable bill generation and reduces potential disruptions for users.
Original PR description
Currently some PDFs cause error in PyPDF (Version 1 and 2) and cannot be merged. Steps to reproduce: - Create 2+ Bills with specific PDF (example found in ticket) - From Bills list view, select both and click Download > Original bills Issue: Traceback will raise `PyPDF2.errors.PdfReadError: Can't read object stream: Stream has ended unexpectedly` Thsi occurs because the version of PyPDF currently in use (2.12.1) cannot recover when working an odd PDF file having wrong length markers. This commit will add a nice error explaining to user what's going on. opw-5142961 Forward-Port-Of: odoo/odoo#234587
This update clarifies the labels associated with document access rights within the Odoo Enterprise system. Previously, labels were unclear, now they provide helpful guidance to users regarding the groups controlling access to documents. This ensures better understanding and management of document permissions.
Original PR description
This commit fix the label of documents access rights which now shows a helper for each documents res.groups. Task-5186096 Forward-Port-Of: odoo/enterprise#100792 Forward-Port-Of: odoo/enterprise#98890
This update resolves a problem where image resizing within Odoo's Studio reports didn't correctly translate to the generated PDF. The fix disables the percentage-based resizing option, which `wkhtmltopdf` (the PDF generation tool) cannot handle. This ensures consistent image display in reports.
Original PR description
Problem: When resizing an image in Studio within any report, the change is not reflected in the generated PDF. This happens because `wkhtmltopdf` does not support percentage-based `width` / `height` values, which are used by the resize tool (e.g., `width: 25%`). Solution: Disable the image resize option in Studio when editing reports, since the resulting `%` sizing cannot be rendered correctly in PDFs. Steps to reproduce: 1. Open Studio → Reports → open any report. 2. Add an image. 3. Resize it to 25%. 4. Save and print the PDF. 5. The image appears at its original size in the PDF. opw-5233052 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#237220 Forward-Port-Of: odoo/odoo#237088
This update resolves a bug where image resizing within Odoo Studio reports didn't correctly translate to the generated PDFs. The issue stemmed from `wkhtmltopdf`'s inability to handle percentage-based image sizes. To ensure accurate PDF output, the image resize functionality has been disabled in Studio.
Original PR description
Problem: When resizing an image in Studio within any report, the change is not reflected in the generated PDF. This happens because `wkhtmltopdf` does not support percentage-based `width` / `height` values, which are used by the resize tool (e.g., `width: 25%`). Solution: Disable the image resize option in Studio when editing reports, since the resulting `%` sizing cannot be rendered correctly in PDFs. Steps to reproduce: 1. Open Studio → Reports → open any report. 2. Add an image. 3. Resize it to 25%. 4. Save and print the PDF. 5. The image appears at its original size in the PDF. opw-5233052 Forward-Port-Of: odoo/enterprise#100378 Forward-Port-Of: odoo/enterprise#100301
This update fixes a bug that prevented users from reconciling bank statements when using the 'Set Account' feature. The issue stemmed from the system not properly handling deleted reconciliation models, leading to errors. The fix ensures that reconciliation models are named uniquely, preventing conflicts and ensuring successful reconciliation processes.
Original PR description
It may occur that when using 'Set Account' to reconcile a bank statement the reconciliation fail due to error "The operation cannot be completed: A reconciliation model already bears this name" Steps…
It may occur that when using 'Set Account' to reconcile a bank statement the reconciliation fail due to error "The operation cannot be completed: A reconciliation model already bears this name" Steps to reproduce: 1. Create a current liability, reconciliable account "455010 My Account" 2. Create 2+ with a common labels (TEST RECONCILIATION) 3. Use "Set Account" button to reconcile the first transaction with account 455010. 4. Repeat 2-3 with a shorter label 5. Open Reconciliation models for the Journal and delete the one named "455010 My Account" 6. Repeat 2-3 with an even shorted label Issue: Reconciliation will be blocked by error during automatic creation of reconciliation model Analysis: It occurs because we don't take into account that old reconciliation models may have been deleted, so even if we count a singe record it may have already been labeled "<account_name> (1)" Improved the naming by looking at the existing models and increasing the counter if necessary opw-5184696 Forward-Port-Of: odoo/enterprise#98785
This update simplifies the l10n_mx_edi module by removing a redundant name (quadrum) that was previously used. This change eliminates confusion and streamlines the codebase. It's a minor technical adjustment to improve clarity.
Original PR description
It has been some time since finkok changed its name to quadrum, and now no one remembers quadrum as finkok. Having it in the name only causes more confusion, so we decided to simply remove it. I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#100663