Daily updates from Odoo
Thursday, November 20, 2025
11 changes · master
Enhancements to existing features
The IoT module files were reformatted using a standard formatting tool to make the codebase more consistent and easier to maintain. This is an internal cleanup with no expected change to user-facing behavior, and future checks will help keep the formatting consistent.
Original PR description
This commit formats all the files in the `iot` module using `prettier`. This formatting will be enforced by the ESLint test (see associated Community PR https://github.com/odoo/odoo/pull/236516).
Users can now mark or unmark documents as favorites directly from the list view, matching the behavior already available in Kanban view. The shortcut only appears when documents are selected, reducing clutter and making the action more relevant.
Original PR description
- Previously, toggling favorites was only supported in the Kanban view and not available in the list view. - Favorites can now be toggled in the list view, and provide consistency across all views. - Additionally, the shortcut command is now only available when at least one record is selected, as it doesn't make sense to show the command when no documents are selected. Task-4822074
The default Administrator employee is no longer included in standard company data and is only available with demo data. This keeps new databases cleaner and avoids an incomplete placeholder employee getting in the way, while users can still create an Administrator employee when needed.
Original PR description
## Purpose The default administrator employee (in master data) sometimes can get annoying, making it difficult to code easy features. Moreover, almost all the fields of this employee are empty, and the user can easily create its own Administrator employee by clicking the "Create Employee" button from the Admin User View. ## Solution Moving the admin employee to the demo data. [community#232627](https://github.com/odoo/odoo/pull/232627) [upgrade#8806](https://github.com/odoo/upgrade/pull/8806) [task-5138634](https://www.odoo.com/odoo/all-tasks/5138634)
This update aligns several business workflows with a platform change where asking for zero records now correctly returns none. It helps avoid unintended records appearing in manufacturing planning, subscriptions, and barcode/package operations when a zero-result limit is expected.
Original PR description
https://github.com/odoo/odoo/pull/234231
The manufacturing work order display no longer keeps an unused reference in its setup logic. This removes outdated code tied to a previous storage naming approach, reducing confusion and making future maintenance safer.
Original PR description
Picking type Was only used in the previous local storage key name and was undefined. see odoo/enterprise#88073 (original PR) see odoo/enterprise#93841 (Fix PR were we remove the `picking_type_id` key from local storage name)
The U.S. direct deposit settings are now connected to the community accounting setup, making them easier for users to discover in the right place. This improves configuration clarity without changing the direct deposit feature itself.
Original PR description
Change the new settings panel from being defined in enterprise to being defined in l10n_us_account and overriden here for proper discoverability. task-5080414
Resolved issues and error corrections
Fixes an issue where reusing a saved AI live chat website block could crash the website editor. Users can now save and re-add the AI chat snippet from custom blocks without interruption.
Original PR description
Steps to reproduce: ------------------------- 1. Install Website and AI modules. 2. Open the website editor. 3. From the Intro block, search for the AI snippet and add the snippet contains 'Need…
Steps to reproduce:
-------------------------
1. Install Website and AI modules.
2. Open the website editor.
3. From the Intro block, search for the AI snippet and add the snippet contains 'Need Help?'.
4. Click on the added block, then click the Save icon from the Style tab.
5. Save the snippet
6. Go to Blocks → Custom Blocks and add the saved snippet.
Observation:
-------------------------
A traceback is raised:
```
TypeError: Cannot read properties of null (reading 'remove')
at AILivechatOptionPlugin.onSnippetDropped
```
Issue:
-------------------------
The `onSnippetDropped` method
https://github.com/odoo/enterprise/blob/bb3699cc112acb3ec545d3aa5f3d8f7263a5dac6/ai_website_livechat/static/src/website/plugins/ai_livechat_option_plugin.js#L39-L51 executes every time a snippet is dropped into the layout. When the snippet is first added, the method removes the `<div>` with class `s_ai_livechat_preview`. Upon saving, the snippet is stored without that `div`. When re-adding the saved snippet from custom tab, the method runs again but fails since the `s_ai_livechat_preview` element no longer exists, resulting in the traceback.
Solution:
-------------------------
Added the optional chaining operator to safely remove the `s_ai_livechat_preview` div only when it exists.
opw-5227072
Forward-Port-Of: odoo/enterprise#99276The Copy to Clipboard option now appears correctly for regular conversations when the AI module is installed. This fixes a visibility issue in message actions and adds test coverage to help prevent the problem from returning.
Original PR description
Before this commit, "Copy to Clipboard" was sometimes not visible in the message action list when message had some text content. This happens because message actions can condition overridden by some…
Before this commit, "Copy to Clipboard" was sometimes not visible in the message action list when message had some text content. This happens because message actions can condition overridden by some other modules, and the way overrides of action condition work is to have boolean value taking precedence over the local condition of action. This architecture is meant to provide exhaustive list of actions to allow, which is quite useful to control what livechat visitors can have. However this architecture requires overrides to properly return `undefined` when the local condition should apply, which was not the case for an override by `ai` module. So when `ai` module is installed, the "copy to clipboard" feature as not available. This commit fixes the issue by adapting the condition in `ai` module to return `undefined` on non-AI conversations, and add test coverage for both `@mail` discuss suite and all overrides of discuss in `@test_discuss_full_enterprise`. opw-5240768 https://github.com/odoo/odoo/pull/236295 Forward-Port-Of: odoo/enterprise#99794
The IoT connection flow now checks the device token before looking up older device records. This prevents unnecessary error logs when an IoT box reconnects after being unpaired or used with another database.
Original PR description
Steps to reproduce: 1. Connect an IoT box 2. Now unpair it from the IoT box homepage (record stays in DB) 3. Connect the same box again to a different DB but with the same IP (e.g. when a developer switches branch) 4. Now go back to the original DB 5. Observe a traceback in the DB logs when the IoT calls /iot/setup (`cannot access id on NoneType`) This traceback occurs because we were checking for an old IoT box record before checking if the token matches. We simply swap the checks around to prevent the traceback.
Website content generation issues are now recorded as warnings instead of errors when they do not block the user. This keeps monitoring reports cleaner while users still receive the appropriate notification when generation fails.
Original PR description
- Currently, we log an error whenever an error occurs during content generation for any webpage. - However, it is a non-blocking error so it can be safely converted to a `_logger.warning`, as we already notify user about the error through a notification [1]. - Additionally, the errors caught here will be all UserErrors so no need to log another error, so we log a warning instead. - This commit converts the `_logger.error` into `_logger.warning`. [1]: https://github.com/odoo/enterprise/blob/b001e9cc2af0f800e2a7965b61aa9b9c5bd4e89e/ai_website/static/src/components/dialog/add_page_dialog.js#L74-L80 sentry-6974000714 Forward-Port-Of: odoo/enterprise#98844
Fixed an issue where using backspace on the VoIP keypad did not delete highlighted characters when the selection started at the beginning. This restores expected editing behavior for users entering or correcting phone numbers while preserving safeguards against cursor errors.
Original PR description
This commit fixes a regression introduced in commit [1] prevented deleting when a selection began at index 0; extend the guard so the numpad (keypad) backspace still removes the highlighted characters while keeping the cursor-safety logic. [1]: https://github.com/odoo/enterprise/commit/73b01fa5e1f56d4ab71d67760b15942fb2fa0e31 task-5217676 Forward-Port-Of: odoo/enterprise#99835 Forward-Port-Of: odoo/enterprise#99358