Daily updates from Odoo
Friday, November 7, 2025
17 changes
4 changes
Enhancements to existing features
The Live Chat report’s “Day of Week” grouping now follows the first day of the week configured in each user’s language settings. This makes weekly reporting match local expectations and improves the accuracy and readability of report summaries for international teams.
Original PR description
**Current behavior before PR**: The "Day of Week" group by in the Live Chat report always treats Sunday as the start of the week, ignoring the "First Day of Week" configured in the user's language settings. **Desired behavior after PR is merged**: "Day of Week" group by now correctly takes into account the user's configured "First Day of Week", as set in their language settings. **task**-[4808640](https://www.odoo.com/odoo/project.task/4808640) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#213307
VoIP now uses the country information already stored in Odoo instead of relying on a hard-coded country-code URL. This fixes incorrect flags and country names for places such as Bonaire, Sint Eustatius, and Saba, making the displayed contact information more consistent and reliable.
Original PR description
Previously, we hard-coded the URL according to the country code to display a country flag. However, this is not the case for all countries. Countries like Bonaire, Sint Eustatius, and Saba use the flag of the Netherlands. Additionally, Bonaire, Sint Eustatius, and Saba are shown as Caribbean Netherlands, which is inconsistent with the data from our res.country model. This commit changes it to use the data from res.country. Task-5207454 Forward-Port-Of: odoo/enterprise#98756
This update makes the quote builder test suite more resilient when a third-party module changes the names of sales order statuses. It helps keep automated checks reliable without affecting normal business users directly.
Original PR description
### Description of the issue/feature this PR addresses: This ensures that `sale_pdf_quote_builder` tests pass even if a third party module that renames `sale.order` `state` selections has been installed. ### Current behavior before PR: Tests fail. ### Desired behavior after PR is merged: Tests pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232760
The system now explains more clearly when a file is rejected because it belongs to an uninstalled module or add-on. This should make troubleshooting faster by helping users and support teams understand the cause without digging into the code.
Original PR description
While working on a support ticket, I was faced with this exception handling: https://github.com/odoo/odoo/blob/49061347c181b1a451435bc363bb9508db8b6fab/odoo/addons/base/models/ir_asset.py#L344-L346 It might be nitpicky, but given the if condition, the exception error text could be more explicit about the fact that it's raised because the files in question being from an uninstalled addon/module. This might fast track troubleshooting without having to dive into the source code to understand why the error is being raised. There is always the possibility that I might be missing some context or other scenarios where this error could be raised. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#179889
2 changes
Enhancements to existing features
The test suite for PDF quote generation now handles alternative labels for sales order states more safely. This prevents test failures when another installed module customizes those state names, helping keep updates and integrations stable.
Original PR description
### Description of the issue/feature this PR addresses: This ensures that `sale_pdf_quote_builder` tests pass even if a third party module that renames `sale.order` `state` selections has been installed. ### Current behavior before PR: Tests fail. ### Desired behavior after PR is merged: Tests pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232760
This update makes an existing error message more explicit when files come from an uninstalled module or addon. It helps support teams and users understand the cause of the problem faster, reducing time spent tracing the issue in the code.
Original PR description
While working on a support ticket, I was faced with this exception handling: https://github.com/odoo/odoo/blob/49061347c181b1a451435bc363bb9508db8b6fab/odoo/addons/base/models/ir_asset.py#L344-L346 It might be nitpicky, but given the if condition, the exception error text could be more explicit about the fact that it's raised because the files in question being from an uninstalled addon/module. This might fast track troubleshooting without having to dive into the source code to understand why the error is being raised. There is always the possibility that I might be missing some context or other scenarios where this error could be raised. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#179889
5 changes
Enhancements to existing features
The Swiss payroll employee form now shows example names as placeholder text in the employee name field. This small usability improvement helps users understand the expected format when entering employee names.
Original PR description
* Add placeholder text to employee name field with Swiss cultural examples: "e.g. Roger Federer, Jean-Luc Godard, Johannna Spyri, ..." task-5102851
The SendCloud delivery integration has been tidied up to make its internal handling of service calls, settings, and access keys more consistent. This should make the delivery connection easier to maintain and reduce the risk of issues when managing SendCloud credentials, without changing day-to-day user workflows.
Original PR description
Cleanup of the SendCloud class calls, attributes and methods. Keys lifecycle management via context manager. task-5129801
Embedded content in Knowledge now reuses the editor’s shared selection handling instead of duplicating it in individual components. This makes editing interactions more consistent and easier to maintain, with no expected workflow disruption for users.
Original PR description
### generalize the embeddedEditable selection restoration `env.editorShared` now always contains `selection` shared functions, this commit removes obsolete assignations in embedded components. task-5189453 Forward-Port-Of: odoo/enterprise#97941
The time-off Gantt view now colors each time-off entry based on its time-off type instead of the employee. This makes the overview easier to read by helping managers quickly distinguish different kinds of leave.
Original PR description
Change the color of the Gantt pill from employee-wise to the time-off color. task-5215713
Salary adjustment amount and duration fields are now read-only once the record is closed. This helps prevent accidental changes to finalized payroll information and supports more reliable payroll records.
Original PR description
Set the `Amount` and `Duration` fields to be readonly when the state is closed. task-5155477
3 changes
Enhancements to existing features
This update adds automated testing for self-order flows that send orders to an IoT preparation printer. It helps ensure printing behavior keeps working reliably and reduces the risk of regressions in restaurant and kiosk setups.
Original PR description
This commit adds a tour to check that the self order can send an order on an IoT preparation printer.
This update makes the language import/export command easier to use by showing a helpful hint when a language is not yet installed. It also broadens language matching so users can find the right language using either the standard code or ISO code, reducing confusion around similar language file names.
Original PR description
When exporting/importing a language with the i18n export/import CLI tool we might forget installing the language in the database first. By providing a hint on how to do that, the user can easily copy the command to install it in his database and continue in what he was doing. We see that Python also gives similar hints when you make typos in a method name for example, so it is good to follow that fashion. A change has been added to also allow the search of languages for the command, with the `code`, other then only with `iso_code`.
This update adjusts the sale PDF quote builder tests so they do not depend on the exact names of sales order states. It helps the test suite remain reliable when another module customizes those state labels, reducing false failures without changing customer-facing behavior.
Original PR description
### Description of the issue/feature this PR addresses: This ensures that `sale_pdf_quote_builder` tests pass even if a third party module that renames `sale.order` `state` selections has been installed. ### Current behavior before PR: Tests fail. ### Desired behavior after PR is merged: Tests pass. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#232760
2 changes
Enhancements to existing features
The test selector system now supports an exact text match shortcut, making test scripts easier to read and maintain. This replaces more complex regular expression patterns with a clearer option, improving the developer experience without changing business behavior.
Original PR description
This commit adds the ':text()' pseudo-class to the list of supported pseudo-classes in Hoot selectors. Its purpose is the same as ':contains()', with the specificity of being an *exact* match instead of a *partial* one. It effectively replaces ':contains(/^<expression>$/)' by ':text(<expression>)', improving the readability and making the developer experience a bit nicer. Enterprise: https://github.com/odoo/enterprise/pull/98772 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update standardizes how test scripts look for text on screen, replacing older matching patterns with a clearer text-based approach. It helps keep automated checks more reliable and easier to maintain, without changing business functionality.
Original PR description
This commit replaces all found occurrences where ':contains' (with an exact match regular expression) could be replaced by ':text'. Community: https://github.com/odoo/odoo/pull/234331
1 change
Enhancements to existing features
This update makes bank statement checks run more efficiently by using a simpler database approach. It reduces processing time roughly by half, which helps large databases respond faster and lowers system load.
Original PR description
Description ----------- Avoid self-join of `account_bank_statement` that is done with a `Nested Loop` due to the `LATERAL`. Even if correlated, it requires two separate accesses to its index. Replaces it with a window function + `LAG` partitioned by the `journal_id`. This leads to a simpler plan (lower cost) and working in-memory instead of accessing disk pages (lower IO contention). Benchmark --------- On a database with 46k `account_bank_statement`, calling `_get_invalid_statement_ids` for all statements took: | [Before](https://explain.dalibo.com/plan/7605a4ddc42afbcf) | [After](https://explain.dalibo.com/plan/88d6ac1gee37aha3) | Speed-up | |--------|-------|----------| | 146ms | 72ms | 2x | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr