Monday, July 14, 2025
29 changes · saas-18.4
Enhancements to existing features
The website setup guide checks have been updated to work with the redesigned website builder. This helps ensure important page options, including header visibility behavior, continue to work reliably for users.
Original PR description
The `website_page_options` tour was previously broken due to DOM structure changes introduced by the new website builder and was consequently disabled. This commit updates the tour steps to align with the new DOM and re-enables the associated test. Also previously, header visibility was not maintained after clicking header in invisible options. since it maintains visibility now, the tour is adapted accordingly. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds a developer option to turn off longpolling so IoT communication can be tested through websockets instead. It helps teams validate fallback behavior during development and debugging without affecting normal business workflows.
Original PR description
In order to ease development/debugging lonpolling=>websocket fallback we added the possibility to disable longpolling calls in order to force the communication via websocket. Task: 4929877 Forward-Port-Of: odoo/odoo#218598 Forward-Port-Of: odoo/odoo#218433
When a user clicks a Livechat Support Channel Report pivot cell that matches only one conversation record, Odoo now opens that record directly instead of showing an intermediate list. This saves time and reduces unnecessary navigation for support reporting users.
Original PR description
**Purpose of this PR**: For Livechat Support Channel Report when a pivot cell is clicked and the resulting domain returns only one record, the form view is now opened directly, bypassing the list view. **task**-[4753032](https://www.odoo.com/odoo/all-tasks/4753032) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210028
The IoT setup dialog for using a pairing code has been updated with clearer wording. This helps users understand the pairing process more easily when connecting an IoT box.
Original PR description
We improved the "use pairing code" dialog to make it clearer. Task: 4942391 Forward-Port-Of: odoo/enterprise#90164
Domestic VAT return names no longer show the country ISO code, reducing unnecessary clutter. ISO codes remain visible for foreign VAT returns, making it easier for users to distinguish cases where the country matters.
Original PR description
Showing ISO codes for every return is unnecessary and should only be shown for foreign VAT returns. This commit removes the ISO code from the return name for domestic return only. task-4783937 Forward-Port-Of: odoo/enterprise#86391
Resolved issues and error corrections
Creating a website menu item now works even when a website has no existing menus. This prevents an error screen in the Website Editor and lets users save new menu items normally.
Original PR description
A traceback occurs when a user attempts to create a
menu item from the Website Editor.
**To reproduce this issue:**
1) Install the website_event module and enable debug mode.
2) Delete all existing menus for a website from the Website Configuration.
3) Now, add a menu item from the website/Site/Menu editor.
4) Save the record
**Error:-**
```
KeyError: False
```
**Cause:**
When there are no existing menus on a website and a new menu is created,
the value of parent_id in the data dictionary is False.
Although the `parent_id` key is present, using `.get("parent_id")` returns False,
which leads to a `KeyError` in the following code line:
https://github.com/odoo/odoo/blob/d6db9f910288e69ecd8e26addd20ea34bda81f15/addons/website_event/models/website_menu.py#L83-L88
**Solution:**
We can check the `parent_id` in the data using `in` to solve the issue
if the value of the `parent_id` is False.
opw-4869138
Forward-Port-Of: odoo/odoo#215564Miscellaneous changes
[IMP] website: add city name in MockRequest Before this commit: - mocking request city is possible only with the country, city record contains country attribute but not the city informations like name. After this commit: - it's possible to mock the city by prividing its name according to 'en' local. Related PR: https://github.com/odoo/enterprise/pull/84322 task-4745995 Forward-Port-Of: odoo/odoo#207783
Original PR description
[IMP] website: add city name in MockRequest Before this commit: - mocking request city is possible only with the country, city record contains country attribute but not the city informations like name. After this commit: - it's possible to mock the city by prividing its name according to 'en' local. Related PR: https://github.com/odoo/enterprise/pull/84322 task-4745995 Forward-Port-Of: odoo/odoo#207783
This change updates a website test so it waits in a controlled way instead of relying on real-time delays. This helps reduce random test failures and keeps development checks faster and more dependable, without changing customer-facing website behavior.
Original PR description
In this commit, we're going to replace the use of setTimeout with advanceTime. No test should use setTimeout to wait for time, you should always use advanceTime. Using setTimout will slow down the test and cause some indeterminate bugs. 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
This fix reduces the height of long selection dropdowns in the website builder so they fit within the visible screen. It helps users choose header scroll effects and other builder options without parts of the menu being cut off, especially on smaller windows.
Original PR description
> [ROMO] The dropdown to select the scroll effect for the header is partially hidden on top The size of dropdown of builder select was reduce by cdc74d6e5c1dc2c8d84d028b7b7c0284118a9d66 to avoid going out of viewport but it was not enough Steps to reproduce: - Open website builder - Find a `BuilderSelect` that is long enough (or reduce the window size) - Open it when it is near the middle of the height of the view port - Bug: the end is outside of the viewport task-4367641
Cloning a website Countdown block now hides its end-message preview, making it clearer that the full countdown snippet was copied rather than only the text. The related editing controls are also corrected so users see the right options and a clearer preview toggle.
Original PR description
This commit removes the end message preview of the "Countdown" snippet when cloning it or a snippet containing it. This makes it easier for the user to understand that he cloned the whole snippet and not just the text block. This commit also explicitely activates the `s_countdown` element options when hiding the end message preview. Indeed, if the message block was selected, its options were still activated despite it being hidden. This commit also removes the `text-primary` class from the show/hide message preview option when it is active, to make the eye more visible. task-4367641
This update fixes how the website and HTML editors reference styling information, avoiding stale cached editor data. It helps ensure editing tools behave correctly when multiple editor instances or reloaded editing frames are involved.
Original PR description
*: html_editor, website The `editableWindow` and `editableDocument` global variables in html_builder's utils_css file were leftovers from the previous codebase. We would rather not cache them that way, as this prevents from having different instances of the builder with different editable documents, and it would also be easy to break it without noticing after an iframe reload. Utils that needed the editableDocument or window mostly needed the iframe's computed style. Therefore, instead of relying on implicit variables, `htmlStyle` is added as a mandatory parameter. task-4367641
Installing the Spanish localization no longer fails if the default Service product category was previously deleted. This prevents an installation-blocking error and helps users complete setup without manually recreating the missing category.
Original PR description
Currently, an error occurs when the user installs the modules after deleting the 'Service' product category. **Steps to reproduce:** - Install the Inventory app. - Inventory > Configuration >…
Currently, an error occurs when the user installs the modules after deleting the 'Service' product category.
**Steps to reproduce:**
- Install the Inventory app.
- Inventory > Configuration > Categories > Delete 'Service'.
- Install the `l10n_es` module.
**Traceback:**
```
ValueError: External ID not found in the system: product.product_category_services
ParseError
while parsing /home/odoo/src/odoo/saas-18.3/addons/l10n_es/data/product_data.xml:3, somewhere inside <record id="product_dua_valuation_21" model="product. Product">
<field name="name">DUA VAT Valuation 21%</field>
<field name="default_code">DUA21</field>
<field name="categ_id" ref="product.product_category_services"/>
<field name="type">service</field>
<field name="sale_ok" eval="False"/>
<field name="purchase_ok" eval="True"/>
</record>
```
The error occurs because the user deleted the category and then installed the modules that reference the missing product category.
This commit resolves the error by providing a False value for the field if the product category is missing.
Sentry - 6710886848
Forward-Port-Of: odoo/odoo#216296This change stabilizes an automated test for mail connection alerts by preventing real network online/offline events from interfering with the test. It helps reduce false failures in Odoo's validation pipeline, making releases and fixes easier to verify.
Original PR description
Before this commit, the `show warning when bus connection encounters issues` test was sometime failing. [1] attempted to fix this issue and seems to have greatly reduced its frequence. However, the bus monitoring service still listens to the "offline" event. As a result, the test can still fails according to the runbot network condition. This commit fixes the issue by preventing the "online"/"offline" events during this test. fixes runbot-226443 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#218415
A minor wording typo was corrected in the portal sharing flow, with a small cleanup to make the related code clearer. This helps keep user-facing text polished and reduces future maintenance risk without changing core behavior.
Original PR description
fix a small typo and and refactor for clarity opw-4938011 Forward-Port-Of: odoo/odoo#218570
This fix prevents errors when users transform certain image shapes in website snippets. It recognizes older shape identifiers and maps them to the current naming, so image editing works reliably.
Original PR description
**Problem** Some snippets contain shapes whose ID starts with `web_editor` instead of `html_builder`. These IDs are not listed in `imageShapeDefinitions` [1], and this generates a traceback when trying to apply shape tranformations. **How to reproduce** 1. Insert the snippet `s_images_constellation` 2. Click on the bottom left image having the "Double Pill" shape 3. Click on any "Transform" button under the "Shape" row in the "Image" section 4. Problem: traceback pops up **Solution** When retrieving the shape ID, a check is performed. If `web_editor` is found at the beginning of the string, it is replaced with `html_builder`. [1] addons/html_builder/static/src/plugins/image/image_shapes_definition.js task-4367641
The shop page now avoids showing the same product category list twice when categories are placed in the sidebar and filters are opened from the offcanvas menu. This makes the shopping interface cleaner and reduces confusion for customers on larger screens.
Original PR description
Steps to reproduce: 1. Go to the shop page. 2. Open the editor and configure Categories to display on the left, and Attributes at the top. 3. Save the changes and click the offcanvas toggle button next to the layout buttons. Issue: - The category list appears twice: once on the left side and again in the offcanvas dropdown. This is redundant and affects the user experience. Cause: - The category list in the offcanvas menu isn’t restricted to mobile view, so it also displays on larger screens where it’s already visible in the sidebar. Fix: - Add the 'd-lg-none' class to hide the category list in the offcanvas menu on large devices. opw-4830180 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218330
This fix prevents users from seeing actions like starring or marking messages as read on livechat chatbot messages that are not yet fully saved. Hiding these unavailable actions avoids errors and makes the chat experience more reliable.
Original PR description
**Before this PR:** the toggle-star and mark-as-read actions were visible on chatbot messages in a non-persisted livechat thread. Clicking these actions caused errors. This PR hides these actions when the thread is in a non-persisted state, preventing such errors. task-[4743758](https://www.odoo.com/odoo/project/1519/tasks/4743758) Forward-Port-Of: odoo/odoo#218367 Forward-Port-Of: odoo/odoo#214382
Opening a task's Subtasks action now reliably shows its subtasks, even when the subtasks topbar filter is turned off. This prevents users from thinking subtasks are missing and makes project navigation more consistent.
Original PR description
Steps to reproduce: ---------------- - Install the Project module. - Go to Project and create a project. - Create a task and a subtask. - Deactivate the subtasks topbar in the control panel. - Open the task's form view and click on the Subtasks action. Issue: ----------- Currently, if the subtasks topbar is deactivated and the user clicks on the Subtasks action from the task form view, the subtasks do not appear. Reason: ------------- We are only displaying subtasks if the subtasks topbar is active and when accessed via the My Tasks menu. Fix: -------- We fixed this by checking the subtask_action context in project_task_model_mixin.js. When the user opens subtasks through the subtask action, this context is set, allowing subtasks to be shown even if the topbar is deactivated. Effected Commit- https://github.com/odoo/odoo/pull/213096/commits/268ffa321e12466682b520740b576b71d36eabd5
This fix removes a default grouping setting from attendance reports that caused problems when inserting pivot views into spreadsheets. Spreadsheet users can now add attendance reporting data without duplicated grouping entries breaking the process.
Original PR description
The attendance reporting action had search_default_groupby_name in its context, causing duplicated group_by entries in pivot views used in spreadsheets. This breaks spreadsheet insertion. We removed the default groupby to restore compatibility. Related Task: 4897934. 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#216013
This fix makes cash rounding details optional during electronic invoice generation. It prevents errors when that information is not provided, helping invoice exports continue reliably.
Original PR description
Recently in commit b033a87bbf38ed12364ebf2e3ce0cefb2670470f the UBL generation was improved to handle cash rounding better. I.e. a new key 'cash_rounding_base_lines' was introduced to the `vals` used in the generation. This commit makes it optional to avoid tracebacks in case it is forgotten to be added. task-None Forward-Port-Of: odoo/odoo#218621
Customers will now see out-of-stock messages even when a product is available through the "pick up in store" option. This helps shoppers understand product availability more clearly and reduces confusion during online purchases.
Original PR description
Before the commit, when a 'pick up in store' was published, the out-of-stock message was hidden to avoid confusion. However, customers want to benefit from it, and now we reintroduce it. opw-4791969 Forward-Port-Of: odoo/odoo#218472 Forward-Port-Of: odoo/odoo#218284
This update makes live chat session history and tour tests run consistently by ensuring chats are ordered predictably and UI actions wait until the page is ready. It helps reduce false test failures, improving confidence in releases without changing day-to-day user behavior.
Original PR description
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#218103
When customers change the number of people for an appointment, the date they already selected now remains highlighted and active. This avoids confusion during booking and helps users continue the scheduling flow without reselecting the date.
Original PR description
Step to reproduce: 1. Install appointment and website 2. Go to Appointment > create a new appointment with availability on 'resources' 3. select a 'resource' and check 'manage capacities' 4. go to…
Step to reproduce: 1. Install appointment and website 2. Go to Appointment > create a new appointment with availability on 'resources' 3. select a 'resource' and check 'manage capacities' 4. go to website by smart button 5. Select a date slot. 6. Select the Number of People. Issue: - Previously selected date gets visually deselected or does not retain active state after changing the number of people. Cause: https://github.com/odoo/enterprise/blob/955edd68837c3a8302dcd34b1a6edee28e95ba23/appointment/static/src/interactions/appointment_select_appointment_slot.js#L460 - The logic attempted to restore the previously selected date by calling .click() on the date element. However, this click() call silently failed to trigger the desired behavior. Solution: - Instead of relying on .click() to re-trigger the selection, the handler onClickDaySlot() is now called directly, passing the appropriate DOM element as currentTarget. opw-4859743 Forward-Port-Of: odoo/enterprise#87514
This update corrects a translation maintenance process across multiple country-specific reporting modules. It helps keep localized report labels and translated content consistent, reducing the risk of incorrect or missing wording for users in affected regions.
Original PR description
Forward-Port-Of: odoo/enterprise#90004 Forward-Port-Of: odoo/enterprise#84682
Helpdesk tickets created directly in a closed stage are now correctly marked as closed. This prevents customers using the portal from seeing already closed tickets when they apply the Open Tickets filter, reducing confusion and improving ticket visibility.
Original PR description
**Steps to reproduce:** 1. Install the Helpdesk module. 2. Create a ticket directly in a closed stage (e.g., 'Solved') and add the portal user as a customer. 3. Log in as the portal user. 4. Apply the Open filter. **Issue:** - The ticket appears under Open Tickets, even though it was created in a closed stage. **Cause:** - Currently we consider a stage as closed if 'floded in kanban' is True and When a ticket is created directly in a closed stage, the close_date field is not set. Since the portal filter relies on close_date to distinguish open from closed tickets, this shows closed tickets in open filter. https://github.com/odoo/enterprise/blob/c34256932e593ac2774fa65af813d64edb70ec43/helpdesk/controllers/portal.py#L63 **Solution:** - During ticket creation, if the specified stage is a closing stage, set the close_date field to the current time. opw-4847097 Forward-Port-Of: odoo/enterprise#88983 Forward-Port-Of: odoo/enterprise#87293
The VoIP softphone now uses a minimize icon instead of a minus icon, aligning the interface with designer feedback. This small visual change makes the control clearer and more consistent for users.
Original PR description
Following feedback from the designers. Forward-Port-Of: odoo/enterprise#89949
Italian POS fiscal receipts and invoices now rely on the fiscal printer's built-in header instead of adding a second one. This prevents customers and staff from receiving receipts with duplicated header information, making printed documents cleaner and compliant with printer behavior.
Original PR description
The printer is already adding a header by default so we don't need to add one manually. Steps to reproduce: ------------------- * Setup an Italian fiscal printer in the POS * Open the POS and create a new order * Add a product and validate the order > Observation: The printed receipt has 2 headers. Why the fix: ------------ According to the Italian fiscal printer documentation, the header is automatically added by the printer, so we don't need to add it manually. Ticket before and after the fix:  opw-4794322 Forward-Port-Of: odoo/enterprise#89856 Forward-Port-Of: odoo/enterprise#89419
pos*: point_of_sale, pos_online_payment_self_order, pos_restaurant, pos_self_order This commit fixes some errors: - traceback when clicking print in 18.2 with blackboxµ - order was not linked to a payment in pos_self with online payment - removing of useless context linked to blackbox --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212364 Forward-Port-Of: odoo/odoo#204475
Original PR description
pos*: point_of_sale, pos_online_payment_self_order, pos_restaurant, pos_self_order
This commit fixes some errors:
- traceback when clicking print in 18.2 with blackboxµ
- order was not linked to a payment in pos_self with online payment
- removing of useless context linked to blackbox
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#212364
Forward-Port-Of: odoo/odoo#204475This commit addresses the errors encountered by the SPF with blackbox - Transaction with kiosk put in journal file - Problem in the Journal file where the rounding was miscomputed - Precision of the amount on which the tax was applied on the receipt when only one tax applied. Forward-Port-Of: odoo/enterprise#86703 Forward-Port-Of: odoo/enterprise#82737
Original PR description
This commit addresses the errors encountered by the SPF with blackbox
- Transaction with kiosk put in journal file
- Problem in the Journal file where the rounding was miscomputed
- Precision of the amount on which the tax was applied on the receipt when only one tax applied.
Forward-Port-Of: odoo/enterprise#86703
Forward-Port-Of: odoo/enterprise#82737