Thursday, September 11, 2025
21 changes · saas-18.4
Resolved issues and error corrections
Website editor popovers such as color pickers and link styling controls now stay correctly positioned when users scroll inside the page editor. This prevents editing controls from drifting away from the selected content, making page design tasks smoother and less confusing.
Original PR description
__Current behavior before commit:__ Some popovers that are toggled from the toolbar are not repositioned when the user scrolls in the website iframe. __Description of the fix:__ `this.__owl__.childEnv` is passed as `env` to `usePopover` such that the `POSITION_BUS` entry is included. Child env is used to avoid polluting the env of the parent component. __Steps to reproduce the issue on runbot:__ 1. Open the Website builder 2. Select some text 3. Click on the *Background Color* item (or *Highlight* or *Link* > *Custom* > *Text Color*) 4. Scroll the page The color picker popover doesn't follow the page scrolling.
The blog sidebar once again includes a dedicated RSS button, making it easier for visitors to subscribe to blog updates. The button is now separate from general social media links, which keeps blog subscriptions clearer and avoids mixing them with website-wide social channels.
Original PR description
Commit [1] changed the "follow us" social media snippet in the blog sidebar to not be dynamic anymore (meaning, it uses the website related social media by default but they are not added/removed automatically based on if they are set or not)... but doing so it removed the custom "RSS" button by mistake. This commit restores it, placing it at the top right of the sidebar, instead of being a part of the "follow us" social media. This keeps everything as static as possible + it actually makes sense to have this dedicated button outside of the more general "follow us" which is more website related than blog related. [1]: https://github.com/odoo/odoo/commit/8b7e44c8c6a7b5c267da39f438e0dfc20699befd
Product images in the catalog now display without being stretched when they are not square. This keeps quotations and product browsing visually accurate and more professional for sales users.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have products with non-square images available for sale; 2. open a quotation; 3. open the product catalog. Issue ----- The product images appear stretched. Cause ----- Commit e8836b42200e3 replaced the `div.kanban_image` element with a `field` element using the `image` widget. It maintained the same size limit of 55x55 via the widget's options, but without additional input, this causes the widget to stretch the images to fill the area. Solution -------- Add the `object-fit-contain` as `img_class` to the options. This class contains the image to the area instead of stretching it. opw-5007629 Forward-Port-Of: odoo/odoo#225112
Website editors can now add a Floating Cards item and resize its title area without triggering an error. This prevents an editing interruption and makes the snippet behave reliably after adding new cards.
Original PR description
*: html_builder In the "Floating Cards" snippet, after adding a new card, when trying to resize its title column vertically, a traceback appears. It happens because this grid item does not have the `g-col-*` class, which is needed for the resize in grid mode to work. This commit adds this class. Steps to reproduce: - Drop a "Floating Cards" snippet. - Add a card. - Click on the new card title and resize the column vertically. => Traceback The issue was previously addressed in [1], but a refactor of the Floating Cards snippet in master introduced a duplicate template, and the fix was applied to the incorrect one. [1]: https://github.com/odoo/odoo/commit/78f6e70e0777f5b063524ead73ddaae93ba55f22
The website builder now scrolls more smoothly in Chrome when using a laptop trackpad. This reduces distracting visual stutter in the editing panels, making page editing feel more polished and comfortable.
Original PR description
__Current behavior before commit:__ On Chrome, some elements of the builder, like the options headers, move at different times when scrolling with the trackpad creating unpleasant jank visual effect. __Description of the fix:__ Use `will-change: scroll-position;` to tell the browser to optimize the scroll rendering. __Steps to reproduce the issue on runbot:__ 1. Open the website builder in Chrome 2. Scroll with the laptop trackpad in the *Edit* or *Theme* tab
This fixes how separator lines appear in website price list and product catalog sections when users adjust border settings in the web editor. It helps keep published pages visually consistent when businesses customize these snippets.
Original PR description
Prior to this commit, the separators in the `s_product_catalog` and `s_pricelist_*` snippets didn't render correctly when changing the border values in the web editor. Steps to reproduce: - Open the…
Prior to this commit, the separators in the `s_product_catalog` and `s_pricelist_*` snippets didn't render correctly when changing the border values in the web editor. Steps to reproduce: - Open the Web Editor. - Drag and drop a price list snippet (`s_product_catalog`, `s_pricelist_cafe`, or `s_pricelist_boxed`). - Click on the snippet. - Set the border value to `0`. task-5081626 | Before | After | |--------|--------| | <img width="1914" height="646" alt="Capture d’écran 2025-09-11 à 09 30 11" src="https://github.com/user-attachments/assets/f7dc319f-e151-4fc4-9349-df70719aec9f" /> | <img width="1912" height="643" alt="Capture d’écran 2025-09-11 à 09 31 02" src="https://github.com/user-attachments/assets/dbbaacff-9f20-4ec4-9fec-f4cc3770952a" /> | | <img width="1915" height="646" alt="Capture d’écran 2025-09-11 à 09 30 52" src="https://github.com/user-attachments/assets/f138bd04-60cd-4238-9338-2fa5921d7715" /> | <img width="1911" height="647" alt="Capture d’écran 2025-09-11 à 09 31 37" src="https://github.com/user-attachments/assets/c38e486a-2b23-4685-83f1-de363c15c881" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes automated checks for the Discuss command palette more reliable by waiting for the interface to settle before interactions are tested. It also corrects supporting test data so related messaging features can be validated consistently, reducing false failures in quality checks.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. The commit also fixes the mock of `discuss/search` ( for https://github.com/odoo/enterprise/pull/94075 ) and a test that was incomplete and relied on the incorrect implementation https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/odoo#225951 Forward-Port-Of: odoo/odoo#225844
Website editors now get more predictable link behavior when editing pages. Image links no longer show an unintended live preview while typing, and empty link URLs are preserved with a safe placeholder instead of silently discarding the change.
Original PR description
### Description of the issue/feature this PR addresses: - onChange was triggered both while typing in the URL input and when selecting an autocomplete item, causing live preview even for image links. - When editing a link, removing URL and clicking outside discarded changes. ### Desired behavior after PR is merged: - Live preview is now applied only for normal text links, not for image links. - If the URL field is empty and the user clicks outside, the link now default its href to '#'. task-5028570 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Vendor price lists created from blanket orders now use the unit of measure from the blanket order line instead of defaulting to the product's base unit. This helps purchasing teams keep vendor pricing aligned with negotiated order terms and avoids unit-related pricing mistakes.
Original PR description
This commit fixes setting the UoM of the vendor pricelist generated by a blanket order. Previously, the created pricelist had the base unit of the product. Now, it has the unit of the blanket order line. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226033
Fixes an issue where reloading a page after folding a group in a grouped Kanban view could show an error. The view now refreshes its saved group state from the latest server response, improving reliability for users returning to grouped records.
Original PR description
- Open a grouped kanban; - Fold a group; - Reload the page; Before this commit, an error occurred because the configuration says that the group is unfolded, but the returning RPC didn't have any records. This commit clears the current configuration, which will then be reloaded based on the returning RPC.
The wishlist purchase journey test now allows more time to complete, reducing false failures when the process runs slowly. This helps keep automated validation stable without changing the customer-facing shopping experience.
Original PR description
Increase timeout for wishlist tour. As it was taking too long to complete. runbot-229616 Forward-Port-Of: odoo/odoo#225357 Forward-Port-Of: odoo/odoo#219653
Users editing technical views now receive a clear, user-friendly message if they include an XML encoding declaration that cannot be saved. This prevents a confusing system error and helps administrators correct the view architecture more easily.
Original PR description
Currently, an error occurs when a user includes an XML encoding declaration in the view architecture. **Steps to reproduce:** - Enable **developer mode**. - Under `Settings > Technical > User…
Currently, an error occurs when a user includes an XML encoding declaration in the view architecture. **Steps to reproduce:** - Enable **developer mode**. - Under `Settings > Technical > User Interface > Views` Create or edit any view. - Enter the `view name` and select `view type`. - In the Architecture field, declare encoding as: `<?xml version='1.0' encoding='utf-8'?>`. - Attempt to save the view. **Error:** `ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.` **Root Cause:** The [1] call raises a ValueError when the XML declaration includes an encoding attribute. This low-level error is not handled and results in an ungraceful failure. [1]- https://github.com/odoo/odoo/blob/bf4ccb21f6c9c8bcda9c6f94d844c89296523954/odoo/tools/translate.py#L281 This commit ensures raising an UserError, improving the error message clarity. sentry-6505918596 Forward-Port-Of: odoo/odoo#226396 Forward-Port-Of: odoo/odoo#205324
The Uruguay localization app now links directly to the Uruguay fiscal localization documentation instead of a general documentation page. This helps users find the relevant country-specific guidance faster from the app information.
Original PR description
Description of the issue/feature this PR addresses: The website link in the `l10n_uy` manifest was pointing to a generic documentation page. Current behavior before PR: Link in manifest points to `https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations.html` Desired behavior after PR is merged: Link in manifest points to `https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/uruguay.html` Forward-Port-Of: odoo/odoo#226169 Forward-Port-Of: odoo/odoo#225460
The Send & Print wizard now skips a Uruguay electronic invoice file type that caused download errors. Users can download invoice attachments without interruption, while the skipped CFE document remains available from its own form view.
Original PR description
When downloading attachment via the send & print wizard, we get an error from the server. This is because we raise an assertion error if any attachment is not from 'account.move' model. But the CFE file is from 'l10n_uy_edi.document' model. With this commit, we extend the `_action_download` method to filter the CFE file from the attachments. It is not blocking for client as he can still download it from the form view of the CFE document. Steps: - Create an invoice - Set a 0% tax on the invoice line - In 'Other infos' tab, fill the 'Incoterm', 'Sales Modality' and 'Transportation Rules' fields - Confirm - Open S&P wizard, select 'Create CFE' and confirm - Reopen S&P wizard, select 'Download' and confirm (can be done along the previous step too) -> Error opw-5043902 Forward-Port-Of: odoo/enterprise#93830
Internal users can now use AI agents that rely on tools without being blocked by an access error. The change adds read-only access for these AI tools and includes tests to help prevent the issue from returning.
Original PR description
Purpose: --------- The access rule for internal users on the `ai.tool` model is missing, and internal users can therefore not chat with an agent that has tools (an `AccessError` is raised) This commit adds the rule with read permission only, and adds a few basic tests to check model permissions. Task-5064332
Scanning package type barcodes with GS1 barcode settings no longer causes server errors. This keeps warehouse barcode workflows running smoothly when identifying package types.
Original PR description
Steps to Reproduce: - Set the barcode nomenclature to GS1 - Scan a package type barcode - Server logs an AttributeError(in Odoo 18) or KeyError(in Odoo 16 and 17) Issue: - The model class "stock.package.type" is missing an attribute "_barcode_field" Solution: - Add the attribute "_barcode_field" to the model class "stock.package.type" Task: [4888064](https://www.odoo.com/odoo/49/tasks/4888064) Forward-Port-Of: odoo/enterprise#94347 Forward-Port-Of: odoo/enterprise#93116
This update adjusts internal test code to use the standard shared helper entry point instead of deeper framework paths. It makes test maintenance easier and reduces the chance of inconsistencies, with no expected impact on day-to-day users.
Original PR description
This commit reduces imports to the 'tests/_framework/' subfolder, which is meant to be accessed through the 'web_test_helpers' module as to reduce the amount of imports, as well as centralizing all web helpers to have a quick overview of the available helpers. Community: https://github.com/odoo/odoo/pull/225865 Forward-Port-Of: odoo/enterprise#94074
This fix makes automated WhatsApp command palette tests wait for the interface to settle before clicking items. It reduces false test failures, helping keep development and release validation more stable without changing customer-facing behavior.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/enterprise#94075
Opening the rental availability view from a rental order now works reliably. The fix prevents an error that blocked users from checking product availability in the rental schedule.
Original PR description
**Steps to reproduce:** 1. Go to Rental > Create a rental product and enable Sales. 2. Create a rental order with a customer and created product. 3. Click the availability icon and open the view rental. **Issue:** A traceback occurs: `Caused by: InvalidDomainError: Invalid domain representation: product_id,=` **Cause:** The rental availability check crashed due to improper domain construction: <img width="453" height="89" alt="image" src="https://github.com/user-attachments/assets/fd3ff556-fdab-40ab-9c1b-a539e5b164e8" /> **Solution:** Now the `product_id` is correctly retrieved from the record’s `id` property before building the domain, preventing crashes when opening the rental gantt view. opw - 5066061
This update fixes an issue in the Belgian CodaBox integration that could cause errors when processing company records. It helps ensure CodaBox-related company operations run reliably without interruption.
Original PR description
We incorrectly used the recordset `self` instead of the record `company` This commit fixes this opw-5036698 Forward-Port-Of: odoo/enterprise#94289
The Quality Points button on product pages now excludes archived quality points from both the count and list. This prevents users from seeing outdated quality controls and keeps product quality information accurate.
Original PR description
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all…
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all products*. 3. Open any product form. * Verify that the *Quality Points* smart button shows the created point and the correct count. 4. Archive the Quality Point. 5. Reopen the same product form and check the *Quality Points* smart button again. **Observed behavior:** - The archived Quality Point is still counted and shown in the smart button. **Root cause:** - During the refactor from raw SQL (`get_sql` + `cr.execute`) to the ORM query builder (`query.add_where(SQL(...))`), one outer bracket was dropped. [ref](https://github.com/odoo/enterprise/pull/66290/commits/a6362bc07eac7640f68d145a0f6a14a81f499913#diff-2ffdc2ffc25417076b580b772447514c7e9d8b3e2d2fff2d3100721eb5ccbaf4L542-R561) - This changed the operator precedence, causing the `active = true` condition to no longer properly apply when combined with the OR block. - As a result, archived Quality Points bypass the filter and are still counted. **Solution:** - Fix the missing bracket in the `query.add_where` SQL expression so that the `active` condition is always enforced before evaluating the OR block. opw-5046289 Forward-Port-Of: odoo/enterprise#94173