Wednesday, May 27, 2026
6 changes · saas-18.4
Resolved issues and error corrections
Website editors can no longer remove every option from form choice lists, which previously left the list unusable and blocked adding new options. The change keeps at least one option available for newsletter subscription checkboxes and other similar website form or donation controls.
Original PR description
### Steps to reproduce: - Install both the `website` and `mass_mailing` modules. - In the Website module, drop a form snippet and click it. - In the Form options block, set the 'Action' option to…
### Steps to reproduce: - Install both the `website` and `mass_mailing` modules. - In the Website module, drop a form snippet and click it. - In the Form options block, set the 'Action' option to 'Subscribe to Newsletter'. - Click on the 'Subscribe to' form field. - In the field options block, under 'Checkbox List', delete all items using the red-colored minus icon button. - The list becomes empty, and you can no longer add checkboxes. ### Issue: While editing a form in the website module with the form action set to 'Subscribe to Newsletter', the user can delete all checkbox items, resulting in an empty list where no new items can be added. ### Reason: The checkbox list is built using the `BuilderList` component. Its `deleteItem` function removes items directly without validating the minimum number of items. ### Fix: Add validation before deleting an item. Allow deletion only if more than one item exists in the list. This ensures that the checkbox list always has at least one item, preventing the user from removing the last one. **Note:** This fix applies to radio buttons, selection fields, multiple checkboxes in forms, and the donation button that relies on the `BuilderList` component. task-[5103580](https://www.odoo.com/odoo/all-tasks/5103580) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Double-clicking an image in the media dialog no longer triggers the selection process twice. This prevents duplicate processing and makes inserting or choosing media more 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#254790
This fix ensures Odoo loads the required HTML cleanup component before applying its startup adjustments. It prevents an internal import error that could stop the system from starting correctly in affected environments.
Original PR description
still ``lxml.html.clean`` import is needed because ``lxml.html`` init file don't have clean file. So, it will be not loaded For reference :-…
still ``lxml.html.clean`` import is needed because ``lxml.html`` init file don't have clean file. So, it
will be not loaded
For reference :- https://github.com/lxml/lxml/blob/lxml-4.9/src/lxml/html/__init__.py
```
Traceback (most recent call last):
File "/tmp/tmpj23nirpw/odoo/19.0/./odoo-bin", line 3, in <module>
import odoo.cli
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/cli/__init__.py", line 2, in <module>
from .command import Command, main # noqa: F401
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/cli/command.py", line 8, in <module>
import odoo.init # import first for core setup
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/init.py", line 28, in <module>
from .tools.gc import gc_set_timing
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/tools/__init__.py", line 11, in <module>
from .i18n import format_list, py_to_js_locale
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/tools/i18n.py", line 8, in <module>
from odoo.tools.misc import babel_locale_parse, get_lang
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/tools/misc.py", line 40, in <module>
from lxml import etree, objectify
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/_monkeypatches/__init__.py", line 45, in exec_module
patch_module(module.__name__)
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/_monkeypatches/__init__.py", line 67, in patch_module
module.patch_module()
File "/tmp/tmpj23nirpw/odoo/19.0/odoo/_monkeypatches/lxml.py", line 14, in patch_module
lxml.html.clean._find_image_dataurls = re.compile(r'data:image/(.+?);base64,').findall
AttributeError: module 'lxml.html' has no attribute 'clean'
```
https://upgradeci.odoo.com/upgradeci/run/301804
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#266591This update fixes an issue where CFDI (Mexican electronic invoice) documents were being generated with incorrect length limits for key attributes like 'Folio' and 'Serie'. Swapping these values ensures the system generates valid CFDI documents, preventing potential errors and compliance issues. This change does not impact existing correctly generated 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 resolves an issue where invoices with excessively long item descriptions were being rejected by the eTIMS system. The fix ensures invoice descriptions are trimmed to the 200-character limit required by eTIMS, preventing submission errors and guaranteeing proper invoice processing. This improves compliance with eTIMS regulations.
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 resolves an issue where setting Intrastat fields on product templates without associated products would trigger an error. The fix ensures that the system correctly handles scenarios where product variants are not defined, preventing unexpected RPC errors and improving data integrity.
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