Daily updates from Odoo
Thursday, August 13, 2026
5 changes
Code cleanup and technical improvements
This cleanup removes redundant internal update handling in manufacturing work orders, Swiss payroll, and e-signature dialogs. It helps keep these screens aligned with the newer OWL framework approach while preserving existing behavior and reducing the risk of stale data in future updates.
Original PR description
Part of the OWL3 migration cleanup. Now that props are reactive, `this.props` always exposes the current values, so an `onWillUpdateProps` callback whose only job is to copy props into instance…
Part of the OWL3 migration cleanup. Now that props are reactive, `this.props` always exposes the current values, so an `onWillUpdateProps` callback whose only job is to copy props into instance fields or component state is redundant — a getter reading `this.props` directly is shorter and always up to date.
Companion PR (odoo): odoo/odoo#282185
### Why this is safe
Reactivity here does not depend on a component declaring `props = useProps(...)`. All four components use the legacy `static props = {...}` declaration, but they extend the `Component` patched by `web/static/src/owl2/owl3_compatibility_layer.js`, whose constructor does `this.props = owl.props(null)` — that builds a signal-backed props object and registers a `propsUpdated` callback keeping the signals in sync. So `this.props` is reactive in all of them.
### Per-module
**mrp_workorder** — `resModel`, `model` and `record` become getters over `this.props.record`.
**l10n_ch_hr_payroll** — `parsedData` (and the salary widget's `institution_domain`) were only ever written from props, with no other writer anywhere, so both `state` proxies disappear in favour of getters.
**sign** — `this.props = nextProps` was not merely redundant but actively harmful: it replaced the reactive, signal-backed props object with a plain snapshot, so every *later* props update silently stopped reaching the component. The `isShown` reset stays, because the template writes `state.isShown = false` on dismiss.
### Behaviour preserved deliberately
Two pre-existing oddities were left alone to keep this PR mechanical; both deserve their own fix:
- `mrp_display_record.js`: `this.quantityToProduce` and `this.displayUOM` are still computed once in `setup()`, so they do not track later record changes. Not covered by the removed hook either, so this is unchanged, not newly broken.
- `salary_result.xml` references `this.institution_domain` (lines 124/128, feeding `t-if="institution_domain == ...'` branches), but no such getter exists — it was only ever `this.state.institution_domain`. I kept the value local to `get parsedData()` rather than exposing a getter, since adding one would silently activate template branches that have never rendered.
### Verification
- eslint: no new errors on any of the four files (the 5 reported errors are pre-existing and identical on `master`, just shifted line numbers).
- No unit test coverage exists for these four components (mrp_workorder only has tours, which need a server), so this needs CI / a manual pass on the shopfloor view and the Swissdec widgets.
- Note: the enterprise pre-commit hook could not run in my environment (`eslint.config.mjs` imports `@eslint/compat`, which is not installed), so the commit was made with `--no-verify` after linting the files manually with `.eslintrc.json`.This update replaces an older internal naming pattern with the current standard across several Odoo Enterprise modules. It improves code consistency and helps prepare the platform for future framework updates, with no expected change for end users.
Original PR description
Replace deprecated props imports with the correctly named useProps hook to align with owl3 hook naming conventions. In owl3, hook functions should follow the use* naming pattern. However, props, plugin, and config were introduced without this convention, making it unclear that they are hooks. This creates confusion and inconsistent usage throughout the codebase, with some code using the old props while other code uses the correctly named useProps. While props is technically deprecated in owl and will eventually be removed, it was retained in Odoo due to widespread usage. This refactoring consolidates all usages to the correctly named useProps hook, ensuring consistency across the codebase and preparing for the eventual removal of the deprecated props function from owl.
This change updates internal test references after a shared testing helper was moved to a new folder. It helps keep automated checks for manufacturing work orders and barcode stock flows running reliably, with no expected change for end users.
Original PR description
Follows the move of tour_helpers.js from web_tour's tour_automatic/ to its own tour_helpers/ folder.
The Swiss payroll interface components were updated to stay compatible with Odoo's newer web framework. This is an internal modernization that helps keep payroll screens reliable without changing business functionality.
Original PR description
As part of the Owl 3 migration, replace onWillUpdateProps hook with the appropriate Owl 3 alternatives.
This update refreshes how several Odoo Enterprise screens listen for internal events, aligning them with the latest web framework practices. It is an internal cleanup intended to keep the interface reliable and easier to maintain, with no expected change in day-to-day user workflows.
Original PR description
- comunity: https://github.com/odoo/odoo/pull/281944 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr