Friday, January 30, 2026
27 changes · 19.0
Resolved issues and error corrections
This fix updates the Point of Sale loyalty program testing flow so it no longer gets stuck when a customer list inside a popup scrolls endlessly. It helps keep automated checks reliable, reducing the risk of delays when validating future changes.
Original PR description
fw-port fails because of infinite scroll in pop modal .modal .partner-list 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 Forward-Port-Of: odoo/odoo#218604
This fix prevents errors when shoppers switch product variants on pages where product images are hidden. It keeps the shopping experience stable for stores that choose not to display product imagery in the product page layout.
Original PR description
When product images are hidden (image_width='none' or missing), switching between product variants caused a traceback. Steps to reproduce: =================== - Go to a product page with variants -…
When product images are hidden (image_width='none' or missing), switching
between product variants caused a traceback.
Steps to reproduce:
===================
- Go to a product page with variants
- Edit mode & change the image to hidden
- Change variant
-> Traceback
Cause:
======
- The server doesn't send `carousel` data when images are hidden
(product_page_image_width='none')
- However, `_getProductImageContainerSelector()` still returned a valid
selector ("#o-carousel-product" or "#o-grid-product")
- `querySelector` found the existing (but empty) image container in the DOM
- `_updateProductImage()` was called with `undefined` as newImages parameter
- the re-queried images element crashed
Solution:
=========
In old version it was jquery and it was only checking for the existance
of the Old images (See [1]).
Now it will check both old and new images.
[1]: https://github.com/odoo/odoo/blob/77bfe416d08eefc720f12899490d3d39efacb74a/addons/website_sale/static/src/js/website_sale.js#L294
opw-5499004This fixes an issue where highlighted title text could lose its highlight when viewed on smaller screens and split across multiple lines. Highlight effects now detect line breaks more reliably, so website content keeps its intended appearance across different viewport sizes.
Original PR description
Steps to reproduce: 1. Go to Website (Edit mode) and drop a title block. 2. Select the title, set a highlight effect, and save the page. 3. Load the page in a reduced viewport in a way that makes the highlighted text split into multiple lines. 4. The highlight won't be applied correctly (only the last line will be detected). The current line detection mechanism relies on the horizontal comparison of rects (see `rectToBatch()`), which returns wrong results when applied to centered text content. The goal of this commit is to add a y-coordinate (vertical) check to detect new lines more reliably in `rectToBatch()`. This improves robustness for multi-line selections with unusual layouts. related to opw-4865891 Forward-Port-Of: odoo/odoo#219234
The online store product carousel now keeps its navigation controls within the visible page area when using maximum-width content. This removes unnecessary horizontal scrolling and provides a cleaner browsing experience for shoppers and site editors.
Original PR description
Steps to reproduce: 1. Drag and drop the dynamic products snippet. 2. Select it and change the content width to **max**. Issue: When the content width is set to **max**, an unnecessary horizontal scroll appears. Reason: The issue occurs because the `previous` and `next` navigation buttons were not properly positioned. Fix: For devices larger than "mobile", the `previous` and `next` buttons are re-positioned, horizontally inward by "**50%**" of their own width with the help of `transform` property. This keeps the controls within the visible area and prevents horizontal scrolling. task-5090468 Before: <img width="1915" height="966" alt="image" src="https://github.com/user-attachments/assets/0c20d0b6-32cc-477b-8403-55bb0d372d8d" /> After: <img width="1920" height="963" alt="image" src="https://github.com/user-attachments/assets/4194b0f1-f3ad-4818-aa6f-2fda4561d2c7" /> Forward-Port-Of: odoo/odoo#237876
The Time Off kanban view now shows a horizontal scrollbar when needed. This makes it easier for users to access and review all of their time off entries without content being hidden.
Original PR description
Before: the scrollbar of the kanban view in timeoff was not showing coz of which users were not able to see their timeoffs easily After: Fixed the scrollbar of the kanban view so that the user can be able to see their timeoffs which they were not able to do that easily Fix: Added the `overflow-x` as auto so that the scrollbar is visible. Task:5502863 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245443
The accounting audit trail tests were adjusted to match recent internal behavior changes and prevent a reported automated test failure. This helps keep quality checks reliable without changing day-to-day product functionality for users.
Original PR description
Since this commit https://github.com/odoo/odoo/pull/242248/changes flushing inside `test_cant_unlink_message1`, `test_cant_unown_message` is now required. https://runbot.odoo.com/odoo/runbot.build.error/237803 runbot/error-237803 Forward-Port-Of: odoo/odoo#246353
This fix makes the automated sales signature test work consistently regardless of where the signing page opens. It reduces false test failures and helps keep sales-related updates moving through validation smoothly.
Original PR description
This commit fixes an indeterministic sign tour that could run either inside an iframe or directly in the main page. Since the execution context was unpredictable, both selectors were added to handle both cases reliably. runbot error-238443 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246032
This update adjusts Odoo's automated test setup so Chrome Headless continues to support WebGL-dependent checks after a browser default changed. It helps preserve test coverage for features such as website image filters, reducing the risk of unnoticed regressions without affecting normal users.
Original PR description
Since Chrome 144 disabled [^1] by default the WebGL fallback to the software renderer SwiftShader, this commit reenables [^2][^3] it when running in headless mode to allow to keep testing WebGL features (i.e. image filters in website builder). Note: the SwiftShader implementation is considered deprecated and less safe than proper hardware based ones, hence not recommended for a regular usage with untrusted content. However, as tests are run in a more controlled environment, it looks reasonnable to opt-in to keep actually testing WebGL features. [^1]: https://chromium-review.googlesource.com/c/chromium/src/+/7128438 [^2]: https://issues.chromium.org/issues/476172421 [^3]: https://chromestatus.com/feature/5166674414927872 Forward-Port-Of: odoo/odoo#246289
The website builder now displays option connector lines correctly when options include nested sub-options. This removes a small visual glitch and makes the editing panel clearer and more polished for users configuring page elements.
Original PR description
Steps to reproduce: - Open the website builder and drop a "Cover" snippet on the page. - In "Background > Image", choose "Position: Repeat pattern" to reveal the "Width/Height" sub-options. - Issue: the vertical connector line between the "Filter" and "Position" options is broken. After this commit, the gap is removed. Options at the same level are now properly connected, even when one of them contains sub-options. task-5155955 | Before | After | | ------------- | ------------- | | <img width="286" height="424" alt="image" src="https://github.com/user-attachments/assets/db035598-5094-4ec3-a42b-dc86bd871b9b" /> | <img width="285" height="422" alt="image" src="https://github.com/user-attachments/assets/d0229c5b-d3ea-41a2-9ed7-6155fc34d280" /> | Forward-Port-Of: odoo/odoo#241092
This fix ensures Odoo always provides the employee location information needed to show today's homeworking status, even when views are opened from areas like Studio. This prevents missing location data in specific workflows and makes the homeworking feature more reliable for users.
Original PR description
Before this commit, the feature at commit odoo/odoo@b3be3af61cc08d0dea84969425d24957f215b26f worked by chance, because in most cases ALL fields where returned in the get views, since most of the time the search view is asked for as well, hence yielding all fields in the model There were issues when triggering get_views from another place, namely studio when creating a many2many. After this commit, we make sure the current day location field's description is sent opw-5484321 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 Forward-Port-Of: odoo/odoo#246096 Forward-Port-Of: odoo/odoo#245740
Live chat visitors and guests will no longer see chat commands that they cannot use, such as help or leave options. This reduces confusion and keeps the live chat interface focused on actions available to the visitor.
Original PR description
**Current behavior before PR:** channel commands like `/help ` or `/leave` are visible to visitors even it is not functional for them. **Desired behavior after PR is merged:** commands are now hidden from visitors. task-4552209 related: [PR](https://github.com/odoo/enterprise/pull/82963) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#245559 Forward-Port-Of: odoo/odoo#196737
This fix makes the neutralized Peppol configuration use consistent labeling, avoiding a mismatch between demo and test modes. It reduces confusion for users reviewing or working with neutralized environments.
Original PR description
Currently, the proxy_client_user is neutralized as demo. But the edi_mode is set to test. It's confusing for the users, and we should be consistent. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246181
Website test setup now waits until page interactions are fully ready before running checks. This reduces intermittent test failures around popups, helping keep website changes validated more consistently without affecting end users.
Original PR description
__Before commit__ Hoot tests using interactions inside the iframe may fail because we do not wait for the interaction service to be ready before executing the tests. In particular, the `SharedPopup` interaction is sometimes started after we trigger a click to display it in the test. Since it has not had time to register the proper listener, the `d-none` class is never removed from the popup, so the test is stuck waiting for it to appear. __Fix__ When the JavaScript assets are included inside the iframe, the attribute `is-ready` is added to the iframe body. In this case, we wait for it to appear instead of uselessly adding it artificially. Waiting for all interactions to load may take a bit of time, so a large timeout is set to wait for the `is-ready` attribute. The timeouts inside the tests are now removed since they were there to fix this bug without success. runbot-237554 Forward-Port-Of: odoo/odoo#246327
This fix ensures that blockquote sections added to email marketing campaigns are preserved when the email is sent. Business users can use the Blockquote snippet without recipients receiving emails with missing quoted content.
Original PR description
Problem: When sending an email containing a blockquote, its content is missing in the received email. Cause: The `bootstrapToTable` conversion logic strictly filters the children of `.row` elements and only keeps nodes that have valid Bootstrap column classes. In the `s_blockquote` snippet, the content was wrapped in a plain `<div>` placed directly inside a `.row`, so it was ignored during conversion. Solution: Add the `col-12` class to the inner `<div>` of the blockquote snippet so it is recognized as a valid Bootstrap column and preserved during conversion. Steps to reproduce: - Create a new email marketing. - Add the "Blockquote" snippet. - Send the email. - Observe that the received email loses the blockquote content. opw-5883624 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Printing bank statements from the list view no longer triggers an error when statement and accounting entry IDs overlap across companies. This helps users reliably generate statement printouts in multi-company setups.
Original PR description
When trying to print a statement via the list view, we get a traceback. This is because the module `account_bank_statement_import` inherits the `view_bank_statement_tree` and use `accountMoveUploadListView` which use `AccountMoveListController`. Therefore, when calling `get_extra_print_items` from the controller, we call it with model `account.move` but with a statement id, which leads to either wrong behavior or access error. Steps: - Make sure account_bank_statement_import is installed - Have 2 companies - Create a bank statement for company B, make sure it has the same id as any account move from company A - From the bank statement list view, select the statement - Click on the print button -> Traceback opw-5427019 Forward-Port-Of: odoo/odoo#245207
The Peppol itsme login button has been visually adjusted so the logo has better spacing and displays with the correct colors in light mode. This makes the button clearer and more polished for users during Peppol-related setup or authentication.
Original PR description
Add some space to the right of the logo. Fix the colors in light mode. task-none **Before:** <img width="197" height="62" alt="image" src="https://github.com/user-attachments/assets/77bdb995-5f22-4c3f-b0af-63b074b80338" /> **After:** <img width="198" height="59" alt="image" src="https://github.com/user-attachments/assets/c4a55cae-40d7-4d53-a8ff-dfb2e2143fdd" /> <img width="208" height="72" alt="image" src="https://github.com/user-attachments/assets/32173d46-c4fd-421d-ada5-9b6ce798a601" />
The website editor no longer shows the Cover Image setting for dynamic blog and event snippets that do not support a cover image. This avoids confusing users with an option that cannot affect the displayed content.
Original PR description
*: blog, event This PR fixes an issue about the `Cover Image` option being displayed even if the snippet doesn't come with any cover image. task-5104447 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update corrects a technical issue preventing invoices from successfully validating with DIAN, Colombia's tax authority. The fix involved updating a specific tag format within the invoice XML files to match DIAN's requirements. This ensures invoices are properly processed and avoids validation errors.
Original PR description
Problem: When validating invoices with DIAN, an error is received. Cause: Incorrect tags are being used in the invoices. These tags are checked when invoices are validated with DIAN. Solution: Use the correct tags in the invoices. schemeName should be used instead of scheme_name. Steps to reproduce: - Install l10n_co_dian module - Choose a Colombian company - Activate DIAN service in Settings - Create an invoice and send it while making sure the DIAN checkbox is ticked - Download the generated zip file and uncompress - Open the XML file and check for scheme_name. It should be replaced by schemeName. opw-5829958 Forward-Port-Of: odoo/enterprise#105659
This update addresses a small technical issue where a missing space in a route caused a problem with the account online synchronization process. This fix ensures the synchronization feature functions correctly, preventing potential disruptions to data synchronization.
Original PR description
During this forward port: https://github.com/odoo/enterprise/commit/a5b9372ca0b23151046c14c9a8ead0ed9cd46b80 there was a missing space in the route. no task id Forward-Port-Of: odoo/enterprise#105849
This update hides potentially confusing channel commands (like `/help`) from website visitors and guests. Previously, these commands were visible even though they didn't function for non-users. This change enhances the user experience and prevents accidental actions by guests, improving overall website security.
Original PR description
**Before PR:** channel commands like `/help ` or `/leave` and more are visible to visitors or guest even it is not functional for them. **After PR:** all commands are now hidden from visitors/guests. task-4548666 Forward-Port-Of: odoo/enterprise#105380 Forward-Port-Of: odoo/enterprise#82963
This update fixes an issue where changing the Payment Partner in the accounting system didn't consistently save the new selection. The fix removes a restriction that prevented the system from properly updating the Payment Partner record, ensuring changes are saved and reflected after refreshing the record.
Original PR description
**Steps to reproduce:** 1. Install Accounting. 2. Go to Return Type. 3. Create a record and set a Payment Partner Bank. 4. Change the Payment Partner. **Issue:** Changing the Payment Partner creates a log entry but does not update partner on the selected Payment Partner Bank. After refreshing the record the value is reverted to the previous partner. **Cause:** The field payment_partner_id is defined as `readonly` at the model level. As a result, when the ORM attempts to update this field, the write operation is silently ignored. Although the field appears editable in the view due to `readonly="0"`, model-level `readonly=True` still prevents the value from being saved. **Fix:** Make the field writable at the model level so that ORM updates are persisted, This ensures that changes to Payment Partner are properly saved and no longer reverted after refresh. **opw-5423029**
This update corrects a technical issue in the Datev export functionality for tax groups with children. Previously, the system incorrectly accessed the parent tax group instead of the child groups, leading to inaccurate data. This fix ensures that Datev exports correctly represent tax groups and their associated children.
Original PR description
Issue: Before this commit, when a tax type is group and has children, we access the parent, even though the dict has only the children Fix: as a solution, we map through the originated tax list received from the compute all function opw-5480918 opw-5874567
This update resolves an issue where the input field within the campaign test dialog would disappear when cleared. The fix adds a configuration to ensure the field correctly displays, preventing users from needing to close and reopen the dialog to use it. This improves the user experience for campaign testing.
Original PR description
Steps to reproduce: 1. Install `marketing_automation` 2. Create a campaign with activity and click on `Launch a test` button 3. Clear the input field and then click outside the input area Issue: -…
Steps to reproduce: 1. Install `marketing_automation` 2. Create a campaign with activity and click on `Launch a test` button 3. Clear the input field and then click outside the input area Issue: - The input area has disappeared. Now, the only way to get it back is by closing the dialog and reopening it Cause: - Field `resource_ref` uses `hide_model: True`, and when cleared, the widget has no value and no model selector to determine the target model because of the function `getRelation` that now returns `undefined`, by this XML fails to render the `<Many2OneField/>` https://github.com/odoo/odoo/blob/7680b83501cef18362be38f90715d824f2bf9cd6/addons/web/static/src/views/fields/reference/reference_field.js#L107-L119 Solution: - Add `model_field: model_id` option to the view so the widget can resolve the model from the `model_id` field even when input is empty Note: - This behavior also occurs in other places. After discussion with the framework team, we agreed to keep the scope of this PR limited to marketing_automation, as this is not a priority issue. A broader fix can be addressed in the master if needed. opw-5473320 Forward-Port-Of: odoo/enterprise#104547
This update corrects a bug where duplicate default appointment slots were being created. The fix ensures that slots are only generated once, preventing confusion and ensuring accurate appointment scheduling. This improves the user experience and data integrity.
Original PR description
Steps to reproduce: - Install website_appointment - Go to the frontend and create a new appointment from there - The appointment created has its default slots duplicated When creating an appointment type, it's possible that we end up creating the default slots two times by passing in the compute of the category and then the onchange linked to category_slot_scheduling. Technically, when we were in the onchange after the compute, slot_ids was populated by NewId records. So when assigning and creating a second time the default slots, the NewId would at the end become real records and the new one were added on top. Now we add a check on the previous category to create the default slot only when we came from a custom appointment and reset them if it is now a custom one. task-5499200
This update fixes a technical issue related to how account reports process data. By adding filters to the underlying data tables, the system now ensures more accurate reporting, particularly for cash basis accounting. This improves the reliability of financial reports.
Original PR description
In addition to: - [x] #104936 And other PRs in Odoo core: - [x] odoo/odoo#243833 - [x] odoo/odoo#243967 - [x] odoo/odoo#246440
This update corrects a technical issue where the Point of Sale (POS) system incorrectly reported the scale as disconnected. The change, previously addressed in odoo/enterprise#90842, ensures accurate scale status reporting, improving the reliability of the certified scale service. This resolves a potential disruption to sales transactions.
Original PR description
This commit ports the change from odoo/enterprise#90842 to the certfied scale service, which fixes an issue where the POS claims the scale is disconnected even though it isn't. opw-5880286
This update resolves an issue where editing a bank statement line would incorrectly trigger a recomputation of all related lines, including reconciled ones. The change prevents this behavior, improving the stability and efficiency of bank statement management. This ensures edits to bank statements don't unexpectedly affect reconciliation processes.
Original PR description
When we edit a bank statement line, it triggers the recompute of all other lines, even the reconciled ones. This commit changes this behavior so reconciled lines are not recomputed task-5882885 Forward-Port-Of: odoo/enterprise#105754