Daily updates from Odoo
Friday, August 7, 2026
17 changes
1 change
Enhancements to existing features
Hong Kong payroll rental records now use an attachment button for payment proofs, making it easier to add and manage supporting documents. The rental similarity check was also refined to avoid misleading duplicate warnings, especially after data migrations or for the same employee.
Original PR description
As the system now starts to be used by real users, we noticed a few points of improvement that can easily be done in stable and will provide a better UX when interacting with the system. The payment…
As the system now starts to be used by real users, we noticed a few points of improvement that can easily be done in stable and will provide a better UX when interacting with the system. The payment proof as a field was a consequence of multiple iterations of the system; but it ended up only as a way to input the proof and nothing else. It is confusing, only allows one proof at a time, and is overall not nice to use. To improve that, we will remove the field and replace it with an 'Attach Payment Proof' button similar to the expense app, allowing for a better experience. The similar rental check was checking even if all the related fields were empty. On a database migrating from a previous version, this leads to ALL the rentals to be marked as similar, which isn't ideal. The same check was also comparing multiple rentals from the same employee as long as they are active. As rentals for an employee cannot overlap, it makes no sense to check this case and cause false positives. task-6448054 Forward-Port-Of: odoo/enterprise#126764
2 changes
Enhancements to existing features
The Hong Kong payroll rental workflow now uses an attachment button for payment proofs, making it easier to add and manage supporting documents. The similar-rental detection was also refined to avoid misleading matches after migrations and prevent false warnings for the same employee.
Original PR description
As the system now starts to be used by real users, we noticed a few points of improvement that can easily be done in stable and will provide a better UX when interacting with the system. The payment…
As the system now starts to be used by real users, we noticed a few points of improvement that can easily be done in stable and will provide a better UX when interacting with the system. The payment proof as a field was a consequence of multiple iterations of the system; but it ended up only as a way to input the proof and nothing else. It is confusing, only allows one proof at a time, and is overall not nice to use. To improve that, we will remove the field and replace it with an 'Attach Payment Proof' button similar to the expense app, allowing for a better experience. The similar rental check was checking even if all the related fields were empty. On a database migrating from a previous version, this leads to ALL the rentals to be marked as similar, which isn't ideal. The same check was also comparing multiple rentals from the same employee as long as they are active. As rentals for an employee cannot overlap, it makes no sense to check this case and cause false positives. task-6448054
Users can now use AI-powered document sorting without needing a Studio subscription. This makes the AI sorting workflow available to more document users and removes an unnecessary licensing barrier.
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
13 changes
Enhancements to existing features
Belgian payroll eco voucher calculations now use working days to determine employee entitlements. This improves payroll accuracy and helps align voucher amounts with actual work patterns and related compliance checks.
CRM lead cards no longer show the phone plus/minus control for quickly adding or removing call activities, reducing visual clutter for upcoming designs. Users now add call activities through a selection-based action in kanban or list views, also available for contacts, with clearer handling when records already have a call or lack a phone number.
Original PR description
*: test_mail_enterprise Before this commit, on CRM leads kanban cards, there was a phone and plus/minus icon button that allowed users to easily add/remove call activities due or overdue for today…
*: test_mail_enterprise Before this commit, on CRM leads kanban cards, there was a phone and plus/minus icon button that allowed users to easily add/remove call activities due or overdue for today for that lead. While this was nice, it encumbered the card and will not fit nicely in new designs anymore. Instead, this is replaced by an action button that appears when you select records, in kanban or lists. This is also added for simple contact records (all models using the `voip.queue.mixin` at the moment). Side-effects: - You don't have to possibility to delete calls from the queue easily anymore (you have to do it one-by-one). Functionally it might be better to have the opportunity to cancel and log the reason anyway. - If you try to add a call activity while there is already one, it does nothing for the related call. - If you try to add a call activity but there is no phone number, it will prevent you to add the activity on all selected calls (with a message explaining what record prevented the action). task-6377768
Users can now resend invitations to document members who were previously invited but have not signed up yet. This makes it easier to follow up with pending collaborators directly from the document sharing dialog, without affecting active members.
Original PR description
This commit allow users to re-invite document members who were previously invited but haven't logged in yet, from the document share dialog. The 're-send' option is only displayed for members who have not signed up yet. Task-6040696
This update prevents duplicate default prompt setups for the same AI agent context, reducing inconsistent behavior and runtime errors. Existing duplicates are cleaned up during upgrade so the new rule can be applied safely.
Original PR description
## Summary This PR adds a unique index on `ai.composer` to prevent duplicate **Default Prompts** for the same **AI Agent**, **interface key**, and **focused model**. Previously, multiple records…
## Summary This PR adds a unique index on `ai.composer` to prevent duplicate **Default Prompts** for the same **AI Agent**, **interface key**, and **focused model**. Previously, multiple records could exist for the same `(ai_agent_id, interface_key, focused_model_id)` combination, leading to inconsistent data and runtime issues such as singleton errors when the AI composer expected a single matching record. The unique index uses PostgreSQL's `NULLS NOT DISTINCT`, ensuring that `NULL` values in `focused_model_id` are treated as equal and duplicate generic Default Prompts are also prevented. ## Changes - Add a unique index on the `(ai_agent_id, interface_key, focused_model_id)` triplet. - Use `NULLS NOT DISTINCT` to enforce uniqueness even when `focused_model_id` is `NULL`. - Add test cases to verify the unique constraint behavior. ## Upgrade Duplicate `ai.composer` records are removed before applying the unique index. Upgrade PR: https://github.com/odoo/upgrade/pull/10819 --- opw-6323764 Forward-Port-Of: odoo/enterprise#121609
Payment files now include the building number in ISO20022 address data, aligning SEPA credit transfer and direct debit exports with requirements that become mandatory in November 2026. This helps businesses remain compliant with upcoming banking standards and reduces the risk of payment file rejections later.
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#126734 Forward-Port-Of: odoo/enterprise#121674
Payroll accounting entries are now grouped more efficiently when many payslips are processed together. This reduces validation time for large payroll runs, helping accounting teams complete batch processing much faster without changing the resulting entries.
Original PR description
Description =========== When batch payroll journal items are enabled, all payslips for the same journal and accounting period contribute to one accounting move. For every salary line,…
Description
===========
When batch payroll journal items are enabled, all payslips for the same journal and accounting period contribute to one accounting move.
For every salary line, `_prepare_slip_lines()` searched the complete list of previously prepared move lines for both the debit and credit entries. It also created a new `line_ids + new_lines` list for every search. As the move grew, accounting validation time grew quadratically.
This commit keeps a shared index while preparing the move. It is keyed by the stable aggregation fields: line name, account, and analytic distribution.
Only lines in the matching bucket must then be checked for compatible debit or credit signs and tax tags.
Benchmark
=========
The blueprint creates 500 validated payslips and 10,000 payslip lines. All lines are accumulated into one accounting move.
On a fresh database with `hr_payroll_account` and `populate` installed, populate the data with:
```sh
./odoo-bin populate\
-d <database> \
-b hr_payroll_account.benchmark_payroll_account_move_creation \
--seed 42
-j 4
```
Run the benchmark with from the [gist](https://gist.github.com/pivi-odoo/3a5a21bb42f82d5ae10646d15986013b):
```sh
./odoo-bin shell \
-d <database> \
< benchmark_prepare_slip_lines.py
```
The benchmark measures `_get_account_move_vals()` with a cleared ORM cache before every sample.
| Payslips | Input lines | Move lines | Before | After | Speedup |
|---------:|------------:|-----------:|--------:|-------:|--------:|
| 20 | 415 | 398 | 0.634s | 0.093s | 6.8x |
| 50 | 1004 | 986 | 3.040s | 0.178s | 17.1x |
| 100 | 1992 | 1974 | 11.865s | 0.344s | 34.5x |
| 200 | 3942 | 3884 | - | 0.648s | - |
Reference
=========
task-6429789Belgian payroll reporting now excludes employees marked as not subject to withholding taxes from key fiscal reports. This helps ensure employees who are not taxed in Belgium are not incorrectly included in 281 and 274 tax reporting.
Original PR description
Purpose: Some employees should not have any withholding tax and some should not have any fiscal report neither as they are not taxed in belgium. - excluded employees with `no_withholding_taxes` checked from 281 and 274 reports. task-id: 6377289
The Time Off Gantt view popover now lets users edit leave records directly and split a leave into two parts. This makes scheduling adjustments faster and reduces the need to navigate away from the planning view.
Original PR description
- Make the leave record in the popover editable. - be able to split a leave in 2 task-6345738
The Belgian payroll exemption wizard and reports now consistently show the Start-up and Micro-enterprise sections only when the company is eligible. This helps prevent employers from generating irrelevant or invalid 274.60/274.61 report sections when their SME exemption status is missing or expired.
Original PR description
Make the form view, PDF, and XLSX reports consistent when reporting the Start-up (274.60) and Micro-enterprise (274.61) exemptions. Specifically: - Hide the "Start-up/M-E" tab in the wizard form view if the company's exemption SME status setting is not configured. - Do not generate the 274.60/61 tab/worksheet in the XLSX file if the employer is ineligible (i.e. status is empty or CBE has expired). - Do not generate the 274.60/61 page in the PDF printout if the employer is ineligible. task-6421989
Live chat and Discuss now have a cleaner interface with fewer distracting icons. Users can translate new messages more easily within a conversation, canned responses are ordered by recent usage, and conversations can be downloaded before a chat ends.
Original PR description
This commit aims to improve the UI of livechat and discuss by removing clouding icons. It improves the UX by having the option to translate all new messages when translating one message, this is a client side option meaning it would need to be done again after refresh and is isolated to the current channel. We also improve the sort of canned responses by using the last used canned function Odoo-wide (depends on other users as well) and being able to download conversations even when the livechat is not ended. https://github.com/odoo/odoo/pull/270509 Task-6272656
Certificates of Completion for Sign requests now show timestamps in the sender's timezone instead of always using UTC. This makes the certificate easier to understand for signers and reduces confusion for teams working across regions.
Original PR description
The Certificate of Completion always displayed timestamps in UTC, which confused signers in non-UTC regions. They are now shown in the request sender's timezone. task-6046266
Belgian payroll now warns users when company car details are updated after the DMFA declaration has been prepared. It also records the update date, helping payroll teams identify changes that may affect reporting accuracy and compliance.
Original PR description
Task: 6201452
Improves the Brazilian fiscal localization screens and labels so business users can configure tax and fiscal data with clearer wording and fewer duplicate options. It also improves product and contact fiscal code handling, archiving of NBS codes, and gives clearer validation messages for correction letters before they reach external tax services.
Original PR description
This contains a bunch of UX and data cleanups across the Brazilian fiscal localization: - Selection labels for activity sector, tax regime and SPED type now have human-readable text instead of the…
This contains a bunch of UX and data cleanups across the Brazilian fiscal localization: - Selection labels for activity sector, tax regime and SPED type now have human-readable text instead of the raw API codes, SPED type is prefixed with its official code, - NCM codes get a new is_service flag distinguishing goods (NCM) from services (LC116), with search filters, a "NCM / LC Codes" menu and a product code field filtered on the product type, - NBS codes can now be archived, - Clean up the settings: rename "Simplified Regime ICMS Rate" to "ICMS Simplified Credit Rate" with a Brazil-specific tooltip, drop the duplicate CBS/IBS Normal toggle (kept on the company contact) and align the CNAE field, - Show the operation type Technical Name on its form, - Reorder the contact Fiscal Information fields and rename the product "Transport Cost Type" to "Additional Cost Type", - Open the partner form when a single contact is missing Avatax fields, and the Brazil-specific list for several, - Validate the correction letter reason length in Odoo so a short reason no longer shows a raw XML schema error from Avalara, task-6327269
1 change
Enhancements to existing features
All signers can now choose whether to add a frame when adopting their signature, not only internal Odoo users. The signing dialog controls also have clearer borders, making the public signing experience easier to use and understand.
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