Wednesday, February 18, 2026
13 changes · saas-18.4
Resolved issues and error corrections
The document layout preview now correctly shows the company's Tax ID when it is entered in settings. This ensures invoices and preview documents display the expected tax information consistently with other company details.
Original PR description
Steps to reproduce 1. Install `account`. 2. Go to Settings → Configure Document Layout. 3. Enter a value in the Tax ID field. 4. Generate a document (invoice / preview document). Issue Unlike other fields in the document layout, the `Tax ID` value is not updated and does not appear in the document preview. Cause The VAT (Tax ID) rendering logic was missing from the document layout template XML. Solution Add proper logic to display the Tax ID using the company VAT Before: <img width="1089" height="750" alt="image" src="https://github.com/user-attachments/assets/8d27808f-d605-447c-807a-d5f3450eef36" /> After: <img width="1080" height="722" alt="image" src="https://github.com/user-attachments/assets/0af04d77-a318-4e39-9a4b-0911f2446e60" /> opw-5373374 Forward-Port-Of: odoo/odoo#240234
Custom snippets in the website builder now inherit the label of the original snippet they were saved from. This makes saved custom snippets easier to recognize in the Custom category, reducing confusion for website editors.
Original PR description
The label was never set for the custom snippets. This commit adds a pass in `computeSnippetTemplates` to copy the labels to custom snippets from their corresponding original snippet. Steps to reproduce: - Open website builder - Drop a snippet with the label "Carousel" - Save this snippet as a custom snippet - Click on "Custom" category - Bug: the custom carousel does not have the "Carousel" label task-5902478
Cancelling a sale order linked to a dropshipped product no longer creates duplicate follow-up activities on the related purchase order. This keeps purchase teams from seeing repeated reminders for the same cancellation and reduces unnecessary manual cleanup.
Original PR description
**Steps to Reproduce** * Install `sale_management`, `purchase`, and `stock` with demo data. * In Inventory → Settings, enable `Dropshipping`. * Create a product: * Set a vendor under the Purchase…
**Steps to Reproduce**
* Install `sale_management`, `purchase`, and `stock` with demo data.
* In Inventory → Settings, enable `Dropshipping`.
* Create a product:
* Set a vendor under the Purchase tab.
* Set routes to `Dropshipping` and `Buy`
* Create and confirm a sale order for this product.
* Confirm the generated purchase order.
* Cancel the originating sale order.
* Go back to the linked purchase order.
**Observed behavior**
* Two activities are created on the purchase order when the sale order is cancelled.
**Cause**
* Both templates — `exception_on_so` (from sale_stock) and
`exception_purchase_on_sale_cancellation` (from sale_purchase)
are triggered during sale order cancellation.
* Each module overrides `_action_cancel` and triggers its corresponding exception template.
* When both modules are installed, both templates run.
https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/sale_purchase/models/sale_order.py#L26-L32
https://github.com/odoo/odoo/blob/98da30375a5ae50a77d848b838781aa7247bd362/addons/sale_stock/models/sale_order.py#L206-L208
* The template `exception_purchase_on_sale_cancellation` should only be triggered
when the PO originates from an SO and the product is a service, but
the domain lacks the required product-type condition.
**Fix**
* Add the missing condition to ensure that `exception_purchase_on_sale_cancellation`
is not triggered for dropshipped products, preventing duplicate activities.
---
`NOTE` - This issue is resolved from version 19.0 in this [commit](https://github.com/odoo/odoo/pull/212679/changes/ede2898278220a3ba4d8910ef268fe59f1587c72)
---
opw-5153488
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#239569A manufacturing test setup now gives the administrator the necessary access to product variants. This ensures the variant selection menu appears during automated checks, preventing false test failures and improving release reliability.
Original PR description
The _/mrp:TestReportBom.test_mrp_report_bom_variant_selection_ test was failling because administrator user couldn't use the product variants. The needed dropdown menu to switch variant wasn't displayed and the test failed. We add the "product.group_product_variant" rights to the user. Runbot error: 238917 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248634
Checklist items in the editor now align consistently with bullet and numbered lists. This fixes a visual inconsistency in To-do notes, making formatted lists easier to read and present.
Original PR description
The checklist has different indents than bullet list and numbered list. It should not be the case. This commit removes the extra indent from checklist entries. Steps to reproduce: - Go to a "To do" note - Create a checklist with indented items - Create a bullet list with indented items => Both list were not aligned task-5916723 Forward-Port-Of: odoo/odoo#247568
Fixed an issue in the HTML editor where changing a numbered list to a bullet or checklist could leave the list marker hidden after using Backspace. This makes list formatting behave as expected and helps users avoid confusing or incomplete-looking document content.
Original PR description
Steps to reproduce: - Create a numbered list - Press Backspace to remove the list marker - Change the list type to bullet or checklist using the powerbox. Current behavior before PR: - The list type is changed to bullet or checklist, but the marker is not visible Cause: - When a list marker is removed using Backspace, the `oe-nested` class is added to the `<li>` element, which hides the marker. - When switching the list to another list type, the `oe-nested` class is not removed. - As a result, even though the list type changes, the marker remains hidden. Solution: - When changing the list type, remove the `oe-nested` class from `<li>` elements that do not contain any list elements as children. - This ensures the marker is correctly restored for the new list type. task-5468384 Forward-Port-Of: odoo/odoo#245318 Forward-Port-Of: odoo/odoo#243001
When a shopper creates a company from an Italian e-commerce contact, the Italian tax and public administration fields are now copied to the new company record. This prevents missing compliance information and reduces manual corrections for Italian sales workflows.
Original PR description
**STEP TO REPRODUCE** 1. Create a ecommerce order on a shop page of a italian company. 2. Goes to the checkout page, enter info (company_name, l10n_it_codice_fiscale, l10n_it_pa_index). 3. On the contact created, click on create company. 4. Notice l10n_it fields are not propagated to the company. opw-5477372 Forward-Port-Of: odoo/odoo#248524 Forward-Port-Of: odoo/odoo#246785
This fixes an issue in the HTML editor where file names inside static file boxes could be edited by default, causing confusing cursor movement and arrow-key behavior. File names now stay read-only until a user explicitly clicks them, making navigation more predictable while preserving the ability to rename them.
Original PR description
### Purpose of this PR: - In the static file box, the file name is contenteditable by default, which leads to unexpected caret movement and arrow-key navigation behavior. - Change the behavior so that the file name is contenteditable="false" by default and becomes editable only when the user explicitly clicks on it. The editability is reverted when clicking outside of the file name. - This ensures consistent keyboard navigation while keeping the change limited to the static file box. task-5427329 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248440 Forward-Port-Of: odoo/odoo#241591
This fix handles a USB error triggered by certain receipt printers so the hardware driver does not fail unexpectedly. It improves reliability for businesses using connected POS printers, especially affected POS80D devices.
Original PR description
Seen on https://laloux-j.odoo.com/ 12/2 with a POS80D printer the printer triggers a core.USBError. This PR catches the corresponding exception 2026-02-12 04:21:12,496 1117 ERROR ? odoo.addons.iot_drivers.exception_logger: usb.core.USBError: [Errno None] Invalid descriptor task-5932720 Forward-Port-Of: odoo/odoo#248991
This fixes the Spanish localization so the Mod 390 annual VAT report no longer counts the same 0% EU goods purchase amount in two separate boxes. Businesses using Spanish tax reporting will see more accurate totals and avoid duplicated reporting values.
Original PR description
How to reproduce: - Install the l10n_es module - Switch to a spanish company - Confirm a Vendor Bill with a Product with the tax 0% EU G - Go to the Tax Report and select mod390 The problem: In the section "Adquisiciones intracomunitarias de bienes", the total amount is shown two time, once for grid 716 and once for grid 26 Why: In the declaration of the tax template for 0% EU G, there is two tags for the mod 390, the one for grid 26 being wrong Before: <img width="818" height="447" alt="image" src="https://github.com/user-attachments/assets/0565802d-5d98-4e0f-9e08-50776f0a5aec" /> After: <img width="834" height="443" alt="image" src="https://github.com/user-attachments/assets/89696c83-7022-439d-adaa-d456c2dbadf8" /> opw-5867849 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#249022 Forward-Port-Of: odoo/odoo#247590
This update fixes an issue that could cause an error when users worked with the signature field. The notification capability is now properly available, helping signature-related actions run reliably.
Original PR description
The notification service is later used in this [method](https://github.com/odoo/odoo/blob/04f3473da52ec74f3955cadd58eb016537497d44/addons/web/static/src/views/fields/signature/signature_field.js#L120), but it was never declared so it was causing an error. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248602
This update resolves a bug where autofilling pivot cells with incorrect relational IDs caused a crash. The fix ensures that the autofill process itself functions correctly, while preventing the associated tooltip from triggering a system failure. This improves the reliability of pivot table data entry.
Original PR description
If you try to autofill a pivot cell that has an invalid relational id in its domain (eg. `=PIVOT.HEADER(1, "stage_id", 99999999)`), the autofill actually works but the tooltip make everything crash. Task: [5913754](https://www.odoo.com/web#id=5913754&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form) Forward-Port-Of: odoo/enterprise#107502 Forward-Port-Of: odoo/enterprise#106601
This update resolves an issue where archived employees were still visible in the attendance Gantt chart. The change ensures that only currently active employees are displayed, improving data accuracy and clarity for reporting. This prevents confusion and ensures users only see relevant attendance records.
Original PR description
Steps to reproduce: 1. install `hr_attendance_gantt` 2. create an employee 3. make attendance records for the employee in the previous months 4. archive the employee When opening the gantt view of the attendance, a row appears for the archived employee, with no attendance showing up. This commit adds a constraint to only show the active employees. opw-5490119 Forward-Port-Of: odoo/enterprise#106486