Daily updates from Odoo
Tuesday, March 10, 2026
14 changes
2 changes
Enhancements to existing features
This update enhances the time off search feature within Odoo, making it easier for users to find and filter time off requests. A new 'In Contract' filter has been added, and the search results are now grouped by employee, improving organization. The default grouping has also been adjusted to exclude refused time off requests in the overview search view.
Original PR description
Time Off states are grouped under `Status`. Added new filter `In Contract`. Added back groupby by Employee. Added default groupby exclude refused in Time Off < overview search view. task-5941368
This update enhances the generation of WPS files required for AE companies, focusing on compliance and ease of use for users. Key changes include stricter data validation, improved bank account linking, and the ability to export WPS reports in Excel format. This ensures accurate and reliable WPS file creation for payroll reporting.
Original PR description
This commit aims to make the generation of wps files for AE companies more compliant and intuitive for the user, by: - Updating string for l10n_ae_employer_reference field - Domaining the company's salary bank account to accounts that belong to the company - Enabling the export of xlsx wps report - Preventing negative values in EVP section of the wps file - Adding constrains to the employer code as per expected format - Changing the names of allowance inputs - Adding a new category for evp rules - Making sure clearing number is only 9 digits as per expected format task-5884696 Forward-Port-Of: odoo/enterprise#109404 Forward-Port-Of: odoo/enterprise#107218
1 change
Enhancements to existing features
This update streamlines how the base_geolocalize module retrieves API keys, enhancing the system's stability and organization. By separating this process, the change improves the overall architecture and reduces potential issues related to API key handling. This change is considered an internal improvement.
Original PR description
Move the api key retrieval to another method. Forward-Port-Of: odoo/odoo#252342 Forward-Port-Of: odoo/odoo#243496
1 change
Enhancements to existing features
This update simplifies the process of downloading attachments from account moves like invoices and vendor bills. Previously, users had to download each attachment individually. Now, all attachments are automatically bundled into a ZIP file, making it easier to manage and share important documents.
Original PR description
before: - In v17, account moves (invoices, vendor bills, etc.) did not provide any ZIP export. - Users wanting to download move attachments (e.g. for vendor bills) had to download each file individually. after: - Add an Action on account moves to export attachments as a ZIP archive. - The ZIP contains all attachments linked to the move (PDF, XML, and any other files present in the mail thread), not only the report PDF. - The action is available for all move types (customer invoices, vendor bills, journal entries, etc.) task-5232551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250269 Forward-Port-Of: odoo/odoo#241647
8 changes
Enhancements to existing features
This update introduces a new field to track whether an employee is retired. This change is necessary to accurately calculate tax exemptions for employees who remain active while meeting specific criteria. It also prepares the system for future flexi-job functionality.
Original PR description
Retired employees that are still working can qualify for tax exemptions. This commit adds a boolean field to check if the employee is retired. Will be used for tax reporting and when flexi jobs are introduced. Task: 5976320
This update addresses an issue where excessive Many-to-Many tags could create a cluttered user interface. The commit limits the displayed tags, enhancing the visual appeal and usability of forms. A default limit of 8 tags is now enforced, with the option to display all tags (0) for greater flexibility.
Original PR description
Currently we don't have a way to limit the number of m2m tags displayed, which can lead to ugly UI. This commit introduces such a limit, making it editable via studio. As for default values, we use 8 as a default number of m2m tags displayed (which is also the number of records we display in m2m dropdowns). Setting a value of 0 can be used to display all tags regardless of how many they are. Community PR: https://github.com/odoo/odoo/pull/251159 Documentation PR: odoo/documentation#16667 task#5799365
This update adjusts the timing of changes to marital status for withholding tax calculations. Switching from an isolated status (single, divorced, widow) now takes effect at the start of the next calendar year, while becoming isolated (e.g., adding a spouse) is immediate. This aligns with Belgian tax regulations.
Original PR description
For withholding taxes: ----------------------- Switching from an isolated status (single, divorced, widow) to a non isolated will take effect the start of the next calendar year. But the other way around (becoming isolated) takes effect immediately. Task-5449907
This update optimizes Odoo's reporting functionality, specifically addressing memory usage issues with large datasets and improving report stability. The team removed unused code and refactored report generation to enhance performance and reduce resource consumption.
Original PR description
Forward-Port-Of: odoo/enterprise#102808
This update simplifies our payroll structure for Belgium, aligning with new regulations regarding joint committees. It consolidates previous CP200 structures into a single 'Belgium' structure, ensuring compliance and streamlining payroll processing. Additionally, the update introduces key features for worker compensation, including unpaid time off, sick leave calculations, and adjusted ONSS base rates.
This update streamlines invoice reports for Ecuador by removing redundant information previously displayed in the standard header. The changes also adjust the report formatting to ensure proper spacing and avoid overlapping with required legal headers. This improves the clarity and compliance of the reports.
Original PR description
The standard report header contains info that the legally required headers already contain. We hide the standard headers by using the custom_header mechanism in l10n_latam_invoice_document. This also changes an `<h4>` to an `<h5>` to avoid it overflowing the standard header_spacing of the A4 report.paperformat. task-5949275
This update simplifies the approval process by replacing a complex 'approval_type' field with a straightforward boolean. The change clarifies required approvals and streamlines the flow for managers, making it easier to manage purchase requests. This enhancement improves efficiency and reduces potential confusion.
Original PR description
This commit aims to make some enhancement to the approval Category and Request Forms. Given that approval_type will either be 'purchase' or empty, it's better to replace it with a boolean field. The field "manager_approval" is now a Boolean with False being the old None and True being "Is required Approver", and the third option "Is Approver" is now dropped. odoo/upgrade#9373 Task - 5410747
This update adds quick access to key payroll reports directly within the pay run interface. HR and payroll teams can now easily verify work entries and payroll codes, detect anomalies, and improve data accuracy – ultimately reducing the time spent on pay run audits.
Original PR description
Purpose As an HR officer or payroll consultant, add quick access to pay run verification reports to efficiently identify and validate potential errors. Changes - Add Work Times report button to pay run kanban view - Add Payroll Journal report button to pay run kanban view Benefits - Verify work entry types and payroll codes used in the pay run - Detect anomalies by comparing values with previous periods - Provide quick access to detailed reports without additional navigation - Reduce time spent verifying pay run data for accuracy This enables users to perform comprehensive pay run audits directly from the pay run interface, improving data quality and compliance. Task: 5974389
1 change
Enhancements to existing features
This update adds a convenient ZIP export feature for account moves like invoices and vendor bills. Previously, users had to download attachments individually. Now, all related attachments – including PDFs, XML files, and mail thread documents – are bundled into a single ZIP file for easy download and sharing.
Original PR description
before: - In v17, account moves (invoices, vendor bills, etc.) did not provide any ZIP export. - Users wanting to download move attachments (e.g. for vendor bills) had to download each file individually. after: - Add an Action on account moves to export attachments as a ZIP archive. - The ZIP contains all attachments linked to the move (PDF, XML, and any other files present in the mail thread), not only the report PDF. - The action is available for all move types (customer invoices, vendor bills, journal entries, etc.) task-5232551 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#241647
1 change
Enhancements to existing features
This change optimizes the performance of generating In-Vietnam GST reports by streamlining the data selection process. Specifically, it removes a complex domain filter that caused performance bottlenecks when dealing with large datasets. This results in faster report generation times.
Original PR description
If account.move and account.move.line have big data then domain with create problme ORM create sub query like this ``` SELECT account_move.id FROM account_move WHERE (…
If account.move and account.move.line have big data then domain with create problme ORM create sub query like this
```
SELECT
account_move.id
FROM
account_move
WHERE
(
account_move.l10n_in_gst_return_period_id = 23
OR (
account_move.move_type IN ('in_invoice', 'in_refund')
AND account_move.invoice_date >= '2025-11-01'
AND account_move.invoice_date <= '2025-11-30'
AND account_move.company_id IN (1)
AND account_move.state = 'posted'
AND (
account_move.l10n_in_gst_treatment NOT IN ('composition', 'unregistered', 'consumer')
OR account_move.l10n_in_gst_treatment IS NULL
)
AND account_move.id IN (
SELECT
account_move_line.move_id
FROM
account_move_line
WHERE
EXISTS (
SELECT 1
FROM account_move_line_account_tax_rel AS account_move_line__tax_ids
WHERE account_move_line__tax_ids.account_move_line_id = account_move_line.id
)
)
)
)
ORDER BY
account_move.date DESC,
account_move.name DESC,
account_move.invoice_date DESC,
account_move.id DESC
```
See this EXPLAIN for big database
```
Gather Merge (cost=165759176482.82..2983665158687.50 rows=36 width=30)
Workers Planned: 2
-> Incremental Sort (cost=165759175482.80..2983665157683.32 rows=18 width=30)
Sort Key: account_move.date DESC, account_move.name DESC, account_move.invoice_date DESC, account_move.id DESC
Presorted Key: account_move.date
-> Parallel Index Scan Backward using account_move__date_index on account_move (cost=59.28..2983665157682.51 rows=18 width=30)
Filter: ((l10n_in_gst_return_period_id = 23) OR (((move_type)::text = ANY ('{in_invoice,in_refund}'::text[])) AND (invoice_date >= '2025-11-01'::date) AND (invoice_date <= '2025-11-30'::date) AND (company_id = 1) AND ((state)::text = 'posted'::text) AND (((l10n_in_gst_treatment)::text <> ALL ('{composition,unregistered,consumer}'::text[])) OR (l10n_in_gst_treatment IS NULL)) AND (SubPlan 1)))
SubPlan 1
-> Materialize (cost=58.84..1601427.18 rows=4994548 width=4)
-> Merge Semi Join (cost=58.84..1556944.44 rows=4994548 width=4)
Merge Cond: (account_move_line.id = account_move_line__tax_ids.account_move_line_id)
-> Index Scan using account_move_line_pkey on account_move_line (cost=0.44..1339780.32 rows=26611459 width=8)
-> Index Only Scan using account_move_line_account_tax_rel_pkey on account_move_line_account_tax_rel account_move_line__tax_ids (cost=0.43..88678.65 rows=4994548 width=4)
```
So removing this from domain and put it as condition it's faster