Daily updates from Odoo
Tuesday, April 21, 2026
21 changes · master
Enhancements to existing features
German point-of-sale certification now processes order changes one at a time, helping keep transactions consistent when items are updated or removed. The checkout experience is also less restrictive because missing ZIP or address details are handled automatically in the backend.
Original PR description
In this commit: ------------------- - We have added logic to execute API calls using a mutex for order updates (such as line updates and removals). This ensures that each update is processed (sequentially), allowing us to properly track and maintain order consistency. - We removed the ZIP and address validation on the UI since the backend already assigns default values if they are missing. So, there’s no need to restrict the user on the UI. task:5941742 Forward-Port-Of: odoo/enterprise#114090 Forward-Port-Of: odoo/enterprise#108694
Spreadsheet documents can now display large numbers using locale-specific digit grouping, such as the Indian numbering format. This makes numeric data easier to read and more familiar for users in regions that do not use standard thousands separators.
Original PR description
Some locales (eg. India) do not use standard international thousand grouping for large numbers, but group the first 3 numbers, then group the next numbers by 2. This commit adds the `digitGrouping` parameter to the locale to handle that behaviour. Task: [4829185](https://www.odoo.com/web#id=4829185&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
Documents now shows a promotional Auto-Sort option in its cog menu so users can discover the feature even before the required AI Documents setup is available. Selecting it opens a Studio promotion dialog, clarifying that Auto-Sort is available when Studio is installed.
Original PR description
Purpose: ===================== Many users miss the Auto-Sort feature because it depends on the `ai_documents` module and is not visible when only the Documents module is installed. Specifications: ===================== - Add an Auto-Sort promo in the Documents cog menu. - The promo entry opens the Studio promotion dialog. - Auto-Sort is now available only when Studio is installed, as `ai_documents` depends on `web_studio`. Task-6004348
Users can now refresh deduplication, recycling, and field cleaning data for all rules from one cog menu action. This saves time by removing the need to open and update each rule individually.
Original PR description
Before: - User was not able to refresh deduplication, recycle, and field cleaning data for all rules at once. - To refresh data, user had to open each rule and update records manually. After: - Added a button in the cog menu to refresh deduplication, recycle, and field cleaning data for all rules at once. task-5864554
Manufacturing users can now view work order planning grouped by assigned employee, in addition to the existing production and work order views. This makes it easier for teams to balance workloads and understand who is scheduled for which tasks.
Original PR description
Right now the user has the options to plan by grouping by manufacturing order ('Planning by Production') and by work order ('Planning by Workorder'). Here we add a third option that groups work orders by assigned employees ('Planning by Employee').
Task ID: [4789893](https://www.odoo.com/odoo/project/966/tasks/4789893)Large inter-company delivery validations now process related stock move lines in batches instead of one by one. This reduces database work and prevents timeouts for deliveries with many lines, improving reliability for high-volume operations.
Original PR description
Before this PR, `button_validate` was using a `write()` call per matched stock move. On every `write()` there is a Command.create and Command.delete which is resulting in N database round-trips for…
Before this PR, `button_validate` was using a `write()` call per matched stock move. On every `write()` there is a Command.create and Command.delete which is resulting in N database round-trips for the unlinks and N for the creates, followed by N separate `_apply_putaway_strategy()` calls. This is problematic for pickings with many move_ids. This PR attempts to accumulates all move lines to delete and to create. Then performs a single `unlink()` and `create()`, followed by a single `_apply_putaway_strategy()` for all pickings. Unlink is done using `.sudo()` to preserve the superuser context that was previously inherited implicitly through the `purchase_order.sudo().search` that produced the recordset used to obtain the `receipt_move`(s). Benchmarks: | No. move lines in delivery | Before | After | | -------------------------- | ------- | ----- | | 7579 | Timeout | < 200 s | opw-5826905 Forward-Port-Of: odoo/enterprise#110587 Forward-Port-Of: odoo/enterprise#110153
Asset depreciation can now be configured by rate as well as by duration, giving businesses more flexibility to match accounting policies. Duration values can also include decimals, supporting more precise depreciation periods such as 27.5 or 31.5 years.
Original PR description
This commit extends the depreciation model to support depreciation calculation based on rate in addition to duration. Users can now configure depreciation using: - Duration-based depreciation - Rate-based depreciation on a yearly or monthly basis As the rate and duration are mutually exclusive and can be derived from each other, the system computes and stores the corresponding value based on the user input. Additionally, depreciation duration fields now support floating-point values instead of integers, allowing more precise configurations such as 27.5 or 31.5 years. task-5388816
Project users can now print task schedules directly from the Gantt and Calendar views using the existing planning-style report. This makes it easier to share project timelines offline or in meetings without manually recreating schedule information.
Original PR description
In this commit, an action is added to print tasks. task-5139517
Spreadsheet documents now support regional digit grouping rules, such as the Indian numbering format. This makes large numbers display in a way that better matches local business expectations and reduces confusion for users in affected locales.
Original PR description
Some locales (eg. India) do not use standard international thousand grouping for large numbers, but group the first 3 numbers, then group the next numbers by 2. This commit adds the `digitGrouping` parameter to the locale to handle that behaviour. Task: 4829185
Shift templates can now include worksheet templates, so field service interventions created from a template automatically get the right worksheet. Shift templates also now carry their own company setting, improving consistency when projects and worksheet templates involve company-specific data.
Original PR description
This PR adds the possibility to set a worksheet template to a shift template.
This allows to automatically link a worksheet to the intervention when the intervention is created from a template.
We add this new field in the form, list, kanban and search views of the shift template.
We also add a company_id field to the shift template so it does not rely solely on the project's company, since the worksheet template also has a company.
task-5265153Engineering Change Order updates for components and operations are now shown together in one printable report instead of two separate lists. This makes reviewing, sharing, and printing ECO changes easier for manufacturing and PLM users without changing the underlying data model.
Original PR description
Currently the ECO changes are in two different o2m. One for the components and the other for the operations. It would be great to have everything in a single place and easy to print. So the report is a good alternative. Instead of the 2 o2m fields, we add a stat button that redirect to this new report. There is no update on the model
When a rental order is created or updated from a planning shift, users will now be prompted to configure product options when the rental service has variants or optional products. This helps sales and rental teams complete orders more accurately without needing to manually find configuration steps later.
Original PR description
This commit allows to automatically open the product configuration when the Rental order is generated and open from a planning slot with a role set and linked to a rental service product. It also allows the same behavior when the user adds a shift to the last order and a new SOL is generated inside that rental order. Of course, this product configuration modal will only be opened if the new SOL added by planning.slot related has at least one product variant and/or one optional product. task-5000253
The pick up button now stays visible whenever products are linked to a field service shift, instead of disappearing when no immediate action is required. It also shows progress so users can easily see completed deliveries versus the total, helping them keep track of shift-related products at a glance.
Original PR description
The purpose of this commit is to modify the logic of the pick up button. Instead of hiding the button when no action is needed, we always display it if there is a move.line linked to the shift and we use a color code to indicate the state of the shift. That way, the user never lose sight of the total of products linked to the shift. task - 6063536
Mexican localization now supports generating supplementary SAT trial balance reports in the format required by the tax authority. This helps businesses submit corrected or complementary balance sheets with the required reporting type, date information, and file naming.
Original PR description
This commit adds support for generating SAT (Mexican tax authority) trial balance reports in supplementary (complementary) format, as required by SAT specifications. Changes: - Add default value for…
This commit adds support for generating SAT (Mexican tax authority) trial balance reports in supplementary (complementary) format, as required by SAT specifications. Changes: - Add default value for submit_type in SAT XML generation to fix tests that call the method directly without going through the wizard - Add new tests for normal (TipoEnvio=N) and supplementary (TipoEnvio=C) formats - Verify that FechaModBal attribute is correctly included only for supplementary reports - Verify that filenames correctly use BN (normal) or BC (complementary) suffixes The SAT technical specification requires: - TipoEnvio="C" (complementary) for supplementary balance sheets - FechaModBal attribute (date of last accounting modification) when tipo is C - File naming convention: RFC+Year+Month+BN (normal) or BC (complementary) SAT technical specification: https://wwwmat.sat.gob.mx/cs/Satellite?blobcol=urldata&blobkey=id&blobtable=MungoBlobs&blobwhere=1461173762094&ssbinary=true In reference of PR https://github.com/odoo/enterprise/pull/111775 Ticket : https://www.odoo.com/es_ES/my/tasks/6025590 @mial-odoo @fmvt-odoo @moduon MT-14181
Resolved issues and error corrections
This change reverses a previous update so payment tolerance is managed from each journal's settings again. This matters for accounting teams because tolerance behavior can be configured where journal-related payment and reconciliation options are handled, supporting clearer setup and upgrade consistency.
Original PR description
This reverts commit https://github.com/odoo/enterprise/commit/db1240d56f0311531bc01a68582f135221214cee see: https://github.com/odoo/upgrade/pull/9995
This fix prevents time off calendar entries from appearing as suggested timesheet items, reducing confusion for employees recording work. It also makes Belgian payroll warning tests more stable by avoiding fixed dates that can cause false failures over time.
Original PR description
runbot error:- . https://runbot.odoo.com/odoo/runbot.build.error/242427/runbot.build.error/242427 . https://runbot.odoo.com/runbot/build/107183635 . Adjust the seniority and age below-scale warning tests to use relative dates instead of absolute ones task-6117457
Fixed an issue where users could no longer reopen a document after changing its name from the full-screen document view. This prevents an error screen and keeps document access working smoothly after edits.
Original PR description
Steps to reproduce: 1. Install `documents` 2. Open a document in full screen and click on info icon on top right 3. Edit the name and close full screen document and chatter 4. Try to open the same document Issue: - Traceback occures `TypeError: Cannot read properties of undefined (reading 'insert')` Cause: - In file document_service `this.store.Attachment` was used instead of `this.store["ir.attachment"]` After this commit https://github.com/odoo/odoo/commit/70153559c34ffd18c67b83c39ee397ecb0a90b4a we renamed the Attachment model opw-5483625 Forward-Port-Of: odoo/enterprise#110315 Forward-Port-Of: odoo/enterprise#105602
Validating product receipts in the Barcode app no longer causes an error when label printing is configured. This ensures warehouse users can complete receipts and print labels without interruption.
Original PR description
Given a printer is configured to print a label for product receipts, when the receipt is validated from the barcode app, then a traceback appears. A filter on action.context.active_ids was introduced in https://github.com/odoo/enterprise/pull/106277. When validating the receipt from the purchase app, active_ids is set to the id of the purchase order and the behavior is as expected. When validating the receipt in the barcode app , it is not set (nor was it set in 17.0). The filter therefore crashes because it cannot work on undefined. An optional chaining operator is added to apply the filter only if active_ids is set. The barcode app does not raise a traceback anymore when validating a receipt and the label can be printed. Forward-Port-Of: odoo/enterprise#113146
The Luxembourg FAIA XML export now reports invoice line debit and credit amounts as positive values while keeping their correct debit or credit classification. This prevents validation errors when totals are checked against individual invoice lines, improving reliability for compliance reporting.
Original PR description
This is one of several commits fixing the FAIA xml export: - #113452 - #113455 - #113846 - #113720 When an invoice line has a negative `price_unit`, the `Invoice/Line/InvoiceLineAmount/Amount` element has a negative value. This causes validation errors when comparing the total debit or credit values (such as `SalesInvoices/TotalDebit`) to the individual amounts, as the sum of individual "debit" lines will include some credit amounts and vice versa. Solution: record if the line is actually a debit or a credit, then use the absolute value of the balance in the Amount element. opw-5427296 [Link](https://www.odoo.com/odoo/unassigned-tasks/5427296) Forward-Port-Of: odoo/enterprise#113606 Forward-Port-Of: odoo/enterprise#113316
Features or functions removed from Odoo
The pull request reverts a previous change to how the Documents Auto-Sort promotion is handled. This supports a revised approach where the AI document sorting feature can be customized without requiring Studio as a core dependency.
Original PR description
Purpose ======= This reverts commit 76071bd110c2dd0f73dd3972db944ee751f20686. After discussion, we will to it with a customization (ai_documents doesn't really need studio to work). Task-6004348
Code cleanup and technical improvements
This update simplifies the AI image generation flow and makes it more reliable when users create or enhance images. It also preserves product image actions after form refreshes, so users can continue working with AI image tools without losing available options.
Original PR description
- The renderAndSaveMedia function was only a wrapper around 2 function calls renderMedia and saveFunction which made it not very useful. So, renderAndSaveMedia function is removed and renderMedia and…
- The renderAndSaveMedia function was only a wrapper around 2 function calls renderMedia and saveFunction which made it not very useful. So, renderAndSaveMedia function is removed and renderMedia and saveFunction are used directly. - In the original image generation PR, a closeParams dict was introduced to store the closeReason of the MediaDialog such as "save", "discard" or "ai" and the id of the ai chat channel opened from the MediaDialog if any. This was mainly introduced to handle the following case: 1. Go to the website. 2. Insert an 'Image' snippet from the 'Inner Content' section. 3. Click on the AI button from the media dialog. 4. The media dialog will be closed and the snippet placeholder will be removed. Clicking on 'UseThis' button under AI generated images will do nothing because the snippet placeholder was removed. Extra logic was introduced when the closeReason is "ai" to keep the snippet placeholder. However, this complicated the close logic because the logic needs to take into account the newly introduced "ai" state in addition to the other 2 states of "save" and "discard". This commit removes the closeParams dict and introduces aiBeforeCloseHandler logic that will replace the snippet placeholder by a dummy image before closing the media dialog and which can then be replaced by the AI. See also: Community PR: https://github.com/odoo/odoo/pull/259148 Image generation original commits: - Enterprise commit 99f76c1c - Community commit 63c0b17e Image generation original PRs: - Enterprise https://github.com/odoo/enterprise/pull/104712 - Community https://github.com/odoo/odoo/pull/244419