Thursday, August 28, 2025
27 changes · saas-18.4
Enhancements to existing features
A problematic internal test is temporarily disabled when the time-simulation setup is active because it can freeze during nightly build checks. This helps keep automated build pipelines moving while the underlying cause is investigated.
Original PR description
For a strange reason, this test can get stuck while compiling the sources with libsass when faketime is active. Some more investigation is needed but disabling it for now to avoid having builds stuck during the nightly Forward-Port-Of: odoo/odoo#224422
This update adds database indexes that help partner records load and calculate related purchase information more quickly. It should improve responsiveness when opening partner forms or checking matching company details, especially on larger databases.
Original PR description
Adding some missing indexes: - `res.partner.company_registry`: necessary for the second search in `_compute_same_vat_partner_id` - `purchase.order.partner_id`: necessary for the `_read_group` in `res.partner._compute_purchase_order_count` --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224436 Forward-Port-Of: odoo/odoo#223706
This update adds automated checks to ensure barcode lookup correctly retrieves product details and uses them when creating products. It helps reduce the risk of issues across point of sale, inventory barcode scanning, and website product creation flows.
Original PR description
*: pos_barcodelookup, stock_barcode_barcodelookup, website_product_barcodelookup In this commit: ------------------- - Added tests for barcodelookup to check whether the data fetched and set properly. - Added tests in respective modules to check the flow and creation of the products using barcodelookup. task - 3920661 Forward-Port-Of: odoo/enterprise#92689 Forward-Port-Of: odoo/enterprise#69120
Office printer test actions now send a PDF report instead of a simpler test output. This makes test prints better reflect real business documents, helping users confirm printer setup more accurately.
Original PR description
When clicking "test" on an office printer, we now print a pdf report, making the test print more realistic.
Website generation failures are now reported back to the website service so support teams can see the related logs. This improves troubleshooting and helps resolve generation issues faster without changing the end-user website experience.
Original PR description
When an error occurs during generation, send the error back through report_ko to be able to see the logs on the WSS.
Resolved issues and error corrections
Dutch Peppol invoice XML files now use the correct identifier type when a company ID is 20 characters long. This helps ensure NLCIUS electronic invoices meet Dutch Peppol requirements and reduces the risk of rejected or non-compliant invoice files.
Original PR description
## Short functional explanation of the error For Dutch companies, when downloading the NLCIUS file of an invoice, the schemeID of the companyID in the XML isn't correct. ## Reproduction Steps 1. Make…
## Short functional explanation of the error For Dutch companies, when downloading the NLCIUS file of an invoice, the schemeID of the companyID in the XML isn't correct. ## Reproduction Steps 1. Make sure you use a dutch company: in apps, download the 'l10n_nl' and 'account_edi_ubl_cii' modules. Then, click on your company and select the NL Company. 2. Go to settings and type Peppol. Under Customer Invoices, check the Peppo format. Then, setup a Peppol Endpoint. Hit save. 3. Go to the Accounting app and click on the customers tab, then invoices. Click on new. 4. Select a customer. Make sure that the customer is from the Netherlands, has an email address, and in the accounting tab, an account number. Still in the accounting tab, under Electronic Invoicing, set the format at NLCIUS, set a Peppol e-address and a Peppol Endpoint that is 20 characters long. 5. Add a product, click confirm then Send & Print. Make sure that NLCIUS is well checked and click again Send & Print. 6. In the bottom right corner of the page, just under the Amount Due, there's a paper clip icon. Click on it and you'll see the XML. Download it. ### Expected behavior As the CompanyID is 20 characters long, the schemeID next to the CompanyID should have the value of 0190. ### Unexpected behavior If you scroll a bit, you'll see that the SchemeID next to the CompanyID has a number of 0106. ## Origin of the issue In the code, the SchemeID will have a value of 0190 if the CompanyID is 9 characters long. __ opw-4943262 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219771 Forward-Port-Of: odoo/odoo#219424
This update stabilizes an automated test for website editor keyboard shortcuts that was failing intermittently. It helps keep quality checks dependable so website-related changes can be validated without false alarms.
Original PR description
The test "Hotkeys on Theme and Blocks tab" started failing often, probably because it sometimes didn't wait enough time between the hotkey press and the `expect` check. runbot-231360
The Italian localization now uses the updated €100 threshold for the VP7 line in monthly tax reports, replacing the previous €25.82 amount. This keeps Italian tax reporting aligned with the latest requirements and helps avoid incorrect report values.
Original PR description
While implementing the modulo tag of the tax report xml export, it came to light that the vp7 line of that report which previously used a 25,82€ threshold has been changed for one at 100,00€. This commit adapts the amount across the module. --- Enterprise PR: https://github.com/odoo/enterprise/pull/86642 task-4826511 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224190 Forward-Port-Of: odoo/odoo#216887
This fixes a chat composer issue where pressing Enter to choose an IME text suggestion could accidentally send the current draft message. Users typing with input methods for languages such as Chinese, Japanese, or Korean can now confirm suggestions without unintended messages being posted.
Original PR description
Before this commit, pressing ENTER to pick a composition suggestion from IME in a discuss channel composer would send a message with the current content of composer. This is definitely not the intended behavior: it should change the composing text by the IME software but the send on ENTER press should not happen while the text is in composing. This commit fixes the issue by adding condition for composing text. Task-5043396 Forward-Port-Of: odoo/odoo#224538 Forward-Port-Of: odoo/odoo#224265
Website Builder header border and rounded corner settings now visibly apply as expected. This helps users customize site navigation styling without workarounds or confusing ineffective controls.
Original PR description
Setting a border or round corners value on the header were not taking effect header because the proper css variables were not updated. This commit ensures the correct css variables are updated. Steps to reproduce: 1. Enter edit mode in Website Builder. 2. Select the navbar and change its border or round corners value. 3. Notice that the changes have no visible effect. Related to task 4367641.
The two-factor authentication test flow now waits for page elements to be ready before continuing. This reduces false test failures caused by timing issues, helping keep quality checks stable without changing the user experience.
Original PR description
Added wait steps in the TOTP flow tests to ensure that UI elements are fully loaded and ready this should help to avoid race conditions in the tests. build_error-107908 Forward-Port-Of: odoo/odoo#219260
This fixes an issue where inherited property fields could show incorrect or missing values after cached data was unavailable. The change helps keep related business data consistent and reliable when records are loaded or recalculated.
Original PR description
inherited properties should be computed from its related field after cache miss 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#224550 Forward-Port-Of: odoo/odoo#224359
Printing long reception reports now keeps each table row together on a single PDF page. This prevents cut-off lines in warehouse reception documents, making printed allocation reports easier to read and use.
Original PR description
### Issue: - In the settings enable reception report. - Create a storable product with a product name of length 60. - Create and confirm a delivery with 20+ lines of 1 x that product. - Create and…
### Issue: - In the settings enable reception report. - Create a storable product with a product name of length 60. - Create and confirm a delivery with 20+ lines of 1 x that product. - Create and confirm a PO with 20+ lines referring to 1 x that product. - Validate the receipt > Allocation smart button > Assign all. - Click on print and open the PDF. #### > The last row of the first page is cut in half at the end of the page and the beginning of the next one. ### Cause of the issue: The class `o_report_reception` is used both in the view of the reception report `ReceptionReportMain`: https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/static/src/components/reception_report_main/stock_reception_report_main.xml#L16 and its printed version: https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/report/report_stock_reception.xml#L43-L44 However, when the report becomes too big (many lines), the class did not allow the user to scroll down the view and a fix has been implemented adding the overflow-y style to the class see https://github.com/odoo/odoo/commit/d8a19285939fb31f6d34290cb8138d402e93024b https://github.com/odoo/odoo/blob/25b8e651c439d688bd05dd0d9619d74fa749597d/addons/stock/static/src/scss/report_stock_reception.scss#L3 The issue being that wkhtmltopdf relies on the size of the table to determine if a row should be displayed on a page or an other one and if you can scroll down he will apparently not do his job correctly. opw-4824221 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224434
The website editor’s header border setting now works again after being broken by the new page-building tools. This lets users reliably adjust the look of website headers without needing technical help.
Original PR description
The border option for the header was broken during the implementation of the new html_builder. This commit restores the option by fixing the related action. task-4367641
Website editors can now resize text boxes in newly added floating cards without triggering an error. This fixes a setup issue in the card structure, making page editing smoother and reducing interruptions for content teams.
Original PR description
Steps to reproduce: - In "Website" app. - Create a "Floating cards" block using website editor. - Add a new card. - Adjust the text box size. - Error occurs. It was due to the XML structure of the new card, which was incorrect and caused the resize to crash in "grid" mode. opw-5027795 Forward-Port-Of: odoo/odoo#224426
The US tax report is now connected to the relevant tax return type. This allows the system to set lock dates automatically, reducing manual setup and helping keep tax reporting controls consistent.
Original PR description
During this pr odoo/enterprise#87346 the US tax report was added. We can link this report with the return_type so that the lock date can be set automatically.
This fix prevents an error when processing subscription sales orders that do not yet have a last invoice date. The system now uses today’s date as a fallback, helping subscription stock movements continue smoothly without interruption.
Original PR description
The Issue: Prior to this commit, When the sale order last_invoice_date is False, a traceback is thrown The Fix: To resolve this, We get the last_invoice_date or todays date opw-4403557 Forward-Port-Of: odoo/enterprise#75717
Fixed an issue where exporting accounting reports to Excel could fail when an account code looked like an extremely large number, such as "1E1000". Users can now export trial balance and related accounting reports more reliably without being blocked by uncommon account code formats.
Original PR description
_set_xlsx_cell_sizes tries to convert each cell into a float if it's possible. If the cell contains "inf", "1e1000" (or any value such that float(value) = float("inf")), then there is an OverflowError which is not catch by the try/except.
To reproduce, set an account code as "1E1000", make this account appearing in the trial balance (by creating a move) and export it as XLSX.
opw-4981385
Forward-Port-Of: odoo/enterprise#91686This fix prevents the Stock Fleet module from creating duplicate delivery view records when the system is upgraded. It helps ensure smoother upgrades without unnecessary duplicate configuration entries.
Original PR description
Commit a7f2a2cf9c96 changed the window action to take a specific view xmlid by creating a new `view_ids` entry. As the action is `noupdate=0`, upgrading the module will try to create a new record with the same name. This commit adds the `noupdate` tag around those record to avoid creating new view at update. runbot-230819
Sales order previews now handle non-subscription quotations correctly, even when a subscription template was previously selected. This prevents users from seeing an error page when previewing quotes that do not include subscription billing information.
Original PR description
Steps to reproduce: 1. Go to Sales > Configuration > Settings. 2. Set Subscription Template as default Quotation Template e.g.(Yearly Cleaning) 3. Create a new Sales Order 4. Switch the quotation…
Steps to reproduce: 1. Go to Sales > Configuration > Settings. 2. Set Subscription Template as default Quotation Template e.g.(Yearly Cleaning) 3. Create a new Sales Order 4. Switch the quotation template from a Subscription one to a non-subscription template e.g.(Office Furnitures) 5. Click Preview on the Sales Order. Issue: A traceback is raised: `TypeError: unsupported operand type(s) for +: 'datetime.date' and 'bool'` Cause: In the portal template, the following expression is evaluated without checking if value is falsy or empty: https://github.com/odoo/enterprise/blob/36f419e4604a2adc946f3a6828e69fba7584d2df/sale_subscription/views/sale_subscription_portal_templates.xml#L66 The portal template contained expressions referencing subscription-specific fields (like plan_id.billing_period) without checking whether the sales order was actually a subscription. When the quotation template is non-subscription, these fields may be False, leading to the error. Solution: Guard all subscription-related blocks with condition: `<t t-if="sale_order.is_subscription">` opw-4980869
Restoring an uploaded spreadsheet that has no folder now saves a valid default folder setting instead of an undefined value. This prevents the Documents search panel from ending up in an inconsistent state after moving files out of the trash.
Original PR description
Steps to reproduce: - Go to documents and upload an XLSX file - Move the XLSX file to the trash - Restore the XLSX file Current behavior before PR: - The key 'searchpanel_documents_document' was set to undefined, When the file had no folder Desired behavior after PR is merged: - Files without a folder now store 'false' as the default search panel folder_id Task: [5005319](https://www.odoo.com/odoo/2328/tasks/5005319) Forward-Port-Of: odoo/enterprise#92799
Fixed an error that could prevent saving an uploaded expense when the selected employee was not linked to a system user. This helps finance teams record expenses for all employees without interruption.
Original PR description
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure…
Currently, an error occurs when creating an expense for an employee that is not linked to a user. **Steps to reproduce:** - Install the `hr_expense` module. - Create a new employee `test` (ensure this employee is not linked to a user). - Go to Expenses > upload [1] and open it. - Set the `Employee` to `test` and click `Save` (it may take up to 5 seconds). (See [2] for Steps to reproduce) **Error:** `AttributeError: 'hr.expense' object has no attribute 'uid'` **Root Cause:** At [3], the code incorrectly uses `self.uid` instead of `self.env.uid`. Since `hr.expense` records do not have a `uid` field, this leads to an `error`. **Fix:** This commit ensures that expenses can be saved correctly, even when the selected employee is not linked to a user. [1]: https://drive.google.com/file/d/1Ew2B_zMFCQbw-6nwfKctJPy1W4y2ZaIb/view?usp=sharing [2]: https://drive.google.com/file/d/1qP-9L_emaox3l9JyoNVYjqj1Ht8bJSmZ/view?usp=sharing [3]: https://github.com/odoo/enterprise/blob/804f263b80cb78884e3f246bcc7fa7ea4e0cf73a/hr_expense_extract/models/hr_expense.py#L90 sentry-6834628909 Forward-Port-Of: odoo/enterprise#93211
The CRM VoIP softphone now avoids loading extra data when the main web client starts and the softphone is not displayed. This reduces unnecessary background activity and can make startup lighter without changing user-facing behavior.
Original PR description
Avoid RPC on client startup, since the softphone isn't always display at webclient startup. To avoid these RPC, we simply wrap the method call inside an `onWillStart` hooks.
This fix prevents an error when opening the Payslips page in Payroll while debug mode is enabled. It ensures the page loads normally even when no payroll run is selected, improving reliability for setup and troubleshooting scenarios.
Original PR description
steps to reproduce: - create an empty db (without demo data) - install payroll - enable "debug" mode - go to Payroll > Payslips > Payslips menu - notice the traceback (`payrunId` is not a number) cause: - in "debug" mode the prop types are strictly checked - and `payrunId` is set optional but the type is `Number`, and `null` is passed fix: - pass `payrunId` only if it is not `null` :) task-5004937
Fixed an issue in the OCR manual correction interface where deselecting a highlighted box appeared to work but was not saved. This prevents previously deselected boxes from reappearing as selected after refreshing the page.
Original PR description
During refactoring of the boxes interface of the OCR (see commit acfbaf3), this occurrence of `dataMoveId` wasn't replaced with `recordId`. It causes a small bug where the box unselection wouldn't work properly. Visually, it looked like it was working as the JS code handling the unselection of boxes worked fine, but the unselection wasn't saved to the database. Upon refresh, all the boxes that were selected at some point will still be displayed as "user selected" in the UI. task-none Forward-Port-Of: odoo/enterprise#92980
The Peru purchase report now places detraction information in the columns required by SUNAT regulations. This helps businesses generate compliant TXT purchase reports and reduces the risk of reporting errors.
Original PR description
According to the Annex N.°8 of RS 040-2022/SUNAT (page 20 of https://www.sunat.gob.pe/legislacion/superin/2022/anexo-040-2022.pdf), detraction informations are considered as additional informations and should be displayed in columns 42 and 43. This commit moves detraction infos from columns 38, 39 to columns 42, 43. opw-4860530 Forward-Port-Of: odoo/enterprise#93044
Upgrading the Stock Fleet Enterprise module no longer fails because of a duplicate map view record. This helps users and administrators apply updates reliably without encountering an upgrade-blocking error.
Original PR description
Currently, an error occurs when upgrading the module. Steps to Reproduce: - Install the `stock_fleet_enterprise` module. - Go to Apps and `upgrade the stock_fleet_enterprise` module. ``` ParseError:…
Currently, an error occurs when upgrading the module.
Steps to Reproduce:
- Install the `stock_fleet_enterprise` module.
- Go to Apps and `upgrade the stock_fleet_enterprise` module.
```
ParseError: while parsing /home/odoo/odoo18/enterprise/stock_fleet_enterprise/views/stock_picking_view.xml:14, somewhere inside <record id="stock_picking_action_view_map" model="ir.actions.act_window">
<field name="name">Map</field>
<field name="res_model">stock.picking</field>
<field name="view_ids" eval="[(0, 0, {'view_mode': 'map', 'view_id': ref('stock_picking_view_map')})]"/>
</record>
UniqueViolation: duplicate key value violates unique constraint "ir_act_window_view_unique_mode_per_action"
DETAIL: Key (act_window_id, view_mode)=(336, map) already exists.
```
This error occurs when a user upgrades the stock_fleet_enterprise module. During the upgrade, it attempts to recreate a view record that already exists [1], which raises the error. The error occurs after [this commit](https://github.com/odoo/enterprise/commit/a7f2a2cf9c96939543abcd72a71c483d8e5c805f)
This commit ensures that when a user upgrades the module, it unlinks the view record before creating it again.
[1]- https://github.com/odoo/enterprise/blob/18229d4e1fe67b57b2b15f4bb2f84cd76d196c6f/stock_fleet_enterprise/views/stock_picking_view.xml#L18
sentry-6811940271