Daily updates from Odoo
Thursday, July 9, 2026
7 changes
Code cleanup and technical improvements
The product catalog integration was updated to match recent platform changes and simplify related customizations. This should make catalog behavior more consistent across manufacturing, field service, rentals, and subscriptions while reducing maintenance effort.
Original PR description
Adapt the catalog uses and overrides to the community changes Improve and clean catalog overrides as well. See odoo/odoo#271273
This change updates Odoo Studio's form editor internals to stay compatible with the next version of the web framework. It should not change day-to-day behavior, and existing tests confirm key form editor displays still work as expected.
Original PR description
Replaced 2 `useLayoutEffect` calls with `useEffect` and `onMounted` because `useLayoutEffect` is deprecated in OWL3. Effect #1 reacted to `viewEditorModel.showInvisible` (a reactive proxy field),…
Replaced 2 `useLayoutEffect` calls with `useEffect` and `onMounted` because
`useLayoutEffect` is deprecated in OWL3.
Effect #1 reacted to `viewEditorModel.showInvisible` (a reactive proxy field), using
the root DOM element only as a guard. Migrated to `useEffect`: reading
`this.viewEditorModel.showInvisible` inside the callback auto-subscribes the effect so
it re-runs on every toggle. To make the root element subscribe the effect on mount,
`useRef("compiled_view_root")` (owl2-compat, untracks the underlying ref signal) was
replaced with `this.rootRef = signal.ref()`, and `form_editor_compiler.js` was updated
to bind the compiled root's `t-ref` to `__comp__.rootRef` so the signal receives the
DOM element at mount time.
Effect #2's only dependency was `[rootRef.el]`; it ran a single time when the DOM was
ready, so `onMounted` is the faithful equivalent.
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:
- @web_studio/view_editors/form_editor/correctly display hook in form sheet
- @web_studio/view_editors/form_editor/empty form editor
- @web_studio/view_editors/form_editor/invisible form editor
see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2624601/build/116553774This change updates Odoo Studio's internal view-editing components to use the newer supported interface mechanisms. It helps keep Studio compatible with the next framework version while preserving existing editing behavior covered by tests.
Original PR description
Replaced `useLayoutEffect` with `onMounted`/`onPatched` (for the `data-studio-xpath` attribute) and `useListener` (for the click listener) because `useLayoutEffect` is deprecated in OWL3. The…
Replaced `useLayoutEffect` with `onMounted`/`onPatched` (for the `data-studio-xpath` attribute) and `useListener` (for the click listener) because `useLayoutEffect` is deprecated in OWL3. The `useStudioRef` hook previously used `useLayoutEffect` to both set a `data-studio-xpath` attribute on the element and attach a capture-phase click listener. The ref was a string-named compat `useRef`, so its `.el` getter untracks the signal — meaning a reactive `useEffect` would never re-subscribe when the element mounts. For `data-studio-xpath`, `onMounted`/`onPatched` reproduce the "set once el exists, re-apply on element recreation" semantics with synchronous layout timing, which Studio requires because it reads the attribute directly off the DOM. The click listener was initially migrated to `useListener(() => ref(), …)`, but was later converted to `onMounted`/`onPatched`/`onWillUnmount` element-tracking to properly handle the null ref at setup time. As a final step the ref itself was promoted to a native `signal.ref()`, returned by the hook and bound in each consumer template via `t-ref="this.<name>"`. `FieldStudio` reuses the inherited `this.fieldRef` signal (contributed by the companion odoo PR) rather than declaring its own. 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: - @web_studio/view_editors/form_editor/restore active notebook tab after adding/removing an element - @web_studio/view_editors/form_editor/label edition - @web_studio/view_editors/form_editor/many2one field edition see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2624591/build/116553824 Community PR: https://github.com/odoo/odoo/pull/275094
The mobile integration has been reorganized internally while keeping the existing service available for compatibility. This prepares the mobile framework for newer technology changes without changing the expected user experience, including barcode-related mobile flows.
Original PR description
In this commit, we rewrite the mobile service as a plugin. For legacy purposes, we keep the mobile service (as a service). We also adapt the codebase to reflect the changes on the service.
This update modernizes how certain stored values are initialized across accounting, payroll, appointments, helpdesk, ESG, and localization features. It is mainly an internal improvement that should make module setup and upgrades more consistent without changing day-to-day workflows.
Original PR description
https://github.com/odoo/odoo/pull/256914
This update standardizes how internal record values are prepared before being saved, reducing the risk of inconsistent behavior when several records are updated together. It also adjusts related business apps so they continue to handle grouped updates reliably without changing visible workflows.
Original PR description
``Field.write`` calls ``convert_to_cache`` with ``records``, not with a single ``record``. Therefore, ``convert_to_cache`` must return the same value for all records in the recordset. The only exception is ``_RelationalMulti.write``, which does not call ``convert_to_cache``. In that case, ``_RelationalMulti.convert_to_cache`` may depend on each record's current value, so we explicitly assert that ``records`` contains at most one record.
This update reorganizes how relationship field details are defined internally, aligning Enterprise code with a related Community change. It should help keep reporting, AI field tools, and Studio customizations consistent without changing day-to-day user workflows.
Original PR description
Community: https://github.com/odoo/odoo/pull/196498