Daily updates from Odoo
Monday, July 7, 2025
22 changes
6 changes
Enhancements to existing features
This update reduces duplicate server requests and reuses cached grouped data in list and kanban views, helping screens load faster and putting less load on servers. Project task template data is also cached so project task views can benefit from these performance improvements.
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
Saudi e-invoicing journals now use unique names and automatically generated serial numbers during onboarding. This reduces setup errors and prompts existing users to re-onboard journals that may have duplicate identifiers.
Original PR description
… common name to be unique per journal Previously, the company name was used as the common name when onboarding the journal. However, the common name has to be unique. The fix changes the common name to use the journal's short code, journal name, and company name to ensure uniquness. Additionally, an improvement is applied to the serial number on journals. Previously, users inputted this field manually. Now, the system uses the journal's id as the serial number to ensure uniqueness. A post-migration script was added to notify users that they need to re-onboard their journals. This is done in case users previously onboarded journals with non-unique serial numbers. task-4797124 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217120 Forward-Port-Of: odoo/odoo#215012
The website builder now displays an image size tag when editors select an image or an element with a background image. This helps content teams quickly understand image dimensions while editing pages, making it easier to choose appropriately sized visuals.
Original PR description
In the website builder in edit mode, when clicking on an image or an element with a background image there is no way of knowing its size. This is why a tag to indicate the size of the image was added.
The website page options walkthrough has been updated to work with the redesigned website builder. This restores automated checks that help ensure page configuration tools keep working reliably for users.
Original PR description
The 'website_page_options' tour was previously broken due to DOM structure changes introduced by the new website builder and was consequently disabled. This commit updates the tour steps to align with the new DOM and re-enables the associated test. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Aged Partner reports now use invoice date information already available in accounting line data instead of looking it up from a separate table. This reduces unnecessary database work and can significantly speed up report generation on large accounting databases.
Original PR description
The Aged Partner reports query in `_aged_partner_report_custom_engine_common` is joining on the `account_move` table solely to get the `invoice_date` column. As this `invoice_date` is aggregated in `ARRAY_AGG(DISTINCT invoice_date)` and there's already a denormalized field `invoice_date` on `account_move_line` that is a related stored field, we can drop the join and use this field instead. This saves us the need to scan the account.move table when running the reports query. In a database with 37M amls, 10M account.move (and a really bad correlation for account_move_line.move_id), this saves us around 10 minutes for the Aged Receivable report's query. Forward-Port-Of: odoo/enterprise#89325
Employee contract version lists now show the yearly cost next to the wage by default. This gives HR teams a clearer view of total compensation costs without opening each individual contract version.
Original PR description
In this PR, we added the yearly cost field to the version list to the right to the wage and will be visible by default. Related task: 4901173.
5 changes
Enhancements to existing features
IoT devices are now shown with a cleaner, formatted name where supported, such as in the Point of Sale configuration dropdown. This makes it easier for users to identify the device, its connection, and its IoT box at a glance.
Original PR description
Before this commit, IoT device names would dislplay in the format '[iotbox] Device Name'. After this commit, in environments with formatting enabled (such as the device dropdown when configuring in POS), we show the name with the following format: Device Name Connection IoT box Where Connection and IoT box are using muted text. task-4922608 
The IoT app now shows each device's connection status directly in the device list. This helps users quickly identify whether devices are online or disconnected without opening individual records.
Original PR description
This PR adds the connection status to the device list view in the iot app
The IoT device screens are cleaner and easier to scan. Devices are now shown with connected items first, then by name, and their connection status is visible directly in the IoT Box form.
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, 4922623The dialog shown when an IoT Box is found has been updated to make the setup experience easier for users. This should help users understand the next steps more clearly when connecting IoT hardware.
Original PR description
We updated the IoT Box found dialog in order to ease user experience. Task: 4922620
Aged receivable and payable reports now avoid an unnecessary data lookup when preparing invoice date information. This improves report loading time on large accounting databases, potentially saving several minutes for businesses with very high transaction volumes.
Original PR description
The Aged Partner reports query in `_aged_partner_report_custom_engine_common` is joining on the `account_move` table solely to get the `invoice_date` column. As this `invoice_date` is aggregated in `ARRAY_AGG(DISTINCT invoice_date)` and there's already a denormalized field `invoice_date` on `account_move_line` that is a related stored field, we can drop the join and use this field instead. This saves us the need to scan the account.move table when running the reports query. In a database with 37M amls, 10M account.move (and a really bad correlation for account_move_line.move_id), this saves us around 10 minutes for the Aged Receivable report's query. Forward-Port-Of: odoo/enterprise#89325
6 changes
Enhancements to existing features
This update modernizes how filters are handled across Documents, Planning, Project, and related industry apps. It should make internal search and filtering behavior more consistent and easier to maintain, with minimal direct impact on day-to-day users.
Original PR description
task-4280707 odoo/odoo#217132
The live chat information panel now shows more customer context, including open leads, open helpdesk tickets, chatbot answers, and conversation outcomes. This helps support and sales teams understand a visitor's situation faster and respond more effectively without switching screens.
Original PR description
Adding following features to info panel: - Display open leads in info panel - Display open tickets in info panel - Display chatbot answers in info panel - Display outcome in info panel follow up of task-4771890 Forward-Port-Of: odoo/enterprise#89573
Product cards in the online shop have been visually refreshed to provide a cleaner, more consistent shopping experience. This helps customers browse products more easily and supports a more polished storefront presentation.
Original PR description
Requires: - https://github.com/odoo/odoo/pull/214744
Helpdesk ticket stages now use consistent colors across views, making it easier for teams and customers to recognize a ticket's status at a glance. This improves visual clarity in Helpdesk and related project views without changing the underlying workflow.
Original PR description
This commit's purpose is to add a color consistency within helpdek stage. This will help to tell with one glance in which stage the ticket is.
Aged Receivable and related partner aging reports now avoid an unnecessary database lookup when calculating invoice dates. This can significantly reduce report loading time on very large accounting databases, improving day-to-day finance reporting performance without changing report results.
Original PR description
The Aged Partner reports query in `_aged_partner_report_custom_engine_common` is joining on the `account_move` table solely to get the `invoice_date` column. As this `invoice_date` is aggregated in `ARRAY_AGG(DISTINCT invoice_date)` and there's already a denormalized field `invoice_date` on `account_move_line` that is a related stored field, we can drop the join and use this field instead. This saves us the need to scan the account.move table when running the reports query. In a database with 37M amls, 10M account.move (and a really bad correlation for account_move_line.move_id), this saves us around 10 minutes for the Aged Receivable report's query. Forward-Port-Of: odoo/enterprise#89325
Labels related to the last refresh and last synchronization have been updated to make online bank synchronization terminology easier for users to understand. This helps reduce confusion when reviewing synchronization status and recent activity.
Original PR description
This commit will change the terms of the last_refresh and last_sync to make some terms on the online synch clearer for the users. task-4890067
5 changes
Enhancements to existing features
Shared helper code for tax-related invoice tests was moved into a common testing area. This makes the accounting test suite easier to maintain and helps future tax changes be validated more consistently, without changing customer-facing behavior.
Original PR description
…tInvoicingCommon --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The accounting journal dashboard has been adjusted so activity information can be customized more easily by related accounting features. This supports more dynamic styling and presentation of dashboard activities, helping future enhancements appear consistently for users.
Original PR description
This commit applies the necessary changes to make the json_activity_data field of account.journal extensible. The field computation needed to be extended in account_reports to make dashboard activities styling more dynamic. More details can be found in the enterprise PR: https://github.com/odoo/enterprise/pull/89331 backport of: https://github.com/odoo/odoo/commit/dce24cd242e16afde008ac907faa5f496725ae68 task-4370133 task-4458309 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#202249
Account merging now avoids loading very large volumes of accounting entries when updating the merged account code. This reduces the risk of memory errors and makes the process much faster for companies with large accounting databases.
Original PR description
### Issue --> The final step of the `_action_merge` method updates the `code` field of the account onto which the other accounts are merged. During the write call on `code`, a dependent field…
### Issue --> The final step of the `_action_merge` method updates the `code` field of the account onto which the other accounts are merged. During the write call on `code`, a dependent field `always_tax_exigible` on `account.move` gets added to the compute chain. This causes a fetch of all `account.move` records related to journal items related to the account that is getting updated. This can lead to a MemoryError on databases with large `account.move` tables. ### Solution --> We delegate the write of the `code` field to SQL. In the account merge wizard, accounts that can be grouped are grouped by the keys --> `'account_type', 'non_trade', 'currency_id', 'reconcile', 'deprecated','name'`. Therefore, the `account_type` does not change after the merge. We can safely assume that any fields dependent on `account_type` do not need recomputation and hence, bypass the ORM for this update. ### Benchmark --> For an account with ~1.17M related `account_move_lines` and ~570k `account_moves`, | Before Fix | After Fix | |--------|--------| | TO/Memory error past TO | ~24s | #### Additional change --> Disable the prefetcher in the write call in `account.account` to optimize memory usage on databases with a large number of journal items/journal entries when writing on `code` or `account_type` in general. opw-4839985
French VAT reporting can now submit an empty declaration when there is no tax to report, reducing manual work and preventing blocked filings. If an electronic submission fails, the system creates a follow-up activity on the closing entry so users can spot and resolve the issue without logging into each company separately.
Original PR description
There were 2 missing points in the tax report export in France: 1. Not possible to send empty tax report 2. The only way to know if a tax report has an error is to connect to the company This commit solves these issues by the following: 1. Adding `zone KF` to the XML export (and showing a user a warning with `check box "déclaration néant" checked`) which allows for sending empty tax report 2. If the EDI export is in error, an activity is added to the closing entry like the following https://app.excalidraw.com/l/65VNwvy7c4X/7ed0dmqcHNM backport of: https://github.com/odoo/enterprise/commit/fecbd62eeef4e6041403bff53a3b53fb8237a0cb task-4370133 task-4458309
Colombian localization now retrieves customer name and email from the official DIAN service using only the identification type and number. This helps businesses comply with Colombian rules limiting what customer information they can request directly.
Original PR description
The Colombian government restricts the information a company can ask from their customers to only their identification type and number. The other data (name and email) is required to be fetched from the DIAN service. task: 4796355