Wednesday, August 27, 2025
24 changes · saas-18.2
Enhancements to existing features
A problematic internal test is temporarily disabled when fake time settings are active because it can cause nightly builds to get stuck. This helps keep automated build processes 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
The partner form now uses additional database indexes to speed up lookups related to company registration details and purchase order counts. This should make partner records load more smoothly, 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 Forward-Port-Of: odoo/odoo#223706
Resolved issues and error corrections
This change reverts a previous point of sale adjustment that hid unit labels on order lines. The reverted behavior is no longer needed because the related certification work now belongs in a separate module, and the old approach only worked correctly in English.
Original PR description
This commit reverts commit ffdedf9, as the change is no longer required due to the LNE certification being implemented in a separate module. It also had a bug where the hiding of 'Units' only worked in English. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#219592
The New Zealand tax report now counts zero-rated sales only once in the Total Sales and Income section. This prevents overstated sales figures when invoices include 0% tax, improving accuracy for local tax reporting.
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
This fixes an issue where enabling a new view in Studio could make standard Employee and Department view options disappear. Users can now customize HR screens while keeping the usual views such as activity, kanban, and pivot available.
Original PR description
**Steps to reproduce:** - Install `hr` and `web_studio`. - Go to Employees → click Studio icon. - Views → activate Calendar view. **Observation:** - Existing views (activity, kanban, pivot, etc.) disappear from the view types. **Issue:** - After commit https://github.com/odoo/odoo/pull/160280/commits/e67ed24320c555c0cc63d59aa4921267e10a472d, view_mode in actions was removed, so only default (list, form) and Studio-added views remain. **Solution:** - Add view_mode to the action to preserve standard views after customisation. opw-4967654 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222485
This fix makes automated browser tests recognize when the browser connection has already closed, instead of trying to close it again and waiting for timeouts. It helps test failures be reported faster and more accurately, making investigation easier without changing end-user behavior.
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
The website editor now points to an available Vimeo video instead of one that was deleted. This keeps the video selection dialog working as expected and avoids a broken media experience for users building website pages.
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
Creating a child menu in Website settings now keeps it under the selected parent menu instead of moving it to the main website menu. This prevents menu structure errors and helps website administrators organize navigation correctly.
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
This update prevents an error that could occur when users paste multiple content blocks inside inline text areas in the website editor. It improves editing reliability and adds automated test coverage for the edge case.
Original PR description
Problem: When pasting two blocks inside an inline element, a traceback occurs. Cause: During `insert`, when `insertBefore` is `true` and `isEmptyBlock(right)` after `splitElement`, `currentNode` is set to `right`. But `right` may already have been deleted, leading to an invalid reference. Solution: Delete `right` if empty, but do not set `currentNode` to `right` in that case. Steps to reproduce: It is tricky to reproduce manually (you must copy two blocks and paste them in an inline element). A test has been added to cover the case. opw-4972695 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#224029 Forward-Port-Of: odoo/odoo#223229
This update makes a privacy lookup test handle cases where extra installed apps add partner references. It helps prevent false test failures without changing how the product works for users.
Original PR description
The test `test_wizard_indirect_reference` failed when modules like `l10n_gt_edi` were installed. This was due to additional Many2one fields (e.g., `l10n_gt_edi_consignatory_partner` on `account.move`) referencing `res.partner`, which were picked up by the privacy lookup wizard. This commit updates the test to avoid assuming a fixed number of reference lines and instead asserts the presence of the expected ones (the partner and the company). No change in functional behavior. RB-[230449](https://runbot.odoo.com/odoo/error/230449) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222105
This update prevents mobile website visitors from accidentally scrolling sideways when animated content briefly moves outside the visible page area. It keeps pages looking contained and polished during scroll-based animations, improving the browsing experience on phones.
Original PR description
Scenario: - add a 2 columns content widget - set the right column text to "On Scroll" animation with "Slide" effect and "From Right" direction so the content may be out of the page - save and reload…
Scenario: - add a 2 columns content widget - set the right column text to "On Scroll" animation with "Slide" effect and "From Right" direction so the content may be out of the page - save and reload the page on mobile - scroll down get in middle of animation with some content out of page - try to scroll to the right Result: we can scroll to the right and see the overflowing animated content outside of the expected page limit. History: During an animation, a fix prevent the horizontal scrollbar by setting "overflow-x: hidden" (or crop depending on version) on a given element: - in odoo/design-themes@51abb093c77993363b170b12be134c95b3009895 (14.0: 2021) it was added to $().getScrollingElement() - in 189a7c96e6e26825dc05c0c6466576fe63aa091e (18.0: 2022) the main page scroll was moved from #wrapwrap to html - in fece9cb85761e6cb3fe3642f947661464402363b (18.0: 2024) the "overflow-x: hidden" was moved to the body element Cause: the "overflow-x: hidden" is ignored by mobile browser on html and body tags ([example of report]), so in 18.0 and over the possible horizontal scrollbar caused by an animation is not hidden. Fix: apply the "overflow-x: clip/hidden" on #wrapwrap element. [example of report]: https://stackoverflow.com/questions/14270084 opw-4575726 Forward-Port-Of: odoo/odoo#213802
This update adds extra waiting checks to the two-factor authentication test flow so page elements are ready before tests continue. It helps reduce intermittent test failures, improving confidence in automated validation 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
This fix prevents a CRM user interface test from failing when tests run with simulated dates. It keeps automated testing more reliable without changing CRM features or behavior for users.
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
The point of sale receipt tracking number is now shown only for restaurant-related configurations or setups with preparation displays, avoiding unnecessary numbers in other sales flows. Kiosk and self-order receipts keep their identifying prefixes, helping staff distinguish order sources reliably.
Original PR description
- Fix issue where `tracking_number` was displayed for all config. We want to display this number only for `pos_restaurant` configurations. We also want to display it for POS config which have a preparation display configured (see enterprise linked PR). - Ensure Kiosk & Self orders correctly contains a prefix (S or K) inside their `tracking_number` to avoid regression. task-id: 4922308 enterprise PR: https://github.com/odoo/enterprise/pull/91833 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes a time off accrual test use a fixed date so it does not fail as calendar years change. It helps keep automated checks stable and reduces false alarms during development and releases.
Original PR description
The test is failing when run one year in the future as it depends on the date but we don't freeze the time. runbot-error-230721 Forward-Port-Of: odoo/odoo#224240
Expanding a meeting creation pop-up now preserves the information already filled in from the original task context. This prevents users from losing the meeting name when switching from the small dialog to the full form, making scheduling smoother and less error-prone.
Original PR description
### Steps to reproduce: - Go to any task in project module - Create a new meeting activity - Open Calendar and drag to create a slot - Notice the name of the meeting in the pop-up is the same as the…
### Steps to reproduce: - Go to any task in project module - Create a new meeting activity - Open Calendar and drag to create a slot - Notice the name of the meeting in the pop-up is the same as the task - Click on the expand button top-right of the dialog - Notice the calendar.event form opened but without a name ### Cause: When expanding the view using 'More options' button we are keeping the context in the new request. https://github.com/odoo/odoo/blob/d9c63a85955c2321bae1a705cc09b2554155f826/addons/calendar/static/src/views/attendee_calendar/attendee_calendar_controller.js#L45-L49 But when doing the same through the expand button we don't pass the current context so it will be lost. https://github.com/odoo/odoo/blob/3dde420665257c63885e891f1ec366568df5007b/addons/web/static/src/views/view_dialogs/form_view_dialog.js#L106-L116 ### Fix: Backporting the commit https://github.com/odoo/odoo/commit/4f71fbbd26b428e57943d974e8441bef295cdef1 to pass the context while expanding the form view opw-4966486 Forward-Port-Of: odoo/odoo#221422
Pressing Enter to select text suggestions from an input method editor in Discuss no longer sends an unfinished message by mistake. This prevents accidental messages for users typing with composition-based languages or keyboards, improving reliability in chat conversations.
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#224340 Forward-Port-Of: odoo/odoo#224265
This fixes an issue where inherited property fields could show incorrect or missing values after the system refreshed cached data. Businesses relying on inherited settings or product/customer properties get more consistent behavior without manual correction.
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
This update fixes an automated walkthrough used in the field service reporting area so it waits for the correct action button. It helps keep internal quality checks stable and reduces the chance of false failures during testing.
Original PR description
In this commit, we fix the tour industry_fsm_tour by removing "body:not(.modal-open) nav.o_main_navbar" (this trigger is always true) from trigger to let only button[name="action_generate_new_template"]. Forward-Port-Of: odoo/enterprise#91771
The Estonian tax report XML export no longer creates duplicate entries for 22% VAT transactions. It now combines the relevant balances into a single XML line, helping businesses submit cleaner and more accurate tax reports.
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
This fix ensures negative Swiss payroll lines are posted to the correct account by reversing the accounts where needed. It helps keep payroll accounting accurate and reduces the risk of manual corrections for affected Swiss payroll entries.
Original PR description
…r 2050 Invert accounts for negative payslip line Forward-Port-Of: odoo/enterprise#93074
Receipts linked to preparation displays or preparation printers now correctly show the order tracking number. This helps staff and customers match receipts with prepared orders more reliably, reducing confusion during pickup or service.
Original PR description
- Ensure the `tracking_number` is dipslayed on receipts for config which use a preparation dipslay or a preparation printer. task-id: 4922308 community PR: https://github.com/odoo/odoo/pull/222094
Fixed an issue in OCR manual correction where removing a selected box appeared to work but was not saved. This prevents boxes from incorrectly 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
Users can now mark scheduled activities as done even if the related Studio approval rule was deleted beforehand. This prevents an unexpected error and keeps Sales workflow activity handling uninterrupted.
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