Daily updates from Odoo
Thursday, July 23, 2026
9 changes · 17.0
Enhancements to existing features
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778
Original PR description
After this advisory: https://services.gst.gov.in/services/advisoryandreleases/read/661 It has become mandatory to pass `shipToGSTIN`, i.e. GST number of the ship-to partner during the generation of the e-waybill for `Bill-to-Ship-to` (type-2) and `Combination` (type-4) transaction types. task-6236778
Law 30-26, enacted on June 18, 2026, amends the Dominican Tax Code and introduces new rates that only apply to operations dated after its entry into force: - The ISR withholding on fees, commissions and other remunerations for services provided by individuals raises from 10% to 15%, as a payment on account (art. 309 b, as amended by art. 17 of the law). - The ISR withholding on rents paid to individuals raises from 10% to 15%, as a single and final payment (art. 309 a). - A reduced 15% sing
Original PR description
Law 30-26, enacted on June 18, 2026, amends the Dominican Tax Code and introduces new rates that only apply to operations dated after its entry into force: - The ISR withholding on fees, commissions…
Law 30-26, enacted on June 18, 2026, amends the Dominican Tax Code and introduces new rates that only apply to operations dated after its entry into force: - The ISR withholding on fees, commissions and other remunerations for services provided by individuals raises from 10% to 15%, as a payment on account (art. 309 b, as amended by art. 17 of the law). - The ISR withholding on rents paid to individuals raises from 10% to 15%, as a single and final payment (art. 309 a). - A reduced 15% single and final ISR withholding replaces the general 27% remittance withholding for payments abroad of software licenses and subscriptions, royalties, online advertising and cloud data storage services (arts. 305-1 and 305-2, effective June 18, 2026). - The tax on checks and electronic transfers raises from 1.5 to 2.0 per thousand (0.20%), effective July 3, 2026 (art. 382 of Law 288-04, as amended). The previous rates remain applicable to operations prior to the entry into force of the law, so the existing taxes are kept unchanged and the new rates are added as separate taxes. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
WinBooks imports now avoid combining supplier and customer contact details when their VAT numbers are explicitly different. This prevents valid imports from failing because mismatched contact data was merged and then failed VAT validation.
Original PR description
When importing a WinBooks zip, contacts sharing the same number might fail VAT validation if distinct contact data is merged incorrectly. Steps to reproduce: - Create a database with the Belgian…
When importing a WinBooks zip, contacts sharing the same number might fail VAT validation if distinct contact data is merged incorrectly. Steps to reproduce: - Create a database with the Belgian localization installed - Install the account_winbooks_import module - Navigate to Accounting > Configuration > Settings > Initial Setup > Import - Import the WinBooks zip Issue: The import fails with the following error: The VAT number [AAAAAA] for partner [BBBBBB] does not seem to be valid. Note: the expected format is BExxxxxxx. Analysis: In WinBooks, contacts can be of type Supplier or Customer, and it is possible for a supplier and a customer to share the same number. During the import, the system will merge contacts if found with the same number. In the specific case, the VAT number from one contact without country is combined with the country information from another contact, resulting in a VAT validation error. This change prevents the merger of partner data if their VAT numbers are explicitly different. opw-6251772
Issue: Users in debug mode can access chatter's form and alter it. Steps to reproduce: Enter debug mode ('?debug=1'); Go into any chatter (ex: Sales) Send a message In the debug menu go in "Manage Messages" Select the message you just sent and you should be able to alter, who sent it, what is in the message, sent date,... Cause: The fields on the xml form are missing readonly, as this information should not be edited. Solution: Added the readonly in order for users to not change
Original PR description
Issue:
Users in debug mode can access chatter's form and alter it.
Steps to reproduce:
Enter debug mode ('?debug=1');
Go into any chatter (ex: Sales)
Send a message
In the debug menu go in "Manage Messages"
Select the message you just sent and you should be able to alter, who sent it, what is in the message, sent date,...
Cause:
The fields on the xml form are missing readonly, as this information should not be edited.
Solution:
Added the readonly in order for users to not change this data.
opw-6270043The earlier fix that base64-decodes the /pdf response missed one test on 17.0 whose mock returned raw PDF bytes instead of the JSON-decoded base64 string `NilveraClient.request()` actually returns. On Python <=3.13 `b64decode` silently produced garbage and the mimetype-only assertion stayed green; on Python 3.14 strict validation rejects the raw bytes with `binascii.Error: Incorrect padding`. Encode the fixture with `b64encode(...).decode()` so the mock matches the real API. Descript
Original PR description
The earlier fix that base64-decodes the /pdf response missed one test on 17.0 whose mock returned raw PDF bytes instead of the JSON-decoded base64 string `NilveraClient.request()` actually returns. On Python <=3.13 `b64decode` silently produced garbage and the mimetype-only assertion stayed green; on Python 3.14 strict validation rejects the raw bytes with `binascii.Error: Incorrect padding`. Encode the fixture with `b64encode(...).decode()` so the mock matches the real API. Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ff598a772e [REL] 17.0.104 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/30768e0885 [FIX] HeaderVisibility: fix `getNextVisibleCellPosition` getter [Task: 6340589](https://www.odoo.com/odoo/2328/tasks/6340589) https://github.com/odoo/o-spreadsheet/commit/b46950d130 [FIX] edition: do not change edition if not editing [Task: 6340589](https://www.odoo.com/odoo/2328/tasks
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ff598a772e [REL] 17.0.104 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/ff598a772e [REL] 17.0.104 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/30768e0885 [FIX] HeaderVisibility: fix `getNextVisibleCellPosition` getter [Task: 6340589](https://www.odoo.com/odoo/2328/tasks/6340589) https://github.com/odoo/o-spreadsheet/commit/b46950d130 [FIX] edition: do not change edition if not editing [Task: 6340589](https://www.odoo.com/odoo/2328/tasks/6340589) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
Currently, sending a simplified invoice (`TD07`) to the Italian Tax Agency fails when an invoice line contains multiple taxes. **Steps to reproduce:** - Install the `l10n_it_edi_withholding` module and switch to an IT Company. - Create a new customer and set only the country to Italy and the Tax ID. - Create a new invoice for that customer. - Add a line with `22%` and `4% INPS` taxes. - Go to the `Electronic Invoicing` tab, set the `Document Type` to `TD07 - Simplified invoice`, and c
Original PR description
Currently, sending a simplified invoice (`TD07`) to the Italian Tax Agency fails when an invoice line contains multiple taxes. **Steps to reproduce:** - Install the `l10n_it_edi_withholding` module…
Currently, sending a simplified invoice (`TD07`) to the Italian Tax Agency fails when an invoice line contains multiple taxes. **Steps to reproduce:** - Install the `l10n_it_edi_withholding` module and switch to an IT Company. - Create a new customer and set only the country to Italy and the Tax ID. - Create a new invoice for that customer. - Add a line with `22%` and `4% INPS` taxes. - Go to the `Electronic Invoicing` tab, set the `Document Type` to `TD07 - Simplified invoice`, and confirm the invoice. - Try to `Send To Tax Agency`. **Error:** `Node: <Natura t-if="line.tax_ids.l10n_it_exempt_reason" t-out="line.tax_ids.l10n_it_exempt_reason"/>` `ValueError: Expected singleton: account.tax(102, 3)` **Root Cause:** At [1], the code accesses `line.tax_ids.l10n_it_exempt_reason`, but when an invoice contains multiple taxes, causing an error. **Fix:** This commit prevents the error and ensures the user can send a simplified invoice by applying a fix similar to [2]. [1]: https://github.com/odoo/odoo/blob/230483ffd7d8674cd6bf98a4ffb6591f755422e0/addons/l10n_it_edi/data/invoice_it_simplified_template.xml#L14 [2]: https://github.com/odoo/odoo/blob/230483ffd7d8674cd6bf98a4ffb6591f755422e0/addons/l10n_it_edi/data/invoice_it_template.xml#L28-L181 Ticket [link](https://www.odoo.com/odoo/project.task/6354138) Ticket [link](https://www.odoo.com/odoo/project.task/6379377) opw-6354138 opw-6379377
## Problem: Whitespace formatting in email template xmls (newline and tab) would find their way into the html editor, and would be made visible after interacting with feff injection. ## Solution: We will sanitize mail templates as they are loaded, removing any unnecessary formatting whitespace. ## Steps to replicate (runbot v17): 1. Open an email template (Purchase: Purchase Order) 2. Place your cursor at the very end of a t-out element that precedes another bit of text (like 'P00015')
Original PR description
## Problem: Whitespace formatting in email template xmls (newline and tab) would find their way into the html editor, and would be made visible after interacting with feff injection. ## Solution: We will sanitize mail templates as they are loaded, removing any unnecessary formatting whitespace. ## Steps to replicate (runbot v17): 1. Open an email template (Purchase: Purchase Order) 2. Place your cursor at the very end of a t-out element that precedes another bit of text (like 'P00015'), then type a character. 5 ` ` characters will be inserted after your character. opw-6124284
Miscellaneous changes
_stock_account_anglo_saxon_reconcile_valuation() scans a whole invoice on every call and only reconciles at the end, but _validate_accounting_entries() calls it once per product. The invoice is therefore re-scanned as many times as there are products. This can lead to performance issues when the invoices contain thousands of lines. Steps to reproduce: - use anglo-saxon accounting with automated inventory valuation - confirm a sale order holding a few thousand distinct products -
Original PR description
_stock_account_anglo_saxon_reconcile_valuation() scans a whole invoice on every call and only reconciles at the end, but _validate_accounting_entries() calls it once per product. The invoice is…
_stock_account_anglo_saxon_reconcile_valuation() scans a whole invoice on every call and only reconciles at the end, but _validate_accounting_entries() calls it once per product. The invoice is therefore re-scanned as many times as there are products. This can lead to performance issues when the invoices contain thousands of lines. Steps to reproduce: - use anglo-saxon accounting with automated inventory valuation - confirm a sale order holding a few thousand distinct products - invoice it, then validate its delivery => performance issue Group the products by their related invoices and reconcile each group in one call. Delivering 20 products against a 5000 line invoice goes from 63s to 9.7s. On the reported customer database a delivery of 197 products, against an invoice grouping 27 orders and carrying 17822 journal items, goes from 369s to 16s. Benchmark: | Invoice Lines | Before | After | |--------------:|-------:|------:| | 100 | 1.9s | 0.7s | | 1 000 | 13.0s | 2.0s | | 5 000 | 63.3s | 9.7s | opw-6388781