Tuesday, December 23, 2025
8 changes · 18.0
Resolved issues and error corrections
This update allows businesses operating in Mexico to customize the sequence used for generating GI CFDI invoices within their branch offices. Previously, the system always prioritized the root company's sequence, which is now configurable, ensuring accurate invoice numbering and compliance with Mexican tax regulations. This change streamlines invoice processing for Mexican businesses.
Original PR description
Add a way to set a custom prefix for GI sequences on the settings for MX. Get this sequence first on the branch before looking to the one on root company. opw-5096687 Forward-Port-Of: odoo/enterprise#100017
This update fixes a bug that caused Odoo to crash when sending invoices via Peppol with invoice lines lacking a product name. Now, the system validates the product name and displays a clear error message to the user, ensuring invoices can be sent successfully. This improves the reliability of the Peppol invoice process.
Original PR description
Before this commit: When sending an invoice via Peppol with an invoice line that has no product name, the system crashes with a TypeError instead of showing a error message. Steps to reproduce: 1. Go to Accounting 2. Navigate to Customers > Invoices 3. Create a new invoice 4. Add an invoice line without entering a product name 5. Click 'Send' 6. Select 'by Peppol (Demo)' 7. Click 'Send' -> TypeError: 'NoneType' object is not subscriptable After this commit: System validates that the product name exists before accessing its text content. Users see a clear, error message: `Each invoice line should have a product or a label.` task-5432061 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update significantly speeds up the generation of budget reports by optimizing how filters are applied. Previously, a slow process involved building a large table and filtering it afterward. Now, the filtering is done directly within the underlying queries, dramatically reducing processing time and improving report loading speed.
Original PR description
Previously, generating the budget.report table was necessary to trigger _compute_all for budget.line fields. This table was built using three separate queries with a UNION operator. Because of the…
Previously, generating the budget.report table was necessary to trigger _compute_all for budget.line fields. This table was built using three separate queries with a UNION operator. Because of the UNION, any filtering (like on specific budget_line_ids) happened after the full, unfiltered table was generated. This post-filtering caused slowness, especially in nested loop joins with large tables like account.analytic.line. This commit optimizes performance by pushing the filter condition (using specific budget_line_ids) directly down into the three underlying queries. This reduces the number of budget.line records processed, speeding up joins and overall computation. The benchmark below is done on a database that has **66396** `budget.line` records and **928567** `account.analytic.line` records. Opening a budget report for a specific year, only applied the filter with **40** `budget.line` records. | Scenario | Execution Time | | :--- | :--- | | **Before this Commit** | **60.00 seconds** | **After this Commit** | **1.84 seconds** opw-5150569
This update fixes an issue where the TPAR report incorrectly calculated gross paid amounts for certain vendors, leading to export failures. The change ensures all payment lines, including those in asset_cash accounts, are included in the report's calculations, resulting in accurate GST reporting.
Original PR description
Behavior before: Exporting the TPAR report could fail with an error indicating that the GST amount exceeded the gross paid for certain vendors. Some payment lines were excluded from the SQL query,…
Behavior before: Exporting the TPAR report could fail with an error indicating that the GST amount exceeded the gross paid for certain vendors. Some payment lines were excluded from the SQL query, leading to discrepancies in the report. Behavior after: The SQL query has been updated to include all relevant payment lines, including those in asset_cash accounts. This ensures that the gross paid is calculated correctly, allowing the TPAR report to be exported without errors. Root Cause: The previous query only considered asset_current and liability_current accounts, ignoring asset_cash accounts. This omission caused the gross paid amount to be understated relative to the total GST paid. Steps to Reproduce: 1. Create a vendor bill. 2. Navigate to the Bank Reconciliation page (Accounting → Dashboard → Bank Journal). 3. Create a bank statement line for the bill amount. 4. Validate the statement line with the corresponding invoice line. 5. Generate the TPAR report — the payment amount should now be correctly included. OPW: 5148697 Forward-Port-Of: odoo/enterprise#99874
This update fixes an issue in the Hungarian localization where e-invoices incorrectly used the invoice date to calculate currency exchange rates. Now, the system uses the delivery date, aligning with Hungarian tax regulations and ensuring accurate e-invoice generation. This resolves a discrepancy impacting invoice accuracy and compliance.
Original PR description
In the Hungarian localization, the currency exchange rate for invoices is based on the delivery date. Steps to reproduce: - With HU localization setup - Create an invoice Issue: Currently, when issuing the e-invoice, the system would compute the currency exchange rate using the invoice date. opw-5126816
This update significantly speeds up the process of searching for products within EDI invoices, particularly those related to PEPPOL transactions. By restructuring the database query, the system now utilizes indexes more effectively, dramatically reducing search times from minutes to seconds. This improvement is crucial for handling large volumes of invoices efficiently.
Original PR description
The \_retrieve \_product() function relies on a query with multiple domains OR'ed together. As the search will require a LEFT JOIN with the product_template table, the use of OR in the query prevents…
The \_retrieve \_product() function relies on a query with multiple domains OR'ed together. As the search will require a LEFT JOIN with the product_template table, the use of OR in the query prevents Postgres from utilizing indexes. This becomes a problem in databases with a large number of products since a seq scan would be very slow. This commit changes the way this is done by performing separate queries instead of a single query with multiple conditions within an OR statement. Although this might seem a performance degradation, it actually allows these separate queries to utilize indexes and run much faster compared to the original approach. It also simplifies the priority logic and allows for faster early exits compared to the original one. This function is mainly used with EDI crons (such as PEPPOL where this problem was noticed), which could require hundreds of product searches as it does a search per invoice line. Benchmarks: Importing a peppol document of 173 invoice lines. | Num products | Num invoice lines | Before | After | | ------------ | ----------------- | -------- | ------- | | 864873 | 173 | 868.18 s | 19.43 s | | 397005 | 173 | 468.91 s | 20.68 s | | 8064 | 173 | 125.08 s | 20.1 s | | 564 | 173 | 119.9 s | 20.21 s | opw-5245007 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#240557 Forward-Port-Of: odoo/odoo#238853
This update fixes an issue where changes to items in the self-order process weren't being accurately tracked. The update replaces an outdated tracking method with a new system that reliably captures line changes within the self-order interface. This ensures a more accurate and reliable user experience for self-ordering.
Original PR description
Before this commit, to check line changes the lastChangesSent was used, which doesn't exist anymore. This commit replaces its usage with uiState.lineChanges. opw-5407191 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the speed of Point of Sale operations by preventing unnecessary loading of product images during initial product loading. Previously, images were loaded and then converted to booleans, leading to performance issues. Now, the system efficiently retrieves only the size of binary fields, resulting in faster loading times.
Original PR description
Before this commit, when loading products in POS, images were loaded and then changed to boolean values. This was causing unnecessary data to be loaded from the database, impacting performance. This commit modifies the product loading methods to avoid loading images initially. Instead, by setting the 'bin_size' context key to True when loading products, images are not fetched from the database, and the size of binary fields is returned instead. opw-5392423 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr