Monday, July 14, 2025
22 changes · saas-18.3
Enhancements to existing features
Point of Sale no longer shows a subscription validity warning when using IoT Box printing. Since IoT Boxes are always provided with a certificate, removing this message avoids confusing users and makes the checkout experience smoother.
Original PR description
As we always provide a certificate for IoT Boxes, it made no sense to tell users that their subscription was not valid. Task: 4942391
The wording in the IoT “use pairing code” dialog was updated to make the setup process easier to understand. This helps users connect IoT devices with less confusion during onboarding.
Original PR description
We improved the "use pairing code" dialog to make it clearer. Task: 4942391
Resolved issues and error corrections
The Point of Sale loyalty tests were updated to use the correct customer name from the demo data. This prevents a specific automated test from failing in multi-company enterprise setups, helping keep releases stable without changing customer-facing behavior.
Original PR description
steps to reproduce : 1. on multi enterprise 2. run the test `test_loyalty_program_different_orders` change partner name and in the test and the tour to match the demo data build_error-223079
Code cleanup and technical improvements
This update reorganizes internal automation callback data so developers can more easily understand and use it. It should make maintenance of guided tours and automated checks clearer, with no direct change expected for end users.
Original PR description
In this commit, we're changing the structure of the onStep and onError callback functions in macro.js to make them easier to use. Previously, when using onStep and onError, it was difficult to understand what was being returned in the callback and required declaring variables that might not be used. Now, it's easier to destructure the returned object. 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
Fixes an error that could block users from saving a new website menu item when all existing menus had been removed. This keeps website editing reliable for sites using event features, especially during menu reorganization or setup.
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#215564This fixes an issue in Point of Sale where reducing an unsynced order line quantity to zero could call an outdated process and fail. The change uses the current removal flow, helping cashiers avoid errors during order edits.
Original PR description
Before this commit, we were calling _unlinkOrderline on the order when decreasing the quantity of an unsynced line to 0 from the decreaseQuantityPopup. This method does not exists anymore so we replace this call with a call to removeOrderline. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix ensures the live chat widget can still load on pages whose templates have not yet been updated to the newest availability setting. It prevents live chat from disappearing unexpectedly, helping visitors continue to reach support or sales teams.
Original PR description
In [1], the "can_load_livechat" key was added to determine if the live chat should be loaded on a page. However, templates might not have been updated. This commit provides a fallback to the old "isAvailable" value in this case. [1]: https://github.com/odoo/odoo/pull/217695 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 fixes accounting demo data so reconciliation models are linked to the correct suspense account instead of the liquidity account. It helps ensure sample accounting workflows behave as intended and avoids misleading setup examples.
Original PR description
Correcting some demo data where they added the reconcile model on the liquidity but since the reco model will be added at the creation of the reco model, that's not needed. Also the reco model should be put on the suspense and not on the liquidity task: 4908501 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Installing the Spanish localization module no longer fails if the default Service product category was previously deleted. This prevents setup interruptions and helps users complete localization installation more reliably.
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 update fixes an error that could occur when removing surveys linked to eLearning courses in translated environments. It improves reliability for users managing course surveys across different languages.
Original PR description
Issue: Prior to this commit, a translation issue occurred due to the use of a list comprehension. The _get_translation_source function attempts to scan the local variables, but in the context of a list comprehension, only variables defined within the comprehension are accessible. As a result, variables like uuid and cursor were not available to the _get_lang function, ultimately leading to an error. Fix: Replaced the '_' function comprehension with 'self.env._' for proper access to the 'self' and 'env' object. runbot-159884
This fixes an issue in Restaurant Point of Sale where opening a table could show an error if the screen name was empty. Staff can now access tables more reliably, reducing interruptions during service.
Original PR description
Fix error appearing when trying to open a table in POS restaurant, with an empty screen name. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Customers browsing a self-order menu in consultation mode can now choose a location or preset before viewing products. This helps them see the correct prices for that preset and its pricelists while still preventing any orders from being placed.
Original PR description
- We now display the `location` page (to select a preset) also when the self order is in `consultation` mode, so the user can see the price of the products with the selected preset selected (and its price lists). - The user is still only allowed to consult the menu, and not order anything. task-id: 4934256 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Creating a new sub-task from the task view now automatically fills in the related parent task. This prevents users from having to manually reconnect sub-tasks and helps keep project task hierarchies accurate.
Original PR description
Previously, when creating a sub-task via "task form view > create a sub-task > view > new task", the 'Parent Task' field was empty. Now, the parent task's reference is correctly included in the creation flow, ensuring the 'Parent Task' field is properly pre-filled. task-4797845 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an unreliable automated test for mail connection warnings by isolating it from browser online and offline events. The change helps keep validation runs more consistent and reduces false failures in Odoo's testing pipeline.
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
The shop page now avoids showing the same product category list twice when filters are configured with categories on the side and attributes at the top. This reduces clutter and makes browsing products clearer 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
A small wording issue in the portal sharing flow was corrected and the related code was made clearer. This is a minor maintenance fix that helps keep the user experience polished without changing functionality.
Original PR description
fix a small typo and and refactor for clarity opw-4938011 Forward-Port-Of: odoo/odoo#218570
The attendance reporting view no longer applies a preset grouping that conflicted with spreadsheet pivot tables. This restores the ability to insert attendance reports into spreadsheets without duplicate grouping errors.
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
The Mail app now warns when activity types reference invalid models instead of automatically clearing those links. This avoids unexpected data changes in stable versions while still highlighting records that may need attention.
Original PR description
Just warn models are invalid, but do not reset for stable. Data is not enforced hence no real issue with wrong models. Followup of odoo/odoo#156731 Forward-Port-Of: odoo/odoo#218646 Forward-Port-Of: odoo/odoo#218549
Chatbot messages in temporary live chat conversations no longer show actions like starring or marking as read when those actions cannot work. This prevents users from triggering errors in non-saved chat sessions and keeps the chat experience smoother.
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
Changing the number of people for an appointment no longer makes the previously chosen date appear unselected. This keeps the booking flow clearer for website visitors and helps avoid confusion when choosing capacity-based appointment slots.
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 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
A translation-related issue in AvaTax address checks has been corrected. This prevents warnings or errors during address validation and helps tax workflows run more reliably for users in translated environments.
Original PR description
Prior to this commit, a translation issue occurred due to the use of a list comprehension. The _get_translation_source function attempts to scan the local variables, but in the context of a list comprehension, only variables defined within the comprehension are accessible. As a result, variables like uuid and cursor were not available to the _get_lang function, ultimately leading to an error. We replaced the list comprehension with a standard for loop to ensure proper access to local variables. runbot-159883
Italian POS fiscal receipts and invoices no longer add an extra header because supported fiscal printers already include one automatically. This prevents receipts from showing two headers, 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