Thursday, August 27, 2026
18 changes · master
Enhancements to existing features
Client-facing wording in the Expenses app has been updated to be easier to understand. This helps users interpret expense-related messages more clearly and reduces confusion in day-to-day expense processing.
Original PR description
Changes some client facing texts to make them clearer. task-6060590
Indian state and union territory data has been centralized so it can be used consistently across Odoo. The update also reflects the merged union territory of Dadra and Nagar Haveli and Daman and Diu, improving accuracy for addresses and localization data.
Original PR description
and merge "Diu & Daman" and "Dadra & Nagar Haveli" as one UT. [Task #6126667](https://www.odoo.com/odoo/project/1251/tasks/6126667)
The search bar was updated so parent screens can manage its focus behavior more directly. This supports smoother interactions in document-related workflows and prepares the interface for broader framework updates without changing everyday functionality.
Original PR description
- enterprise: https://github.com/odoo/enterprise/pull/126864 See commit messages for details. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Updated customer-facing text in expense-related payroll and Stripe demo screens to make instructions and labels easier to understand. This helps users complete expense and top-up workflows with less confusion, without changing underlying functionality.
Original PR description
*: hr_expense_stripe_demo Changes some client facing texts to make them clearer. task-6060590
The payroll configuration timeline now uses the correct visual styling and responsive behavior. This makes the selected payroll configuration clearer and ensures timeline items collapse properly into dropdowns when space is limited.
Original PR description
The payroll configuration bar is a copy of the employee records one and lost the same styling: its selected version was painted in the grey used on hover, and its items never folded into the dropdowns because the statusbar looks them up by ".o_arrow_button_wrap". Reuse the class the employee records bar now hangs its styling on, and give the items the class the statusbar expects. task-6510183
The appointment date picker now shows unavailable dates, such as weekends or fully booked days, in muted text. This makes scheduling clearer and improves readability for customers selecting an available time.
Original PR description
With this commit, we want to make the date picker more accessible and readable. For this we change a little element in its UI. Now, unavailable dates (for example weekends or fully booked dates) are now muted to better distinguish them from available dates. Task-6429894
The Belgian payroll employee field previously labeled “Relation Start” is now shown as “First Employment Date.” This makes the wording clearer for HR users and better reflects the meaning of the date.
Original PR description
Rename the field `l10n_be_dimona_relation_date_start` string attribute from `Relation Start` to `First Employment Date`. task-6510430
This update tidies up icon styling in several Odoo areas so status bubbles and website buttons appear more consistently. It removes outdated icon rules and fixes a small alignment issue in the website scroll button, improving visual polish without changing functionality.
Original PR description
[IMP] event, maintenance, project: clean up the state bubble scss --- Follow-up of 62bab6a4be6e, which sized the state selection bubbles from the shared bubble variables: a few per-module overrides…
[IMP] event, maintenance, project: clean up the state bubble scss --- Follow-up of 62bab6a4be6e, which sized the state selection bubbles from the shared bubble variables: a few per-module overrides were left behind. __Before commit__ The bubbles kept a negative `margin-top` to compensate their old position, and in project the `hourglass_empty` icon had its own `font-size` and `oi-lg` class, plus per-view `!important` overrides on `font-size`, `margin-top` and `padding-left` for the list view. __After commit__ Icons are sized from the bubble variables (`$o-bubble-color-size-xl`, `$o-bubble-color-size`), so all the per-icon nudges and `!important` rules are gone, along with the `oi-lg` class in the template. <img width="717" height="478" alt="image" src="https://github.com/user-attachments/assets/14ee6f32-53a2-40fe-bb72-c276a3f91330" /> task-6377407 [IMP] web, website: drop leftover font-awesome icon selectors --- Social media, share and scroll down button icons, as well as the webclient icon-only buttons, are now always rendered with `oi` classes. The `fa-stack` / `fa-Nx` / `fa-fw` counterparts in the selectors are dead code, so remove them. task-6377407 [FIX] website: vertically center the scroll down button icon --- __Problem__ Since icons are rendered with `oi` instead of `fa`, the arrow of the scroll down button sits slightly off-center in its round button. __Quick fix__ Force `vertical-align: middle` on the `.oi` pseudo-element. <img width="660" height="143" alt="image" src="https://github.com/user-attachments/assets/354ed891-a6e8-4ef1-b10b-a7e6f15925a3" /> task-6377407
This update makes automatic cursor focus more reliable when fields or buttons are displayed through dialogs or shared page areas. Users should see smoother interactions in places like mail GIF selection and quick-entry forms, with tests adjusted to match the intended behavior.
Original PR description
useAutofocus was built on useLayoutEffect, whose dependencies are recomputed from the render/patch cycle of the component calling it, with an untracked read of the ref so that component doesn't…
useAutofocus was built on useLayoutEffect, whose dependencies are recomputed from the render/patch cycle of the component calling it, with an untracked read of the ref so that component doesn't subscribe to it. When the ref is written by a render that component doesn't own, typically content passed to a <Dialog>'s slot, that cycle never runs and the element is never focused. Rewrite the hook on owl's useOnChange: the dependency is a tracked read of the ref, computed in a signal computation of its own, so the element is focused no matter which render writes the ref, and the component is still never subscribed, as its re-render would reset an input bound with t-att-value (e.g. calendar quick-create title). The callback stays untracked: el.focus() synchronously runs the focus handlers, and the signals they read must not become dependencies of the hook, or any later change to them would steal the focus back. navigation_hook.test.js's BasicHookParent fixture combined useAutofocus on an unrelated button with useNavigation's initial-item activation, relying on onMounted registration order to decide which one ended up with real focus. No real component pairs the two hooks that way, so move that call to "navigation with virtual focus", the only test that exercises the interaction, and where virtual focus never touches real focus.
Folded Kanban columns now display their unfold arrows more neatly and consistently, improving visual alignment with the rest of the column. Related tests were updated to focus on the intended scrolling behavior rather than fragile screen-size-specific values.
Original PR description
[IMP] web: align unfold arrows in folded kanban columns --- __Before commit__ <img width="319" height="266" alt="image"…
[IMP] web: align unfold arrows in folded kanban columns --- __Before commit__ <img width="319" height="266" alt="image" src="https://github.com/user-attachments/assets/8947d533-c1cf-43a4-a6dd-0939bc619102" /> The two arrows of the `o_column_unfold` button were spaced with horizontal paddings on the button and a `margin-right` on `arrow_left`, both swapped on hover to keep the folded column at a constant width. With the new icons, that no longer lines the arrowheads up with the rest of the folded column. __After commit__ <img width="216" height="153" alt="image" src="https://github.com/user-attachments/assets/34fb9c16-223e-4a9f-86ef-0bdad05c9363" /> The button has a fixed width and centers its icons, each clipped to the width of its arrowhead; only the `gap` between them grows on hover. The quick create `Add column` button drops its horizontal padding for the same reason. The unfold-scroll test used to pin the exact `scrollLeft` values that `scrollIntoView` produces on the CI viewport, and those depend on the width of a folded column. It now asserts what the feature actually guarantees: whether a scroll happened, and that the group brought into view ends up flush with the right edge of `.o_content`. Its last case also folds the last group, so that it really exercises the "unfolded group has no next group" branch. task-6377407
The accounting dashboard KPI calculations were cleaned up and covered by an automated test. This should help keep dashboard figures reliable while improving performance for important dashboard views.
Original PR description
* add a test for the function `get_account_dashboard_kpis` * use the ORM to compute the consolidated balances * avoid a `OR` in `_get_open_sale_purchase_query` as it would prevent using efficient indexes, while performance is crucial on the dashboard.
The AI fields area has been simplified by removing older custom patches that are no longer needed. This should make future changes easier to maintain while keeping the user experience stable.
Original PR description
The property definition is now more expandable, then not needed patched has been removed.
The graph view toolbar has been simplified by removing repeated text labels for sorting and chart type controls. Users still get guidance through icons, tooltips, and accessibility labels, keeping the interface cleaner without reducing usability.
Original PR description
Before this commit, the graph view toolbar labelled its sort and chart-type button groups with "Order" and "Type". Both groups already carry an aria-label, and every button a tooltip, so the text only restated what the icons convey. After this commit, the groups rely on icons and tooltips alone. task-6497293 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Indian localization stock demo data now includes a warehouse for the Indian demo company. This makes demos and testing smoother by removing the need for users, developers, or partners to manually create a warehouse when working with Indian e-waybill scenarios.
Original PR description
Following the task-4034713, we used to create warehouse for all company but after this task we only create warehouse for the main company while testing for Indian Demo company considering the ewaybills it's annoying to create a new warehouse for Devs and POs and even for Demos After this commit, we will create demo warehouse for the Indian demo company Task [link](https://www.odoo.com/odoo/project.task/4034713) task-4034713 Forward-Port-Of: odoo/odoo#283797
French localization return reports now display the expected status colors for DAS2 and fiscal declarations. This makes it easier for users to quickly understand the state of each return without changing report content or workflow.
Original PR description
During the development of the das2 report and fiscal declaration, we didn't change the _compute_visible_states to accept the return of those reports. By doing so, we now have colors on the returns. task-6297355 Forward-Port-Of: odoo/enterprise#120417
Appointment booking views now group entries by guest automatically, making it easier for staff to review bookings by customer. This helps teams quickly see each guest's reservations without manually changing the view.
Original PR description
Add default Group By Guest Task-id: 6253719 Forward-Port-Of: odoo/enterprise#118681
The channel kanban view has been adjusted to better match the redesigned web interface. Users should see cleaner spacing, better-aligned cards, and more polished channel images when browsing channels.
Original PR description
This PR fixes the layout of the ungrouped kanban view for channels as it was relying on the margin around each `KanbanRecord` for spacing. As we rely on the gap for the spacing, apply the same approach + add some minor fine-tuning like a `border-radius` on the channel image, spacing between category title and cards task-6488068 follow-up of task-6330603 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update strengthens automated checks so outdated frontend code patterns are caught before they can cause hard-to-find user interface issues. It helps prevent silent failures in areas such as messaging and point of sale by flagging incompatible code during quality checks.
Original PR description
Owl 3's useEffect takes a single callback and calls it with no arguments, but Owl 2 code still parses and runs. `useEffect(fn, () => [deps])` silently drops the dependencies, and `useEffect((el) => ...)` gets undefined parameters - nothing fails until a user walks the path. Add two no-restricted-syntax selectors so eslint catches both on the lint build. They are wrong by construction, so no exceptions are needed, and the useLayoutEffect shim keeps its two arguments under a different callee name. The rules go in test_lint/tests/eslintrc and, for point_of_sale, iot and obox, in web/tooling/_eslintrc.json. The chatter composer patch is the last community call site of that shape. Its body already reads both recipient lists, so dropping the dependency argument is enough; it matches master, so the forward-port is a no-op. Enterprise: https://github.com/odoo/enterprise/pull/128751 Forward-Port-Of: odoo/odoo#283883