Daily updates from Odoo
Thursday, June 25, 2026
11 changes
Code cleanup and technical improvements
This change updates the VoIP softphone interface to use the newer input binding approach required by the latest framework version. It helps keep the calling experience compatible and maintainable as the platform evolves, without changing the user-facing behavior.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
The return check screen was updated to use the newer embedded action structure introduced elsewhere in the product. This keeps the interface working consistently after the internal refactor, with no expected change to business behavior.
Original PR description
Following the refactoring of embedded actions, this commit adapts the AccountReturnCheckControlPanel to utilize the new logic. Changes: - Created a new `AccountReturnCheckEmbeddedActions` component that extends `EmbeddedActionsPanel`. - Moved the `isEmbeddedActionVisible` method to AccountReturnCheckEmbeddedActions. - Moved the XML replacement for the embedded actions dropdown to the new component's template. - Registered the new embedded actions panel within the control panel components. Task~4277541 Related: odoo/odoo#269040
Replaced \`useLayoutEffect\` with \`onMounted\` because \`useLayoutEffect\` is deprecated in OWL3. The effect used an empty dependency array (\`() => []\`), meaning it ran exactly once after the first render — which maps directly to \`onMounted\`. No reactive tracking or DOM measurement was needed, so \`onMounted\` is the correct and minimal replacement. The \`useLayoutEffect\` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out: - @docu
Original PR description
Replaced \`useLayoutEffect\` with \`onMounted\` because \`useLayoutEffect\` is deprecated in OWL3. The effect used an empty dependency array (\`() => []\`), meaning it ran exactly once after the first render — which maps directly to \`onMounted\`. No reactive tracking or DOM measurement was needed, so \`onMounted\` is the correct and minimal replacement. The \`useLayoutEffect\` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out: - @documents/kanban_view/Check actions with preview - @documents/kanban_view/Download button availability - @documents/kanban_view/Ensure previewer shows correct name after renaming a document see runbot build: https://runbot.odoo.com/runbot/batch/2593689/build/114684050
This update removes an outdated code element (`useLayoutEffect`) that was causing instability in the Knowledge module. Replacing it with `onMounted` ensures the module functions reliably and aligns with current Odoo standards. Successful automated tests confirm the change.
Original PR description
Replaced `useLayoutEffect` with `onMounted` because `useLayoutEffect` is deprecated in OWL3. The effect called `toggler.click()` once when the toggler element became available on mount. `onMounted` is the correct replacement: the toggler ref's el is present at mount time, so a single `onMounted(() => this.toggler.el?.click())` fires synchronously at the same lifecycle point, matching the original timing without the deprecated hook. The useLayoutEffect refactored in this PR has test coverage — below are some tests that failed when the effect was commented out, and are now passing: - @knowledge/options_dropdown/Move Article - FAIL: WebSuite.test_unit_desktop (in html_editor,knowledge suite) - FAIL: MobileWebSuite.test_unit_mobile (in html_editor,knowledge suite) see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2596678/build/114854269
This update replaces an outdated code component with a modern version compatible with Odoo's latest framework (OWL3). This ensures the appointment screen functions correctly and avoids potential issues with deprecated code. The change was verified through automated testing, confirming the functionality remains intact.
Original PR description
Replaced `useLayoutEffect` with `useEffect` (OWL3) because `useLayoutEffect` is deprecated in OWL3. The single `useLayoutEffect` was reacting to `this.props.actionName`: when `actionName ===…
Replaced `useLayoutEffect` with `useEffect` (OWL3) because `useLayoutEffect` is deprecated in OWL3. The single `useLayoutEffect` was reacting to `this.props.actionName`: when `actionName === 'manage-booking'` it makes an async `data.call` to open the booking gantt view, then dispatches `doAction` / `switchView`. This is not derived state and does not load data into component state — it dispatches an action, making OWL3 `useEffect` the correct replacement. OWL3 `useEffect` auto-tracks reactive values read in its body, so `this.props.actionName` is tracked automatically without an explicit dep array. The `useLayoutEffect` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out, and are now passing: - `@pos_appointment/unit/screens/action_screen/ActionScreen => useEffect`: Expected gantt view action, received null - `FAIL: TestFrontend.test_appointment_kanban_view_date_filter`: Tour failed at 'Go to kanban view' step - `FAIL: TestUi.test_pos_restaurant_appointment_tour_basic`: Tour failed at 'Check that the booking gantt view is shown' see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2596700/build/114854622
This update improves the way mock server data is structured and serialized, aligning it with recent changes in the Odoo Enterprise platform. Specifically, the mock models used in various modules (ai, approvals, voip, whatsapp, etc.) have been updated to use a new field list DSL and `as_dict()` serialization, ensuring better compatibility and data consistency. This change enhances the reliability of the mock server environment for testing and development.
Original PR description
Enterprise companion of the community commit "[REF] mail, *: match mock server Store to python implementation". Migrate the mock server mock models to the new `_store_<name>_fields` field list DSL and `as_dict()` serialization. https://github.com/odoo/odoo/pull/271117
This update simplifies the underlying model structure within Odoo's Web Studio. As part of a larger migration to a newer version (Owl 3), the team has replaced older model definitions with more modern `t-model` and `t-model.proxy` structures. This change improves the long-term maintainability and stability of Web Studio applications.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
This update centralizes the configuration for printing IoT reports using a standardized registry. This change enhances flexibility and maintainability by allowing for easier updates and modifications to report printing methods for IoT printers, without requiring direct code changes.
Original PR description
we now use the registry to define the method to print reports using IoT printers. see odoo/odoo#271560
This update simplifies the codebase by replacing older model structures (`t-custom-model`) with newer, more efficient ones (`t-model` and `t-model.proxy`) as part of the ongoing migration to Owl 3. This change improves the underlying system's performance and maintainability.
Original PR description
* = [ai_website] As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
This update simplifies the underlying data structure within the Enterprise module by replacing older model types with newer, more efficient `t-model` and `t-model.proxy` structures. This change is part of a larger migration from `owl 2` to `owl 3`, ensuring the system remains current and optimized for future development.
Original PR description
As part of the migration from `owl 2` to `owl 3`, this commit replaces uses of `t-custom-model` with `t-model` or `t-model.proxy`.
This update changes how processors within Odoo handle data transformation. Previously, processors were limited in returning falsy values, now they can explicitly return null or undefined to signal no processing or a deliberate choice. This allows for more flexible and controlled data flow within Odoo's modules.
Original PR description
*: knowledge, web_studio Previously, `processThrough` used `|| item` to fall back to original value if a processor returned a falsy value. This prevented processors from intentionally returning falsy values (e.g. null, undefined). Now each processor is responsible for returning a value explicitly: - Return the transformed value if processing occurred. - Return the original item if no processing is needed or processing is in place. - Return null/undefined to intentionally pass a falsy value. Community PR: https://github.com/odoo/odoo/pull/255801 task-6030633