Daily updates from Odoo
Wednesday, July 29, 2026
21 changes · master
Enhancements to existing features
When users open the new-product form from barcode lookup, existing notifications are no longer cleared automatically. This keeps helpful messages visible because mobile notifications now appear at the bottom and no longer block the form.
Original PR description
…n click This reverts commit https://github.com/odoo/enterprise/pull/68352. That commit cleared all open toast notifications before opening the new-product form, because on mobile a notification used to take up a large chunk of the screen, forcing the user to wait out its autoclose timeout before they could interact with the form underneath. Notifications on mobile are now anchored to the bottom of the screen (M3 snackbar), so they no longer overlap the form and this workaround is no longer needed.
ZKTeco attendance punches are now processed one transaction at a time, so an issue with one punch no longer stops the whole batch. The update also adds scheduled processing and clearer status information, helping teams spot and resolve attendance import issues more easily.
This update refreshes icon usage in several Odoo Enterprise areas to align with the latest web interface standards. Users should see more consistent visual elements in affected screens, with minimal change to day-to-day workflows.
Belgian payroll reporting now supports the withholding tax exemption for worker training, allowing selected employees' eligible training months to be included in the 274.XX report. The calculation respects legal limits by applying R&D exemptions first and capping the training exemption at the remaining withholding tax.
Original PR description
Add the "Exemption from withholding tax for worker training" (nature 274.64) to the 274.XX report. The exemption is 11.75% of the taxable gross of the months during which the training took place for the manually selected employees. The cumulative exemption for an employee cannot exceed the total withholding tax for them, so the training exemption is floored to the withholding left after the R&D exemption (274.32/33/34, applied first). task-6326855
Belgian payroll screens and reference data were updated to make DMFA work location information clearer and more consistent. This helps payroll users identify and manage work location details more easily when preparing Belgian social security reporting.
Original PR description
[IMP] l10n_be: dmfa work location adjustments Renaming and view adjustments for dmfa work location task-6381334
SEPA direct debit payment pages now use the shared pending payment instruction flow. Customers see the beneficiary name and bank account from the selected journal on status and confirmation pages, helping them understand payment details more clearly.
Original PR description
Adapt SEPA with the generic pending payment instructions introduced in `payment_custom`. Display beneficiary name and bank account number from the selected journal on payment status and confirmation pages. task-4975272
Add a new notification in the bank reco widget when a user do a reconciliation with a partner different from the one on the st_line. The idea is to let the user chose if he wants to move the bank account from the st_line partner to the move he tries to reconcile. task-6303397 Forward-Port-Of: odoo/enterprise#125702 Forward-Port-Of: odoo/enterprise#120900
Original PR description
Add a new notification in the bank reco widget when a user do a reconciliation with a partner different from the one on the st_line. The idea is to let the user chose if he wants to move the bank account from the st_line partner to the move he tries to reconcile. task-6303397 Forward-Port-Of: odoo/enterprise#125702 Forward-Port-Of: odoo/enterprise#120900
Australian payroll now applies the required superannuation contribution cap in the qualifying earnings rule. This helps employers stay aligned with ATO regulations, including updated super guarantee calculations from 1 July 2026.
Original PR description
Added superannuation limit to the QE rule. Task-6221399 Forward-Port-Of: odoo/enterprise#119792
Belgian payroll users can now see which reporting areas are affected when changing a time type. The time type form now shows the related DRS nature and triggered types, helping users understand the consequences of configuration changes before making them.
Original PR description
In order to help the user which reports gets impacted in case of modifying a time type, DRS nature and triggered types have been added to the time type form view. Task: 6330987
Belgian payroll now excludes Flexi-job workers from the holiday pay tax provision because they receive holiday pay directly. If their employment declaration is accepted with warnings, only the affected wage portion is treated like regular work and included proportionally, improving payroll accuracy.
Original PR description
…ision Flexi-job workers get their holiday pay directly, so the tax provision should not apply to them. However, if a Dimona declaration for the period was "Accepted with Warnings", that portion of the wage is treated as a regular occupation and prorated into the provision. This commit splits the old employee/worker rules into a shared HOLIDAY_TAX_PROV_BASE (wage, prorated for Flexi-jobs) and HOLIDAY_TAX_PROV_EMP (applies the worker/employee rate on top). Task-6352428
Belgian payroll now shows a non-blocking warning when an employee's part-time schedule is below the legal 10% minimum of the company’s full-time reference hours. Student and Flexi-job categories are excluded, helping payroll users spot compliance risks without stopping the save process.
Original PR description
Purpose
Part-time contracts must be scheduled for a minimum of 10% of the reference Full-Time working duration selected for the company.
Specifications
Show a non-blocking popup message when saving an employee profile if:
- The scheduled working hours are shorter than 10% of the reference working hours.
- The employee's Dimona category is not Student ('stu') or Flexi-job ('flx').
The popup informs the user of the legal 10% minimum regulation and allows them to close it without blocking the save pipeline.
Task: 6317799Users can now create new records directly from Odoo map views, making maps work more like familiar list and kanban views. Businesses can keep the button enabled by default, disable it where record creation should be restricted, or manage its visibility through Studio customization.
Original PR description
This commit adds record creation support to the map view, bringing it in line with standard Odoo views (such as List and Kanban). The "New" button is enabled by default and can be suppressed programmatically using the `create` attribute in the view XML (e.g., `create="false"`), or toggled visually via Studio customizations. task-6377660
HR contract signing now shows all available signing templates, whether they require one signer or multiple signers. This makes it easier to use the right template and supports both simple and multi-person approval workflows.
Original PR description
Before this change, selecting a signer template with one signer prevented other signer templates from being displayed. After this change, all templates are listed, including those with one or multiple signers. The signature workflow has been verified to work correctly for both single-signer and multi-signer cases. Task-6186566
Payroll users can now open the full Time Off request form directly from a leave entry in the Gantt view. The new expand button makes it easier to review or update all request details without navigating away manually.
Original PR description
Before this commit, users could click on a leave entry in the Gantt view of the Payroll app, but they could not open its full form view. This commit adds an expand button (double arrow icon) that allows users to open the complete Time Off request form. Task-6360136
Customer payment reminder workflows have been redesigned to make both automatic and manual reminders easier to manage. Open Items, Partner Ledger, and Customer Statement reports were also improved to provide clearer, more reliable follow-up information for finance teams.
Original PR description
This commit introduces new features and simplifies the reminder workflow for both automatic and manual reminders. It also includes changes to the Open Items report, providing a more robust and user-friendly experience.
When users try to create an expense card before Stripe is connected, they are now directed to the settings page to complete the connection. This reduces confusion and helps users resolve the setup issue more quickly.
Original PR description
When a user tries to create a card but the configuration is not connected, redirect the user towards the settings to do the connection. task-6272805 Forward-Port-Of: odoo/enterprise#125113
This update makes the field selection experience in Studio behave consistently when debug mode is enabled. It helps advanced users see the same options and behavior when configuring relational fields as they already do in domain filters.
Original PR description
This commit evaluates the `isDebugMode` prop which is passed to ModelFieldSelector so that the component acts the same for Relational field selector as in Domain field selector. Task~6369639
This update standardizes how access tokens are retrieved and refreshed across supported social media channels. It helps ensure linked social accounts continue to work consistently when publishing or reading social content.
Original PR description
Purpose ======= Ensure the access tokens can be read, and unify the way we get them for all social medias. Update in SUDO the access token when linking an account. Task-6330626
This update refines the Time Off planning Gantt view as a follow-up to a previous improvement. It helps make leave planning information easier to display and manage for users working with employee absences.
Original PR description
for this pr: https://github.com/odoo/enterprise/pull/109537
Bank statement reconciliation has been optimized to avoid timeouts in large multi-company databases. This should make scheduled reconciliation jobs run much faster and more reliably, reducing delays in accounting operations.
Original PR description
The standard cron process reconciles batches of 100 bank statement lines at a time. In multi-company environments with large historical datasets, this query frequently timed out, exceeding the…
The standard cron process reconciles batches of 100 bank statement lines at a time. In multi-company environments with large historical datasets, this query frequently timed out, exceeding the 15-minute execution limit. Even when throttled to a batch size of 10 records, the query required approximately 18.8 seconds to execute. The performance degradation was driven by the following factors: 1. Suboptimal Lateral Filtering: The statement line batch array filter was placed inside the `LATERAL` block's `WHERE` clause. This prevented the query planner from optimizing the drive path effectively across iterations. 2. Inefficient Join Sequence and Filtering: The original join order scanned `account_move_line` before resolving the company hierarchy constraint. As a result, millions of rows across all companies were retrieved from the index, forcing repeated primary key lookups on `res_company` before ultimately discarding over 99.9% of the records via the late `parent_path` hierarchy filter. This commit addresses these issues by: 1. Moving the `st_line.id` filtering constraint out of the lateral subquery and into the outer main query block to guide the execution path properly. 2. Reordering the inner `LATERAL` subquery to resolve the company hierarchy (`res_company`) prior to joining `account_move_line`. This constraints the scan boundaries early in the pipeline. Performance Benchmarks (10 record batch): - Before Execution Time: ~18,818 ms - Before Shared Hit Blocks: 8,535,272 - After Execution Time: ~130 ms - After Shared Hit Blocks: 67,204 ms Before Plan: https://explain.dalibo.com/plan/h4739gh3519eaa43 After Plan: https://explain.dalibo.com/plan/5ebc5g8deff272gc Forward-Port-Of: odoo/enterprise#125686 Forward-Port-Of: odoo/enterprise#125250
Marketing automation synchronization is now prepared to focus on campaigns that are currently running, helping avoid unnecessary processing for inactive campaigns. The related enrollment tests were reorganized to make future improvements easier to maintain.
Original PR description
Add some filters on main API synchronization methods so that they are limited to running campaigns. Move enroll sepcific tests into a new test file to ease future updates. Prepares Task-6425785 [marketing_automation] Incremental sync