Daily updates from Odoo
Wednesday, August 12, 2026
7 changes
Code cleanup and technical improvements
The field service attendance menu was updated to use the newer OWL3 approach for managing location tracking when employees check in or out. This keeps the feature compatible with the latest framework while preserving the existing user experience.
Original PR description
Replaced `useLayoutEffect` with OWL3 `useEffect` because `useLayoutEffect` is deprecated in OWL3. The effect reacts to `this.state.checkedIn` to start/stop the geolocation watch. OWL3 `useEffect` auto-tracks reactive values read inside the callback, so the plain `this.state.checkedIn` access subscribes automatically — no deps array needed. The code refactored is functionnaly tested, see https://runbot.odoo.com/runbot/batch/2596694/build/114854534
This update renames an internal frontend helper to better match its purpose, without changing how the affected business features work. It improves code clarity and consistency across several Odoo apps, helping future maintenance while keeping user-facing behavior unchanged.
Original PR description
This commit replaces the `plugin` imports by `usePlugin` which is the same function but with a correct hook name.
This update modernizes part of the timesheet timer interface to stay compatible with the next version of Odoo's web framework. It also corrects a small internal issue so the timer form continues to apply configured minimums, rounding, and basic actions reliably.
Original PR description
Replaced `useLayoutEffect` with `useEffect` because `useLayoutEffect` is deprecated in OWL3. `descriptionFieldRef` is already a `signal.ref()` field (bound in the template via `t-ref`), so…
Replaced `useLayoutEffect` with `useEffect` because `useLayoutEffect` is deprecated in OWL3. `descriptionFieldRef` is already a `signal.ref()` field (bound in the template via `t-ref`), so `useEffect` is the idiomatic choice: it auto-tracks the signal and re-runs whenever the element enters the DOM. The `!el` guard handles the eager pre-mount call (the ref is `null` before the node appears). This also fixes a latent bug: the original `if (this.descriptionFieldRef)` tested the always-truthy signal function rather than its value. The useLayoutEffect refactored in this PR had test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @timesheet_grid/timesheet_systray/Timer applies configured minimum - @timesheet_grid/timesheet_systray/Timer applies configured rounding - @timesheet_grid/timesheet_systray/Basic systray actions Those tests were run against all three states of the code: - Passed with previous useLayoutEffect. - Failed with previous useLayoutEffect commented. - Passed with our OWL3 replacement. see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2681606/build/120351199 The timer subclass `TimesheetTimerInlineForm` was also updated: its `onPatched` hook read `this.descriptionFieldRef.el`, which broke after the base t-ref migration converted the field from `useRef` to `signal.ref()` (no `.el` property). Fixed by calling `this.descriptionFieldRef()` instead — no `?.` needed since the ref is always set when `onPatched` fires.
This update removes use of an outdated internal rendering method in spreadsheet-related tests and components. It helps keep the Enterprise spreadsheet experience compatible with the next version of Odoo’s web framework without changing business functionality.
Original PR description
- community: https://github.com/odoo/odoo/pull/281942 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies internal accounting screen code by removing unused or unnecessary shared settings. It should make the feature easier to maintain without changing how users interact with accounting workflows.
Original PR description
This commit removes two `useSubEnv`. The function `skipKanbanRestoreNeeded` given to the env was never used. The function `setPopout` given in the env was used by a direct child component. This function is now given by props instead of by env.
This update keeps several Point of Sale related features aligned with the latest underlying interface used by Odoo's web components. It is an internal cleanup with no expected change to day-to-day POS workflows, helping future maintenance and compatibility.
Original PR description
In this commit : - The Owl props API has been renamed to useProps. - Updates the affected POS-related modules accordingly by renaming imports and replacing `props(...)` with `useProps(...)`. Task [link](https://www.odoo.com/odoo/project.task/6403054) task-6403054 Community PR: https://github.com/odoo/odoo/pull/277793
The AI chat testing setup now builds its data in the same way as the live system. This reduces the risk of tests passing with unrealistic data and helps future AI chat changes be validated more reliably.
Original PR description
Before this commit, launching an AI chat hands the store every column of the agent, the composer, the session, the channel and its members, down to `create_uid` and `message_follower_ids`, and one hand-picked `suggestedAiChannel` in place of the fields `_store_channel_fields` sends. The problem is that the tests run on a payload the server never sends. This happens because the mock spreads the raw records into the payload, where python builds it with a `Store`. This commit builds it with a `Store` as well, so the mock sends what the server sends.