Daily updates from Odoo
Wednesday, May 14, 2025
11 changes
1 change
Resolved issues and error corrections
This fixes two IoT-related actions that were still using an outdated internal message name after a recent change. It helps ensure self-order kiosks open correctly and delivery labels can be printed without interruption.
Original PR description
In commit 313bde6, the `_send_message` method was renamed to `send_message`, but not all of its usages were updated. This commit fixes the remaining usages (opening kiosk and printing delivery labels).
10 changes
Resolved issues and error corrections
This update improves Odoo's internal Hoot testing tools and related unit tests so developers can run tests more consistently and with fewer false failures. The changes are intentionally limited to the test ecosystem, reducing risk to day-to-day business features while improving product quality assurance.
Original PR description
## Pull Request HOOT (PRHOOT) 31 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/83169 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The HTML editor now hides its floating toolbar when scrolling would push it outside the editable area. This prevents the toolbar from covering fixed page elements like headers, improving the editing experience in scrollable content.
Original PR description
Problem: In a scrollable editable, the floating toolbar may overflow and appear on top of fixed elements like headers. Solution: Detect overflow relative to the scrollable container and hide the toolbar when it is no longer fully visible. Before:  After:  Steps to reproduce: 1. Open the TODO app. 2. Add enough content to make the editable scrollable. 3. Open the floating toolbar on the first element. 4. Scroll down. → The toolbar overlaps with the page header. opw-4770575 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes an issue where Firefox could delete a backtick character while users were typing in the HTML editor. The editor now avoids interrupting Firefox's text input process unless it is actually applying inline code formatting, helping preserve what users type.
Original PR description
Problem: In Firefox, typing the backtick character "`" can cause it to be automatically deleted. Cause: Typing "`" initiates a composition session. If the selection is changed while `isComposing` is true, Firefox cancels the session and deletes the character. Solution: In `InlineCodePlugin.onInput`, the selection is now modified only when the `<code>` tag is applied. This intentional change ends the composition safely. In all other cases, we avoid changing the selection during composition to preserve user input. Steps to reproduce: 1. Open the HTML editor in Firefox. 2. Type "`". → The character disappears unexpectedly. opw-4760478 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Sharing a project no longer removes the project manager from the follower list. This keeps the responsible manager informed after collaborators are added, avoiding missed project updates.
Original PR description
**Issue:** When sharing a project, the project manager was accidentally removed from the project's followers **Steps to reproduce:** - create a new project. - in the project settings, click “Share Project”. - add a collaborator and share. The project manager disappears from the follower list, leaving only the new collaborator. opw-4764035
When viewing a task in debug mode, opening a timesheet line from the embedded list now shows the dedicated timesheet form instead of the generic analytic item form. This reduces confusion and helps users edit timesheet details in the expected screen.
Original PR description
Before this commit, when the user is in debug mode and go to the form view of a task with some timesheets, he can optionally display the view button in the sub list view of timesheets. The problem is the view button will return the first form view found in timesheet model. Since timesheet model is in fact `account.analytic.line`, the first form view opened is the one used for Analytic Items and not for the timesheets. This commit alters the form view by using `form_view_ref` context key on timesheet_ids field to be able to load the expected form view. task-4781729
Fixes an issue where the Timesheets custom grouping dropdown could close immediately in some browsers. Users can now select custom groups without the timer button unexpectedly taking focus.
Original PR description
**Steps to reproduce** Reproduced on Linux/Firefox. Not reproducible on all browsers. - Open Timesheets app. - Try to add a custom grouping via the "Add Custom Group" select. Bug: the dropdown closes immediately **Cause** Commit 72af4ca4d9859e7236a21cb71401d9f690c42eb6 added an event listener https://github.com/odoo/enterprise/blob/72af4ca4d9859e7236a21cb71401d9f690c42eb6/timesheet_grid/static/src/components/timesheet_timer_header/timesheet_timer_header.js#L41-L48 Depending on the browser, the first click on a `select` may not propagate to its anchestors all the way to the document `body`. However, if it does, the timer button is focused and the dropdown closes. **Solution** Exlude clicks on popover elments from focusing the timer Start/Stop button. opw-4768571
Automatically created approval actions in Studio are no longer counted as custom code lines. This prevents automated system-generated items from affecting usage or billing metrics intended for user-created customizations.
Original PR description
…d not CLOC Before this commit, when approvals created action servers, there were part of the CLOC After this commit, they are not. opw-4784181
This fix makes an automated rental checkout test wait until rental time options are fully loaded before continuing. It reduces false build failures caused by timing issues, helping teams get more dependable test results without changing customer-facing behavior.
Original PR description
The rental_cart_update_duration tour was failing due to a timeout while selecting for the .o_time_picker_select:eq(0) element. This change add a wait step was to ensure the rental options are fully loaded before proceeding. Avoiding flaky behavior caused by timing issues in the UI. build_error-161173
This fixes an uninstall issue where worksheet templates could prevent related database tables from being cleaned up properly. It helps ensure modules can be removed and reinstalled cleanly, reducing failures in automated maintenance tests and avoiding leftover data problems.
Original PR description
During uninstall, fields (columns) bound to the module get deleted first, so the columns used for the search don't exist anymore and the search fails, which leads to the tables not being properly dropped, which can then lead to the module reinstallation not being clean e.g. because there are rows left in the table which can lead to constraints not being addable on install. This has been the cause of `resource` failing forever in the uninstall nightly test: it's most likely been failing since this hook was introduced.
This fix prevents the automated subscription expiration process from replacing an already defined end date with the current date. Businesses keep accurate contract and billing period records when subscriptions are closed after their planned end date.
Original PR description
- 18.0 **Steps to Reproduce:** - Create a subscription with a custom end date (e.g., 2025-04-09). - Manually generate an invoice covering a specific period (e.g., March 10 to April 9). - Wait until after the end date has passed (e.g., run expiration cron on 10 April or later). - The expiration cron triggers and overwrites the manually set end_date with the current date **Issue:** - The expiration cron overrides the existing end_date of the subscription. **Cause:** - The _get_closing_end_date method sets the end_date unconditionally during closure, even when an end_date is already defined. **Solution:** - Update the _get_closing_end_date logic to return the existing end_date if it is already set and valid, preventing it from being overridden when called by the expiration cron. task-4703577