Wednesday, August 27, 2025
16 changes · 18.0
Enhancements to existing features
This update adds database indexes that help Odoo find related partner and purchase information more quickly. Business users should see improved responsiveness when opening or using partner records, especially in databases with many partners or purchase orders.
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
This update adjusts internal performance test expectations for the Knowledge app after a backend caching behavior change. It helps keep automated checks accurate without changing the user-facing product experience.
Original PR description
Adapting query count, due to not putting html fields in cache upon creation. task-4962646
Resolved issues and error corrections
This fix ensures inherited property fields are correctly recalculated from their linked source after cached data is missing. It helps prevent incorrect or missing values from appearing in business records that rely on inherited properties.
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#224359
Code cleanup and technical improvements
This change keeps artificial delays in web tours active only when tours are run in debugging or watch mode. It helps normal automated tour runs stay faster and more consistent while preserving slower step-by-step behavior for troubleshooting.
Original PR description
In this commit, we move step_delay so that it can only be used in debug mode. So, for step_delay to be effective, the tour must be launched in watch=True or debug=True mode. 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
A CRM interface test that could fail under simulated time settings is now skipped in that mode. This keeps automated testing more reliable without changing how users experience CRM features.
Original PR description
When using the faketime mode for testing, the crm_rainbowman tour fails because the underlying SQL query is using `CURRENT_DATE`. Unfortunately, this SQL keyword cannot be replaced globally by a function easyly (like it was done for the NOW function in faketime mode). ~~With this commit, the SQL query is adapted to use the SQL NOW function instead.~~ With this commit, the tour will be skipped in faketime mode Forward-Port-Of: odoo/odoo#223909
A broken Vimeo video used in the website editor has been replaced with an available one. This keeps the related website editing dialog working as expected and avoids disruption for users configuring website content.
Original PR description
This commit replaces an unavailable vimeo video with a new one to maintain the dialog structure. This commit is a backport of [1], which was merged only into master, but is also necessary in the stable versions. [1]: https://github.com/odoo/odoo/commit/ad6f8716ea7e886b6dd3b657309d7cc51e5eb50f Forward-Port-Of: odoo/odoo#224054
This update improves how Odoo handles cases where a browser used during automated testing unexpectedly disconnects. Instead of waiting for timeouts or attempting cleanup on an already closed connection, the system now reports the failure sooner and more accurately, helping teams investigate test instability faster.
Original PR description
As far as I can tell this can occur if the ws connection gets closed while we're in a `recv`: in that case `recv` will mark the connection as closed (`connected=False` and `sock=None`) and raise…
As far as I can tell this can occur if the ws connection gets closed while we're in a `recv`: in that case `recv` will mark the connection as closed (`connected=False` and `sock=None`) and raise `WebSocketConnectionClosedException`, then any attempt to `send` will fail with `WebSocketConnectionClosedException`. Here this likely is an issue because in `_receive` `WebSocketConnectionClosedException` goes through the generic exception handler, which sees that: - it's not a `ConnectionResetError` - the result is not set - and the ws is not connected So `_receive` just cancels the result and `return`s, and when whatever's waiting on a future finally times out it tries to cleanly shut down and hits a connection that's already closed. Handle a connection closed in that context more properly: - unset `ws` so we don't try to clean it up, as we know it's closed - set the result as being in error - cancel every future in order to immediately go to the tour failure step rather than wait for timeouts Note that this will not really *fix* any error per se, because every time this happens it means the browser abruptly closed the WS connection (possibly straight up died), so this should mostly properly attribute the error so we can investigate it. https://runbot.odoo.com/odoo/error/229793 Forward-Port-Of: odoo/odoo#224023
Creating a child menu in Website settings now keeps it under the selected parent menu instead of moving it to the main menu. This prevents incorrect website navigation structure and reduces manual cleanup for administrators.
Original PR description
Steps to reproduce: - Have a database with only the website module installed --> Turn on the developer mode. - Go to Configuration ---> Menus - Create a Menu (Parent) and a child menu (Child) in that. - Upon saving, the following behaviour is observed: the child menu is converted to the main menu. Issue: Before this commit, when we create a child menu for single website then it takes the website.menu_id.id as the parent_id. Which is wrong because it gives the parent_id of the websites' top menu. Solution: With this commit, we have passed the correct parent_id from vals to solve this issue. task-4231974 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222615
File downloads now open in a separate browser context instead of navigating the current page. This prevents unnecessary page-leave prompts or interruption warnings, making downloads smoother for users.
Original PR description
In this commit, we use browser.open(url, "_blank") when the action is a download instead of window.location.assign(url). This latest dispatch a "beforeUnload" event and we want to avoid it.
Odoo now refreshes the registration status of Peppol users even when they are already registered. This helps keep company e-invoicing access aligned with updates made by the access point server, reducing the risk of outdated status information.
Original PR description
Registered users state never gets fetched from AP API when the user is already registered. This is not great when user state somehow gets updated by AP server (for whatever reason). no-task Forward-Port-Of: odoo/odoo#223418
The New Zealand tax report now avoids counting zero-rated sales twice in the Total Sales and Income section. This makes reported sales totals more accurate for businesses using 0% tax invoices.
Original PR description
**Steps to reproduce:** - Install Accounting and l10n_nz - Switch to a New Zeland company (e.g. NZ Company) - Create an invoice with a 0% tax - Go to "Accounting / Reporting / Statement Reports / Tax Report" - Select "Tax Report (NZ)" and the period of the invoice **Issue:** The amount of the invoice with the 0% tax is included twice in `Total Sales and Income` section. Cause: The formula for `Total Sales and Income` is `BOX5 + BOX6 + BOX9`. However, the value of BOX6 is already included in BOX5 as seen in its description `[BOX 6] Zero-rated supplies in Box 5`. opw-3883198 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224095 Forward-Port-Of: odoo/odoo#171595
Messages in Discuss are no longer sent when a user presses Enter to select an IME text suggestion. This helps users who type with input methods for languages such as Chinese, Japanese, or Korean avoid sending incomplete or unintended messages.
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#224265
The Estonian tax XML export now combines the two 22% VAT report line balances into a single transaction entry. This prevents duplicate transaction22 lines in submitted XML reports while preserving the underlying report lines for the tax rate transition.
Original PR description
Before this pr: - There are two transactions22 entries were introduced because we are having two report lines for 22% tax computation, one with '1' tag, which is valid till 31 June 2025, and another one with '1_2' tag, which is valid from 1 July 2025. After this pr: - The balance computation during export to XML is now adding the balance of both line '1' and '1_2' into line '1' only. - So now we do not need an extra transactions22 entry in the XML tax report. - We are keeping both report lines for now, but the XML report will have only one entry with the total sum of balances in both report lines Related PR: https://github.com/odoo/enterprise/pull/91364 Forward-Port-Of: odoo/enterprise#93197 Forward-Port-Of: odoo/enterprise#92662
Users can now complete scheduled activities even if the related Studio approval rule was deleted in the meantime. This prevents an unexpected error and keeps the sales workflow moving smoothly.
Original PR description
An error occurs when a user attempts to mark a scheduled activity as done after the associated approval rule has been deleted. **Steps to Reproduce:** 1) Install Sales and Web Studio modules. 2) Log…
An error occurs when a user attempts to mark a scheduled activity as done after the associated approval rule has been deleted. **Steps to Reproduce:** 1) Install Sales and Web Studio modules. 2) Log in as Admin and use Studio to add an approval rule to the Sale Order’s Preview button. >- Set Allowed Group to Access Rights. >- Set Responsible User to Mitchell Admin. 3) In the Incognito Tab, login as Demo, open the same sale order and click on preview to create activity in chatter. 4) Delete the Approval Rule in the original tab. 5) Switch back to Demo and click Mark Done under Planned Activity in chatter. **Error:** `SyntaxError: syntax error at or near ')'` `LINE 1: SELECT id FROM studio_approval_rule WHERE id IN () FOR UPDAT. ^` **Root Cause:** The error occurs because the SQL query at [1] includes an empty tuple of rule IDs `(all_rule_ids)`. An empty `IN ()` clause in SQL results in a syntax error. [1]- https://github.com/odoo/enterprise/blob/7ea45724e7689a0df11d20ace9c562788f5d19e3/web_studio/models/studio_approval.py#L366 **Solution:** This commit avoids the error by ensuring that the SQL query only runs when `all_rule_ids` is not empty. sentry-6306636466 Forward-Port-Of: odoo/enterprise#86982
Restoring an uploaded spreadsheet that has no folder now saves a clear default value instead of an undefined one. This prevents inconsistent document search panel behavior after files are moved to trash and restored.
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)
This fix ensures negative Swiss payroll entries are posted to the appropriate reversed accounts. It helps keep payroll accounting records accurate and reduces the risk of incorrect balances for affected payslips.
Original PR description
…r 2050 Invert accounts for negative payslip line Forward-Port-Of: odoo/enterprise#93074