Daily updates from Odoo
Friday, November 7, 2025
30 changes
5 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 speeds up stock move validation by avoiding repeated recalculation of the same location hierarchy data for each move line. As a result, large transfers complete significantly faster, reducing waiting time for users handling inventory operations.
Original PR description
Previously when validating a movement with a location that is used in a rule, move_dest_ids was set which led to it going to check the putaway strategy. The bottleneck was the computation of the computed field child_internal_location_ids which is the same across all smls. This PR utilizes the fact that the smls in the same stock_move would have the same destination location and by proxy the same child_internal_location_ids Speed up: 1000 stock move lines: Before: 2 mins After: 1 mins --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233467 Forward-Port-Of: odoo/odoo#210142
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
3 changes
Enhancements to existing features
This change reduces the time needed to validate stock movements by avoiding repeated recalculation of the same location data. For businesses, this means faster processing of warehouse operations, especially when handling many move lines at once.
Original PR description
Previously when validating a movement with a location that is used in a rule, move_dest_ids was set which led to it going to check the putaway strategy. The bottleneck was the computation of the computed field child_internal_location_ids which is the same across all smls. This PR utilizes the fact that the smls in the same stock_move would have the same destination location and by proxy the same child_internal_location_ids Speed up: 1000 stock move lines: Before: 2 mins After: 1 mins --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#233467 Forward-Port-Of: odoo/odoo#210142
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
9 changes
Enhancements to existing features
Argentinian electronic invoicing now supports issuing credit and debit notes without linking them to an original invoice. Users can define the related period dates so these standalone notes can be submitted correctly to AFIP for CAE authorization.
Original PR description
Purpose: Users will be able to issue credit/debit notes separately without needing an original invoice or document by setting the start date and end date of the associated period. Issuing standalone credit/debit note is a common practice related to periods, such as annual bonuses, that covers a span of time. To support the purpose, two new date fields will be added: - l10n_ar_afip_asoc_period_start - l10n_ar_afip_asoc_period_end These fields that represent the associated period must be sent in the AFIP XML request for the CAE in order to issue standalone credit/debit notes. This is solely intended for the 'Electronic Invoice - Web Service(FE)". task-5221539
This update improves VoIP support for mobile and web app users, especially around incoming calls and mute controls. It adds groundwork for faster call notifications and external telephony provider integration, helping users respond to calls more reliably on mobile devices.
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
The journal audit report has been refined to make tax and journal details easier to read and navigate. The update improves table sizing, hover behavior, and adds review status visibility for journal entries, helping accounting teams audit records more efficiently.
Original PR description
task-5207451
UAE payroll payslips now include an issue system for Wage Protection System processing. This helps payroll teams identify and manage potential payslip problems before or during WPS handling, improving compliance and operational follow-up.
Original PR description
-Issue system in payslips has been introduced to UAE WPS.
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
7 changes
Enhancements to existing features
A dedicated payslip report has been added for Saudi Arabia payroll. It simplifies the standard printout by removing fields that are not needed and updates the layout to better match local payroll requirements.
Original PR description
- Introduce a dedicated payslip printout tailored for Saudi localization. - Remove unnecessary fields from the default format and adjust the layout to match Saudi payroll requirements. Task: 5126583
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
The barcode test suite now uses dedicated test data instead of relying on the live default warehouse and company. This makes the tests less sensitive to unrelated configuration changes and reduces flaky failures, while also improving test speed in some cases.
Original PR description
*: stock_barcode_mrp, stock_barcode_mrp_subcontracting, stock_barcode_picking_batch Until now, the default warehouse (WH) was the warehouse used in the `stock_barcode` tests which means all the tests depends of it and are influenced by the changes done in this warehouse (like changes done by the demo data.) A better way to run the tests would be to use a warehouse created for this occasion, and what a chance, that's why this commit does! Incidentally, this commit also fixes [runbot built error 233274](https://runbot.odoo.com/odoo/runbot.build.error/233274) **Community PR:** odoo/odoo#234483
The live chat info panel now lets users assign expertises directly to a conversation. This makes it easier to classify chats, route them to the right people, and quickly find related conversations without leaving the panel.
Original PR description
The live chat info panel shows expertises linked to the chat. However, it's not possible to assign expertises to the chat (only available from the chat bot script). Expertises are useful to quickly identify which kind of help is needed on a chat, or to find conversations about the same topic. This commit allows to add expertises from the channel info panel. task-5190361 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
The Odoo PWA now displays the number of pending Discuss notifications directly on the app icon. This helps users quickly see if there are unread chats or messages even when the app is closed.
Original PR description
This commit adds a badge counter with global discuss counter on the PWA app icon, which helps a lot in knowing how many chat notifications are pending in the PWA when the Odoo app is not open. Task-5136354 
5 changes
Enhancements to existing features
Odoo now automatically shortens product names and descriptions so they meet Indian e-invoicing and e-waybill character limits. This helps prevent document generation issues and reduces the risk of rejected submissions to the authorities.
Original PR description
Product descriptions in invoice lines must comply with character limits: - E-invoicing: maximum 300 characters - E-waybill: maximum 100 characters for both product names and descriptions Descriptions exceeding these limits are automatically truncated in the generated JSON. Task [link](https://www.odoo.com/odoo/project.task/5061450) task-5061450 Forward-Port-Of: odoo/odoo#228548
This change prevents message tracking from failing when related records do not have a display name. Instead of crashing, the system now falls back to a default label, improving reliability for users working with one-to-many and many-to-many fields.
Original PR description
Description of the issue/feature this PR addresses: Addresses: https://github.com/odoo/odoo/issues/178883 Same issue is also in 18.0. Is there a separate PR necessary or will this be ported forward? Current behavior before PR: An error is displayed when tracking is activated on one2many and many2many with records without display_name. Desired behavior after PR is merged: Should not crash and use fallback like in other cases. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change speeds up stock move validation by avoiding repeated calculations of the same destination location details for every move line. It reduces processing time for large movements, which means quicker warehouse operations and less waiting during high-volume tasks.
Original PR description
Previously when validating a movement with a location that is used in a rule, move_dest_ids was set which led to it going to check the putaway strategy. The bottleneck was the computation of the computed field child_internal_location_ids which is the same across all smls. This PR utilizes the fact that the smls in the same stock_move would have the same destination location and by proxy the same child_internal_location_ids Speed up: 1000 stock move lines: Before: 2 mins After: 1 mins --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210142
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