Friday, September 18, 2026
23 changes · master
Enhancements to existing features
Blog authors now get a more familiar editing experience, with starter content presented as an editable text block and more control over blog post width. The main blog listing also regains a page title, improving search visibility while still allowing it to be hidden when desired.
Original PR description
- [IMP] website_blog: wrap initial content in a "Text" snippet - [IMP] website, website_blog: allow full container control on blog posts - [IMP] website_blog: add a title on the "All blogs" page Forward-Port-Of: odoo/odoo#289201
Projects created outside the main Project app flow now automatically receive four basic task stages. This helps users and AI-assisted project creation start with a ready-to-use task workflow, reducing setup omissions after imports or automated project generation.
Original PR description
Before this commit, when the user imports a project he creates he sometimes forgot to import his basic stages to be able to quickly add his task. An AI could also forget to create stages when the user asks the AI to generate a business project. This commit adds a default method to generate 4 basic stages when the project is not created manually by the user in the main action of Project app. task-6233294 Forward-Port-Of: odoo/odoo#287735
PayPal payments now show key account details more consistently and support clearer card brand handling. Businesses also get more control over 3D Secure configuration, helping align checkout behavior with their payment requirements.
Original PR description
1. Add Brands for Card Payment 2. Add possibility to configure 3DS 3. Show account id and email always 4. Remove (copy) from payment methods when duplicated task-6537307 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#288935
Odoo search filters can now handle records that span a start and end date, not just records that begin in a selected period. This makes it easier for users to find ongoing items such as events, bookings, or assignments that overlap a chosen timeframe.
Original PR description
A date filter (`<filter date="date_start"/>`) filters on a single field: the periods it offers, as well as the relative ones introduced in [1], match the records that *start* in the searched period.…
A date filter (`<filter date="date_start"/>`) filters on a single field: the periods it offers, as well as the relative ones introduced in [1], match the records that *start* in the searched period.
For models describing a range rather than a single date, it is useful to be able to search for records that are ongoing during a given period.
A date filter can now name the field ending that span:
<filter string="Period" name="period" date="date_start" end_date="date_stop"/>
Its periods and its relative options then match the records overlapping the searched period:
['&', ('date_start', '<=', period_end),
'|', ('date_stop', '>=', period_start),
'&', ('date_stop', '=', False), ('date_start', '>=', period_start)]
A record with no end date ends when it starts. Each bound is serialized with the type of the field it is compared to, so that a date field and a datetime field can be paired.
Task-6546268
[1] https://github.com/odoo/odoo/pull/267980
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-prThis update makes record value changes more efficient by applying field updates in batches instead of one at a time. It also preserves the bank name when setting a bank account on an accounting journal, helping keep financial records accurate.
Original PR description
Set field values in batch instead of doing it field by field. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The spreadsheet component has been updated to the latest available version, bringing ongoing improvements from the shared spreadsheet engine into Odoo. This helps keep spreadsheet behavior current and improves how collaboration/session changes are tracked behind the scenes.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/4020a44abd [REL] Package: Bump master to 20.1.0-alpha.0 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/88a8b225da [IMP] session: Forward root command in the revision payload [Task: 6574631](https://www.odoo.com/odoo/2328/tasks/6574631) 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>
The website builder now includes a searchable selector for long option lists, starting with form field types. This makes it faster and easier for users to find the right form field when editing website forms.
Original PR description
*: html_builder This PR introduces a `BuilderSearchSelect` component that has a search functionality, making it easier to find and choose items from large lists of options. It will be initially enabled for the "form field types" selector to simplify picking a field type option. task-5398633 Forward-Port-Of: odoo/odoo#271821
Users can now embed whiteboards from Miro, Google Docs, Figma, and Canva directly in supported Odoo content. This makes project tasks and to-do items better suited for collaborative planning and design work without leaving Odoo.
Original PR description
Supported providers: - miro.com - docs.google.com - figma.com - canva.com task-6102610 Forward-Port-Of: odoo/odoo#262181
Event badges now make key instructions and QR codes easier to use, including when printed and folded. The event session planning experience is also cleaner, with simpler reminder and favorites messaging and fewer confusing badge labels from single-choice questions.
Original PR description
Backport of https://github.com/odoo/odoo/pull/287446 which one is a Forward-Port-Of: https://github.com/odoo/odoo/pull/285915 because freeze v20 meanwhile Several diff for OXP [IMP] event: improve A4…
Backport of https://github.com/odoo/odoo/pull/287446 which one is a Forward-Port-Of: https://github.com/odoo/odoo/pull/285915 because freeze v20 meanwhile Several diff for OXP [IMP] event: improve A4 foldable badge -> required for oxp kenya - if you have ticket instruction, use it on badge + add qr code always visible [IMP] event: don't show tag (question reply) if only one choice -> fix case of "yes, agree" show on badge as tag "yes" [IMP] website_event_track: typo and make it less verbose -> FP quick pass usability [IMP] website_event_track: replace fa-bell by fa-star -> why ? not sure better after... but FP request -> + add menu whishlist directly in event sub menu ## deploy ``` views = [ 'website_event_track.agenda_main_track', 'website_event_track.track_card', 'website_event_track.tracks_search', 'website_event_track.event_track_aside_other_track', 'website_event_track.track_widget_reminder', ] from odoo.upgrade import util for xmlid in views: util.update_record_from_xml(env.cr, xmlid) ``` Forward-Port-Of: odoo/odoo#285915 Forward-Port-Of: odoo/odoo#288790
Product availability searches based on free stock are now much faster, especially in databases with many inventory records. This reduces waiting time and database load when users filter or search products by available quantity.
Original PR description
**Problem:** Searching on free_qty can be slow when there are many stock.move and stock.quant. The search method uses _compute_quantities_dict() to compute the free_qty based on stock.move and…
**Problem:** Searching on free_qty can be slow when there are many stock.move and stock.quant. The search method uses _compute_quantities_dict() to compute the free_qty based on stock.move and stock.quant, which is expensive. **Solution:** A similar field, qty_available, has a faster search method based on stock.quant only. This method can be adapted to support fast searching on free_qty by also aggregating the reserved_qty and subtracting it from the qty_available. **Perf Table:** Record: product.template, with ~20k stock.picking and most products w/o moves. |Record count|Time before|Queries before|Time after|Queries after| |------------|-----------|--------------|----------|-------------| |10k |2.14s |214 |370ms |45 | |50k |6.06s |644 |829ms |50 | |100k |11.42s |1196 |1.05s |46 | opw-6266096 Forward-Port-Of: odoo/odoo#287363 Forward-Port-Of: odoo/odoo#270434
This change improves how Odoo handles updates to core field properties in the Base module. It supports customization workflows more reliably, including scenarios driven by AI-assisted configuration.
Original PR description
For Customizing AI prompt 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
Spanish electronic invoicing screens are being streamlined so cancellation requests use a single action menu entry instead of separate buttons. The change also makes key JSON files easier to find by keeping SII data with its related document and showing Veri*Factu JSON attachments in document lists.
Original PR description
During the l10n_es [EDI rework](https://www.odoo.com/odoo/project/967/tasks/6175455), the PO introduced some tweaks that would be nice to have. As those tweaks have nothing to do with the rework, we have decided to add them in a different PR: - Replace the direct SII/TicketBAI cancel buttons with a server action bound to the form's action menu, so cancellation goes through a single "Request Cancellation" entry instead of a dedicated button. - Expose the raw JSON attachment on Veri*Factu documents in the list view. - Attach the SII JSON payload to the SII document record itself instead of the invoice, so it travels with the document it belongs to. Here is the edi-rework [PR](https://github.com/odoo/odoo/pull/267440) task-6523345 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The calendar event 'Linked to' field now suggests only relevant business records, making it easier for users to choose the right related item. The reference selector also supports searching and filtering, reducing long lists and speeding up selection.
Original PR description
Improve the models suggested in the "Linked to" field on the "calendar.event" model. We should only have business models. Also improving the reference field to use a select menu instead of the regular select element. This allows to search for a model and reduce the selection depending on the search term. Task-6563387 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#287832
Users can now open the same quick action menu from the members panel and messaging menu items, not just individual messages. This makes common mail and Discuss actions easier to access and reduces accidental text selection when using long-press on iOS Safari.
Original PR description
Before this PR, we could right-click on messages to show the message actions. This feature was only limited to messages. This PR adds the same feature in member panel and messaging menu item. Also drastically reduces chances for long-press on iOS Safari to trigger accidental text selection. Task-6463002 Forward-Port-Of: odoo/odoo#273806
The AI Agent interface now makes it easier to choose which subagents are allowed to help with a task. This improves clarity for users configuring AI agents and should reduce selection mistakes.
Original PR description
task-[6578342](https://www.odoo.com/odoo/2366/tasks/6578342) Forward-Port-Of: odoo/enterprise#131951
Studio users can now choose an end date field when configuring date filters in search views. This helps businesses create more accurate date-range filters, especially for records that span a start and end date.
Original PR description
This commit is the counter part of odoo/odoo#288280 and allows to select an end_date field on date filters in studio. Task-6546268
Belgian payroll now supports transport reimbursement for each separate home-work trip when JC302 employees or workers have interrupted shifts on the same day. This helps ensure private car and bicycle reimbursements match the actual number of qualifying commutes, while public transport season-ticket handling stays unchanged.
Original PR description
1. Employees and workers under JC302 with interrupted shifts can receive transport reimbursement for each home-work trip, based on separate work entries on the same day. 2. Public-transport season-ticket handling remains unchanged. Task-6532008
Knowledge article editors can now opt in to a whiteboard embedding command from the editor menu. This makes it easier for teams to add visual collaboration content directly into Knowledge articles when needed.
Original PR description
See https://github.com/odoo/odoo/pull/262181 This commit make the knowledge article editor opt-in to the whiteboard embedding powerbox command. task-6102610 Forward-Port-Of: odoo/enterprise#116588
Payroll dashboard warnings now load more efficiently by reducing expensive background processing and making warning actions more flexible. This should improve dashboard responsiveness for payroll teams, especially where many warning checks are displayed.
Original PR description
Prior to this commit, the payroll dashboard could experience high latency during load times. This was primarily caused by the heavy use of `safe_eval` to compute Python-based warning actions…
Prior to this commit, the payroll dashboard could experience high latency during load times. This was primarily caused by the heavy use of `safe_eval` to compute Python-based warning actions (`evaluation_code`), as well as the rigidity of the `button_action` (Many2one) field which limited dynamic UI routing. This commit refactors the warning action system to fix these performance issues and clear technical debt: - Replaced the relational `button_action` field with a generic JSON-driven `action_config` text field on `hr.payroll.warning`. - Migrated all existing data records in `hr_payroll`, `l10n_be_hr_payroll`, and `l10n_be_hr_payroll_account` to use `action_config`. - Converted several Python-evaluated warnings into pure `domain` warnings by moving static dictionary generation and `group_by` clauses into the JSON configuration, allowing the backend to skip `safe_eval` entirely. - Improved the separation of concerns: the backend strictly handles ORM detection (`warning_domain`), while `action_config` handles UI routing. - Set up the infrastructure to support volatile frontend context keys (e.g., for autofocusing fields) without polluting the ORM context.
Studio now handles AI options directly on regular fields, so users no longer need a separate AI-field drop action. The update also improves wording and the Studio promotion dialog, making the AI field experience clearer and more consistent.
Original PR description
Forward-Port-Of: odoo/enterprise#131981
Appointment booking screens and emails are clearer and more consistent. Users get better default reminders, more readable appointment cards, improved popover layout, and confirmation emails that greet the right attendee when bookings are made internally.
Original PR description
This commit improves the UI of appointment: * To improve the readability of the "total_capacity_reserved" field in the records of the kanban view, its background color is lightened. * The default…
This commit improves the UI of appointment: * To improve the readability of the "total_capacity_reserved" field in the records of the kanban view, its background color is lightened. * The default alarm of the appointment type is set to 1 day. * The name of the appointment booker is no longer used for the greeting in the confirmation email since it is not set if the appointment is done from the backend. Instead of it, the first of the attendees is used and if they do not exist, the organizer is used. * The popover is improved. Margins are placed between the buttons in the footer, to avoid having them stuck to each other. A maximal width is set for the videocall_location field, this way it does not impact the size of the popover. * To avoid a technical label, the default falsy label of CalendarEvent.resource_ids, which is "Undefined Attendee", is replaced by "Unassigned". Community PR: https://github.com/odoo/odoo/pull/288801 Task-6566639 Forward-Port-Of: odoo/enterprise#131840
Belgian payroll now automatically sets a disabled spouse's fiscal status to "without income" so the correct withholding tax scale is applied. This helps ensure employees with a disabled spouse receive the appropriate tax treatment and reduces manual payroll errors.
Original PR description
When an employee has a disabled spouse, the employee automatically qualifies for withholding tax scale 2 (Bareme II), so the spouse fiscal status must be "without income". If Disabled Spouse is set to True, the spouse fiscal status is now automatically set to "without_income". In Disabled Spouse is not selected, the fiscal status can be manually changed to any other option. task-6542651
Belgian payroll users now get clearer warnings when employees are missing time off allocations, helping HR teams spot and resolve issues before payroll or leave planning is affected. The employee and time off dashboards also make it easier for managers to grant the needed allocations directly from the relevant screens.
Original PR description
mock- https://link.excalidraw.com/l/65VNwvy7c4X/1BoTHSkGUpa - Added new warning on payroll dashboard for employees not having allocation. Doesn't apply to employees without contract and salary…
mock- https://link.excalidraw.com/l/65VNwvy7c4X/1BoTHSkGUpa
- Added new warning on payroll dashboard for employees not having allocation.
Doesn't apply to employees without contract and salary structure dirigeant.
- Added "Not defined" on employee form o-stat-value when there is no allocation.
- Added new button "Grant Time off" on employee Time Off dashboard only visible
to time off managers and when no allocation. On click-> new allocation request
form opens.
- Updated fields for New Allocation request form from Time Off Dasboard:-
- Removed name field.
- Rename "Ask for" to "Duration" for `number_of_day_display` field.
- Change time type field to widget time type tags
- New button "Grant" in place of "Submit Request" directly approves requests.
- Updated the popover form for Time off gantt:
- Warning message on no allocation shows is in alert-danger class.
- If there is no enough allocation then "Allocate & Add" appears which
creates required allocations with leaves.
task-6476239