Daily updates from Odoo
Friday, July 31, 2026
20 changes
4 changes
Enhancements to existing features
The Timesheet Assistant now lets users move through suggestions with the keyboard, select individual items, and select ranges using Shift plus arrow keys. This improves accessibility and makes reviewing and managing timesheet suggestions faster for users who prefer keyboard workflows.
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#125027 Forward-Port-Of: odoo/enterprise#120437
Previously, questions in the event template could not be reordered via drag-and-drop on the Questions page. Instead of adding the handle to the inline list embedded in the event.type form view, we add it to the dedicated event.question list view (event_question_view_list). This will allow the users to reorder from the event questions and the sequence will be synced everywhere those questions appear. Steps to reproduce: 1.Go to event, configurations, and event questions. 2.We can't drag an
Original PR description
Previously, questions in the event template could not be reordered via drag-and-drop on the Questions page. Instead of adding the handle to the inline list embedded in the event.type form view, we add it to the dedicated event.question list view (event_question_view_list). This will allow the users to reorder from the event questions and the sequence will be synced everywhere those questions appear. Steps to reproduce: 1.Go to event, configurations, and event questions. 2.We can't drag and drop questions Original PR (18.0): odoo/odoo#270576 opw-6260478 Forward-Port-Of: odoo/odoo#277071
Since IAP now gives us multiple additional_identifiers. We get the DUNS directly from IAP. No need to process it on client. Backport of f184d1643ad50274004c0667aebfe615832dcb33 Task-5367705
Original PR description
Since IAP now gives us multiple additional_identifiers. We get the DUNS directly from IAP. No need to process it on client. Backport of f184d1643ad50274004c0667aebfe615832dcb33 Task-5367705
- Display the color palette recommendation progressively, like an AI assistant response. - Remove the large palette preview and open the next screen as soon as a palette is selected. - Adapt the first six layout previews to the available screen height and keep generated themes at the same dimensions. - Remove template name pills from the catalog and product screens. | Before | After | | ------------- | ------------- | | <img width="1524" height="924" alt="image" src="https://gi
Original PR description
- Display the color palette recommendation progressively, like an AI assistant response. - Remove the large palette preview and open the next screen as soon as a palette is selected. - Adapt the first six layout previews to the available screen height and keep generated themes at the same dimensions. - Remove template name pills from the catalog and product screens. | Before | After | | ------------- | ------------- | | <img width="1524" height="924" alt="image" src="https://github.com/user-attachments/assets/4c054a4d-04c0-4dfe-aa96-8bf8a9f7ecdd" /> | <img width="1523" height="925" alt="image" src="https://github.com/user-attachments/assets/ebb5f594-1760-458b-a024-f1fcc6ecc03e" /> |
1 change
Enhancements to existing features
Previously, questions in the event template could not be reordered via drag-and-drop on the Questions page. Instead of adding the handle to the inline list embedded in the event.type form view, we add it to the dedicated event.question list view (event_question_view_list). This will allow the users to reorder from the event questions and the sequence will be synced everywhere those questions appear. Steps to reproduce: 1.Go to event, configurations, and event questions. 2.We can't drag an
Original PR description
Previously, questions in the event template could not be reordered via drag-and-drop on the Questions page. Instead of adding the handle to the inline list embedded in the event.type form view, we add it to the dedicated event.question list view (event_question_view_list). This will allow the users to reorder from the event questions and the sequence will be synced everywhere those questions appear. Steps to reproduce: 1.Go to event, configurations, and event questions. 2.We can't drag and drop questions Original PR (18.0): odoo/odoo#270576 opw-6260478 Forward-Port-Of: odoo/odoo#277071
3 changes
Enhancements to existing features
The bank reconciliation setup now handles long payment references much more efficiently when creating automatic reconciliation rules. This prevents memory errors and reduces delays for customers processing bank statement lines with lengthy transaction descriptions.
Original PR description
When setting an account to an account.bank.statement there is a step to automatically create a reconciliation rule/model if one does not exist already. To do so, we retrieve 5…
When setting an account to an account.bank.statement there is a step to automatically create a reconciliation rule/model if one does not exist already. To do so, we retrieve 5 account.bank.statement.lines and use them to define the reconciliation model config. A matching is done on the payment_ref of the account.bank.statement.lines by finding the longest common substring in the reference. ### Current Implementation The current algorithm does so by first generating all the possible substrings for all the payment_ref before doing the intersection between these sets and returning the max if `len(substring) >=10`. This is reasonable when the payment_ref follows either a SEPA communication national standard like the Belgian one or the Creditor Reference standard (ISO 11649). For transactions with large, unstructured communication with more than 100 chars, the method `_get_common_substrings` quickly overfill the memory, sometimes raising a MemoryErorr, and takes a significant amount of time. That's because the nested function `_generate_all_substrings` generates n*(n+1)/2 substrings, with n being the lenght of a payment_ref, called `label` in `generate_all_substrings`. ### Proposed Fix This commit introduces another algorithm to find the largest common substring. It starts by taking the two smallest labels to find their substrings intersection. We know that for an arbitrary collection of labels, the intersection of their substrings sets A ∩ B ∩...∩ Z is included in the intersection of any two substrings sets. The underlying assumption of the first step is that for an arbitrary collection of labels the intersection of the substrings sets of the two smallest labels will be the smallest intersection of any given pair of substrings sets. This won't hold true everytime and using a metric such as label similarity instead of shortest string might be better. But on average this should be good enough and it's easier to implement + it removes the need of preprocessing the labels to compute the similarity. The point of the new nested function `common_substrings` is to discard common substrings as we build them. Using the current `generate_all_substsrings` on either the smallest label or both smallest labels would still generate and store a lot of substrings, especially for large labels. By yielding the common substrings as we find them, the memory footprint is vastly reduced. Lastly, the next substring in the common_substrings iterable is only checked against the remaining labels if it's longer than the current match. This speeds up the whole process ### speedup In a customer database with some account.bank.statement.line with payment_ref > 500 chars, setting a specific account (code 4970) on transactions goes from MemoryError to < 1Mb memory consumption. Because of the memory consumption it was not possible to gather timing value on the current version. Testing the new algorithm in a shell and using as labels the 5 longest payment_ref in the customer database (831, 831, 1117, 1178, 1300 chars), averaging to 2000 chars once normalised, the average time to execute `_get_common_substrings` is 900 ms ± 10.3 ms. Forward-Port-Of: odoo/enterprise#118824
If a list item has a selection blocker, the user can be stuck and forced to move to the previous or next block instead of being able to continue to edit the list item. To get around this, this commit allows selection placeholders in list items. task-6394918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#278323
Original PR description
If a list item has a selection blocker, the user can be stuck and forced to move to the previous or next block instead of being able to continue to edit the list item. To get around this, this commit allows selection placeholders in list items. task-6394918 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#278323
Previously, questions in the event template could not be reordered via drag-and-drop on the Questions page. Instead of adding the handle to the inline list embedded in the event.type form view, we add it to the dedicated event.question list view (event_question_view_list). This will allow the users to reorder from the event questions and the sequence will be synced everywhere those questions appear. Steps to reproduce: 1.Go to event, configurations, and event questions. 2.We can't drag an
Original PR description
Previously, questions in the event template could not be reordered via drag-and-drop on the Questions page. Instead of adding the handle to the inline list embedded in the event.type form view, we add it to the dedicated event.question list view (event_question_view_list). This will allow the users to reorder from the event questions and the sequence will be synced everywhere those questions appear. Steps to reproduce: 1.Go to event, configurations, and event questions. 2.We can't drag and drop questions Original PR (18.0): odoo/odoo#270576 opw-6260478 Forward-Port-Of: odoo/odoo#277071
1 change
Enhancements to existing features
ISO 20022 payment files now include building number information in address details. This helps keep bank payment exports compliant with upcoming requirements that become mandatory in November 2026.
Original PR description
This commit adds the <BldgNb> node in the iso20022 XML files, as it will be mandatory starting November 2026. Linked: https://github.com/odoo/odoo/pull/271855 task-6317758 Forward-Port-Of: odoo/enterprise#121674
7 changes
Enhancements to existing features
Quality managers can now find existing Quality Spreadsheet Templates in the spreadsheet selector when templates are available. This makes it easier to insert list views into quality reporting templates and reuse them without extra workarounds.
Original PR description
Before this commit: - Quality Spreadsheet Templates were not available in the spreadsheet selector. - Quality managers could not insert list views into existing Quality Spreadsheet Templates. After this commit: - Quality Spreadsheet Templates are exposed in the spreadsheet selector when at least one template exists. - The session `can_insert_in_spreadsheet` flag is enabled for Quality managers in that case. Task: [6321126](https://www.odoo.com/odoo/project/2328/tasks/6321126)
The Documents app interface has been updated to make common actions easier to find and reduce visual clutter. This improves day-to-day document management by presenting a cleaner, more focused experience for users.
Original PR description
Task-6313958
The French localization reporting screens have been updated to work with the latest interface framework used by Odoo. This keeps fiscal declaration and reporting features maintainable and aligned with platform upgrades, with little expected change for end users.
Original PR description
Update the code of l10n_fr_{pdp,reports} to follow the new Owl 3.
task-6353237
Linked:https://github.com/odoo/odoo/pull/278004Online rental bookings now use a working-time calendar instead of simple unavailable-day rules. Customers see date-only selection plus available pickup and return times, reducing booking errors caused by inconsistent rental schedules.
Original PR description
Replace the unavailability days with a resource calendar. Dates are considered valid if the start and return dates are within the working intervals. For non hourly-period products, only the date is checked, while for the hourly-period products, the exact time matters. This prevents misconfiguration issue with a calendar not coherent with the pickup and return times encoded on products. The display of the datepicker is adapted: only display dates. 2 new time selectors are added with the available hours of the linked day. Upgrade PR: https://github.com/odoo/upgrade/pull/9880 task-5083109
Payroll managers can now configure a recurring monthly child bonus directly in an employee's benefits. The amount is automatically reflected in payslip calculations, shown separately on payslips, and included in the relevant net pay, accounting, and withholding tax bases while staying excluded from ONSS.
Original PR description
Before this commit, there was no dedicated way to configure a recurring additional child bonus. Payroll managers had to handle this amount outside the employee's salary package, and it was not automatically included in payslip calculations. After this commit, payroll managers can configure the monthly child bonus from the employee's benefits. Updating the amount triggers a payslip recomputation, and a dedicated salary rule displays the bonus separately on the payslip. The bonus is added to the employee's net-pay and accounting remuneration bases. It is also included in the withholding tax base, while remaining excluded from the ONSS base. Task-6392125
Belgian payroll now makes it easier to monitor voluntary overtime by grouping related entries and adding direct access from employee records. The update also enforces overtime hour limits with validation warnings, helping payroll teams stay compliant and avoid threshold overruns.
Original PR description
Add follow up support for voluntary overtime in Belgian payroll: - Add a salary rule category "Overtime", give it to the overtime time types (VOLOT150/VOLOT200/VOLOTNET and Overtime Belgium) + the voluntary overtime rules - Add a smart button `Overtime` on the employee form view to show all overtime leaves of the employee, grouped by year then by type - Add/adjust the voluntary overtime threshold hours and show a validation error when the employee exceeds the threshold. TaskID: 6048398
Payroll officers now receive warnings on the payroll dashboard when employee data or work schedules may not meet Belgian DMFA requirements. This helps teams correct issues earlier and reduce the risk of payroll reporting blocks later.
Original PR description
In order to aid the payroll officers with their daily tasks and ensure that work schedules and employees personal data are up to the DMFA standards and avoiding any blockings in the future, few warnings have been added to the payroll dashboard. Task: 6299170
4 changes
Enhancements to existing features
Payment XML files now include building number details in ISO20022 addresses. This prepares SEPA and ISO20022 payment exports for upcoming November 2026 requirements, reducing future compliance risk for companies using these payment formats.
Original PR description
This commit adds the <BldgNb> node in the iso20022 XML files, as it will be mandatory starting November 2026. Linked: https://github.com/odoo/odoo/pull/271855 task-6317758
SEPA direct debit batch validation has been optimized to handle large payment batches more efficiently. This reduces processing time for thousands of payments and helps avoid timeouts during validation and customer pre-notification.
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
Steps to reproduce: 1. Create a sales order. 2. Confirm or cancel the order. 3. Share the quotation link. 4. Open the quotation from an incognito window or the customer portal. Issue: - A 'Quotation Viewed by Customer' notification is sent even though the document is no longer an active quotation. Fix: - Only send the notification while the order is in quotation or quotation sent state. opw-6419364
Original PR description
Steps to reproduce: 1. Create a sales order. 2. Confirm or cancel the order. 3. Share the quotation link. 4. Open the quotation from an incognito window or the customer portal. Issue: - A 'Quotation Viewed by Customer' notification is sent even though the document is no longer an active quotation. Fix: - Only send the notification while the order is in quotation or quotation sent state. opw-6419364
No description available.