Daily updates from Odoo
Monday, August 10, 2026
41 changes
4 changes
Enhancements to existing features
Users can now sort documents with AI without needing a Studio subscription. This removes an access limitation, making AI-assisted document organization available to more customers.
Original PR description
Purpose ======= We changed our mind, and we should be able to sort documents with AI without having to pay for studio. Revert of bc15543b5ce563bdddb54198eaaf00a5c8d01e54 Task-6383816 Forward-Port-Of: odoo/enterprise#126796
Vendor bill product prediction by line label now respects the setting that enables or disables it. This prevents unwanted product suggestions for enterprise users who turned the feature off, while keeping the default prediction behavior for community users.
Original PR description
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read the PR guidelines at [www.odoo.com/submit-pr](http://www.odoo.com/submit-pr) Forward-Port-Of: odoo/enterprise#126529
Before this commit, the empty space between audio recordings in the CallDebrief timeline had no DOM elements representing them because the media elements are styled with absolute positioning In this commit we generate silence gap elements to enable designers to transition the timeline layout to a linear flexgrid. task-6321723
Original PR description
Before this commit, the empty space between audio recordings in the CallDebrief timeline had no DOM elements representing them because the media elements are styled with absolute positioning In this commit we generate silence gap elements to enable designers to transition the timeline layout to a linear flexgrid. task-6321723
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read
Original PR description
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#276041 Forward-Port-Of: odoo/odoo#267138
6 changes
Enhancements to existing features
Timesheet users can now select multiple assistant suggestions more smoothly by holding the mouse button and hovering across items. Ctrl-click no longer opens an unintended new Odoo page, reducing accidental navigation and making batch actions faster.
Original PR description
Currently when the user uses ctrl + click on a suggestion, a new odoo page is opened. This is an undesirable side effect and it is removed in this commit. Also, users have to manually click on each suggestion when they want to remove them in batch, or create one timesheet for a bunch of suggestion. This commit lets user hover over suggestion with the mouse button pressed to select them. task-6385047 Forward-Port-Of: odoo/enterprise#124642
Payroll no longer automatically changes a company car’s current driver when benefits are updated. Employees who choose or receive a company car are set as the future driver instead, preventing cars already reserved for someone from being offered again and reducing unnecessary follow-up tasks.
Original PR description
. Remove the auto-assignment of the Driver based on the payroll benefits. . If an employee signs a contract and selects the car or the car gets added to the employee's benefits, he should become the car's future driver. . Don't offer in the salary configurator cars for which the future driver is filled. . Don't generate a task every time the payroll officer assigns a new driver to the car . Add the corresponding tests task-6425360
Don't generate a task every time the payroll officer assigns a new driver to the car. task-6425360
Original PR description
Don't generate a task every time the payroll officer assigns a new driver to the car. task-6425360
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read
Original PR description
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#276041 Forward-Port-Of: odoo/odoo#267138
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
The checks the Tax Agency performs are always based on the latest version of their XSD (no API versioning), but the XSD URI changes with each new version of the checks. Since it's not functionally used, it's not so important to keep it always updated and yet now: - we now update the export templates to have the latest `schemalocation` URI for once. - we start ignoring namespaces in l10n_it_* XML tests - we start ignoring the root FatturaElettronica tag's namespace attributes so there
Original PR description
The checks the Tax Agency performs are always based on the latest version of their XSD (no API versioning), but the XSD URI changes with each new version of the checks. Since it's not functionally used, it's not so important to keep it always updated and yet now: - we now update the export templates to have the latest `schemalocation` URI for once. - we start ignoring namespaces in l10n_it_* XML tests - we start ignoring the root FatturaElettronica tag's namespace attributes so there won't be a problem in case we change the `schemalocation` again. Forward-Port-Of: odoo/odoo#281233 Forward-Port-Of: odoo/odoo#275345
6 changes
Enhancements to existing features
Spreadsheet date selections now insert a real date value instead of a numeric representation. This makes entered dates clearer and more reliable for users working with spreadsheets.
Original PR description
Task: 6353692
Belgian payroll now includes the upcoming fiscal employment bonus rate changes for low-wage workers from August 2026 and the general rate change from 2028. This helps payroll calculations stay aligned with planned Belgian tax rules and reduces manual adjustments for employers.
Original PR description
Starting from August 2026: - The increased fiscal rate for low-wage workers (Volet B) rises from 52.54% to 63% (and to 72% in 2028). - The general fiscal rate (Volet A) rises from 33.14% to 35% starting in 2028. This adds new rule parameters for the fiscal rates and updates computation logic to apply these rates Task-6438319 Forward-Port-Of: odoo/enterprise#126713
All signers can now choose whether to add a frame when adopting their signature, not only internal Odoo users. The signing dialog also has clearer borders around key controls, making the public signing experience easier to understand and use.
Original PR description
Version: 19.0 Before this PR: The 'Frame' checkbox in the 'Adopt Your Signature' dialog was only shown to internal Odoo users (users with the `base.group_user` group).Also, on the public signing page, the Full Name input, the Frame checkbox and the Auto/Draw/Load buttons had no visible border After this PR: The 'Frame' checkbox is now rendered for every signer in the 'Adopt Your Signature' dialog. The Full Name input, Frame checkbox and Auto/Draw/Load buttons now have a visible border. Taskid-4610728 Forward-Port-Of: odoo/enterprise#126789
The checks the Tax Agency performs are always based on the latest version of their XSD (no API versioning), but the XSD URI changes with each new version of the checks. Since it's not functionally used, it's not so important to keep it always updated and yet now: - we now update the export templates to have the latest `schemalocation` URI for once. - we start ignoring namespaces in l10n_it_* XML tests - we start ignoring the root FatturaElettronica tag's namespace attributes so there
Original PR description
The checks the Tax Agency performs are always based on the latest version of their XSD (no API versioning), but the XSD URI changes with each new version of the checks. Since it's not functionally used, it's not so important to keep it always updated and yet now: - we now update the export templates to have the latest `schemalocation` URI for once. - we start ignoring namespaces in l10n_it_* XML tests - we start ignoring the root FatturaElettronica tag's namespace attributes so there won't be a problem in case we change the `schemalocation` again. Forward-Port-Of: odoo/odoo#280795 Forward-Port-Of: odoo/odoo#275345
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read
Original PR description
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#276041 Forward-Port-Of: odoo/odoo#267138
…h lookup _search_phone_mobile_search previously searched only raw number fields returned by _phone_get_number_fields (e.g. mobile, phone). E164-normalized phone_sanitized was ignored, so searching by a sanitized value could miss records that had no match on the raw fields. This commit: - Extracts _phone_get_searchable_fields() so that both init() and _search_phone_mobile_search build the same searchable field list, appending phone_sanitized alongside mobile/phone when available. - Add
Original PR description
…h lookup _search_phone_mobile_search previously searched only raw number fields returned by _phone_get_number_fields (e.g. mobile, phone). E164-normalized phone_sanitized was ignored, so searching by a sanitized value could miss records that had no match on the raw fields. This commit: - Extracts _phone_get_searchable_fields() so that both init() and _search_phone_mobile_search build the same searchable field list, appending phone_sanitized alongside mobile/phone when available. - Adds expression indexes for phone_sanitized in init() so the REGEXP_REPLACE-based queries hit indexes instead of scanning tables. - Guards init() with self._auto to prevent index creation on AbstractModel subclasses that lack a physical table. Task-6395518 ENTPR: odoo/enterprise#124797 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#281338 Forward-Port-Of: odoo/odoo#278018
4 changes
Enhancements to existing features
All signers can now choose whether to add a frame when adopting their signature, not just internal Odoo users. The public signing dialog also has clearer borders around key fields and buttons, making it easier for customers and external recipients to complete documents confidently.
Original PR description
Version: 19.0 Before this PR: The 'Frame' checkbox in the 'Adopt Your Signature' dialog was only shown to internal Odoo users (users with the `base.group_user` group).Also, on the public signing page, the Full Name input, the Frame checkbox and the Auto/Draw/Load buttons had no visible border After this PR: The 'Frame' checkbox is now rendered for every signer in the 'Adopt Your Signature' dialog. The Full Name input, Frame checkbox and Auto/Draw/Load buttons now have a visible border. Taskid-4610728 Forward-Port-Of: odoo/enterprise#126789
Belgian payroll now includes the upcoming fiscal employment bonus rate changes for low-wage workers from August 2026 and the general rate increase planned for 2028. This helps payroll calculations stay aligned with future Belgian tax rules without manual rate adjustments.
Original PR description
Starting from August 2026: - The increased fiscal rate for low-wage workers (Volet B) rises from 52.54% to 63% (and to 72% in 2028). - The general fiscal rate (Volet A) rises from 33.14% to 35% starting in 2028. This adds new rule parameters for the fiscal rates and updates computation logic to apply these rates Task-6438319 Forward-Port-Of: odoo/enterprise#126713
…h lookup _search_phone_mobile_search previously searched only raw number fields returned by _phone_get_number_fields (e.g. mobile, phone). E164-normalized phone_sanitized was ignored, so searching by a sanitized value could miss records that had no match on the raw fields. This commit: - Extracts _phone_get_searchable_fields() so that both init() and _search_phone_mobile_search build the same searchable field list, appending phone_sanitized alongside mobile/phone when available. - Add
Original PR description
…h lookup _search_phone_mobile_search previously searched only raw number fields returned by _phone_get_number_fields (e.g. mobile, phone). E164-normalized phone_sanitized was ignored, so searching by a sanitized value could miss records that had no match on the raw fields. This commit: - Extracts _phone_get_searchable_fields() so that both init() and _search_phone_mobile_search build the same searchable field list, appending phone_sanitized alongside mobile/phone when available. - Adds expression indexes for phone_sanitized in init() so the REGEXP_REPLACE-based queries hit indexes instead of scanning tables. - Guards init() with self._auto to prevent index creation on AbstractModel subclasses that lack a physical table. Task-6395518 ENTPR: odoo/enterprise#124797 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#278018
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read
Original PR description
Context: There was an enterprise field `predict_bill_product` allowing users to toggle product prediction based on line label. Before this commit, product prediction by name was running without taking into account the value of this field, which could confuse users who had disabled the feature in settings. This commit makes product prediction by name depend on this field. For community users, the prediction will run by default. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#276041 Forward-Port-Of: odoo/odoo#267138
1 change
Enhancements to existing features
Belgian payroll calculations now include the upcoming fiscal employment bonus rate changes starting in August 2026 and 2028. This helps payroll teams apply the correct tax reductions for low-wage workers and general employment bonuses as Belgian rules change.
Original PR description
Starting from August 2026: - The increased fiscal rate for low-wage workers (Volet B) rises from 52.54% to 63% (and to 72% in 2028). - The general fiscal rate (Volet A) rises from 33.14% to 35% starting in 2028. This adds new rule parameters for the fiscal rates and updates computation logic to apply these rates Task-6438319 Forward-Port-Of: odoo/enterprise#126713
2 changes
Enhancements to existing features
Belgian payroll now includes upcoming fiscal employment bonus rate changes from August 2026 and 2028. This helps ensure payslip calculations stay aligned with legal changes for low-wage workers and general employment bonus rates.
Original PR description
Starting from August 2026: - The increased fiscal rate for low-wage workers (Volet B) rises from 52.54% to 63% (and to 72% in 2028). - The general fiscal rate (Volet A) rises from 33.14% to 35% starting in 2028. This adds new rule parameters for the fiscal rates and updates computation logic to apply these rates Task-6438319 Forward-Port-Of: odoo/enterprise#126713
Before this commit, when importing and invoice/bill, we predicted the invoice line account based on previous invoices/bills. If the predicted account had default tax, it was ignored during tax matching. With this commit, first checks whether the predicted account has a default tax. If it finds one that matches the tax percentage from the imported XML, that tax is applied. Otherwise, or if the account has no default tax, the existing tax matching logic is used. task-6345661 Forward-Po
Original PR description
Before this commit, when importing and invoice/bill, we predicted the invoice line account based on previous invoices/bills. If the predicted account had default tax, it was ignored during tax matching. With this commit, first checks whether the predicted account has a default tax. If it finds one that matches the tax percentage from the imported XML, that tax is applied. Otherwise, or if the account has no default tax, the existing tax matching logic is used. task-6345661 Forward-Port-Of: odoo/odoo#279940
13 changes
Enhancements to existing features
Shared document links now keep the user's current context, including the active spreadsheet sheet, even when redirects occur. This helps recipients land directly on the intended sheet instead of needing to navigate there manually.
Original PR description
## Description of the issue/feature this PR addresses: Current behavior before PR: - Fragment parameters in document URLs (such as the active sheet) were lost during redirects, causing the client to lose its current state. Changes introduced: - Redirects now preserve fragment parameters generically, so URL state is maintained without needing feature-specific controller logic. - Shareable document links now include the current `sheet_id` as a URL parameter. Desired behavior after PR is merged: - When a shared document link is opened, the correct sheet is restored automatically, preserving the user’s context. Task: [4760176](https://www.odoo.com/odoo/project/2328/tasks/4760176)
Spreadsheet dashboard definitions were updated so key values and baselines use the latest formula format. This keeps dashboards working consistently across accounting, CRM, helpdesk, payroll, recruitment, marketing, manufacturing, purchasing, rentals, and documents reporting.
Original PR description
…formula syntax "keyValue" and "baseline" are now formulas and need an "=" symbol Task: 6343843
Document sorting with AI is now available without requiring a Studio subscription. This makes the AI sorting capability easier to access for document workflows and removes an unnecessary paid dependency.
Original PR description
Purpose ======= We changed our mind, and we should be able to sort documents with AI without having to pay for studio. Revert of bc15543b5ce563bdddb54198eaaf00a5c8d01e54 Task-6383816 Forward-Port-Of: odoo/enterprise#126796
Website users can now use the ALT+H keyboard shortcut on frontend pages to jump directly to the backend homepage. This makes navigation faster for users who move between the public website and administrative areas.
Original PR description
This PR adds an "ALT+H" shortcut on the frontend pages to jump straight to the backend homepage. task-5347435
US payroll calculations now use the date employees are paid, rather than the pay period end date, for year-to-date totals and tax reporting. This helps ensure year-end payslips paid in January are reported in the correct tax year, improving W-2 accuracy.
Original PR description
*: l10n_us_ Purpose: For the US official tax reporting (e.g. W-2), the totals are computed based on the date when the payslip was paid out to the employees, not the pay period in which the wages were earned. It is necessary because a very likely occurrence of a December payslip being paid out in January of the following year must count towards the W-2 of the following year. Current Behavior: The US salary rules and related year-to-date calculations are computed based on the closing date of the pay period. Expected Behavior: The US salary rules and related year-to-date calculations are computed based on the paid_date of the payslip. task-5450399
The employee list shown when creating a Pay Run is now less cluttered because the Termination column is hidden by default. Users can still access it from the Options menu when needed, keeping important payroll details available without crowding the main view.
Original PR description
Before, when creating a Pay Run, the Termination column was always visible. Since it is not frequently used, we moved it to the Options menu to reduce clutter. Task-6449701
Existing spreadsheet dashboards across several business apps have been refreshed to use the newer carousel data view experience. This makes dashboard navigation and presentation more modern while keeping the underlying dashboard content unchanged.
Original PR description
This task aims to update existing dashboards to use new carousel data views. Task: 6412458
Belgian payroll users can now see the replacement amount directly in the worked days section of a payslip. This makes absence valuations clearer and reduces the need to rely on generated reports to understand how amounts were calculated.
Original PR description
Period valuations for absences were only computed when generating reports, making it unclear for users how amounts were determined. This adds a "Replacement Amount" column to the worked days tab of the payslip to display the period valuation. Task-6377538
Australian payroll pay runs now show superannuation contributions and tax withholding directly in the payslip list, along with totals at the top of the pay run. This helps payroll teams review key employer contribution and withholding amounts faster without opening individual payslips.
Original PR description
super contribution column (SUPER + SUPER.CONTRIBUTION lines) is shown in the payrun's view
. in the list view of payslips
tax withholding column is shown in the payrun's view
. in the list view of payslips
Total of super contributions and tax withholding is shown in the top of the payrun view
task-6423860Odoo now creates tracking log messages in batches when many records are updated at once, instead of processing each record separately. This improves performance for large updates while preserving attachments and tracking details for each document.
Original PR description
When tracked fields change on many records without a subtype change, each record's tracking message was logged individually through `_message_log`, resulting in one `_message_create` call per record. Grouping the logs by author and going through `_message_log_batch` creates all the messages of a batch in a single `_message_create` call. To allow this, `_message_log_batch` now takes `attachment_ids` and `tracking_values` as dicts keyed by record id instead of flat values, lifting the previous limitation that batch logs could not carry attachments or tracking values for more than one document. task-6354178
When logging a VoIP call, Odoo now automatically suggests the business record the user already has open, reducing manual selection and helping calls get linked to the right customer, ticket, project, or document. The update also prevents access errors for non-HR users when call logging touches HR-related options.
Original PR description
When log a call, if the user has a opened form of a record, we will try select this record in the log call wizard. Task-[6204862](https://www.odoo.com/odoo/5778/tasks/6204862)
Belgian payroll users can now correct previously submitted 281.10 and 281.45 forms using the Belcotax reference number. The system also warns teams when payroll changes make submitted forms inconsistent, helping them identify and handle corrections on time.
Original PR description
Task: 5470512
Belgian payroll dashboards now warn when an employee has Dimona declarations that are not yet covered by a payslip, even though a pay run exists without that employee. This helps payroll teams spot missing payslips sooner and reduce compliance or processing oversights.
Original PR description
This commit adds a dashboard warning for employees that have dimonas not covered by any payslip yet a payrun exists in which they are not included. task- 6201337
2 changes
Enhancements to existing features
Budget report loading has been optimized by changing how budget lines are matched to related records, avoiding very slow comparisons on larger datasets. This makes budget reporting usable again for customers with many analytic lines and purchase order lines, with benchmarked load time dropping from nearly a minute to about a second in the tested case.
Original PR description
**Description:** While loading the budget report, the bad queries are created by ```def _get_aal_query()``` and ```def _get_pol_query()``` function, makes the budget report unusable. **Root cause:**…
**Description:**
While loading the budget report, the bad queries are created by
```def _get_aal_query()``` and ```def _get_pol_query()``` function, makes
the budget report unusable.
**Root cause:**
Instead of doing a hash join while searching the record,
the OR statement in the Left Join in the condition
```(%(bl)s IS NULL OR %(a)s = %(bl)s)```
creates a nested for loop that compares everything single aal to bl,
this causes a significant performance issue as the number of the
number of check will be the the number aal * bl,
if a database has a 70k aal and 20k bl, both numbers are not large
but it will cause a 70k * 20k search which is more than a billion.
**Fix**:
There are some refactors made in this PR.
_First_, separate out the Q1.
In order to find the aal that has no bl connects to it.
Doing a search to find the aals that have bl and then subtract them from all aals.
_Second_, Instead of doing a nested loop for by using
```(%(bl)s IS NULL OR %(a)s = %(bl)s)```,
originally we will have do something like
```
JOIN budget_line bl
ON (bl.x_plan2_id IS NULL OR aal.x_plan2_id = bl.x_plan2_id)
AND (bl.x_plan3_id IS NULL OR aal.x_plan3_id = bl.x_plan3_id)
AND (bl.x_plan4_id IS NULL OR aal.x_plan4_id = bl.x_plan4_id)
```
Assuming each bl has three plans ```x_plan2_id```, ```x_plan3_id```, ```x_plan4_id```
Grouping the bl base on whether a specific plan is set, (i.e. shapes)
we can skip the ```IS NULL OR``` because we already know which plan
is null and do the hash join directly.
For example, the shapes will be a dictionary with a key of a tuple of booleans
based on whether a plan is set or not and the value is a list of bl_id.
```
{
(True, False, False): [1, 2],
(False, True, True): [3, 4],
(False, False, False): [5],
}
```
we can end up doing something like
```
JOIN budget_line bl
ON bl.id = ANY(ARRAY[3,4])
AND aal.x_plan3_id = bl.x_plan3_id AND aal.x_plan4_id = bl.x_plan4_id
```
which is way more faster.
---
The benchmark is made locally from this client's database which contains
69k aal, 23k bl, 6829 pol and 3 plans for aal and bl.
|Record count |Time before|Time after|
|--------------------------------------------------|-----------------|---------------|
|69k aal, 23k bl, 6829 pol, 3 plans |70.04s |4.6s |
Dalibo:
Before:
Month-over-month grand total by company:
https://explain.dalibo.com/plan/8h3d4e89aaf9f3d4
Overall grand total by company:
https://explain.dalibo.com/plan/445g1f9caf4923e2
Month-over-month grand total by plan:
https://explain.dalibo.com/plan/53a138ca50b2a7c4
Overall grand total by plan:
https://explain.dalibo.com/plan/hdbe169ddc7g5785
After:
Month-over-month grand total by company:
https://explain.dalibo.com/plan/hcc86c801e6872bf
Overall grand total by company:
https://explain.dalibo.com/plan/69b2421a3581f98h
Month-over-month grand total by plan:
https://explain.dalibo.com/plan/a88f398bbbch3148
Overall grand total by plan:
https://explain.dalibo.com/plan/1gg749ae7ab1553c
opw-6345552
Forward-Port-Of: odoo/enterprise#127297
Forward-Port-Of: odoo/enterprise#124161Belgian payroll now includes the upcoming fiscal employment bonus rate changes starting in August 2026 and 2028. This helps ensure payslip calculations stay aligned with new rules for low-wage workers and the general fiscal rate.
Original PR description
Starting from August 2026: - The increased fiscal rate for low-wage workers (Volet B) rises from 52.54% to 63% (and to 72% in 2028). - The general fiscal rate (Volet A) rises from 33.14% to 35% starting in 2028. This adds new rule parameters for the fiscal rates and updates computation logic to apply these rates Task-6438319 Forward-Port-Of: odoo/enterprise#126713
1 change
Enhancements to existing features
Belgian payroll now includes the upcoming fiscal employment bonus rate changes for low-wage workers from August 2026 and the general rate increase from 2028. This helps payroll calculations stay aligned with future Belgian tax rules and reduces manual compliance updates.
Original PR description
Starting from August 2026: - The increased fiscal rate for low-wage workers (Volet B) rises from 52.54% to 63% (and to 72% in 2028). - The general fiscal rate (Volet A) rises from 33.14% to 35% starting in 2028. This adds new rule parameters for the fiscal rates and updates computation logic to apply these rates Task-6438319 Forward-Port-Of: odoo/enterprise#126713
2 changes
Enhancements to existing features
The point of sale preparation display now retrieves pending orders much faster, especially when many orders are shown. This reduces waiting time for staff and helps busy locations keep their kitchen or preparation screens responsive.
Original PR description
Improve the execution time of _get_stageless_orders_in_display by replacing the OR condition with IN(subquery) by using UNION ALL to improve query performance. Benchmarks: | display orders count | Time Before | Time After | |-------------------------------|---------------------|------------------| | 1k | 84 s | 0.416 s | | 500 | 37.6 s | 0.150 s | | 250 | 19.4 s | 0.110 s | | 100 | 8 s | 0.068 s | opw-6420949
Belgian payroll now includes updated fiscal employment bonus rates scheduled from August 2026 and 2028. This helps payroll calculations stay aligned with upcoming legal changes for low-wage workers and general fiscal bonus treatment.
Original PR description
Starting from August 2026: - The increased fiscal rate for low-wage workers (Volet B) rises from 52.54% to 63% (and to 72% in 2028). - The general fiscal rate (Volet A) rises from 33.14% to 35% starting in 2028. This adds new rule parameters for the fiscal rates and updates computation logic to apply these rates Task-6438319