Daily updates from Odoo
Wednesday, August 5, 2026
10 changes · master
Enhancements to existing features
SEPA direct debit batch validation has been optimized for large payment batches. This reduces processing time and avoids timeouts when validating thousands of payments, improving reliability for finance teams.
Original PR description
- Replace the `id:recordset` aggregation in `_get_expiry_date_per_mandate()` with `date:max` to compute the latest payment date directly in SQL. - Render `email_from` for all payments in batch and cache the computed authors by sender email to avoid repeated partner lookups during SDD pre-notification. This reduces ORM/cache overhead when validating large SEPA batches containing thousands of payments. Measured on a production-sized database: | metric | before | after | factor | |--------|-------:|------:|-------:| | `_get_expiry_date_per_mandate` (500 payments) | 564 ms | 111 ms | ~5x | | `_send_after_validation` notification (500 payments) | 92.9 s | 55.7 s | ~1.7x | | `_get_expiry_date_per_mandate` (1000 payments) | 890 ms | 178 ms | ~5x | | `_send_after_validation` notification (1000 payments) | timed out (>159 s) | 108.9 s | completed | OPW-6377340 Forward-Port-Of: odoo/enterprise#126429 Forward-Port-Of: odoo/enterprise#125439
Employees can now be associated with more than one company car, improving support for benefits and payroll scenarios where multiple vehicles are provided. This helps Belgian payroll and salary contract processes calculate and display company car benefits more accurately.
Original PR description
WIP to allow multiple company cars per employee
Archived tax returns now hide the actions that would validate, submit, or fetch e-invoices for them. This prevents users from accidentally continuing work on returns that have been closed or archived, reducing the risk of incorrect tax processing.
Original PR description
Hide validate and Submit button on tax returns when the return is archived, and hide the 'Fetch E-Invoice' button on the return check in case of GSTR-2B report when the return is archived. Previously, an archived return could still be validated and processed further. Since validation is the entry point for all subsequent actions on a return, blocking it at this stage prevents any further processing of archived returns. Related Pr: PR community - https://github.com/odoo/odoo/pull/270669 task-6303338
The Timesheet Assistant now supports keyboard navigation for reviewing and selecting suggested timesheet entries. This improves accessibility and helps users work faster without relying only on a mouse.
Original PR description
Implement full keyboard controls for managing timesheet suggestions to improve accessibility and user efficiency. This adds support for the following interactions: - ArrowUp / ArrowDown to navigate focus through rows - Space to select/deselect the focused item (and set the selection anchor) - Shift + Arrows to select continuous ranges of suggestions task: 6267620 Forward-Port-Of: odoo/enterprise#126143 Forward-Port-Of: odoo/enterprise#120437
Payroll warning messages now open directly in a detailed view when there is only one warning and no custom action is defined. This reduces extra clicks for users, while still showing a list when multiple warnings need review.
Original PR description
When the warning doesn't have a specific action implementation and it returns a single warning record, we display it in a form view instead of the list view. List view will be displayed only in multiple warning records. task-6425861
Appointment kanban cards now open the calendar view focused on today, making navigation more predictable. The separate upcoming meetings button now correctly opens the next scheduled meeting, while confirmation-related actions only load meetings that need confirmation.
Original PR description
Before, a click on an appointment kanban card lead to the gantt view of calendar.event, using the first next event as the initial_date of the gantt view. It was also the case when using the dedicated 'upcoming meetings' button on the card, which was pretty much a fake button. Now, use today as the default, next upcoming meeting when using 'upcoming meetings', using a new dedicated action, and only request meetings when using 'to confirm', as before. The tour is updated accordingly as well. Task-6344764
Payroll warnings can now automatically apply only to records for the relevant country when company information is available. This reduces irrelevant warnings across multi-country payroll setups and helps teams focus on the alerts that apply to their local rules.
Original PR description
* = l10n_{be, ch, hk, in, sa}_hr_payroll
With this commit, by default when a warning will be defined on a specific country, if this warning is defined with a warning_domain and if the model linked to this warning have company field a sub domain to restrict this warning to model's record defined in this country will be automatically added.
task-6425987Tax return cards have been redesigned to be narrower and less tall, making long lists easier to review. This helps users scan return statuses and actions more quickly, using a layout aligned with other Odoo card views.
Original PR description
Returns are worked through as a list, but the cards were too wide and tall to scan. Reviewed the design following payroll's narrower kanban cards design. task-6088472
The data cleaning merge details popup has been redesigned to make it easier to understand how duplicate records will be combined. Improved views, field display, hover behavior, and keyboard focus help users review merges more confidently before confirming them.
Original PR description
Before this PR, the merge details popup needed a redesign, now the different views showcase the merge better to the user. | Before | Before | After | |--------|--------|--------| | First section |…
Before this PR, the merge details popup needed a redesign, now the different views showcase the merge better to the user. | Before | Before | After | |--------|--------|--------| | First section | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 10 44" src="https://github.com/user-attachments/assets/81faaad4-f950-4031-bd1c-66b46c1e61c3" /> | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 07 59" src="https://github.com/user-attachments/assets/46895709-3575-4bae-864e-f33a96a7737b" /> | | Second section | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 10 47" src="https://github.com/user-attachments/assets/1fd3381c-d93c-4a2e-892b-134633279677" /> | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 08 05" src="https://github.com/user-attachments/assets/0400e9f4-00ee-4d8b-9d77-a1566b1242f5" /> | | Third section | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 10 52" src="https://github.com/user-attachments/assets/dce3590c-4f16-473a-abd7-611f781f70f3" /> | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 08 13" src="https://github.com/user-attachments/assets/a8315904-0067-4794-b48d-6b357445d1c7" /> | | Record hover | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 11 02" src="https://github.com/user-attachments/assets/1fa8fa2e-e9e0-45a6-a8c0-6dd4a8e6fa9b" /> | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 08 17" src="https://github.com/user-attachments/assets/78434801-f34e-4e8f-87d9-bc9841a1628a" /> | | Field display | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 10 52" src="https://github.com/user-attachments/assets/d410867c-3013-4b90-99a2-b26bbab22e86" /> | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 12 02" src="https://github.com/user-attachments/assets/38b1e359-02b5-4586-990e-f11805390ddd" /> | | Tab focus (accessibility) | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 10 44" src="https://github.com/user-attachments/assets/162b0a57-5138-45f7-b595-76337a5793dc" /> | <img width="1023" height="985" alt="Screenshot 2026-06-26 at 11 09 18" src="https://github.com/user-attachments/assets/3b79e21a-ab1c-47a8-874a-0f9f157938f3" /> | task-6196149
HR users can now confirm, reset, or mark multiple appraisals as done in one action. This reduces repetitive work and helps teams process appraisal workflows faster when managing many records.
Original PR description
Before this: HR users had to perform appraisal actions one by one, such as Confirm, Reset and Mark as Done. This was slow and repetitive when managing many appraisals. After this commit: Added bulk server actions to Confirm, Reset, and Mark as Done for multiple appraisals at once, making the appraisal process faster and easier for HR users. Task-6368348