Tuesday, September 22, 2026
15 changes · 19.0
Resolved issues and error corrections
The HTML editor now safely handles selections that start inside the editor and extend outside it, such as using Ctrl+A or dragging beyond the editor area. This prevents a browser-specific error in Chrome and Edge, making editing more reliable for users.
Original PR description
## Description Fixes issue #187539 where selecting text that extends outside the HTML editor boundaries throws an uncaught promise error. ## Problem When using Ctrl+A or dragging a selection from inside the editor to outside its boundaries, the `updateSelectionTable` method in `table_plugin.js` would process the invalid selection and call `setSelection()` with nodes outside the editable area, causing: This only affected Chromium-based browsers (Chrome, Edge) as Firefox already had protection against this scenario. ## Solution Added a safety check in `updateSelectionTable` to verify that the document selection is within the editable area before processing table selection updates. This extends the same protection Firefox had to all browsers. ## Changes - `addons/html_editor/static/src/main/table/table_plugin.js`: Added validation check - `addons/html_editor/static/tests/table/selection.test.js`: Added regression test Closes #187539
This fixes the loyalty program setup screen so minimum purchase options are fully hidden for buy X get Y promotions. It prevents users from setting an irrelevant condition on those reward programs, reducing configuration mistakes.
Original PR description
I think the point was to hide the entire `Minimum Purchase` section when the program type is `buy_x_get_y`, but only the label is hidden. This commit will also hide the div under the label, so no minimum purchase can be set on `buy_x_get_y` programs --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HTML editor now safely handles selections that start inside the editor and extend outside it. This prevents a browser-specific error in Chrome and Edge, making editing more reliable for users working with tables or selecting large blocks of content.
Original PR description
## Description Fixes issue #187539 where selecting text that extends outside the HTML editor boundaries throws an uncaught promise error. ## Problem When using Ctrl+A or dragging a selection from…
## Description Fixes issue #187539 where selecting text that extends outside the HTML editor boundaries throws an uncaught promise error. ## Problem When using Ctrl+A or dragging a selection from inside the editor to outside its boundaries, the `updateSelectionTable` method in `table_plugin.js` would process the invalid selection and call `setSelection()` with nodes outside the editable area, causing: ``` UncaughtPromiseError: Selection is not in editor ``` This only affected Chromium-based browsers (Chrome, Edge) as Firefox already had protection against this scenario. ## Solution Added a safety check in `updateSelectionTable` to verify that the document selection is within the editable area before processing table selection updates. This extends the same protection Firefox had to all browsers. ## Changes - `addons/html_editor/static/src/main/table/table_plugin.js`: Added validation check - `addons/html_editor/static/tests/table/selection.test.js`: Added regression test ## Testing The new test verifies that selecting from inside a table to outside the editor does not throw an error. Closes #187539
Dates and date-times now appear in the right format when administrators set default values in debug mode. This reduces confusion and helps prevent incorrect date values from being saved.
Original PR description
Problem: When setting default values in debug mode, the date and datetime values are not formatted correctly. This leads to confusion and incorrect values being set for date fields. Steps to reproduce: 1. Enable debug mode 2. Create a journal entry, set the date to some date (August 31st, for example), and save. 3. Click the bug icon, click Set default values. 4. Click on the dropdown, notice how the date is displayed as datetime instead of date. Cause: The displayed values were not being formatted for date and datetime fields when setting default values. They were just output as strings. Also, dates were not serialized correctly before being sent to the server, they were serialized as datetime instead of date, because the code was checking the constructor name of the value instead of the field type. opw-6533491 Forward-Port-Of: odoo/odoo#287813
This fixes a visual mismatch in quotations when optional products are shown in dark mode. The optional products table now blends with its surrounding panel, providing a more consistent and polished sales interface.
Original PR description
**Steps to reproduce:** - Set preferences to dark mode - Create a quotation and add a product with optional products (e.g customizable desk) -> Background of optional products is lighter than the…
**Steps to reproduce:** - Set preferences to dark mode - Create a quotation and add a product with optional products (e.g customizable desk) -> Background of optional products is lighter than the surrounding div **Behavior:** The `div` showcasing optional products is set to be a bit darker to add contrast in the modal. In light mode, table's background is transparent, which allows it to adapt to a darker container. However, this is not the case in dark mode, which causes a mismatch between table and div backgrounds. By default `$table-bg` follows `$body-bg`: https://github.com/odoo/odoo/blob/3442814d57cd9420d7dc6d022d15cd5d1b3def74/addons/web/static/lib/bootstrap/scss/_variables.scss#L738-L740 And is later set to transparent here: https://github.com/odoo/odoo/blob/3442814d57cd9420d7dc6d022d15cd5d1b3def74/addons/web/static/src/scss/bootstrap_overridden_frontend.scss#L74-L75 However when darkmode is enabled, `$body-bg` is re-assigned, which forces `$table-bg` back to the default dark color, bypassing the transparent override. https://github.com/odoo/odoo/blob/3442814d57cd9420d7dc6d022d15cd5d1b3def74/addons/web/static/lib/bootstrap/scss/_root.scss#L132-L139 --- This commit ensures that `table-bg` is explicitly set to transparent for tables displaying optional products. opw-6569713
This fixes an issue where link previews in the HTML editor could show an empty clickable area when website metadata contained only spaces. The editor now ignores blank metadata and falls back to the link URL or an empty value, making previews clearer for users.
Original PR description
Problem: When a link's metadata contains whitespace-only strings for `og_title`, `og_description`, or `og_image` (e.g. `og_title: " "`), the link popover displays an empty clickable preview area.…
Problem: When a link's metadata contains whitespace-only strings for `og_title`, `og_description`, or `og_image` (e.g. `og_title: " "`), the link popover displays an empty clickable preview area. Cause: `LinkPopover` assigned raw metadata values directly. Non-empty whitespace strings evaluate to truthy values in JavaScript (`" "` is truthy), preventing fallback to the default URL or empty string. Solution: Trim the metadata values (`og_title`, `og_description`, `og_image`) when populating state so that whitespace-only values evaluate to empty strings and trigger appropriate fallbacks. Steps to reproduce: - Open HTML editor. - Add a link with URL `https://netorg4182089.sharepoint.com/:v:/s/projects/IQD72ajP3WOBT4jcAu_1qLfIAamL9lvrq4ls1Bs9XCyXJvw?e=vQ9wH3`. - Open the link popover. => Observe that the popover title falls back to the URL instead of showing an empty clickable space. opw-6564118 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents an employee-related error from interrupting upgrades in the Australian payroll module. It ensures payroll warning calculations use the correct employee reference, improving upgrade reliability without changing business workflows.
Original PR description
When we replace read_group usage from
the business code with _read_group,
`proportions` return dictionary with
employee recordset instead of id.
and later we try to fetch employee id
from proportions keys which is not available
so we got keyerror during upgrade.
```
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 483, in _compute_field_value
return super()._compute_field_value(field)
File "/home/odoo/src/odoo/19.0/odoo/orm/models.py", line 4949, in _compute_field_value
determine(field.compute, self)
File "/home/odoo/src/odoo/19.0/odoo/orm/fields.py", line 81, in determine
return needle(*args)
File "/home/odoo/src/enterprise/19.0/l10n_au_hr_payroll/models/hr_employee.py", line 118, in _compute_proportion_warnings
proportions[emp.id] * 100,
KeyError: 4
```This fix ensures rental planning tests correctly account for time zones when comparing scheduled rental times. It prevents false test failures during early morning hours, helping keep release validation stable without changing customer-facing behavior.
Original PR description
**Issue:** `test_payment_renting_product_available` test is failing when executed between 0:00 AM and 2:00 AM in Brussels timezone (UTC+2): ``` AssertionError: datetime.datetime(2026, 6, 22, 16, 0) != FakeDatetime(2026, 6, 21, 16, 0) : The planning slot should begin at the same time as the picking time. ``` In the database the datetime is stored in UTC, which is the previous day for the example above. In `test_payment_renting_product_available` test, the datetime is passed to `datetime.combine()` function that naively uses the date part, which leads to a one-day delta. The datetime should be converted to the working timezone before being passed to `datetime.combine()`. runbot-940435
Colombian electronic invoices sent to DIAN no longer include the journal's technical control key in the invoice note field. This keeps the XML note limited to the invoice Terms and Conditions, avoiding incorrect information being submitted to the tax authority.
Original PR description
**Steps to reproduce:** - Install the `l10n_co_dian` module and switch to the CO Company. - Disable `Test environment` and enable `DIAN Demo Mode` in the invoicing settings. - Set a `Technical…
**Steps to reproduce:** - Install the `l10n_co_dian` module and switch to the CO Company. - Disable `Test environment` and enable `DIAN Demo Mode` in the invoicing settings. - Set a `Technical control key` on the `Customer Invoices` journal. - Create and confirm an invoice with Terms and Conditions. - Send the invoice to `DIAN`. - Open the generated XML file and observe the `cbc:Note` tag. **Observation:** The `Note` tag contains the `technical control key`. **Expected behavior:** The `Note` tag should only contain the Terms and Conditions value from the invoice. (Confirm with PO [1]) **Root Cause:** At [2] and [3], the code includes the `technical key` in the `Note` tag. [1]: https://www.odoo.com/mail/message/1164671931 [2]: https://github.com/odoo/enterprise/blob/a5f4bde1aa33ea7b796d7ee3f9d713a6c8ab8348/l10n_co_dian/models/account_edi_xml_ubl_dian.py#L664 [3]: https://github.com/odoo/enterprise/blob/a5f4bde1aa33ea7b796d7ee3f9d713a6c8ab8348/l10n_co_dian/models/account_edi_xml_ubl_dian.py#L1600-L1603 opw-6513843 Forward-Port-Of: odoo/enterprise#131495
This fix ensures the point-of-sale loyalty refund test loads the required customer record before trying to select it. It prevents test failures when the customer is not included in the initial contact list, improving reliability without changing user-facing behavior.
Original PR description
In the case that there are too many Contact records for 'Refunding Guy' to be in the first 100 records processed when opening the Partner List, the test errors as a result of trying to click on a Customer that is not present. A step has been added to ensure that the 'Refunding Guy' record is loaded before attempting to click on it. runbot-939288
This update corrects how bullet and numbered lists are displayed when users turn large heading text into a list in the HTML editor. It prevents list markers from shifting too far left, improving document layout consistency and visual quality.
Original PR description
Problem: Creating a list on a header block with large font size content causes the list marker/bullet to overflow to the left. Cause: `ListPlugin.blockToList()` wrapped block elements into a list without invoking `this.adjustListPadding(list)`, leaving the list padding unadjusted for larger font sizes. Solution: Call `this.adjustListPadding(list)` in `blockToList` so that proper inline padding is set based on the list item content font size. Steps to reproduce: - Create a header block (e.g. Header 4). - Change the font size of the header content to be bigger. - Apply a list on the content. => Observe that the list marker overflows to the left. opw-6542903 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents French e-invoicing tests from failing when an optional French PDP component is not installed. It keeps automated validation reliable across setups without changing business functionality for users.
Original PR description
### Issue: Tests in `TestCIIFR` fail when run without `l10n_fr_pdp` installed The expected XML files contain `PMT`, `PMD` and `AAB` notes that are only generated when `l10n_fr_pdp` is installed ### Cause: The note generation for FR e-invoicing lives in `l10n_fr_pdp` When it is not installed, the notes are absent from the generated XML but still present in the expected test files When `l10n_fr_pdp` is not installed, the expected tree is stripped of `PMT`, `PMD` and `AAB` notes before comparison ### Steps to reproduce: - Install `l10n_fr_account` without `l10n_fr_pdp` - Run `TestCIIFR` from `l10n_account_edi_ubl_cii_tests/tests/test_xml_cii_fr.py` Before the fix, the affected tests fail on the `cbc:Note` comparison runbot-945999 Forward-Port-Of: odoo/odoo#284661
The appointment pages list in the Website app now opens the correct editing screen when users choose Edit from a kanban card. This removes a dead action and helps staff update appointment page settings without switching views or using a workaround.
Original PR description
Steps to reproduce: 1. Install website_appointment 2. Website > site > appointment > kanban view 3. On a record, open the dropdown menu and click Edit. Issue: The Edit button does nothing. Cause: The Website appointment pages action only defines list,kanban views. When the kanban Edit action is triggered, the web client tries to switch to a form view, but no form view is available in the action, so nothing happens. Solution: Add the `appointment_type_view_form` to the Website appointment pages action and include form in its view_mode, so kanban Edit can open the selected appointment type correctly. opw-6197438 Forward-Port-Of: odoo/enterprise#117381
This update fixes incorrect test setup data across several Odoo apps by tightening validation of mocked field definitions and allowed selection values. It helps catch errors earlier during testing, reducing the risk of hidden issues reaching users.
Original PR description
- https://github.com/odoo/odoo/pull/256814 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#131914
This update fixes several issues in Odoo's automated web testing tools and test data, making test results clearer and more reliable. It helps development teams catch problems earlier and reduces the risk of unstable or misleading test outcomes across apps like Accounting, Calendar, Live Chat, Mail, and Point of Sale.
Original PR description
- https://github.com/odoo/enterprise/pull/131914 Various Hoot/web tests fixes. See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256814