Friday, September 18, 2026
16 changes · master
Enhancements to existing features
Odoo now prevents other workers from loading system registry data while it is being modified. This reduces the risk of inconsistent behavior during internal updates and helps keep multi-worker environments more reliable.
Original PR description
Before modifying a registry, `will_change_registry` is called. During the first call, lock registry loading so that no other worker can load the registry while it's being modified. This is similar to locking during updating of modules. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Accounting users can now use a keyboard shortcut to validate and post an opening entry from the setup wizard. This reduces clicks during initial accounting setup and helps users complete the process more efficiently.
Original PR description
No task ID
The mail chat composer now has a fully rounded, pill-shaped input when shown on one line. The chat window corners were adjusted to match, giving conversations a more consistent and polished appearance.
Original PR description
Round the composer input to a full pill on a single line. The chat window radius follows so both look consistent. <img width="820" height="718" alt="composer-rounded-comparison" src="https://github.com/user-attachments/assets/23132111-3976-4064-abdb-c7cddae06876" /> Forward-Port-Of: odoo/odoo#287094
The working schedules list now displays calendar names vertically aligned with the rest of each row. This small visual improvement makes the list easier to scan and gives the scheduling screen a cleaner, more consistent appearance.
Original PR description
Add a class `o_resource_calendar_list` for the working schedules list view to align the list rows in the middle. Before the PR: <img width="1908" height="597" alt="image" src="https://github.com/user-attachments/assets/19445c28-3e28-4d5b-a12f-f6c1701c01a7" /> After the PR: <img width="1390" height="262" alt="image" src="https://github.com/user-attachments/assets/fb50f6ca-6193-4c5e-9a30-8cd47873f01f" /> task-6562529
The PDF quote builder layout is now more consistent and easier to scan. Buttons align with their section titles, multiple buttons fit neatly side by side, and redundant product label text has been removed.
Original PR description
Before this commit, an unnecessary margin on the quote builder buttons left them out of line with their section titles, and those titles didn't match the sections used everywhere else in other tab views. The `Product >` prefix was also redundant, as the product name alone already says what the section is. This commit removes the margin, spaces the buttons so several can sit side by side, aligns the titles with the usual form section style, and drops the `Product >` prefix. task-6528393 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288523
Odoo now installs related country-specific apps when another app for the same single country has already been installed, even if no company is set up in that country. This reduces unexpected missing add-ons, avoids recurring cleanup work, and preserves country metadata used in the Apps screen.
Original PR description
Currently a module with `countries` in the manifest is only installed in case a company with a matching country exists. This commit relaxes the constraint: In case we have already installed a module…
Currently a module with `countries` in the manifest is only installed in case a company with a matching country exists. This commit relaxes the constraint: In case we have already installed a module "from that country" we still install the module. For this we only consider modules that have a single country set in the manifest. (To avoid installing "generic" modules with multiple countries that we do not want.) The current behavior may cause unexpected behavior in case a module is manually installed in case such a company does not exist. (This i.e. causes issues with the runbot tests from time to time) Consider the following case: `l10n_XX`: `countries: ['XX']` `l10n_XX_reports`: `countries: ['XX']` In case we manually install `l10n_XX` but no company has country `XX`. Then we would not install `l10n_XX_reports`. The current workaround is to just not set the `countries` in dependecies but only in the "root" modules. But this requires knowledge of this problem. So it is sometimes not done. So currently we have to do "cleanup" PRs from time to time. Another issue with the workaround is that the `countries` also gives additional metainformation about the module that is lost. E.g. the `countries` info is used to display flag icons for the module in the `Apps` application. task-None
The Open Kiosk button in the self-ordering point of sale dashboard has been separated into its own reusable component. This makes it easier for other modules to customize or extend the button without changing the core dashboard behavior.
Original PR description
To allow overrides in other modules, the “Open Kiosk” button has been extracted into its own widget. 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 update clarifies how hierarchy-related search options in Odoo's core data engine are described. It helps developers and implementers better understand these options, reducing confusion when configuring or extending business logic.
Original PR description
task-4280696 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
India company settings now show “Unregistered” as a placeholder when no GST registration type is selected. This helps users understand that an empty value means the company is unregistered, reducing confusion during setup.
Original PR description
As `l10n_in_gst_registration_type` is left empty for unregistered companies, add an `Unregistered` placeholder so users can understand that an empty value means the company is unregistered. This improves the user experience when configuring the GST registration type. Forward-Port-Of: odoo/odoo#288837
The calendar side panel has been reorganized so the activity filter appears as the last item among calendar filters. This makes it easier for users to find after the addition of multiple calendar filters.
Original PR description
Following the introduction of multicalendars (odoo/odoo#261571), the "My Calendars" filters have been added to the calendar sidepanel. The activity filter is now a bit lost in the panel. Moving it as last item of the calendar filters. Task-6573460 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288527
The Calendar app now includes a reusable default reminder that can support appointment scheduling. It also replaces a confusing empty attendee label with the clearer wording "Unassigned," making calendar records easier to understand.
Original PR description
This PR adds a calendar.alarm. This one is required as default alarm for the appointment types. To avoid creating a new data file and updating the manifest, this change is not done appointment but in calendar as it can already be useful in that app. To avoid a technical label, this PR replaces the default falsy label of CalendarEvent.partner_ids, which is "Undefined Attendee", by "Unassigned". Enterprise PR: https://github.com/odoo/enterprise/pull/131840 Task-6576867 Forward-Port-Of: odoo/odoo#288801
The Sales dashboard no longer adds an extra Sales Orders filter when users click the To Deliver or To Invoice cards. This makes the displayed filters match the selected dashboard card more clearly, without changing the orders included in the results.
Original PR description
Steps to produce: --- - Install sales module with demo data. - Go to quotations > Click on `To deliver` or `To invoice` filter. For the `To deliver` and `To invoice` button, the `Sales Orders` filter is redundant. There is no need to have it. Remove the Sales Orders filter when clicking the To Deliver and To Invoice dashboard cards. Both filters already only return confirmed sales orders, making the additional Sales Orders filter redundant. This creates a 1:1 mapping between each dashboard card and its displayed search filter. opw-6574937 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288744
Secondary buttons now keep a consistent border appearance on hover, while disabled buttons use the same style with reduced opacity. Stat buttons also follow the regular secondary hover behavior, giving users a more consistent interface across forms.
Original PR description
The secondary buttons border no longer darkens on hover, and their disabled design now repeats the regular style with an opacity, like the other variants. The stat buttons were forced to the view background color on hover, they now get the regular btn-outline-secondary hover. task-6562366 Forward-Port-Of: odoo/enterprise#131275
This update ensures the Wise profile identifier is saved after related Wise connection settings are updated. This helps keep direct deposit configuration consistent and reduces setup issues for U.S. payroll payments.
Original PR description
The wise_profile_identifier is reset after writing on wise_api_key or wise_environment, so assign it after the first 2 values.
The appointment calendar side panel now behaves consistently when editing an appointment type. This removes a visual flicker and prevents activity items from appearing when their filter is not shown, making the experience clearer for users.
Original PR description
Previously the activity filter was removed from the sidepanel when an appointment type was in edition. This introduced a side panel flicker when toggling the edition mode. Also, the activity events were still being displayed in the calendar which doesn't make any sense. Make the activity display consistent with its filter state by removing the "showActivityFilter" override. Task-6573460 Forward-Port-Of: odoo/enterprise#131720
The Belgian payroll module now uses the latest officially indexed economic unemployment bonus rates. This helps ensure payslip calculations reflect current legal compensation amounts for affected employees.
Original PR description
Update the economic_unemployment_bonus parameter values to reflect the official rate indexation. task-6541797