Tuesday, May 5, 2026
16 changes · 18.0
Enhancements to existing features
Odoo now supports the new alphanumeric CNPJ format required by the Brazilian government to accommodate a growing number of businesses. This update replaces an outdated validation method, ensuring Odoo can accurately process Brazilian company registrations as they transition to this new format. This change avoids dependency issues with a third-party library.
Original PR description
Purpose: The Brazilian Federal Government, through the Brazilian Federal Revenue Service (Receita Federal do Brasil), is implementing the alphanumeric CNPJ to address the imminent depletion of its…
Purpose: The Brazilian Federal Government, through the Brazilian Federal Revenue Service (Receita Federal do Brasil), is implementing the alphanumeric CNPJ to address the imminent depletion of its capacity to generate new CNPJ numbers. The current, exclusively numeric model is approaching its limit. The transition to a format that includes letters and numbers expands the number of possible combinations, ensuring the future availability of registrations for new companies. With the government expanding the CNPJ numbers, we need to implement a solution to support the alphanumeric CNPJ that will be issued starting July 2026. Current Behavior: The method, `is_valid,` from stdnum is currently used to determine whether the CNPJ is valid or not. This is now considered an outdated method to determine the validation. Changed Behavior: The new validation logic by stdnum, found here https://github.com/arthurdejong/python-stdnum/commit/d3ec3bd7fefe0d0a708b6594a66de28777eb9b8d, is patched into `check_vat_br.` The reasoning for patching this rather than calling stdnum is because using stdnum will cause library dependency issues for older versions of Odoo. task-5234869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#260516
Resolved issues and error corrections
This update resolves a problem where community edition tests for invoice payments were failing due to inconsistent payment status after registration (paid or in_payment). The change uses a dynamic function to determine the correct payment state, ensuring tests accurately reflect real-world scenarios and improving test reliability.
Original PR description
Community edition tests fail because payment status after registration can be (`paid` or `in_payment` depending on environment), while the test assumes a fixed value. so instead of hardcoding the state, we use `_get_invoice_in_payment_state` which return required state, depending on environment we are Runbot [link](https://runbot.odoo.com/odoo/error/243480) runbot-error:243480
Miscellaneous changes
No description available.
This update resolves an issue causing incorrect rounding when importing purchase orders processed through OCR. The fix restores the original rounding precision, aligning with the system's intended use for EDI, rather than the OCR process. This ensures accurate financial calculations for purchase orders.
Original PR description
Since commit odoo/odoo@86463ce, there could be rounding issues when importing a purchase order matched through the OCR. A first attempt at fixing this was done in commit odoo/odoo@5dbb814, but it was eventually reverted as deemed too risky for a stable branch. More information about how the rounding error occurred is available in that commit description. This second fix should be much safer, we simply don't disable the rounding precision when the OCR is used, as this was intended for EDI in mind in the first place, not the OCR. opw-[6113387](https://www.odoo.com/odoo/my-support-tasks/6113387)
This update fixes an issue where users could accidentally select customers from different companies within the Helpdesk system. The fix involved adding a restriction to the customer selection field, ensuring users only see customers within their assigned company. This improves data accuracy and prevents misdirected support requests.
Original PR description
Steps to reproduce: - - Create two companies (Company A and Company B) - Create one partner in each company - Enable both companies for the user - Open Helpdesk and go to the tickets Kanban view for a Company A team. - In the quick create form, the customer dropdown shows customers from Company B Issue: - - Customers from other companies are visible in the customer field, Cause: - - The partner_id field in the quick create view had no domain, so it displayed partners from all allowed companies. Solution: - - Added a domain on partner_id in the Python field. task-4971466 Forward-Port-Of: odoo/enterprise#111909
This update corrects a technical error in how Odoo's Discussions feature sorts partners based on email addresses. The fix ensures that partners with matching email prefixes are correctly prioritized, leading to more accurate and relevant search results within Discussions. This improves the overall user experience.
Original PR description
In Discuss, the function used to sort partners prioritizes those whose email addresses start with the search terms. However, due to an error in the programming of the corresponding condition, this check could never be true. This commit adjusts the condition so that it behaves as expected. Forward-Port-Of: odoo/odoo#262583
This update fixes an issue where the HTML editor's undo function sometimes restored the selection to the wrong position. By staging the selection before deletion, the system now accurately restores the user's previous state, ensuring a smoother and more reliable editing experience. This improves overall usability and reduces frustration for users.
Original PR description
Problem: In some cases, undo restores the selection to an incorrect position. Cause: The selection state was not staged before the deletion started, leading to an inconsistent selection being restored during undo. Solution: Stage the selection before performing the deletion to ensure it can be restored to the correct position. Steps to reproduce: - Go to To-Do → Create New. - Type something on the first line and press Enter. - Type something on the second line and apply styling to it. - Use the Up arrow key to move to the first line. - Remove a character. - Press Undo (Ctrl + Z). - Observe that the selection and toolbar appear on the second line. task-6142055 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update strengthens the security of our Odoo IoT applications on Windows by ensuring the correct use of trusted SSL certificates for web socket connections. By aligning with industry best practices, this fix enhances reliability and protects against potential connection issues, particularly in IoT environments. It also includes necessary legal agreements for contributors.
Original PR description
This is a forward port of #261031 to 18.0. The websocket-client library defaults to the system's SSL context, which can be broken or outdated on Windows. This aligns websocket TLS verification with the `requests` library by forcing a certifi-backed CA bundle. This improves reliability on Windows IoT environments without changing reconnect logic. Adds corvanis corporate CLA and vvro individual CLA.
This update fixes a bug where the PDF viewer field didn't properly save the uploaded file's name. Now, when you upload a PDF, the correct filename is stored, improving the user experience and data accuracy within the system. This ensures consistent file management and reporting.
Original PR description
When uploading a file using the PDF viewer field, the filename was not stored in the corresponding filename field. This commit updates the PdfViewerField to support a filename field via the `filename` attribute. task-4825728 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the return quantity displayed in the stock return wizard was incorrect when the product's unit of measure differed from the unit of measure used in the original delivery order. The system now correctly converts quantities to the product's UoM before calculating returns, ensuring accurate inventory adjustments.
Original PR description
Steps to reproduce: - Create a storable product "P1" with UoM set to KG - Update on-hand quantity to 1 KG - Create a delivery order for 100g of P1 and validate it - Click the Return button Problem: The return wizard displayed 100 KG instead of 0.1 KG. The `uom_id` field on `stock.return.picking.line` is a non-stored related field pointing to `product_id.uom_id`. The quantity was taken directly from the stock move (expressed in the move's UoM) without being converted to the product's UoM before being passed to the wizard. Solution: Convert the quantity from the move's UoM to the product's UoM. opw-6113515 Forward-Port-Of: odoo/odoo#262069
This update resolves an issue where error messages from the Danish tax reporting system (l10n_dk_rsu) could cause unexpected errors. The fix ensures the system correctly handles error messages, preventing crashes and improving data reliability. This enhances the stability and accuracy of tax reporting for Danish customers.
Original PR description
before this commit, if the SKU server was returning an error message, the error handler would raise an exception because of the lazyTranslate. The reason is that `join()` expects an actual sting as argument, not a lazy string. This commit adds some tests for the error case and fixes the error due to the lazytranslate in the error codes. opw-6171466 Forward-Port-Of: odoo/enterprise#115515
This update resolves a technical issue in the Odoo POS system's testing environment. Previously, a key stock field wasn't accessible during testing, which prevented proper flow verification. This fix ensures accurate test results by granting access to the necessary stock data.
Original PR description
Field qty_done on stock move line is only available if stock_barcode is installed. runbot-243452
This update automatically refreshes the payment screen when the PIS (Payment Instruction Status) changes. Previously, users had to manually refresh the page to see the updated status, which was inconvenient. This change ensures payment information is always current and accurate.
Original PR description
There were some buttons like sign payment that were visible even when the PIS status was signed which needed a manual page refresh for the update to reflect, now it's reflected automatically on the PIS status change. task-5417365
This update resolves an issue where internal transfers using multi-step routes in the `l10n_ro_edi_stock_batch` module were incorrectly flagging a missing delivery carrier. The fix ensures that carrier validation is skipped for internal transfers, streamlining the process and preventing unnecessary errors. This improves the efficiency of internal stock movements.
Original PR description
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method…
### Issue: With `l10n_ro_edi_stock_batch`, internal transfers using multi-step routes were requiring a delivery carrier This makes no sense for internal moves ### Cause: The method `_compute_l10n_ro_edi_stock_enable` was overridden to check for `not picking.batch_id` However, for multi-step delivery routes, internal pickings still triggered the carrier validation, as no check on the `picking_type` was performed ### Steps to reproduce: - Install `l10n_ro_edi_stock_batch` with demo data and switch to RO Company - In Settings, enable `Multi-Step Routes` - Set the RO Warehouse's Outgoing Shipments to `Pick then Deliver (2 steps)` - Create a Product (e.g. RO product) - Create a Delivery Method (e.g. RO Delivery, Partner: Any, Delivery Product: RO Product) - Create and Confirm a Sale Order for the RO Product - From the Sale Order, click Delivery and validate the picking ### Before the fix, internal transfers raised: `The picking RO Co/PICK/00001 is missing a delivery carrier.` enterprise-PR: https://github.com/odoo/enterprise/pull/114166 opw-5925087
This update resolves an issue preventing users from modifying warehouse routes in the Romanian (RO) version of Odoo. The fix addresses a coding error that caused a crash when updating routes, specifically related to how incoming and outgoing shipments were handled. This ensures multi-step routes function as expected.
Original PR description
### Issue: When changing the routes of a Romanian warehouse, an error is raised, blocking any modification of multi-step routes ### Cause: The code attempts to access `in_type_id` from `warehouse_data` However, when updating routes, `warehouse_data` is empty in the method `_create_or_update_sequences_and_picking_types` This leads to a crash because the code assumes that `warehouse_data` always contains `in_type_id` and `out_type_id` Additionally, even if the data were present, it would result in creating duplicate `stock.picking.type` records ### Steps to reproduce: - Install `l10n_ro_saft_stock` with demo data and switch to `RO Company` - Enable `Multi-steps Routes` in Settings - Try to modify Incoming or Outgoing Shipments on a warehouse - When saving, the following error is raised: "Oh snap! in_type_id" odoo-pr: https://github.com/odoo/odoo/pull/257293 opw-5925087
This update resolves an issue where 'Manage Versions' wasn't visible for spreadsheet documents within the Documents module. The change removes a redundant check that prevented this functionality, aligning with a previous update in version 18.2. Now, users can properly manage versions of their spreadsheet files.
Original PR description
Steps to reproduce: - Upload a spreadsheet in Documents - Go to list view - Check the box for spreadsheet document - Click Actions Current Behavior: - Manage Versions does not show up for spreadsheet Expected Behavior: - Manage Versions show up for spreadsheet Justification: There is no way to replace a spreadsheet with a new version. This check was removed in 18.2 so it should be removed here as well opw-6124869