Daily updates from Odoo
Wednesday, July 8, 2026
36 changes
12 changes
Enhancements to existing features
This update adds missing translations for customer- and staff-facing messages across Point of Sale modules. It makes dialogs, errors, alerts, and warnings easier to understand for users working in supported languages.
Original PR description
pos* = All POS module In this commit: -------------------------------- Add missing translations for user-visible strings across POS modules. - Translated dialogs, errors, alerts, and other UI-visible messages - Updated Python-side UserError, ValidationError, and warning messages Task-5406947 Related PR-https://github.com/odoo/odoo/pull/239972 Forward-Port-Of: odoo/enterprise#122511 Forward-Port-Of: odoo/enterprise#102094
UK VAT returns now warn users when the selected company belongs to a tax unit and guide them to file using that tax unit. When a return covers a tax unit, Odoo uses the tax unit's VAT number for HMRC connection and submission, helping avoid filing under the wrong company VAT number.
Original PR description
BEFORE: - Before this commit, when the current company is a member of the tax unit, there is no blocking level error for the user to select the tax unit. - And the vat used while creating a connection to the HMRC or while sending a tax report to the HMRC is of the current company. AFTER: - After this commit, there is one blocking level error, which tells the user that the current company is part of a tax unit, and on confirmation, the tax unit will automatically be selected for the current report. - And if the return contains the data of a tax unit, then the vat set on the tax unit will be considered while establishing the connection and sending the tax report to HMRC. Task-5865605 Forward-Port-Of: odoo/enterprise#122965 Forward-Port-Of: odoo/enterprise#107253
Hong Kong payroll now participates in the automatic payroll data update process. This helps keep standard, unedited salary rules up to date without manual intervention, improving ongoing payroll accuracy and supportability.
Original PR description
Currently, the "Payroll: Update data" cron doesn't work for HK payroll as we never set up the _get_data_files_to_update. We can set up the list of data files to keep up to date to better support our users by automatically keeping non-edited salary rules up to date. task-6360339 Forward-Port-Of: odoo/enterprise#122777
Manufacturing shop floor users can now update the most recent timer entry or create one when no entry exists. This helps keep work order time tracking accurate when someone forgets to start or stop the timer.
Original PR description
The "Update Time Log" dialog inside shopfloor is added to increase the timer's reliability by manually entering the desired time. If someone forgot to start or stop the timer, this option now enables them to edit their last entry on the timer's list, or create a new one if none was found. Task: 6164336
The printer settings now only show the oBox IP field when it is relevant for ePOS printers. The interface also hides technical service details from the oBox view, making setup cleaner and easier for users.
Original PR description
This PR adapts the view to only allow the user to set obox ip if the type of printer used is epos as it doesnt matter otherwise It also hides the services installed on the obox as it's not useful for the user task-6330864
Belgian blackbox POS sessions now warn cashiers when they need to be closed within the required 24-hour window, helping businesses stay compliant with fiscal reporting rules. Session and sale detail reports also better reflect negative quantities and refunds, and self-ordering with a blackbox now requires the appropriate Belgian self-ordering module.
Original PR description
Belgian fiscal regulations require a blackbox POS session to be closed at least once every 24h so the Z reports are sent to the FDM. The POS now warns the cashier once the session should be closed. Also: - include negative lines of regular orders in the negative quantities summary of session reports, and show them as positive amounts in the refund tables of the sale details report as required by the SPF - require `l10n_be_pos_blackbox_self_order` when self-ordering (mobile/kiosk) is enabled with a blackbox community PR: https://github.com/odoo/odoo/pull/273994 Forward-Port-Of: odoo/enterprise#122411
The Azerbaijani Manat currency symbol has been updated to its official Unicode character, ₼. This improves consistency and makes currency display more accurate for users working with AZN.
Original PR description
This commit updates the base currency symbol for the Azerbaijani Manat (AZN) to its official Unicode character '₼'. Related Upgrade PR: https://github.com/odoo/upgrade/pull/10107 task-6112867 Forward-Port-Of: odoo/odoo#262471
The forum editor toolbar has been simplified by removing options that are not needed in that context, and its styling has been adjusted to stay consistent with the forum design. This update also fixes an issue that could cause errors when opening table editing tools, improving the editor’s reliability for forum users.
Original PR description
Description of the feature this PR addresses: - Remove unwanted toolbar features (heading, font_family, powerbuttons, undo/redo buttons) - Update toolbar styles in website_forum to keep them consistent - Fix table menu traceback by passing missing `localOverlayContainers` in `website_forum_wysiwyg` config task-6123698 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#274139 Forward-Port-Of: odoo/odoo#263326
This change speeds up the creation of backorders when validating receipts with many operations. It reduces processing time and avoids database memory errors, so large warehouse receipts are much less likely to time out.
Original PR description
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of…
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of moves in the picking, and M is the number of moves being processed for valuation. This happened while computing price units for moves one by one: each move filtered all picking moves to find the ones with the same `product_id`. Another issue was a PostgreSQL `"memory exhausted"` error caused by generating a large number of OR'ed conditions, equal to the number of processed moves. ## The Solution The massive filtering was fixed by filtering moves of the `purchase_line` instead of the `picking`, which is typically associated with only a few moves. This is still correct as the loop just after already ignores moves that don't have the same `purchase_line_id` of `self` anyways. The PostgreSQL error was fixed by grouping moves by `location_dest_id` and generating one condition per location using an `in` clause, which is typically much smaller than generating one condition per move. ## Benchmark Benchmark on a customer database, validating a receipt with 10k+ operations by creating a backorder: ```text Time: timeout -> 6 min ``` OPW-6272667 Forward-Port-Of: odoo/odoo#273555 Forward-Port-Of: odoo/odoo#269350
This change makes the tax supply date available for German accounting documents. It helps businesses record taxes more accurately according to the relevant supply date, improving compliance and consistency in tax reporting.
Original PR description
Forward-Port-Of: odoo/odoo#272461
This update refreshes the web editing engine to the latest Owl version used by Odoo. It helps keep the platform aligned with the newest underlying framework changes and avoids issues caused by internal API changes in the editor.
Original PR description
Release notes: https://github.com/odoo/owl/releases/tag/v3.0.0-alpha.42 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
This update brings back automated tests for the French POS payment and invoicing flow that were temporarily removed during a previous merge. It helps ensure the process keeps working correctly and reduces the risk of regressions in future changes.
Original PR description
During the merge of l10n_fr_pdp e-reporting and e-invoicing, some tests had to be removed. Task-6296356 Forward-Port-Of: odoo/odoo#273913 Forward-Port-Of: odoo/odoo#271294
9 changes
Enhancements to existing features
Hong Kong payroll can now use the scheduled payroll data update process. This helps keep standard, unmodified salary rules up to date automatically, reducing manual maintenance for payroll teams.
Original PR description
Currently, the "Payroll: Update data" cron doesn't work for HK payroll as we never set up the _get_data_files_to_update. We can set up the list of data files to keep up to date to better support our users by automatically keeping non-edited salary rules up to date. task-6360339 Forward-Port-Of: odoo/enterprise#122777
Belgian blackbox POS sessions now warn cashiers when they need to be closed within the required 24-hour period, helping ensure Z reports are sent on time. Session and sales reports now handle negative order lines in the required refund summaries, and self-ordering with a blackbox now requires the appropriate Belgian blackbox self-ordering support.
Original PR description
Belgian fiscal regulations require a blackbox POS session to be closed at least once every 24h so the Z reports are sent to the FDM. The POS now warns the cashier once the session should be closed. Also: - include negative lines of regular orders in the negative quantities summary of session reports, and show them as positive amounts in the refund tables of the sale details report as required by the SPF - require `l10n_be_pos_blackbox_self_order` when self-ordering (mobile/kiosk) is enabled with a blackbox community PR: https://github.com/odoo/odoo/pull/273994
Belgian payroll rules are updated with the new employment bonus parameters taking effect on 1 July 2026 and 1 September 2026. This helps ensure payslip calculations remain aligned with Belgian payroll requirements for the affected periods.
Original PR description
Update the employment bonus parameters for 1st July 2026 and 1st September 2026. task-6369633 Forward-Port-Of: odoo/enterprise#123262
The Azerbaijani Manat (AZN) now uses its official currency symbol, ₼, in Odoo. This improves consistency and makes financial documents and displays more accurate for users working with this currency.
Original PR description
This commit updates the base currency symbol for the Azerbaijani Manat (AZN) to its official Unicode character '₼'. Related Upgrade PR: https://github.com/odoo/upgrade/pull/10107 task-6112867 Forward-Port-Of: odoo/odoo#262471
Backorder creation during receipt validation has been optimized so it no longer slows down or times out on very large operations. This should make large warehouse processing more reliable and reduce the risk of database memory errors.
Original PR description
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of…
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of moves in the picking, and M is the number of moves being processed for valuation. This happened while computing price units for moves one by one: each move filtered all picking moves to find the ones with the same `product_id`. Another issue was a PostgreSQL `"memory exhausted"` error caused by generating a large number of OR'ed conditions, equal to the number of processed moves. ## The Solution The massive filtering was fixed by filtering moves of the `purchase_line` instead of the `picking`, which is typically associated with only a few moves. This is still correct as the loop just after already ignores moves that don't have the same `purchase_line_id` of `self` anyways. The PostgreSQL error was fixed by grouping moves by `location_dest_id` and generating one condition per location using an `in` clause, which is typically much smaller than generating one condition per move. ## Benchmark Benchmark on a customer database, validating a receipt with 10k+ operations by creating a backorder: ```text Time: timeout -> 6 min ``` OPW-6272667 Forward-Port-Of: odoo/odoo#273555 Forward-Port-Of: odoo/odoo#269350
This change makes the tax supply date available for companies using the German localization. It helps ensure tax reporting can reflect the correct supply timing, which supports more accurate compliance handling.
Original PR description
Forward-Port-Of: odoo/odoo#272461
This update reduces the time needed to load forum pages, especially the most visited post pages on odoo.com. It speeds up database work and cuts overall page load time almost in half, which helps the site handle very high traffic more efficiently.
Original PR description
This PR improves the cost of `/forum/my-forum-1/my-slug-1234` by ~48%. This has a huge impact on odoo.com The `/forum/...` routes are the `#1` on odoo.com in terms of absolute count and in terms of…
This PR improves the cost of `/forum/my-forum-1/my-slug-1234` by ~48%. This has a huge impact on odoo.com The `/forum/...` routes are the `#1` on odoo.com in terms of absolute count and in terms of CPU and SQL cost. They are called several million times a day. The average total time for `/forum/my-forum-1/my-slug-1234` goes from ~358ms to ~187ms (sql: 107ms -> 52ms - cpu 250ms -> 135ms) This has been tested by extracting 30k real forum post urls from odoo.com logs and replaying them on a staging server. That day `/forum/...` routes were called 2.8M times ## before <img width="1343" height="122" alt="image" src="https://github.com/user-attachments/assets/2b8264b7-4f26-40a7-a20a-20d478f5a93a" /> ## after <img width="1339" height="124" alt="image" src="https://github.com/user-attachments/assets/7c73aeb0-a4b4-45b8-ae98-093ac70c438e" /> ### First commit before <img width="1857" height="946" alt="image" src="https://github.com/user-attachments/assets/63b9d966-f5fd-4047-b4cb-533b7e9491bc" /> after <img width="1844" height="867" alt="image" src="https://github.com/user-attachments/assets/9494efe0-0b7c-419d-b918-dcfe5e942e63" /> query plan for most used tags as public user: - with the index https://explain.dalibo.com/plan/gbf9fbd358687f3e - without the index https://explain.dalibo.com/plan/da5gg6cd27f67496 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272716
The point of sale sales details report now treats negative order lines consistently based on their sign. This helps local setups, such as Belgian POS reporting, classify negative lines in normal orders as refunds with the correct positive amounts and taxes.
Original PR description
Amounts and taxes now consistently follow the order line sign, allowing localizations (e.g. l10n_be_pos_blackbox) to report negative lines of regular orders as refunds with positive amounts. enterprise PR: https://github.com/odoo/enterprise/pull/122411 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances how the French PDP tracks partner verification status. Previously, verification states were logged inconsistently. Now, a specific PDP-related verification state is displayed in the chatter, ensuring accurate representation of the receiver's status when routed through the French PDP annuaire – a critical distinction for French businesses.
Original PR description
In saas-19.3, `account_peppol` no longer uses `_log_verification_state_update()` and now logs partner verification changes through `_track_add()`. French PDP still needs to display a PDP-specific verification state in the chatter instead of the raw Peppol state, because the same Peppol technical result can have a different business meaning when the receiver is routed through the French PDP annuaire. Task-6296383
5 changes
Enhancements to existing features
Hong Kong payroll data updates will now include the relevant salary rule files. This helps keep standard, non-customized payroll rules up to date automatically, reducing manual maintenance for users.
Original PR description
Currently, the "Payroll: Update data" cron doesn't work for HK payroll as we never set up the _get_data_files_to_update. We can set up the list of data files to keep up to date to better support our users by automatically keeping non-edited salary rules up to date. task-6360339 Forward-Port-Of: odoo/enterprise#122777
When users resize tables, the horizontal scrollbar now appears on the table itself instead of affecting the whole editor area. Existing resized tables are also updated automatically when the editor loads, so the behavior is consistent for old and new content.
Original PR description
#### Description of the issue this PR addresses: - Resized tables stored their width on the `table` element. When such tables became wider than the editable area, a horizontal scrollbar appeared on the main editable. #### Desired behavior after PR is merged: - Width handling is now moved to `tbody` so the scrollbar stays on the table itself instead of the editable. - This PR also updates already resized tables when loading the editor to ensure they follow the same behavior. task-5123011 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272977
The Azerbaijani Manat (AZN) now uses its official symbol, ₼, in Odoo. This improves accuracy and consistency when displaying prices and financial reports for users working with this currency.
Original PR description
This commit updates the base currency symbol for the Azerbaijani Manat (AZN) to its official Unicode character '₼'. Related Upgrade PR: https://github.com/odoo/upgrade/pull/10107 task-6112867 Forward-Port-Of: odoo/odoo#262471
This update speeds up the creation of backorders when validating receipts with many operations. It also prevents database memory issues by reducing the size of the conditions sent to PostgreSQL, making large stock operations complete more reliably and much faster.
Original PR description
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of…
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of moves in the picking, and M is the number of moves being processed for valuation. This happened while computing price units for moves one by one: each move filtered all picking moves to find the ones with the same `product_id`. Another issue was a PostgreSQL `"memory exhausted"` error caused by generating a large number of OR'ed conditions, equal to the number of processed moves. ## The Solution The massive filtering was fixed by filtering moves of the `purchase_line` instead of the `picking`, which is typically associated with only a few moves. This is still correct as the loop just after already ignores moves that don't have the same `purchase_line_id` of `self` anyways. The PostgreSQL error was fixed by grouping moves by `location_dest_id` and generating one condition per location using an `in` clause, which is typically much smaller than generating one condition per move. ## Benchmark Benchmark on a customer database, validating a receipt with 10k+ operations by creating a backorder: ```text Time: timeout -> 6 min ``` OPW-6272667 Forward-Port-Of: odoo/odoo#273555 Forward-Port-Of: odoo/odoo#269350
This update makes the tax supply date available for German accounting entries. It helps businesses record the correct tax timing more easily and brings Germany in line with other localizations that already support this field.
Original PR description
Forward-Port-Of: odoo/odoo#272461
5 changes
Enhancements to existing features
Hong Kong payroll data is now included in the automatic payroll update process. This helps keep standard, unmodified salary rules up to date, reducing manual maintenance and improving payroll reliability for Hong Kong users.
Original PR description
Currently, the "Payroll: Update data" cron doesn't work for HK payroll as we never set up the _get_data_files_to_update. We can set up the list of data files to keep up to date to better support our users by automatically keeping non-edited salary rules up to date. task-6360339 Forward-Port-Of: odoo/enterprise#122777
The Azerbaijani Manat (AZN) now uses its official symbol, ₼, in the system. This improves display accuracy for users working with Azerbaijani currency and helps ensure printed and on-screen documents look correct.
Original PR description
This commit updates the base currency symbol for the Azerbaijani Manat (AZN) to its official Unicode character '₼'. Related Upgrade PR: https://github.com/odoo/upgrade/pull/10107 task-6112867 Forward-Port-Of: odoo/odoo#262471
When users resize tables in the editor, the horizontal scrollbar now appears on the table itself instead of expanding the whole editing area. Existing resized tables are also updated automatically, so the behavior is consistent when reopening content. This makes table editing smoother and avoids layout issues in the editor.
Original PR description
#### Description of the issue this PR addresses: - Resized tables stored their width on the `table` element. When such tables became wider than the editable area, a horizontal scrollbar appeared on the main editable. #### Desired behavior after PR is merged: - Width handling is now moved to `tbody` so the scrollbar stays on the table itself instead of the editable. - This PR also updates already resized tables when loading the editor to ensure they follow the same behavior. task-5123011 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272977
Creating backorders for large receipts is now much faster and less likely to fail when many stock operations are involved. This improves validation times for high-volume warehouse transactions and helps prevent system timeouts and database memory errors.
Original PR description
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of…
## The Problem Validating receipts with a large number of operations by creating a backorder was timing out due to $O(N*M)$ filtering inside `_get_qty_received_without_self`, where N is the number of moves in the picking, and M is the number of moves being processed for valuation. This happened while computing price units for moves one by one: each move filtered all picking moves to find the ones with the same `product_id`. Another issue was a PostgreSQL `"memory exhausted"` error caused by generating a large number of OR'ed conditions, equal to the number of processed moves. ## The Solution The massive filtering was fixed by filtering moves of the `purchase_line` instead of the `picking`, which is typically associated with only a few moves. This is still correct as the loop just after already ignores moves that don't have the same `purchase_line_id` of `self` anyways. The PostgreSQL error was fixed by grouping moves by `location_dest_id` and generating one condition per location using an `in` clause, which is typically much smaller than generating one condition per move. ## Benchmark Benchmark on a customer database, validating a receipt with 10k+ operations by creating a backorder: ```text Time: timeout -> 6 min ``` OPW-6272667 Forward-Port-Of: odoo/odoo#273555 Forward-Port-Of: odoo/odoo#269350
This update makes the tax supply date available for German accounting flows. It helps businesses record the correct date for tax reporting, reducing manual work and the risk of inconsistencies in local compliance processes.
Original PR description
Forward-Port-Of: odoo/odoo#272461
1 change
Enhancements to existing features
The Azerbaijani Manat (AZN) currency symbol has been updated to its official Unicode sign, ₼. This keeps currency displays accurate and consistent for users working with Azerbaijani accounts or pricing.
Original PR description
This commit updates the base currency symbol for the Azerbaijani Manat (AZN) to its official Unicode character '₼'. Related Upgrade PR: https://github.com/odoo/upgrade/pull/10107 Backport of: https://github.com/odoo/odoo/pull/262471 task-6112867 Forward-Port-Of: odoo/odoo#274368
1 change
Enhancements to existing features
The Philippine payroll module now defines which payroll data should be kept up to date automatically. This helps ensure standard salary rules stay current through the scheduled payroll update process, reducing manual maintenance for customers.
Original PR description
Currently, the "Payroll: Update data" cron doesn't work for HK payroll as we never set up the _get_data_files_to_update. We can set up the list of data files to keep up to date to better support our users by automatically keeping non-edited salary rules up to date. task-6360470 Forward-Port-Of: odoo/enterprise#122781
3 changes
Enhancements to existing features
Attachment deletion is now much faster for Chilean electronic invoicing and stock documents. This reduces delays in databases with large numbers of invoices or deliveries, improving day-to-day performance without changing business workflows.
Original PR description
## The problem Deleting attachments checks foreign key triggers. Lookups in `account_move` and `stock_picking` tables for `ir_attachment` related fields coming from `l10n_cl_edi` overrides were slow due to missing indexes. ## The solution Added needed indexes to optimize triggers' lookups. ## Benchmark Time benchmark (deleting attachments from a customer database with 224K account moves and 204K stock pickings): |# of rows|Time (Before)|Time (After)| |----------|--------------|-------------| 100 | 29s | 16ms 1000 | 285s | 300ms OPW-6331845 Forward-Port-Of: odoo/enterprise#123252
The Azerbaijani Manat (AZN) now uses its official currency symbol, ₼, instead of an older placeholder. This makes currency displays more accurate and consistent for users working with Azerbaijan-related amounts.
Original PR description
This commit updates the base currency symbol for the Azerbaijani Manat (AZN) to its official Unicode character '₼'. Related Upgrade PR: https://github.com/odoo/upgrade/pull/10107 Backport of: https://github.com/odoo/odoo/pull/262471 task-6112867 Forward-Port-Of: odoo/odoo#274368
This update ensures product prediction by name in the account_edi_ubl_cii module now aligns with user preferences. Previously, prediction ran regardless of a setting, potentially confusing users. Now, prediction will run by default for community users and based on the 'predict_bill_product' setting for enterprise users.
Original PR description
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr