Daily updates from Odoo
Tuesday, July 8, 2025
17 changes · master
Enhancements to existing features
This update improves and fixes the Hoot testing tools used by Odoo's development teams. The changes are limited to the unit test ecosystem, reducing risk for business operations while helping developers maintain software quality more consistently.
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#89528 Forward-Port-Of: odoo/enterprise#88949
Demo and test payroll employee accounts across multiple country-specific payroll modules are now created without preset passwords. This avoids unnecessary password processing during setup while keeping access possible if someone manually sets a password later.
Original PR description
These users are created in order to create demo / test employees. They're not used for tours or other log-in requirements. As such they don't need a password, and all that does is burn CPU (as the password needs to be hashed on user creation). The cost is not huge in the grand scheme of things, but it's unnecessary. If someone wants to log out as a payroll demo employee for reasons, they can set a password by hand. Same for tests.
Website builder options can now better coordinate updates that take longer to complete, reducing the risk of inconsistent settings while editing pages. This supports smoother configuration for website appointment and studio form options without changing the user-facing workflow.
Original PR description
Whenever there is a need to update the state of a builder option asynchronously, we need all the options to await for the state of all other options to be updated. This commit makes allow any options that need to update the state of the builder options asynchronously to do so by using the useDomState hook. Forward-Port-Of: odoo/enterprise#86450
This update improves the automated checks around tax reports, helping ensure financial reporting continues to work as expected. It supports more reliable accounting workflows by catching issues earlier before they affect users.
The Knowledge app’s internal performance tests were updated to reflect that property values are now tracked when a parent item changes. This keeps automated checks aligned with the current behavior and helps maintain reliability without changing day-to-day user workflows.
Original PR description
Purpose ======= Now, the properties values are tracked when the parent change. Adapt the queries count tests. Task-3644407
The IoT device search no longer includes an unnecessary grouping by IoT Box, making the view simpler to use. Device lists inside an IoT Box now show connection status and prioritize connected devices, helping users find relevant devices faster.
Original PR description
We previously added an unnecessary `group by` IoT Box in the IoT device search view. It is now removed.
We also sorted devices by connection desc and name in the iot device list view in the iot box form view,
and displayed the connected/disconnected status.
Tasks: 4922609, 4922638, 4922623
Forward-Port-Of: odoo/enterprise#89601Resolved issues and error corrections
Users can now open Studio from the Documents app even when a document shortcut is selected. This prevents an error that interrupted customization workflows in Documents.
Original PR description
Steps: - Install `documents` and `studio` - Open documents, go to list view - Select a random file and 'Create a shortcut' via the actions - Try to open studio - traceback opw-4900667 Forward-Port-Of: odoo/enterprise#89508
This fix ensures field service tasks opened from the calendar use the intended form layout. It keeps the scheduling workflow consistent after a related platform change, reducing the chance of users seeing the wrong task screen.
Original PR description
This commit is the counter part of odoo/odoo#216631 which removes a parameter to the editRecord function. Task-4910395 Forward-Port-Of: odoo/enterprise#88987
The barcode backorder dialog now avoids overlapping column headers on very small screens, especially in languages with longer labels such as French. This makes partial receipt processing easier to read and use on mobile or low-resolution devices.
Original PR description
Issue ----- When processing partial receipts on small resolution screens, the incomplete transfer window has an overlap of its headers for translations with long terms. Steps to reproduce ----- - Set…
Issue ----- When processing partial receipts on small resolution screens, the incomplete transfer window has an overlap of its headers for translations with long terms. Steps to reproduce ----- - Set DB language to French - On Inventory>Configuration>Operation Types, configure the operation type "receipts" to create backorders on "Ask" - Create an incoming transfer - Open barcode on a low resolution screen (eg 340x400px) - Open the transfer in barcode - Process part of the quantity - Validate the partial transfer --> The "Terminé /" & "A faire" column headers overlap Cause ----- The resolution is not wide enough to fit the headers without word break. However breaking words isn't a suitable solution either as it makes headers unreadable. For example, "Terminé /" & "A faire" would read as "Term A " " iné fair" " / e " Given that the 2 columns are semantically related, we can merge their headers together without losing readability. Visual comparison ----- Low resolution before (left) & after the fix (right).  Desktop display is a bit affected but still readable.  ----- Ticket: opw-4715939 Forward-Port-Of: odoo/enterprise#89391 Forward-Port-Of: odoo/enterprise#87177
Partner Ledger XLSX exports now correctly include entries without an assigned partner when users search for “Unknown Partner.” This ensures downloaded reports match what users see on screen and prevents missing ledger lines in exported files.
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 change makes automated checks for the Brazilian POS electronic invoicing flow wait for product searches in a more reliable way. It reduces false test failures in build environments, helping teams keep releases moving without changing customer-facing behavior.
Original PR description
The tours regularly fail in single app builds because the "No other products found" notification is not found. Waiting on that notification is necessary because the product search happens asynchronously. I was not able to reproduce the test failure locally. But in an attempt to improve the situation this changes the approach to use the little "loading" spinner to wait on the search to finish by using Chrome.isSynced(). This method is used elsewhere in POS tests and should hopefully be less flaky. builx_error-224202 Forward-Port-Of: odoo/enterprise#88300
This change removes an unnecessary journal field from UK Bacs direct debit mandates because journal handling is already managed on the related payments. This reduces duplicate setup information and helps avoid confusion when managing direct debit mandates.
Original PR description
There's no reason that we have this Journal field on the mandate as all related journal logic in the payments themself. task-4630586
Installing Field Service Sales no longer fails if the default Services product category was previously deleted. This prevents an installation blocker and lets businesses enable the module without restoring that category manually.
Original PR description
Currently a ParseError is arising when the user installs the `industry_fsm_sale` module after deleting the `Services` in Product Categories/Configuration. Steps to reproduce: --- - Install…
Currently a ParseError is arising when the user installs the `industry_fsm_sale` module after deleting the `Services` in Product Categories/Configuration.
Steps to reproduce:
---
- Install `Invoicing` application (without demo data).
- Invoicing > Configuration > Product Categories > Delete `Services`
- Now install `industry_fsm_sale` module
Traceback:
---
```py
ValueError: External ID not found in the system: product.product_category_services
ParseError
while parsing /home/odoo/src/enterprise/saas-18.3/industry_fsm_sale/data/industry_fsm_data.xml:5, somewhere inside <record id="field_service_product" model="product.product">
<field name="name">Field Service</field>
<field name="project_id" search="[('id', '=?', ref('industry_fsm.fsm_project', raise_if_not_found=False)), ('is_fsm', '=', True)]"/>
<field name="service_tracking">task_global_project</field>
<field name="type">service</field>
<field name="categ_id" ref="product.product_category_services"/>
```
The error occurs because the user deleted `Services` in Product Categories, and then tried to install the other module.
This commit resolves the error by providing a False value for the field if the product category is missing.
sentry-6377659355
Forward-Port-Of: odoo/enterprise#89510The Studio "New Model" dialog now closes as soon as users confirm their action, instead of lingering briefly while the system responds. This removes a small visual flicker and makes the model creation flow feel smoother and more responsive.
Original PR description
This commit fixes a minor UX issue where the "New Model" dialog in Studio would remain visible briefly after confirmation, causing a flicker while waiting for the server response. The dialog now closes immediately upon confirmation, providing a smoother user experience. task-4809049 Forward-Port-Of: odoo/enterprise#88964
Code cleanup and technical improvements
The Belgian prorata reporting functionality has been merged into the main Belgian reports module. This simplifies the product structure and maintenance without introducing a major user-facing change.
Original PR description
Everything is in the commit message, just cleaning the codebase. task-4850415
Miscellaneous changes
Some po files were mistakenly added to either deleted modules or weren't necessary during translation syncs across versions. This commit cleans up those files. Also delete leftover pot files with mismatching names to modules Forward-Port-Of: odoo/enterprise#89297
Original PR description
Some po files were mistakenly added to either deleted modules or weren't necessary during translation syncs across versions. This commit cleans up those files. Also delete leftover pot files with mismatching names to modules Forward-Port-Of: odoo/enterprise#89297
During odoo/enterprise#60393 some po files that had been deleted in odoo/odoo#172429 and odoo/odoo#172269 were re-added in. We remove them now as they are out of date + are not reachable to be translated/fixed without a PR. Forward-Port-Of: odoo/enterprise#89301
Original PR description
During odoo/enterprise#60393 some po files that had been deleted in odoo/odoo#172429 and odoo/odoo#172269 were re-added in. We remove them now as they are out of date + are not reachable to be translated/fixed without a PR. Forward-Port-Of: odoo/enterprise#89301