Thursday, September 24, 2026
7 changes · master
Enhancements to existing features
Barcode rendering now supports SVG in addition to the existing PNG option. This lets barcodes be resized for very small or large labels without losing print quality, while keeping PNG as the default for existing uses.
Original PR description
**Description of the issue/feature this PR addresses:** Introduce a new `format` parameter which can be used to choose among 'png' (default) and 'svg' for the barcode rendering. SVGs have unlimited scaling capabilities, which is great when printing really small or really big barcodes in labels, etc; as there's absolutely no quality loss when resizing --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Demo user and employee profile pictures have been refreshed with newer illustrations and a more efficient image format, reducing the overall file size while improving image resolution. Employee photos are also better preserved when a related user's avatar changes, avoiding accidental overwrites.
Original PR description
*: base,crm_livechat,hr,im_livechat,mail,sale_timesheet, stock, website_event, website_hr_recruitment_livechat A very needed update of the photo avatars. | files | size -- | -- | -- removed | 57 (8 png, 49 jpg) | 623 KB added | 57 webp | 212 KB net | ±0 | −411 KB (−66.0 %) Increased images' width x height from 128x128 to 200x200 px Switch from .jpg/.png to .webp. New illustrations for user avatars. Changes made to `hr/models/res_users.py` mean an employee photo survives a change of the user's avatar. task-6538183 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#290046
Spanish Veri*Factu invoice issues that were previously hidden are now shown directly on the sales journal dashboard. This helps accounting teams find invoices that are invalid or rejected sooner, reducing the risk of unnoticed compliance problems.
Original PR description
Users had no easy way to spot sale invoices that are broken from a Veri*Factu standpoint. Invoices that fail local validation before anything is sent (e.g. more than one main tax on a line) generate…
Users had no easy way to spot sale invoices that are broken from a Veri*Factu standpoint. Invoices that fail local validation before anything is sent (e.g. more than one main tax on a line) generate a l10n_es_edi_verifactu.document that could never be generated or sent to the AEAT. These never showed up as broken anywhere and could sit unnoticed until someone opened the invoice's Veri*Factu tab. Add an 'invalid' state to l10n_es_edi_verifactu.document, set when a document ends up with errors because it could not be generated (local validation, XSD, chaining...), next to the existing 'rejected' state (document actually sent to and rejected by the AEAT). Keeping the two states distinct and on the document itself matters: 'rejected' keeps its documented meaning of "sent and rejected", and only a real AEAT rejection makes the next submission carry Subsanacion/RechazoPrevio. Add a "Veri*Factu Error(s)" entry to the sale journal's dashboard kanban card, with its own search filter, matching both 'rejected' and 'invalid' invoices, so they are visible from the accounting dashboard without having to open each one individually. task-6463206 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#289583
Accounting tax detail calculations have been simplified to run much faster on large datasets, especially for complex localization scenarios such as India. This improves reporting performance while preserving correct handling of special tax cases like Luxembourg Ecotrel taxes.
Original PR description
The tax details query was very complicated for basically the affect base amount cases and with the enduring perf problems in India we decided to simplify. Also, the only case where we know this is…
The tax details query was very complicated for basically the affect base amount cases and with the enduring perf problems in India we decided to simplify. Also, the only case where we know this is needed, is the one for Ecotrel taxes in LU. Those however, can be reported diffently: if you have 100€ + 2% + 21%, as we have the tax_i on the tax line of 2%, the 2% can also be reported as a regular invoice line (at least in SAF-T) with 21% tax. So, in the query, we basically add the 2% tax line as well as base line and the query automatically calculates what is needed. However, we need to match the tax_ids of the base line with the tax_ids of the tax line such that if you have 100€ + 2% + 21% and 100€ + 2% + 6%, the 2%s are correctly matched. Before, the query had a fallback in case the base and tax lines do not match. Here we just make sure that when the repartition line has no account, we check that the base line has the same account as the tax line. As in the query, we need to make sure that one base line per child tax only goes to one tax line. In terms of perf, checking on a 18 db for l10n_in where it was already rather slow with the same domain, we go from 1m32 with the old query to 14s with this new simplified one. This is on a real database with many amls for the period. (400k) Testing locally with 10M amls, the old query just does not pass, but the simplified still does in a little more than 200s. task-3941950 Enterprise PR - https://github.com/odoo/enterprise/pull/126867 Forward-Port-Of: odoo/odoo#289238
The General Ledger report now calculates opening balances separately from period activity so it can reuse stored snapshots. This should make the report faster to load and easier to use, especially for companies with large accounting histories.
Original PR description
Forward-Port-Of: odoo/enterprise#132788
Indian GSTR-1 return exports now use a more efficient data retrieval approach that reduces memory use and processing time for large reports. This helps businesses complete high-volume GST filings more reliably without hitting system limits.
Original PR description
Current Implementation: ======================= The current implementation of _get_l10n_in_gstr1_json relies on multiple iterations over ORM recordsets. Since the ORM loads multiple fields rather…
Current Implementation: ======================= The current implementation of _get_l10n_in_gstr1_json relies on multiple iterations over ORM recordsets. Since the ORM loads multiple fields rather than only the required fields, memory consumption grows significantly for large datasets (around 700 MB for 150K account move lines). Additionally, the method builds a single large dictionary from _get_tax_details that is tailored for the Indian GST reporting logic. Constructing and holding this intermediate data structure further increases memory usage. The combination of repeated Python loops, ORM overhead, and the large intermediate dictionary results in high execution time and memory consumption, causing the process to exceed the available time and memory limits for large exports. Solution: ========= Instead of processing tax details through the ORM, create a sql query that return result that group by base line and select other info that we need for GSTR1 JSON Also use dictfetchmany with limit so we not have process the data in batch This approach bypasses the ORM, fetching only the required columns instead of entire records. Eliminates the need to build the large _get_tax_details dictionary. This significantly reduces memory usage, improves execution speed, and makes the implementation simpler and easier to maintain. task-3941950 Community PR - https://github.com/odoo/odoo/pull/289238 Forward-Port-Of: odoo/enterprise#126867
Reports can now offer dropdown-style choices in editable cells, helping users pick from approved options instead of typing free text. This is applied to France's 2069 RCI Fiscal Declaration so tax credit types are selected from predefined values, reducing entry errors and improving consistency.
Original PR description
This PR is divided in two commits which does following things: 1. It adds a new support for adding selection type values in report line cells. This will allow the users to select any one option among the given choices (just like date, boolean, literal values). 2. With the introduction of this new selection values, it adapts this feature into France's 2069 RCI Fiscal Declaration Report. task-6159824 Forward-Port-Of: odoo/enterprise#116926