Wednesday, May 27, 2026
21 changes · 19.0
New functionality added to Odoo
This update introduces a new reporting type specifically for Indonesian tax returns within the Odoo Enterprise system. This addition allows businesses operating in Indonesia to accurately track and report their tax obligations, streamlining compliance processes. It expands Odoo's capabilities to meet the specific requirements of the Indonesian market.
Original PR description
Create new module l10n_id_reports and add return type for Indonesia. task-6239169
Enhancements to existing features
Documentation for API key-related methods has been clarified so developers better understand required inputs and outputs. This reduces ambiguity during maintenance and integration work without changing user-facing behavior.
Original PR description
Clarify and complete the docstrings of `res.users.apikeys` methods: - document accepted union types for `scope` and `expiration_date` parameters of method `_generate`, and standardize its `:returns:` and `:rtype:` annotations - add missing parameter descriptions for `generate` and `revoke`
Resolved issues and error corrections
The HTML builder now uses matching bright accent colors for button text states, improving consistency and readability. This helps users better distinguish success and danger styling while editing pages.
Original PR description
In the html builder, we use strong, neon colors especially for the `btn-success` and `btn-danger`. However, the tint for `text-succes` / `text-danger` was duller, with a bad contrast against the background. This commit simply uses the same color, within builder buttons, for the text classes accent colors as for the btn classes. Forward-Port-Of: odoo/odoo#262277
This update enhances the Balance Sheet report to comply with Generally Accepted Accounting Principles (GAAP). It now ensures that all equity accounts are displayed individually, providing clearer and more accurate financial reporting. This change improves the reliability of financial data for users.
Original PR description
*=l10n_us_reports In the Balance Sheet, according to the GAAP rules, all equity accounts should be individually visible. task-6240500
Odoo now records a warning when an app or module is loaded without required dependencies. This helps administrators identify and fix deployment configuration issues more quickly, reducing troubleshooting time.
Original PR description
Log the issue as a warning, and add the missing module dependencies. This should ease managing such deployment issue. Forward-Port-Of: odoo/odoo#266030
When a branch company is created, its payment providers can now be duplicated as expected. This aligns payment setup with cases where branches use their own journals, reducing manual setup and avoiding missing payment configuration.
Original PR description
This PR will allow payment providers to be duplicated into branch companies when a branch company is created. Previously this was prevented because in accounting it's preferred not to use journals in branches. However, there it is still possible to setup a journal in branches. So it makes sense to allow it also in payment providers. opw-6013978 Forward-Port-Of: odoo/odoo#265831
This removes an unused styling rule from the Kanban color picker that was slowing down browser style calculations. Users should see no visual change, but the interface can be more responsive when working with Kanban cards.
Original PR description
Remove the unused selector `[class*="col-"]:has` from `kanban_color_picker_field.scss`. It no longer affects the view but negatively impacts global CSS performance because the global selector `[class*="col-"]` combined with `:has` is expensive to evaluate. This caused long "Recalculate style" times reported in the selector stats. Even if it no longer affects rendering, browsers still spend time evaluating it during style recalculation, hurting performance. Removing the selector removes that cost. Steps to reproduce: 1. Open the Project app. 2. Go to Configuration > Projects. 3. Switch to Kanban view. 4. Click the "..." button on a Kanban card. 5. Inspect the color picker with the dev tools and remove the rule on a `col-6` node nothing changes, demonstrating the rule is now useless.
Duplicating a manufacturing order created from a sales order no longer carries over the original sales link. This prevents users from seeing misleading sales order shortcuts on copied manufacturing records, reducing confusion in production and sales follow-up.
Original PR description
Version: --------- - 19.0+ Steps to reproduce: -------------------- 1.Install modules `sale_management`, `purchase`, and `mrp`. 2. Go to Settings and enable the MTO (Replenish on Order) route. 3.…
Version:
---------
- 19.0+
Steps to reproduce:
--------------------
1.Install modules `sale_management`, `purchase`, and `mrp`.
2. Go to Settings and enable the MTO (Replenish on Order) route.
3. Create a product with:
i. Configure a Vendor under the Purchase tab.
ii. Set the route to MTO.
iii. Create a Bill of Materials for the product.
5. Create a Sale Order with the configured product and confirm it.
6. Open the generated Manufacturing Order.
7. Duplicate the Manufacturing Order.
Issue:
------
* The duplicated Manufacturing Order shows a smart button
linked with the Sale Order, which is incorrect.
Root Cause:
------------
This issue is coming form this [Commit](https://github.com/odoo/odoo/commit/2713876dbc70d3984e584a9037a2206dcda4e84a#diff-2b9de2e50ff5e1dc0362b825bac2b07623770fb3275b3257ef972f255f3ccb8b)
* During Sale Order confirmation, the flow
`action_confirm` → `_action_confirm` → `_action_launch_stock_rule`
→ `run` → `_run_pull` → `_action_confirm` calls
`_prepare_procurement_values`.
which gather all procurement values.
In sale_stock, the super call adds `sale_line_id` to the
generated Manufacturing Order when using MTO:
https://github.com/odoo/odoo/blob/0352c5e8543b75083cf555c3d5b4f164f949b465/addons/sale_stock/models/stock.py#L138-L140
* So, when the Sale Order is confirmed, the generated
Manufacturing Order contains sale_line_id, and when this
Manufacturing Order is duplicated, the sale_line_id is also
copied.
* In sale_mrp, the smart button uses sale_line_id to compute
the linked Sale Order count:
https://github.com/odoo/odoo/blob/0352c5e8543b75083cf555c3d5b4f164f949b465/addons/sale_mrp/models/mrp_production.py#L19
Solution:
-----------
* Prevent copying of sale_line_id when duplicating a
Manufacturing Order, ensuring duplicated records are not
linked to any Sale Order.
---
opw-6113149
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe HR version timeline now loads the correct employee fields and refreshes its cached data when versions are added, deleted, or archived. This helps ensure users see accurate, up-to-date HR version information without confusing display issues.
Original PR description
The push function does not take a list of items but items. So when it was pushed into the fieldNames list it would create a list with ['display_name', [...]] which is not wanted. task-6072932 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
Invoices created from Point of Sale orders now include the product's internal reference alongside its name, matching invoices from regular sales orders. This makes invoices clearer and helps staff and customers identify products consistently across sales channels.
Original PR description
Currently invoices generated from pos orders do not show the product referense alongside the product name. Steps to reproduce: ------------------- * Open shop and select Cabinet with doors * Add…
Currently invoices generated from pos orders do not show the product referense alongside the product name. Steps to reproduce: ------------------- * Open shop and select Cabinet with doors * Add customer to order * Pay the order * Wether you selected to invoice or you didn't, does not matter, you can invoice from the backend > Observe on the invoice that the product does not show the internal reference "Cabinet with Doors" * Create a sale order for the same product, deliver and invoice > Observe the invoice, the product shows reference "[E-COM11] Cabinet with Doors" Why the fix: ------------ After this commit: https://github.com/odoo/odoo/commit/aff477805577cb7ed00fb94440dda5cf2f29cb44 we're using `full_product_name` to set the name on move line name. We could simply add the reference when computing the product name but the logiq used to computed the display name is a bit more complex than simply adding it always. Instead we use both display_name and full_product_name to build the final name. This way it has the reference if any and all information about variants are kept as well. opw-5950016
Double-clicking an image in the media dialog no longer triggers the same selection process twice. This prevents duplicate processing and helps keep image insertion behavior reliable for users.
Original PR description
Before this commit: When double-clicking an image in the Media Dialog, the onClickAttachment method was executed twice, causing the media flow to be processed multiple times. After this commit: The issue is fixed using a boolean flag: isProcessingClick. Initially, the flag is set to false. When the first click starts, it is updated to true. If another click occurs during the same flow (e.g during a double click), isProcessingClick is already true, so the function immediately returns and prevents the action from being executed multiple times. task-6033320 Forward-Port-Of: odoo/odoo#266463 Forward-Port-Of: odoo/odoo#254790
This update corrects a technical issue in the GSTR2B report generation, ensuring accurate reporting of non-GST supplies. The change updates a key used to identify these supplies, resolving a potential discrepancy in tax reporting. This ensures compliance and reliable data for tax filings.
Original PR description
Before this commit, the domain of the non-GST supplies report line in GSTR2B used the GSTR section `purchase_nongst`, while the actual section key is `purchase_non_gst_supplies`. This commit fixes the domain by using the correct GSTR section key. task-6239820
This update resolves an issue where invoices with excessively long item descriptions were being rejected by the Kenyan Revenue Authority (KRA) eTIMS system. The fix truncates descriptions to meet the 200-character limit specified by eTIMS, ensuring successful invoice submission and avoiding delays. This prevents potential disruptions to VAT processing.
Original PR description
The eTIMs specification limit the `itemNm` to 200 characters, so truncate the invoice line description to that limit to ensure that the invoice can be correctly submitted eTIMS server. Otherwise it will be rejected with: ``` Error sending to the KRA: - Request parameter error[<ItemList><itemNm>: length must be between 0 and 200] ``` Task-Id: 5220129 Forward-Port-Of: odoo/enterprise#118152
This update corrects a technical issue where multiple executions of a process could create invalid CFDI invoices with duplicate Addenda nodes. The fix ensures CFDI invoices adhere to strict XML standards, preventing rejection by recipient systems and maintaining compliance with Mexican tax regulations. This improves invoice processing reliability.
Original PR description
Before this commit, if the `_l10n_mx_edi_cfdi_invoice_append_addendas` method was executed more than once on the same invoice, the resulting CFDI would contain multiple `<cfdi:Addenda>` nodes. This…
Before this commit, if the `_l10n_mx_edi_cfdi_invoice_append_addendas` method was executed more than once on the same invoice, the resulting CFDI would contain multiple `<cfdi:Addenda>` nodes.
This occurred because the method manually injects the new Addenda string at the end of the XML without checking if one was already present from a previous execution.
According to the SAT's Anexo 20 and the CFDI 4.0 XSD, the Addenda must be a single node and the last element of the Comprobante. Duplicating root-level nodes like `cfdi:Addenda` is a bad XML formation practice that can cause rejection by the recipient's automated systems.
This fix ensures the CFDI structure remains valid by:
1. Searching for an existing `{*}Addenda` node in the CFDI string.
2. Removing the old node before reconstructing the XML.
3. Preventing the string replacement logic from stacking multiple Addenda blocks.
This ensures that the CFDI remains clean and compliant with the official standard even if the process is triggered multiple times.This update fixes an issue where CFDI (Mexican electronic invoice) documents were being generated with incorrect length limits for key attributes like 'Folio' and 'Serie'. The values were swapped, which caused invalid documents. Importantly, this change does not affect existing valid invoices.
Original PR description
Issue: length limits for attributes `Folio` and `Serie` of the `<cfdi:Comprobante>` elements were swapped, which could result in generation of invalid documents. Solution: swapping the values. This should not affect anything for existing valid documents. task-6046738 Forward-Port-Of: odoo/enterprise#118105 Forward-Port-Of: odoo/enterprise#116955
This update ensures that work entry data exported to the Acerta payroll system adheres to their specific formatting requirements. Specifically, the external reference number and work entry type code are now padded correctly, resolving potential data discrepancies and ensuring accurate payroll processing. This change improves data integrity with Acerta.
Original PR description
We want to adhere to the correct format for the export of work entries to Acerta. There, the number of external reference is padded to 17, not 20, and is followed by 3 spaces, before the date. Also, the code of the work entry type is padded to 4 and followed by 2 spaces. Task: 6168106 Forward-Port-Of: odoo/enterprise#118239 Forward-Port-Of: odoo/enterprise#118124
This update resolves an issue preventing refunds in the Colombian Point of Sale (PoS) system. The fix corrects outdated code references to older function names, which were left over from a previous system update. This ensures refunds can now be processed correctly for Colombian customers.
Original PR description
**Steps to reproduce:** - Setup a columbian company, DIAN should be in demo mode - Go to the PoS and make a sale with a columbian customer - Refund it - A traceback appears **Why the fix:** Some legacy code was left untouched when we changed the old **get_partner()** to the new **getPartner()** so we got a traceback as this function does not exist anymore. We also change the **set_partner(partner)** to **setPartner(partner)** as it was also forgotten. opw-6231856 Forward-Port-Of: odoo/enterprise#118054
This update ensures that sales services from European companies to Northern Ireland are correctly excluded from the EC Sales List report. This change aligns with regulations and accurately reflects sales transactions. The update was specifically developed for the Belgium localization, leveraging tax tag handling for accurate reporting.
Original PR description
…in EC Sales List The services sales done from a european company to a Northern Ireland company should not be included in the EC Sales List Report. It should however be the case for goods and triangular transactions. test is added in Belgium localization because only localizations have handlers using tax tags instead of taxes, and services/goods/triangular sales distinction can be made with these. task-6007931 Forward-Port-Of: odoo/enterprise#117754 Forward-Port-Of: odoo/enterprise#110007
This update optimizes the performance of Odoo's spreadsheet functionality, specifically when working with large tables like the Accounting > Balances Sheets. By using a more targeted approach to style recalculations, the system now responds faster during actions like hovering, resizing windows, or sorting data, leading to a smoother user experience.
Original PR description
Avoid using the :has() selector and use a specific class on the body instead to replicate the same behavior. This reduces work during the "Recalculate Style" phase (for example when hovering rows in large tables such as the Accounting > Balances Sheets). It lowers recalculation time during window resizes, heavy scrolling, and table sorting by preventing broad selector matches and limiting style checks to elements with the specific class.
This update resolves an issue where setting Intrastat information on product templates without associated products would trigger an error. The fix ensures that the system correctly handles product templates without variants, preventing unexpected errors and improving data accuracy for Intrastat reporting.
Original PR description
Problem: The Intrastat fields on product.template are computed without being stored. They are stored in product.product and the same values are used when computing the values on product.template. When trying to set the Intrastat fields on a product template without any product, an RPC error is raised without specifying the reason. Steps to reproduce: 1. Create a new product (product.template) 2. Add an attribute to the product with Variant Creation set to Dynamic, this will set no product variants (product.product) for the product template. 3. Try to set the Intrastat Commodity Code on the product template 4. Save the product template 5. Notice the RPC error raised without any explanation opw-6179705 Forward-Port-Of: odoo/enterprise#117856
This update fixes a display issue on the payslip CFDI documents tab, ensuring that error messages from the Mexican tax authority (PAC/SAT) are now shown as tooltips. Previously, these messages weren't visible, but this change aligns the payslip view with the invoice tab, improving transparency for users regarding CFDI compliance.
Original PR description
The payslip CFDI documents tab uses the account_document_state widget but the 'message' field was not loaded in the list view. This field is required by the widget to render error tooltips showing the Code and Message from the PAC/SAT when cancellation fails. The invoice CFDI tab already includes this field as column_invisible. This commit aligns the payslip view with the invoice behavior.