Thursday, April 2, 2026
13 changes · master
Enhancements to existing features
This update strengthens Odoo's dynamic analysis capabilities by providing more granular error handling and optimizing object validation. It improves security by centralizing object checks and enhances performance by leveraging reference-based validation for frequently used objects. This ensures safer execution of dynamic code within Odoo.
Original PR description
[x] add granularity for `UnsafeObjectError` [x] complete auto checked objects [x] add hook for bound object and C descriptors Fixes: [x] add "no-operation" iterators check [x] define module for custom functions [x] centralize object validation in `_SafeWhitelist` Task-6041164
This update simplifies how data is sent to client applications by introducing a more efficient method for converting data to JSON. Previously, versioning complexities caused performance issues and made updates difficult, now data is delivered more smoothly and reliably.
Original PR description
To feed data to the client, discuss uses the Store class, which eventually transforms collected data into a dict using `get_result`. The `@store_version` decorator then injects a version so the client can distinguish stale from new data. This approach has several drawbacks. Each method expecting a versioned result must be decorated, but the version is only correct once all changes are flushed and assigned a transaction id. Returning the raw dict makes overrides cumbersome, and bus notifications require complex logic to enqueue and send them only once the version is available. This commit solves these issues by implementing an `as_dict` method on Store. Both bus notifications and the HTTP stack use this method to convert objects into JSON. The version is now fetched once, at the very end, and the Store instance can be returned, making overrides easier and reducing boilerplate. part of task-5242369 https://github.com/odoo/enterprise/pull/112159
This update improves the RFQ list view by adding key information like receipt status and expected arrival dates. This eliminates the need for users to manually check purchase records, streamlining the procurement process and ensuring data consistency across purchase and purchase order views.
Original PR description
Adding `receipt status` and `expected arrival date` to the RFQ list view, allowing users to avoid opening records manually to check this data and ensure consistency with the Purchase Order list view. TaskID-6013968
This update allows maintenance stages to be assigned to specific teams, providing greater control and organization for maintenance workflows. Previously, all teams shared the same maintenance stages. Now, requests will automatically filter to only show stages authorized for the team assigned to the maintenance request, improving efficiency and accuracy.
Original PR description
Currently, maintenance stages are global and shared across all teams. This improvement allows stages to be restricted to one or more maintenance teams, or left empty to remain available to all teams.…
Currently, maintenance stages are global and shared across all teams. This
improvement allows stages to be restricted to one or more maintenance teams,
or left empty to remain available to all teams.
- Add 'maintenance_teams' M2M field to 'maintenance.stage' model.
- Update tree view to display maintenance teams using many2many_tags.
- Create a new form view for stages to allow team selection.
- Add domain to 'stage_id' on maintenance requests to filter by team.
- Update '_get_default_team_id' to infer the correct team when creating
requests from specific Kanban columns.
- Enhance '_compute_maintenance_team_id' to maintain consistency between
the request team and the equipment's assigned team.
- Add onchange on 'maintenance_team_id' to automatically reset the
stage to the first valid option when the team changes.
- Update '_read_group_stage_ids' to get only the stages that the
maintenance team can work on.
task-5104582
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 improves product labels by displaying the base unit price alongside the regular product price, ensuring accurate pricing information is printed. This change consolidates label formats and adapts to pricelist settings, enhancing clarity for customers and internal reporting. It also streamlines the process for generating labels.
Original PR description
### redo of #185040 (Part 2) ### Part 1: odoo/odoo#247010 Priced and unpriced product label formats were consolidated to avoid duplicate code. The option to print the price is now a separate option in the view. The pricelist field is hidden from the view if the price isn't set to be printed. Additionally, it is now possible to print the price on every product label format, as well as the base unit price, if enabled and set. NB: The branch is based on odoo/odoo#247010, to be merged thereafter. The duplicate commit will disappear from this PR after a rebase. TODO: ~~Migrate ZPL labels from `stock` to `product`.~~ TODO: ~~Use pricelists for base unit prices too, not just product prices.~~ Task ID: [4277792](https://www.odoo.com/odoo/my-tasks/4277792)
This update optimizes the website's attribute filters, ensuring that only relevant product options are displayed on the shop page. This change improves page loading speed and provides a smoother user experience for customers browsing products. It's a key enhancement to our website's performance.
Original PR description
Change the current behaviour of the Attributes filters by displaying only the values that are relevant on the loaded /shop page. task-4423954 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the Odoo website form builder by allowing users to insert 'Title', 'Text', and 'Separator' snippets between existing form fields. Previously, the '+ Field' button only added fields after the selected one, limiting design flexibility. This change simplifies the process of creating more complex and visually appealing forms.
Original PR description
Currently, the "+ Field" button only supports adding a field after the selected one, making it difficult to insert snippets in between. This commit extends the feature to also allow inserting "Title", "Text", and "Separator" snippets after a selected field. task-5436870
This update allows businesses to specify unique units of measure (UoMs) and packagings for individual product variants. Previously, UoMs were only configurable at the product template level. This change restores a previous functionality, providing greater control over how variants are tracked and sold, particularly for products with diverse packaging options.
Original PR description
This commit enables defining dedicated units of measure, or packagings per product variant. Since 18.1, it was only possible to set UoMs on the template level. However, before 18.1, it was possible to define different packagings on the variant level. This commit partially restores the old behavior, and users can select dedicated UoMs on the variant from the new field `extra_uom_ids`. Task-5152612
This update adds a warning system to alert users when DIMONA payroll declarations don't align with contract versions or have mismatched categories. This ensures accurate reporting for Belgian payroll, reducing potential errors and compliance issues. The change improves the reliability of payroll data.
Original PR description
add warning when DIMONA declarations don't cover the same date ranges as contract versions or when dimona category doesn't match between periods and versions. Task Id: 5951989
This update simplifies the payslip summary widget for pay officers by dynamically hiding worked day lines for certain pay structures (like bonuses). This change reduces confusion and streamlines the information presented, making it easier for pay officers to review payroll data.
Original PR description
In order to improve the experience of pay officers and prevent any confusion, some pay structures will not require the display of individual work day lines such as bonuses. Accordingly, the worked day widgets will be dynamic. Task: 6030842 Forward-Port-Of: odoo/enterprise#111470
This update streamlines the HR payroll reporting by removing outdated views and actions. A key change improves the default measure in the payslip line pivot, now showing 'total' instead of 'amount' for more accurate reporting.
Original PR description
This removes a few views and actions not used anymore. It also changes the default measure for the pivot view of payslip lines from amount to total which is way more relevant. Task: 6032743
This update adjusts Odoo's payroll processing to correctly handle company executives classified under Joint Committee 999 (JC999) in Belgium. It excludes these employees from standard Belgian payroll obligations, simplifying reporting and ensuring compliance with specific legal requirements. Key changes include filtering data for Dimona, social reports, and holiday allocations.
Original PR description
Company executives under Joint Committee 999 (JC999) are not classified as travailleurs under Belgian law, so standard Belgian payroll obligations do not apply to them. This PR introduces the…
Company executives under Joint Committee 999 (JC999) are not classified as travailleurs under Belgian law, so standard Belgian payroll obligations do not apply to them. This PR introduces the necessary exclusions across Dimona, holiday attests, termination flows, social reports, and paid holiday allocation. A new l10n_be_egov3_code computed field (related to l10n_be_joint_committee_id.egov3_code) is added on both hr.employee and hr.employee.departure to expose the JC code in views invisibility conditions. Dimona: No declaration should ever be sent for a JC999 employee. _compute_l10n_be_dimona_next_action short-circuits to False for JC999 versions, and switching a version to JC999 via write() automatically clears the worker code, dimona category, and next action. All Dimona-related UI elements are hidden for JC999: - "Check Dimona" header button - Dimona relation stat button - Dimona next action pill/widget - ONSS group (worker code + dimona category fields) - Dimona debug group End-of-contract: for JC999 on both the employee form and the departure wizard it is shown the standard view bypassing the Belgian-specific termination fee flows. DMFA, social reports, and paid holiday allocation: JC999 payslips and contracts are filtered out of the DMFA XML generation, the social balance sheet (contract list, payslip search, and end-of-period contract list), the social security certificate payslip query and the query in the paid leave allocation wizard.
This update optimizes the Web Studio interface by preventing certain widgets from being used in record set views (like lists). Using these widgets in these views causes significant performance slowdowns. This change improves overall Odoo performance and stability.
Original PR description
Certain widgets such as the form status bar widget are designed to be used on single records. While, it is technically possible to use these widgets on record set views such as the list view, this leads to massive performance issues even for basic selection fields. This commit adds a widget blacklist organised by view type. This allows to blacklist some widget types for some views which are still available in debug mode. task-5194320