Friday, July 4, 2025
19 changes · saas-18.3
Enhancements to existing features
This update marks automated test steps that intentionally leave or reload a page, making those tests clearer and less error-prone. It helps reduce false failures in quality checks across several Odoo apps without changing day-to-day user behavior.
Original PR description
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#216977 Forward-Port-Of: odoo/odoo#216007
Automated tests across several Odoo apps now clearly mark the steps that reload or leave a page. This helps make quality checks more stable and reduces false test failures, without changing day-to-day user workflows.
Original PR description
Resolved issues and error corrections
This fixes an internal testing helper so drag-and-drop style interactions correctly reflect data added during a test. It helps prevent misleading test results and improves confidence in web interface quality without changing end-user functionality.
Original PR description
Before this commit, the 'types' property of datatransfers used in Hoot interactions was mocked to insert the initial types of the given 'items' and 'files'. However, this didn't account for the items added dynamically on the datatransfer object. The good thing is that it doesn't actually need to be mocked, since it already works with the given 'files' and 'items' types without having to override the 'types' descriptor. So the mock has been removed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217313
Code cleanup and technical improvements
This update simplifies and modernizes the internal testing tools used across several Odoo Enterprise modules. It helps maintain test quality and consistency while keeping the changes limited to unit tests, so there is no expected impact on day-to-day product use.
Original PR description
## Pull Request HOOT (PRHOOT) 34 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Community: https://github.com/odoo/odoo/pull/216546 Forward-Port-Of: odoo/enterprise#89308 Forward-Port-Of: odoo/enterprise#88949
Miscellaneous changes
This commit fixes this [runbot error](https://runbot.odoo.com/odoo/runbot.build.error/75847) which is triggered by a toolbar method called at an incorrect time in some instances. Sometimes the method could be called after the form view was exited. Which means that the iframe used by the mailing editor could trigger the method even though it is no longer in the DOM. This leads to a call to getSelection on a document that could no longer be displayed/present in the DOM. To fix this issue, whe
Original PR description
This commit fixes this [runbot error](https://runbot.odoo.com/odoo/runbot.build.error/75847) which is triggered by a toolbar method called at an incorrect time in some instances. Sometimes the method could be called after the form view was exited. Which means that the iframe used by the mailing editor could trigger the method even though it is no longer in the DOM. This leads to a call to getSelection on a document that could no longer be displayed/present in the DOM. To fix this issue, when the selection returned by the document is null (this.document no longer on the DOM), the method returns directly. task-4829204 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212056
In this commit, we add expectUnloadPage to steps that require it to explicitly declare that the step will cause the page to be unloaded. Forward-Port-Of: odoo/enterprise#89186 Forward-Port-Of: odoo/enterprise#88602
Invoice emails sent in batches now use the correct language for each customer's email button text. This prevents mixed-language invoice batches from showing the wrong translated label to some recipients, improving customer-facing communication accuracy.
Original PR description
**Issue**: When multiple invoices with different customer languages are sent and printed together, the invoice email button may appear with an incorrect translation for some of them. **Steps to…
**Issue**: When multiple invoices with different customer languages are sent and printed together, the invoice email button may appear with an incorrect translation for some of them. **Steps to reproduce**: - Open the Accounting app - Go to Customers > invoices - Create a new invoice with a customer with its language set to German - Create a new invoice with a customer with its language set to English - Go back to Customers > invoices - Select the two invoices just created and click on action > Sent & Print and then click on the Sent & Print button - Go to Settings > Technical > Email > Emails and check the two last emails. One of them should have the invoice email button wrongly translated **Cause**: Before sending an email, it retrieve the `type_name` using the lang of the customer https://github.com/odoo/odoo/blob/28c3b9cf10488536dce5a4927fdbe8fcd6e5a839/addons/account/wizard/account_move_send.py#L596C1-L605C14 This will trigger that compute method https://github.com/odoo/odoo/blob/a6368e8a5787f3067d09d79516a2924b3f1207f0/addons/account/models/account_move.py#L841C1-L850C67 which set the `type_name` of all the records. Since the compute method only depends on move_type, it does not recompute type_name per record. As a result, all records may share the same type_name, regardless of language context. Please notice that `type_name` is used to display the invoice email button in the right language. **Solution**: Make the compute method `_compute_type_name` depending to the lang parameter, thus it will use the right `type_name` for each email to send. opw-4748741 Forward-Port-Of: odoo/odoo#216811
The User Preferences page now correctly shows the title for the Email Signature field when the Calendar app is installed. This makes the settings screen clearer for administrators editing user profiles.
Original PR description
**Issue:** The "Email Signature" field title is missing in the User Preferences tab when calendar is installed. **Steps to reproduce:** 1. Ensure the Calendar app is installed. 2. Go to Settings > Users. 3. Open any user form and navigate to the Preferences tab. This patch mirror this commit: https://github.com/odoo/odoo/commit/af701b3e5bd9106c6ccea5b4a59b9e79424b3a26 by targetting the wrapping group instead of the field opw-4796115
This fix makes the automated sales signing check wait until the signature area is ready before confirming. It prevents false errors during testing and helps keep the online quote acceptance flow stable for customers.
Original PR description
In commit, we make sure that the signature is present in the modal before reaching the step where we click on "accept & sign". If the canvas is not yet loaded at this step, then there is an error message "Signature is missing". 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#217202 Forward-Port-Of: odoo/odoo#217099
This update improves Odoo's internal Hoot testing framework with fixes for search, test assertions, event handling, and debugging tools. It helps developers maintain test quality and performance while keeping changes limited to the unit test ecosystem, reducing risk for business users.
Original PR description
## Pull Request HOOT (PRHOOT) 34 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/88949 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217191 Forward-Port-Of: odoo/odoo#216546
This fix prevents checkout warnings when a customer's saved name contains accidental trailing spaces, such as after an import. It also helps imported text fields follow trimming rules so customer data stays cleaner and checkout proceeds as expected.
Original PR description
**Steps to reproduce:** 1. Install the website_sale app. 2. Import a user with trailing spaces in the Name field. 3. Make this user Admin in settings 4. Log in with that user and go to Website >…
**Steps to reproduce:** 1. Install the website_sale app. 2. Import a user with trailing spaces in the Name field. 3. Make this user Admin in settings 4. Log in with that user and go to Website > Shop. 5. Click on new and create a new product 6. Add this product to the cart and proceed to checkout. 7. The checkout form pre-fills the name (with trailing spaces). 8. fill other fields 9. Submitting the form triggers a warning due to changed name. **Expected behaviour:** - Name is not changed by us so it should let us checkout - There should not be trailing spaces in imported char fields if trim attribute is true **Issue:** - The name field from the form is trimmed in post request, but the value from the database (with trailing spaces) is used during comparison This results in a false positive change detection. - User's name with trailing spaces is because of Imported records does not check for trim attribute in backend but this is handled in ui. **Solution:** - Trim the database value before comparing it to the form input - Trim the values of char field before importing if trim attribute is true opw-4794220 Forward-Port-Of: odoo/odoo#215467 Forward-Port-Of: odoo/odoo#212040
This fix hides product unit-of-measure details across inventory, manufacturing, sales, purchase, and point of sale screens when the Units of Measure feature is not enabled. This reduces visual clutter and avoids confusing users with settings that are not active for their company.
Original PR description
**Description of the issue/feature this PR addresses:** Should not show product uom when the feature "Units of Measure" is not activated  --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216905 Forward-Port-Of: odoo/odoo#190006
This update improves internal testing for electronic invoice XML files by ensuring namespaces are validated as well as content. It helps prevent incorrect invoice formats from passing tests, reducing the risk of compliance or interoperability issues in localized electronic invoicing flows.
Original PR description
At the moment, the `assertXmlTreeEqual` test method doesn't check that the namespaces in the generated XML match the ones in the expected XML. This is a 'feature', but in practice it prevents us from ensuring that our generated XMLs are correct. From now on, we also check namespace equality. Enterprise PR: https://github.com/odoo/enterprise/pull/87950 task-none Forward-Port-Of: odoo/odoo#217182 Forward-Port-Of: odoo/odoo#214764
The event attendee calendar view no longer crashes when opened. This fix restores access to attendee scheduling information by making the event end date usable for calendar searches.
Original PR description
**Steps to Reproduce:** - Install the website and website_event module. - Navigate to Events -> Attendees -> Calendar View. Issue: - While accessing the calendar view, we are getting an error because that view needs the event_end_date field to be searchable. We have added search method for field [event_begin_date](https://github.com/odoo/odoo/pull/210532/files#diff-b8b0a21217ded7346150f1dd8353fbe2932e83f5e3d3755fd6e1c8281bb50c64R62) but missed it for event_end_date. opw-4892275 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Follower notification emails no longer show an extra divider between the message header and body. This small visual fix makes invitation and notification emails look cleaner and less confusing for recipients.
Original PR description
When adding an Odoo user as a follower to a lead/task/..., there are two separators between the message header and its body. This commit removes the extraneous separator. Steps to reproduce: - Open a lead/task/... - Add Marc Demo as a Follower - Toggle the option to have them notified task-4889715 Forward-Port-Of: odoo/odoo#217291
Fixed an issue where duplicated website views with the same key could cause the website editor to crash. The system now safely selects a single matching view, improving reliability for teams editing website pages.
Original PR description
When multiple `ir.ui.view` records exist with the same key (e.g., due to duplication), it can lead to a singleton error. **Steps to reproduce:** 1. Install the website module 2. Go to `Settings >…
When multiple `ir.ui.view` records exist with the same key (e.g., due to duplication), it can lead to a singleton error. **Steps to reproduce:** 1. Install the website module 2. Go to `Settings > Technical > User Interface > Views`. 3. Find and duplicate the **Home** view for **My Website** (same key). 4. Open the website home page in Editor mode. **Error:** `ValueError - Expected singleton: ir.ui.view(2776, 2774)` **Cause:** In `viewref()`, it uses `filter_duplicate()` to filter for the most suitable view, but it may return multiple views if more than one match the criteria. - [1] **Ref:** At [2], system uses `limit=1` in `_view_obj()` to ensure only one view is returned, even if duplicates exist for the same key. [1]: https://github.com/odoo/odoo/blob/edfa37271a0015a0d4acb17e6985a87e707e5f33/addons/website/models/website.py#L1228-L1230 [2]: https://github.com/odoo/odoo/blob/51fcbd211d2b1abf4b93becedbcbb9e03002cdd6/addons/web_editor/models/ir_ui_view.py#L326 **Fix:** This commit ensures that the result is a record set with at most one view and preventing singleton-related errors. sentry-6223988092 Forward-Port-Of: odoo/odoo#213113
The bank reconciliation report now shows amounts with the correct currency when journal entries come from a journal using a different currency than the company. This prevents misleading balances where a company-currency amount was displayed with the journal currency symbol.
Original PR description
…eport Currently in bank reconciliation report we expect all the entries to have the balance encoded in journal currency However it may not be the case if an entry is posted in a misc journal set in another currency Steps to reproduce: - Create a new journal in another currency (€) than the company's ($) - Create a new journal entry using the journal main account - Go to the account dashboard > click on the 3 dots of the journal - Open the Reconciliation report Issue: The journal entry amount is in company curreny (balance), but with the journal currency symbol (€) opw-4701349 Forward-Port-Of: odoo/enterprise#89321 Forward-Port-Of: odoo/enterprise#87313
This fix strengthens automated checks for electronic payment and invoicing documents by ensuring XML namespace details are validated correctly. It updates expected test files so localization and bank payment formats are verified more accurately, reducing the risk of unnoticed compliance issues in future changes.
Original PR description
Before, we weren't asserting XML namespaces when calling `assertXmlTreeEqual`. As a result, many expected XMLs in EDI tests had incorrect namespaces. Now that we change the test method to check namespaces, we also need to fix the expected XMLs. Community PR: https://github.com/odoo/odoo/pull/214764 task-none Forward-Port-Of: odoo/enterprise#89303 Forward-Port-Of: odoo/enterprise#87950
Partner Ledger XLSX exports now include entries without an assigned partner when users search for "Unknown Partner". This ensures the downloaded report matches what users see on screen and prevents missing accounting lines in exported documents.
Original PR description
### Issue: When searching for "Unknown Partner" in the Partner Ledger to get the lines with no partner, nothing shows on the downloaded XLSX. ### Steps to reproduce: - Have a partner Ledger with -…
### Issue:
When searching for "Unknown Partner" in the Partner Ledger to get the lines with no partner, nothing shows on the downloaded XLSX.
### Steps to reproduce:
- Have a partner Ledger with
- Search for "unknown Partner" in the search bar, only the lines grouped under "Unknown Partner" are shown.
- Click on the button "XLSX"
- The downloaded document does not include "Unknown Partner"
### Cause:
When `filter_search_bar` has a value, the domain used to query the partners/lines will check if the names of the partner match the search text. The resulting SQL query excludes the lines where `partner_id` is `NULL`.
### Solution:
Add a new condition in the domain: `('partner_id', '=', False)` This way the lines with no partner are returned by the query
When searching another existing partner these lines are excluded by an [already existing filter](https://github.com/odoo/enterprise/blob/8eff9194618a1d181c57820829e53aa23c7759d5/account_reports/models/account_partner_ledger.py#L55-L58). It excludes the lines if the search test does not match "Unknown Partner".
opw-4772529
Forward-Port-Of: odoo/enterprise#88139This PR introduces new product-level codes for l10n_pe, in accordance with the latest updates from SUNAT: ### Withholding codes (detracciones): - Code `044`: Servicio de beneficio de minerales metálicos gravado con el IGV - Code `045`: Minerales de oro y sus concentrados gravados con el IGV These were added to the `l10n_pe_edi` module. ### Tariff fractions: 39 new values were added based on the SUNAT's updated list of tariff fractions for delivery guides. These were added to t
Original PR description
This PR introduces new product-level codes for l10n_pe, in accordance with the latest updates from SUNAT: ### Withholding codes (detracciones): - Code `044`: Servicio de beneficio de minerales metálicos gravado con el IGV - Code `045`: Minerales de oro y sus concentrados gravados con el IGV These were added to the `l10n_pe_edi` module. ### Tariff fractions: 39 new values were added based on the SUNAT's updated list of tariff fractions for delivery guides. These were added to the `l10n_pe_edi_stock` module. **Source:** https://cpe.sunat.gob.pe/sites/default/files/inline-files/AjustesValidacionesCPEv20250421.xlsx Forward-Port-Of: odoo/enterprise#87138