Thursday, August 27, 2026
13 changes · master
Code cleanup and technical improvements
This update modernizes internal interface code by replacing an older development pattern with newer framework capabilities. It should make future maintenance easier across calendar, messaging, stock, and scheduling areas without changing day-to-day user workflows.
Original PR description
- enterprise: https://github.com/odoo/enterprise/pull/126245 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The guided tour flow has been reorganized so the interactive tour player manages the end-of-tour experience directly. This makes tour completion tracking more reliable, especially in automated scenarios where success is now confirmed only after the completion message appears.
Original PR description
…teractive onTourEnd was an externally-injected callback whose completion the interactive step player had to blindly trust and separately re-derive (rainbow man message, tour pointer) to know what actually happened. TourInteractive now owns pointer setup/teardown and the full end-of-tour sequence (reward, consume, chaining) itself, and in robot mode only reports the tour as succeeded once the rainbow man is confirmed in the DOM instead of right before it's requested. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change centralizes how Odoo detects and uses debug mode across many apps. It should make developer and support tools more consistent without changing normal day-to-day business workflows.
Original PR description
This commit introduces a new plugin `DebugModePlugin` which gives some utility functions: - `isActive`: checks that odoo is in debug mode or in a specific mode if the mode is given in parameter. - `toList`: lists the debug modes (`debug=assets,test` gives `["assets", "test"]`). - `toString`: returns the raw debug value (`debug=assets,test` gives `"assets,test"`). This commit also replaces all occurrences of `env.debug` and some of `odoo.debug` by the plugin.
The HTML builder has been updated to rely on newer internal component patterns instead of deprecated ones. This helps keep the website editing tools maintainable and ready for future framework updates, with little expected visible change for users.
Original PR description
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 refreshes internal code used by several Odoo apps to align with the newer interface framework. It helps keep calendar, timesheet, knowledge, and signing features easier to maintain without changing day-to-day user workflows.
Original PR description
- community: https://github.com/odoo/odoo/pull/281421 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This internal cleanup replaces the previous way apps checked debug mode with a shared plugin. It helps keep behavior consistent across affected Odoo apps without changing day-to-day user workflows.
Original PR description
This commit replaces all occurrences of `env.debug` by the new plugin `DebugModePlugin`.
The Documents app internals were reorganized to remove outdated technical dependencies and simplify how document views are managed. This should make future maintenance and upgrades easier without changing the day-to-day user experience.
Original PR description
- community: https://github.com/odoo/odoo/pull/284726 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Enterprise Point of Sale modules were aligned with Odoo's newer data loading approach, making setup and screen data retrieval more consistent across countries and POS features. This mainly supports reliability and maintainability, with added tests for preparation screen loading to reduce regression risk.
This update replaces a deprecated internal frontend mechanism with the newer standard approach across several Odoo apps. It helps keep the interface code easier to maintain and reduces upgrade risk, without changing visible business workflows.
Original PR description
- community: https://github.com/odoo/odoo/pull/281946 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The mail system now uses one internal change-tracking approach instead of two overlapping mechanisms. This reduces unnecessary presence update messages during user activity and makes the messaging code easier to maintain without changing expected user-facing behavior.
Original PR description
Before this commit, a record reacts to what it reads in two ways: `Record.onChange`, and a raw owl effect. Such an effect only sees a relation change when it reads the record as its proxy, which only `static new` has, so three models override `static new` for nothing else. There is no need for the raw effect, as `Record.onChange` runs the same body on a change and compares the values its dependencies return, so a bus channel that comes back equal keeps its subscription. This commit registers the four raw effects as onChange, from `setup`. An onChange resolves the proxy when its two functions run instead of when they are registered, which is what a `setup` registration needs. `effectWithCleanup` has no caller left, so it goes. Note that the self user or guest sends one `update_presence` when its status changes, where the effect sent one on every click and keystroke while the server still reported away or offline.
Several internal text field length limits were removed across accounting, documents, payroll, expense, and localization modules. This reduces avoidable data-entry constraints and keeps enterprise modules aligned with the related core platform cleanup, with minimal expected business impact.
Original PR description
https://github.com/odoo/odoo/pull/284290
The Point of Sale number entry logic has been reorganized into a plugin, making it easier to maintain and extend across related POS features. This is an internal cleanup with little expected day-to-day impact for users, but it should support more reliable future updates.
Original PR description
Convert the number buffer service into a plugin
Point of Sale data loading has been redesigned so stores can sync only the records that changed instead of reloading everything each time. This should improve startup speed and scalability, especially for businesses with large product, customer, loyalty, restaurant, self-order, or localization datasets.
Original PR description
pos*: l10n_ar_pos, l10n_es_edi_verifactu_pos, l10n_in_pos, l10n_pe_pos, l10n_sa_edi_pos, point_of_sale, pos_discount, pos_event, pos_glory_cash, pos_hr, pos_loyalty, pos_online_payment_self_order,…
pos*: l10n_ar_pos, l10n_es_edi_verifactu_pos, l10n_in_pos, l10n_pe_pos,
l10n_sa_edi_pos, point_of_sale, pos_discount, pos_event, pos_glory_cash,
pos_hr, pos_loyalty, pos_online_payment_self_order, pos_qfpay,
pos_restaurant, pos_sale, pos_self_order, pos_self_order_event,
pos_self_order_qfpay
Rework the POS data loading mechanism to improve scalability and support
incremental syncing based on `write_date` timestamps.
- Move field/relation metadata computation into `PosLoadMixin` via new
`_load_data_relations()` and `_load_pos_data_domain_and_dependencies()`
methods, removing the centralized logic from `pos_session.py`
- Refactor `load_data()` to accept a `local_data` dict (model → {id:
write_date}) so the frontend can request only records newer than what
is already cached in IndexedDB
- Add `_load_pos_metadata()` and `_read_pos_data_from_metadata()` to
clearly separate metadata collection from record reading
- Add `load_pos_data_force_loading()` hook for models that always require
a full reload regardless of local cache
- Automatically append `write_date` to loaded fields for cache comparison
- Add template as record in the indexedDB cache
- Refactor `data_service.js`: extract `syncInitialData`, `cleanLocalData`,
`cleanOldModels`, and `handleLoadingDataError`; handle stale model
cleanup in IndexedDB when modules are uninstalled
- Compress multiple calls (load_data, load_data_params,
filter_local_data, ..) into a single load_data call.
- Change some loading method to use load_data instead of a custom method
for each model.
task-id: 4982785
Enterprise PR: https://github.com/odoo/enterprise/pull/93803
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prOriginal PR description
Align all enterprise POS modules with the refactored data loading mechanism introduced in community. pos_enterprise: - Add `PosLoadMixin` override with `_load_prep_data_domain_and_dependencies()`,…
Align all enterprise POS modules with the refactored data loading mechanism introduced in community. pos_enterprise: - Add `PosLoadMixin` override with `_load_prep_data_domain_and_dependencies()`, `_load_prep_metadata()`, and `_read_prep_data_from_metadata()` to mirror the new metadata-based loading pattern for preparation display data - Refactor `pos_prep_display.py`: replace `load_data_params()` and `load_preparation_data()` with `_load_metadata()` using the new mixin; remove the centralized `_load_pos_data_relations()` call on `pos.session` - Update `_load_pos_data_domain()` signature to remove the `config` parameter and resolve it from `data['pos.config']` directly - Adapt `data_service.js` patch: merge `loadFieldsAndRelations()` into `loadInitialData()` using `getFieldsAndRelations()`/`initFieldsAndRelations()`; simplify `initData()` pos_settle_due: - Remove `ir_ui_view.py` override that manually exposed two view IDs — these are now handled by the generic `ir.ui.view` loading in community - Inject the two view IDs (`customer_due_pos_order_list_view`, `due_account_move_list_view`) directly into `pos.config` read data via `_load_pos_data_read()` instead l10n_br_edi_pos, l10n_cl_edi_pos, l10n_ec_edi_pos, pos_appointment, pos_blackbox_be, pos_enterprise, pos_event_iot, pos_iot, pos_planning, pos_settle_due, pos_self_order_restaurant_appointment: - Update `_load_pos_data_domain()` signatures to drop the `config` argument in line with the new mixin interface task-id: 4982785 Community PR: https://github.com/odoo/odoo/pull/225341