Thursday, September 17, 2026
24 changes · master
Enhancements to existing features
Vendor invoice imports now better recognize reverse charge taxes even when electronic invoice files list them as 0%. This helps keep imported tax and analytic information more accurate, reducing manual correction work for accounting teams.
Original PR description
Reverse charge taxes can be reported as 0% in the XML, meaning that we wouldn't be able to predict them even if e already set it right on a previous invoice for the same partner.Description of the issue/feature this PR addresses: Forward-Port-Of: odoo/odoo#287476
Installing the Colombian electronic invoicing module is made faster for companies with large accounting histories. The change avoids time-consuming recalculation of existing invoice data during setup while keeping normal behavior for new and updated records.
Original PR description
- Use the `init_storage` field attribute to initialize the stored computed column `l10n_co_edi_type`, `l10n_co_edi_cufe_cude_ref`, `l10n_co_edi_state`, `l10n_co_edi_operation_type`,…
- Use the `init_storage` field attribute to initialize the stored computed column `l10n_co_edi_type`, `l10n_co_edi_cufe_cude_ref`, `l10n_co_edi_state`, `l10n_co_edi_operation_type`, `l10n_co_edi_commercial_state` directly in the database. - This prevents Odoo from computing and writing the field for all existing `account.move` records when installing `l10n_co_edi`. - This is particularly important for large databases with a high volume of Colombian accounting moves, where the initial computation can take too long and cause the module installation to hit the time limit. - Keep the compute method unchanged so the field continues to be computed normally for subsequent record creation or dependency changes. - Remove the `default` from `l10n_co_edi_commercial_state` since the `default` sets the field to `pending` while the compute sets it to `False` when no accepted EDI document exists. Move `pending` to `default_get` to preserve the current behavior while keeping the initialization consistent with the compute. **opw-6451331** Forward-Port-Of: odoo/enterprise#130808 Forward-Port-Of: odoo/enterprise#129507
Payroll now shows warnings about employee profile changes more broadly, including on the payroll dashboard and employee form. This helps payroll teams notice when an employee's data changed after a payslip was created, reducing the risk of processing outdated payroll information.
Original PR description
When you update an employee profile or create a new version covering a period of time already covered by a payslip, if you re-open the payslip, you'll see this warning: The employee's data has been updated since this payslip was created. -> Making it visible from the payroll dashboard and the employee's form. Warnings on `hr.employee` and having `warning_type == 'python'` were grouped by versions. Making them visible only if the right version was selected. Updating `_compute_issues()` so that if model is `hr.employee`, the warning is visible no matter the selected version. Task: 6435032
The point of sale receipt popup now uses standard notifications to show sending progress, success, or errors instead of messages inside the popup. The dialog also has a clearer title, making it easier for cashiers to understand and act on receipt-sending steps.
Original PR description
Previously, the receipt popup displayed its status (success, error, loading) using inline text elements directly inside the dialog. This commit replaces these inline text notices with standard Odoo toaster notifications. Additionally, a title was added to the dialog to make its purpose immediately clear. Task-6496757
Studio now supports configuring AI behavior directly on existing fields, making AI setup more consistent and easier to manage. The update also cleans up related prompts and dialog text so users get clearer guidance when working with AI fields and Studio promotion messages.
Employee kanban cards now show an issues tag when payroll-related problems need attention, helping payroll teams identify cases that require follow-up more quickly. The update also removes outdated employee issue fields and filters, and improves Belgian payroll warning text handling for more accurate messages.
Original PR description
task-id: 6530918
Payslip validation errors now show more helpful details, including both the error title and description when available. When several issues are found, they are displayed as a numbered list so payroll users can understand and resolve them more easily.
Original PR description
Validating a payslip for an employee can raise errors (regarding salary configuration for example.) The validation message providing insights to the user used to be a list of the titles of errors. Some of these validation errors may have a description as well, which would be useful for the user. The errors message has been adapted to display title and description if any. If more than one error is shown, the message format is also adapted as a numbered list. task-6526610
Payroll users can now update Premium Pay options for several existing leave records at once from the Gantt view, instead of opening each leave individually. This speeds up payroll preparation while ensuring options are only applied where the leave type supports them, and leaves with active options are easier to spot via the currency symbol shown on the schedule.
Original PR description
Allow users to apply Premium Pay options across multiple leave records at once in the Gantt view instead of configuring them individually. An "Options" action is added to the Gantt multi-selection button bar when selecting cells with existing leaves. Clicking this action displays applicable m2m options inside a popover view using a form layout with an inline `add_circle` icon indicator. When updated, selected options are executed on the server side and applied strictly to leave types whose underlying work entry types support them. Additionally, leaves with active options now render the company currency symbol directly on their Gantt pills. task-6542141
Belgian payroll now warns when a payslip uses the adapted work schedule leave code after an employee has been continuously sick for more than 12 months or had related long-term illness leave. This helps payroll teams apply the correct leave code and avoid incorrect salary assimilation calculations.
Original PR description
When an employee has been continuously sick for more than 12 months, returning on an adapted working schedule must use LEAVE12305 instead of LEAVE281, as the absence is no longer assimilated. Add a Python payroll warning to flag payslips using LEAVE281 when the employee's continuous illness exceeds 12 months or includes LEAVE280, and update assimilation computations accordingly. Task-ID: 6484739
Payroll structure types are now handled more automatically, reducing the need for users to manage them directly. This makes payroll configuration clearer and helps prevent inconsistent pay schedule settings when creating or updating Belgian payroll records.
Original PR description
- made `type_id` hidden in the payroll structure form view and made it computed so it takes a value when the user creates a new type or change the county of an existing one. - made `schedule_pay` not related to structure type - removed the menu for structure types task-6569952
The AI app now offers a clearer interface for choosing which subagents an AI agent can use, making setup easier and reducing configuration mistakes. The update also prevents unnecessary warning messages when website styling refreshes successfully.
Original PR description
task-[6578342](https://www.odoo.com/odoo/2366/tasks/6578342)
Meetings held in Discuss can now be automatically recorded on the related document when they were planned from that document, so teams no longer need to manually note that a call happened. The log includes the call duration and links back to the call, with indicators for recordings and transcripts when available.
Original PR description
A meeting held in Discuss left no trace outside of its own channel: whoever just spent an hour on a call had to write that fact down by hand on the lead or the task it was about. A…
A meeting held in Discuss left no trace outside of its own channel: whoever just spent an hour on a call had to write that fact down by hand on the lead or the task it was about. A discuss.call.history can now be tied to a mail.activity, the way a voip.call already is. It happens on its own when the meeting was planned from a document: the call taking place in it is logged on the activity that planned it, so that marking that activity done posts "Meeting done (1h 23m 45s)" in the chatter of that document, linking back to the call and telling whether it was recorded and transcribed. A call nobody planned is logged by hand from the Call History, through the wizard voip contributed and mail now owns. The duration wording shared by both call models moves to mail.tools.call, and ai contributes the transcript icon to that message the way it already does for a voip.call. Join Meeting opens the Discuss channel of the meeting for an attendee who is already a member of it, instead of navigating away to the invitation link. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Meetings held in Discuss can now be automatically recorded in the chatter of the related document when they were planned from that document, including duration, recording, and transcript details. This gives teams a clear history of customer or project conversations without manually writing notes after each call.
Original PR description
A meeting held in Discuss left no trace outside of its own channel: whoever just spent an hour on a call had to write that fact down by hand on the lead or the task it was about. A…
A meeting held in Discuss left no trace outside of its own channel: whoever just spent an hour on a call had to write that fact down by hand on the lead or the task it was about. A discuss.call.history can now be tied to a mail.activity, the way a voip.call already is. It happens on its own when the meeting was planned from a document: the call taking place in it is logged on the activity that planned it, so that marking that activity done posts "Meeting done (1h 23m 45s)" in the chatter of that document, linking back to the call and telling whether it was recorded and transcribed. A call nobody planned is logged by hand from the Call History, through the wizard voip contributed and mail now owns. The duration wording shared by both call models moves to mail.tools.call, and ai contributes the transcript icon to that message the way it already does for a voip.call. Join Meeting opens the Discuss channel of the meeting for an attendee who is already a member of it, instead of navigating away to the invitation link. https://github.com/odoo/odoo/pull/285269
This update improves the online shopping experience by adding clearer country-related options and better handling of currency and pricelist choices. It helps shoppers see the right regional settings while avoiding unexpected price changes in the cart.
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
Customer lists now show reminder levels and include filters for overdue accounts and reminder status. This helps teams quickly identify which customers need follow-up and prioritize collection activities.
Original PR description
- add reminder level column in partner list views - add overdue filter in partner search view - add reminder level in custom filters see odoo/enterprise#130440 task-6501327 Forward-Port-Of: odoo/odoo#286688
Users can now add a separate personal message when sending survey invitations, so their notes are preserved even if recipients are changed. Invalid email addresses are shown directly below the email field, making invitation errors easier to understand and fix.
Original PR description
Purpose ======== On the survey invitation wizard, when a user tries to put comments on the mail body, it recomputes and erases the user message when the recipient field is altered. Specification ============== - It adds a new field to allow users to send additional messages when inviting users to survey. - It displays an error message below the email field for invalid emails instead of UserError. Task-3753800
Event badges now better support folded A4 printing by keeping key instructions and QR codes visible for easier check-in. Event session planning was also simplified with clearer wording, fewer unnecessary notifications, and improved wishlist access, making the attendee experience smoother.
Original PR description
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
This update adds guided sandbox answer tools for Belgian DRS and Flexi@Work payroll-related declarations. It helps teams test and validate Belgian payroll workflows more reliably before using them in real processes.
Original PR description
…andbox answer wizards Task: 6558927
Users can now see reminder levels directly in partner lists and filter customers by overdue status or reminder level. This helps finance teams prioritize follow-ups and find accounts needing attention more quickly.
Original PR description
- add reminder level column in partner list views - add overdue filter in partner search view - add reminder level in custom filters see odoo/odoo#286688 task-6501327 Forward-Port-Of: odoo/enterprise#130440
Appointment screens and messages have been polished to make booking details clearer for users. Confirmation emails now use a more reliable greeting, default reminders are set one day before appointments, and calendar labels and popovers are cleaner and less confusing.
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 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/288517 Task-6566639
This update improves small on-screen interactions to make the product feel more responsive and polished. These refinements help users better understand actions and feedback while working, without changing core workflows.
Original PR description
commu-PR: https://github.com/odoo/odoo/pull/286205
Odoo Studio users can now rearrange pages and groups in form layouts by dragging and dropping them. This makes it easier to customize forms visually and organize business information without relying on technical changes.
Users can now create serial or lot records directly from the Customers smart button on a customer profile. This streamlines field service stock workflows by reducing navigation and making equipment tracking setup faster.
Original PR description
After this commit, users can create serial/lot records directly from the Customers smart button on the partner form view. task-6417443
Serial and lot records can now have their linked customers updated manually, making it easier to reflect real-world service relationships such as separate installer and maintenance customers. Customer links are also kept consistent with company ownership by automatically removing mismatched associations.
Original PR description
Before this commit, the customers linked to a serial/lot were computed and could not be edited. This prevented handling cases where the installer and maintenance customer differ, as no sales order exists to link the serial number to the maintenance customer. After this commit: - `partner_ids` on serial/lot records is editable. - If a partner's company is changed and no longer matches the company of the serial/lot, the link between the partner and the serial/lot is automatically removed (and vice versa). task-6417443