Tuesday, September 22, 2026
37 changes · master
Enhancements to existing features
Users editing follower subscriptions can now switch all notification categories on or off with a single “All Notifications” option. This reduces repetitive clicking and makes managing subscription preferences faster and less frustrating.
Original PR description
Before this commit, people could choice to which subtype to suscribe, through the "Edit Subscriptions" dialog in the Follower menu. There are 10 items, and it's quite exhausting to select all the items by clicking on each checkbox by hand. This commit adds a "All Notifications" that eases toggle all items on and off. Task-6592809 https://github.com/user-attachments/assets/c302870f-4d59-4131-a8de-8ac9fb4483a0 Forward-Port-Of: odoo/odoo#289948
Marketing campaign users can now open a settings view from the Global Reply Path node to control reply-related campaign behavior. This makes it easier to decide whether the main automation flow should stop when a participant responds through channels such as email, SMS, or WhatsApp.
Original PR description
This PR introduces a new configuration view accessible via the "Global Reply Path" node. This allows users to manage campaign settings and specify if the main workflow should stop upon receiving a participant reply (e.g., via Email, SMS, or WhatsApp). Task-6559148 Forward-Port-Of: odoo/enterprise#132007
User and contact access status is now recalculated in bulk instead of one record at a time. This reduces memory usage and speeds up group and permission changes, especially on large databases.
Original PR description
Recomputing `res.users.share` and `res.partner.partner_share` through standard ORM recordsets during group structure or implication changes causes high memory overhead and O(N) performance bottlenecks. This commit completes the recomputation by executing set-based SQL updates: - Update `res_users.share` directly using `_get_internal_group_ids()`. - Update `res_partner.partner_share` based on linked non-share users. - Invalidate the ORM model cache for `share` and `partner_share` to ensure environment consistency. This avoids memory cache spikes and speeds up group assignment operations. Forward-Port-Of: odoo/odoo#289571
The project and task Kanban cards have been visually adjusted to better present the "Budget on track" button. This improves clarity and consistency for users reviewing project budget status at a glance.
Original PR description
This PR fine-tunes the "Budget on track" button based on the design review of the project and task Kanban cards. task-3462435 Requires: - https://github.com/odoo/odoo/pull/288893 Forward-Port-Of: odoo/enterprise#131938
Project and task Kanban cards have been visually refined so information is more consistently aligned and easier to scan. Priority star spacing was also adjusted to work better across desktop and touch devices, improving day-to-day usability without changing workflows.
Original PR description
*: hr_timesheet, mail, project, web ### Fine-tune kanban cards Prior to this PR, elements in project and task Kanban cards could have different styles and layouts, resulting in inconsistent card…
*: hr_timesheet, mail, project, web ### Fine-tune kanban cards Prior to this PR, elements in project and task Kanban cards could have different styles and layouts, resulting in inconsistent card appearances. This PR fine-tunes the card layouts and aligns their elements to improve visual consistency and readability. ### Review spacing in priority field Prior to this PR, the gap between stars was too large on desktop but was necessary for proper interaction on touch devices. This PR adjusts the gap between stars specifically for touch devices. Requires: - https://github.com/odoo/enterprise/pull/131938 | Before | After | |--------|--------| | <img width="404" height="540" alt="Screenshot 2026-09-18 at 09 45 10" src="https://github.com/user-attachments/assets/a35de006-7cbd-4b5e-9d9a-72f4e63d34a3" /> | <img width="435" height="597" alt="Screenshot 2026-09-18 at 09 28 11" src="https://github.com/user-attachments/assets/d6ac9d4c-64ba-434a-b2f8-5e926c1bb566" /> | | <img width="385" height="197" alt="Screenshot 2026-09-18 at 09 54 46" src="https://github.com/user-attachments/assets/644c17b2-5311-4aa0-b8c3-af64610c2dcc" /> | <img width="394" height="219" alt="Screenshot 2026-09-18 at 09 54 40" src="https://github.com/user-attachments/assets/a25f3f0a-a0d6-4be6-84b4-752844e52b7c" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288893
Marketing automation webhooks are now easier to configure and test, with clearer examples, more helpful error messages, and better log details. The update also fixes a dialog issue that could block users from opening records or changing views after checking webhook logs.
Original PR description
Testing the webhook feature has revealed a number of pitfalls and gotchas in the way it's presented to the user. As such, we want to improve helpers and error messages to make the feature easier to understand and use. This commit makes the following changes to marketing campaign webhooks: - Clarify webhook helper labels by making them into valid JSON objects - Webhook routes are now properly defined as json2 - Through the test URL, error messages will invite users to check for malformed JSON and argument presence - Webhook URL now has the value of the test route when not in Running state - If logging is enabled, logs now include IDs of fetched records In addition, we fix a bug where consulting webhook logs would keep a "ghost dialog" open that would prevent opening records or switching view modes. task-6580774 Forward-Port-Of: odoo/enterprise#131707
The GitHub issue template has been updated to align with the upcoming Odoo 20 release. This helps people report issues with the right release context, improving triage quality without changing product behavior.
Original PR description
😊 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289847
General ledger reports now hide ledger columns that were not selected in the horizontal group-by filters. This avoids showing empty columns filled with zeroes, making financial reports easier to read and focus on relevant data.
Original PR description
Since there won't be any data because of the filters, there is no need to display a column full of zeroes. task-6532155 Forward-Port-Of: odoo/enterprise#132391
This update refreshes PayPal live environment identifiers used during payment onboarding and processing. It helps ensure merchants connecting PayPal in Odoo use the correct production partner and client configuration, reducing setup issues for live payments.
Original PR description
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 Forward-Port-Of: odoo/odoo#289590
Users can now manage IAP-related settings, credit purchases, low-balance warnings, auto-refill, and SMS-related options from a single IAP page. This reduces settings clutter and makes it easier for businesses to control paid Odoo services in one place.
Original PR description
See commit Task: https://www.odoo.com/odoo/967/tasks/6128821 Community: https://github.com/odoo/odoo/pull/269021 Enterprise: https://github.com/odoo/enterprise/pull/119818 Upgrade: https://github.com/odoo/upgrade/pull/10439 IAP: https://github.com/odoo/iap-apps/pull/1309 Internal: https://github.com/odoo/internal/pull/3954
Dark mode colors have been refined across several Odoo apps to look more consistent and easier to read. Subtle gradients return where helpful, while problematic backgrounds are removed or corrected, including more accurate time-off card coloring from configuration settings.
Original PR description
This PR adjusts certain elements of dark mode: - It updates the dark color variables that were "hardcoded" - The gradient has been reintroduced more subtly; however, it was removed in certain cases where it was unnecessary or problematic. - Certain colors have been corrected to ensure better compatibility with dark mode. It also changes the background color assignment for time-off cards, which should actually use the color defined in the configurations. *: account, api_doc, hr_holidays, html_builder, html_editor, mail, mass_mailing, sale, spreadsheet, stock task-6522638 ent-PR: https://github.com/odoo/enterprise/pull/129944 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#285859
Users can now manage IAP credits, balance alerts, and auto-refill from one dedicated IAP page instead of scattered settings. This simplifies administration and reduces clutter in app configuration screens for services such as document extraction, Sign, and VoIP.
Original PR description
See commit Task: https://www.odoo.com/odoo/967/tasks/6128821 Community: https://github.com/odoo/odoo/pull/269021 Enterprise: https://github.com/odoo/enterprise/pull/119818 Upgrade: https://github.com/odoo/upgrade/pull/10439 IAP: https://github.com/odoo/iap-apps/pull/1309 Internal: https://github.com/odoo/internal/pull/3954
Dark mode styling has been refined across VoIP, Enterprise web screens, and Studio to improve contrast and make colors easier to distinguish. Gradients and tag or badge colors were adjusted so the interface remains clear and visually consistent in low-light themes.
Original PR description
This PR adjusts certain elements of dark mode: - The gray palette has been adjusted, with particular attention paid to the initial variations to ensure sufficient contrast between the different shades. - The gradient has been reintroduced more subtly; however, it was removed in certain cases where it was unnecessary or problematic. - Certain colors have been corrected to ensure better compatibility with dark mode. *: web_enterprise, web_studio task-6522638 commu-PR: https://github.com/odoo/odoo/pull/285859 Forward-Port-Of: odoo/enterprise#129944
The timesheet and attendance popover has been visually refined so primary actions stand out while secondary options are less distracting. This makes it easier for users to focus on creating time entries or starting work sessions without confusing links or overly prominent end-session buttons.
Original PR description
The timesheet systray popover gave its side actions as much weight as the timer form it exists for. Ending the session was a full-width warning button with an icon: it read like an alert and competed…
The timesheet systray popover gave its side actions as much weight as the timer form it exists for. Ending the session was a full-width warning button with an icon: it read like an alert and competed with Create, the main action of the popover. The Assistant link sat between the Timesheets and Attendance tabs in bold link style, so it looked like a third tab although it closes the popover to open another screen. This commit gives each element the weight of its role: - The tab bar gets a light background, setting the navigation apart from the content. - Assistant moves to the end of the tab bar, after a vertical divider, as a small secondary button. Its "open in new" icon tells that it leaves the popover, and a vertical margin gives the bar some room. - The divider takes the border color (text-300) at full opacity, as `.vr` paints its text color at 25% opacity, which would not match the border under the tabs. - End Session and Check out become secondary buttons, sized to their label and without icon. Start Session and Check in keep their primary style and icon, as they remain the main action when nothing is being recorded. - The timer popover keeps its 400px width in every state. Without Attendance, nothing sized its checked-out view, which reuses the att_container class: it shrank to its content and widened as soon as a session started. The Check out button of the Attendance tab is defined in hr_attendance. The override only restyles it when both tabs are displayed, so users without the Timesheets tab keep the full-width warning button of the attendance popover. As the override replaces the whole class expression of the button, it restates flex-grow-1 for those states. task-6579209 Forward-Port-Of: odoo/enterprise#132337
This update replaces confusing directional arrow icons with clearer navigation arrows across several Odoo screens. It also improves the spacing and alignment of link arrows in fields, making mobile form interactions easier to read and use.
Original PR description
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 Forward-Port-Of: odoo/odoo#289817
A new shared helper makes it easier and more consistent for Odoo features to connect to IAP services. It centralizes required request details, error handling, and deprecation warnings, which can reduce maintenance effort and improve reliability for future integrations.
Original PR description
Util to call IAP route with required args, taking care of errors, and deprecation warnings Checkout equivalent on IAP: `iap_route`
Usage:
```py
result = iap_tools.iap_request(
env=self.env,
endpoint=IrConfigParameter.get_str('my_module.iap_endpoint'),
route='/my-module/1/my-route',
json={"param1": value1, "param2": value2},
)
```
task-6391762
IAP: https://github.com/odoo/iap-apps/pull/1899Brussels is now available in the Belgian states list used for address entry. This makes Belgian address forms clearer for users who expect to select Brussels, even though it is a region rather than a province.
Original PR description
Brussels is a region and not a province, but it is confusing for users not to find it in the states list when filling out Belgian addresses. This adds Brussels to the list of Belgian states. Task-6584223 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website blog module has been tidied up by removing page templates that are no longer used after the blog redesign. This reduces maintenance overhead and keeps the blog code aligned with the updated design, with tests adjusted accordingly.
Original PR description
As a follow-up of the blogs redesign [1], this commit removes the templates that are not needed anymore. An upgrade script will make the needed adaptations (see linked PR). [1]: https://github.com/odoo/odoo/pull/216148 Related to task-3083656
Brussels communes are now correctly associated with the Brussels state in Belgian payroll data. This improves address and regional payroll data accuracy for organizations operating in Brussels.
Original PR description
Communes from the Brussels region were missing their state association. This maps all Brussels communes to the newly added Brussels state. Task-6584223 See odoo/odoo#289142
The self-invoicing validation screen has been simplified with a cleaner layout and easier access to the sign-in action from the header. This makes the checkout invoicing flow clearer for customers and staff using localized Point of Sale setups in Argentina, Malaysia, and Peru.
Original PR description
`l10n_ar_pos`, `l10n_my_edi_pos`, `l10n_pe_pos` In this commit: = - Simplify the self-invoicing validation screen by improving the layout, moving the sign-in action to the header. Related: = - task: 6366362 - enterprise: https://github.com/odoo/enterprise/pull/125687
Indonesian QRIS payment credentials are now easier to find in a dedicated Payment QR Settings tab, with a direct link to relevant documentation. The shared company QR setting also makes the setup more consistent across accounting and localization features.
Original PR description
In this PR: - Move the company_qr_code related field from account_qr_code_emv to account, which already defines res.company.qr_code. - Move the QRIS credentials to a Payment QR Settings tab and add a link to the Indonesian localization documentation. Upgrade PR: https://github.com/odoo/upgrade/pull/11327 task-6518698
The Ecuador POS self-invoicing validation screen has been simplified with a clearer layout. Moving the sign-in action to the header makes the flow easier for users to understand and complete.
Original PR description
In this commit: = - Simplify the self-invoicing validation screen by improving the layout, moving the sign-in action to the header. Related: = - task: 6366362 - community: https://github.com/odoo/odoo/pull/278653
The employee referral app has been visually refreshed with updated illustrations, backgrounds, and reward images. It also fixes small navigation and visibility issues, making the referral dashboard and job search areas clearer and more polished for users.
Original PR description
This PR is a quick refresh of the now very outdated hr_referral. **llustrations** New characters and background illustrations New rewards pictures **CSS cleanup** Replaced most of the custom SCSS with Bootstrap/Odoo utility classes in the templates. Dropped hardcoded colors in favor of theme variables where possible. **Fixes** The "Back to" breadcrumb showed "Unnamed" when leaving the dashboard — missing displayName has been added. Job Positions' search panel was invisible over the custom company background — added bg-view. Onboarding image fields in the backend were invisible since adding a white background to the field. task-6573529 Forward-Port-Of: odoo/enterprise#131522
Mail-related record lists now handle common searches and reads more directly, avoiding unnecessary copying behind the scenes. This improves performance for operations on large mail relationships, especially when a match is found early, without changing user-facing behavior.
Original PR description
Before this commit, an array read method that RecordList does not implement is served by proxyGet, which spreads the whole list into an array of proxies and calls the Array method on that copy, so every map, filter or some over a relation allocates a copy of the relation first, and a search that matches the first record builds that copy all the same. This commit implements those methods on the list: they read the records from the list and hand the callback the same proxies, and the compute of a lazy relation now runs from one place. This makes a search stop on the record it matches: measured in Chrome, a some() on the first record of a relation takes 0.5us whatever the size of the relation, where it took 1.6us on 5 records and 105us on 500. A map() reads every record either way and only drops the copy, 14.4us instead of 15.7us on 50 records.
This update links companies more directly with their employees so payroll-related checks can better identify the right people. It helps reduce unnecessary pay run warnings, making payroll administration cleaner and less distracting.
Original PR description
Adding O2M `employee_ids` on `res.company` inverse of `employee.company_id` Task: 6366409
The spreadsheet engine has been updated to a newer version, bringing internal improvements that support a more reliable and maintainable spreadsheet experience. This also includes updates to how spreadsheet notifications and shared spreadsheet components are handled, helping keep dashboards and spreadsheet actions stable as the product evolves.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/b6b207303a [REL] 20.1.0-alpha.3 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/b6b207303a [REL] 20.1.0-alpha.3 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/b051f3ac9c [REF] spreadsheet: add `NotificationPlugin` [Task: 6542121](https://www.odoo.com/odoo/2328/tasks/6542121) https://github.com/odoo/o-spreadsheet/commit/4858a3a72d [REF] spreadsheet: Add `SpreadsheetActionEnv` [Task: 6542121](https://www.odoo.com/odoo/2328/tasks/6542121) https://github.com/odoo/o-spreadsheet/commit/0e25178ba3 [REF] spreadsheet: Add `OSComponent` [Task: 6542121](https://www.odoo.com/odoo/2328/tasks/6542121) https://github.com/odoo/o-spreadsheet/commit/27cc52d306 [FIX] rolldown: prevent const replacement in bundle [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
Manufacturing work order cards now show the product and quantity being made, helping teams quickly see what is being produced. Scheduling defaults now better use available buffer time, and delayed draft manufacturing orders are included correctly in delayed production views.
Original PR description
The workorder kanban now displays the products and quantities being manufactured for a certain workorder instead of the workorder name. This conveys more useful information to the user since they want to know what is actually being produced. Additionally the auto rescheduling default is now set to use buffer allowing delayed tasks to fill buffer space. This commit also fixes a bug where manufacturing orders in draft state and past deadline were not displayed when applying the "Delayed Productions" filter. **Enterprise PR:** odoo/enterprise#130960 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287412
Workorder planning cards now show the product being manufactured and the quantity, helping teams quickly see what is being produced. Scheduling behavior is also improved by using buffer time by default, and delayed draft manufacturing orders are now included in the delayed productions filter.
Original PR description
The workorder kanban now displays the products and quantities being manufactured for a certain workorder instead of the workorder name. This conveys more useful information to the user since they want to know what is actually being produced. Additionally the auto rescheduling default is now set to use buffer allowing delayed tasks to fill buffe> This commit also fixes a bug where manufacturing orders in draft state and past deadline were not displayed when applying the "Delayed Productions" filter. **Community PR:** odoo/odoo#287412 Forward-Port-Of: odoo/enterprise#130960
Employee departure records will no longer automatically set an archive action date based on the departure date. This reduces the risk of employees being archived unintentionally and gives users more explicit control over the process.
Original PR description
[IMP] hr_employee_departure: default computed value for action_date set to empty Automatic computed value for action_date implies automatically archiving by default. This can be disturbing to users and prone to errors. This field was computed with two outcomes: - If no value yet: computed to the first day of the month following departure_date - If value set already: ignore and do not overwrite Since the first case needs to be removed, the second one doesn't make sense anymore as it doesn't need to be compute nor re-computed. task-6526610 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users will now see a persistent notification when Odoo's IAP service is down. This makes service interruptions clearer, reducing confusion when paid or connected services cannot be reached.
Original PR description
We wanted to let the user know when the IAP server is down with a sticky notification. Task-6570098 Forward-Port-Of: odoo/odoo#289599 Forward-Port-Of: odoo/odoo#288098
Invoice forms now keep the amount due in sync with the invoice total even before the user saves changes. Applying outstanding credit also saves pending invoice line edits first, preventing unsaved lines from disappearing.
Original PR description
Before this commit, the account.move amount due field would only update on record saving (as it depended on line_ids). This caused a temporary out of sync situation between the total and the amount due on the move form view. This commit ensures that the amount due is computed even before saving the record so that out-of-sync situation is avoided. It also solves the following bug: Repro steps: 1) Create a new invoice 2) Add a customer and save the record 3) Add some invoice lines 4) without saving, add a payment from the outstanding credit Issue: The added (unsaved) invoice lines are removed Solution: This commit forces a record save before assigning outstanding credit task-6534794 Forward-Port-Of: odoo/odoo#288894
The manufacturing order screen now shows the packages smart button with the newer package icon. This small visual update makes the button clearer and keeps the interface more consistent for users.
Original PR description
The smart button for packages now uses the package_2 icon. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289567
The Time Off Gantt view now includes overtime hours when showing worked hour totals. This gives payroll and HR teams a more accurate view of employee time, reducing confusion when reviewing schedules and pay-related time balances.
Original PR description
The number of hours displayed in the Time Off gantt view was not reflecting the overtime hours into account. It was added to the counter the hours from the category 'EXTRA_HOURS' (previously 'Added to Monthly Pay'). task-6528360
This update adds extra automated checks for the Intercompany Comparison Report. It helps ensure the report continues to behave correctly, reducing the risk of reporting issues for finance teams.
Original PR description
Task : https://www.odoo.com/odoo/project/967/tasks/6567355 No Community modifications.
The accounting firm settings text has been reworded to make it easier for users to understand. This improves clarity in the accounting setup experience without changing how the feature works.
Original PR description
changing the wording for the account firm settings text. task-6578290
This update adds accounting tags that prepare Odoo for a new Indirect Cash Flow Statement report. These tags help classify accounts consistently so future cash flow reporting can be generated more accurately across accounting setups.
Original PR description
Add some accounting tags that will be used in the new Indirect Cash Flow Statement report. task-5151878 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update adds test coverage to ensure message posting data is properly cleaned before use. It helps reduce the risk of unsafe or unexpected content reaching mail-related workflows, improving reliability and protection without changing normal user behavior.