Daily updates from Odoo
Friday, July 24, 2026
4 changes · 18.0
Resolved issues and error corrections
This fixes incorrect balance amounts shown in Mexican electronic payment documents when payments, credit notes, and exchange rate differences were reconciled together. The change keeps reconciliations in the right chronological order so fully paid invoices are reported accurately for compliance and customer records.
Original PR description
### Issue: Attributes of DoctoRelacionado node in the XML display an incorrect value because the exchange rate difference entry distorts the calculation, even though the invoice was fully settled. https://drive.google.com/file/d/1ntQny0o8bkkfYtY5ZNBK0Yq7Rq0I-yfz/view ### Fix: Sorting partials by "not exchange_move_id" first broke the chronological order whenever the invoice/payment partial itself carried an exchange difference (e.g. a foreign currency payment settled at another rate). This made the residual-chain algorithm consume the credit note's "other_residual" on the wrong payment, so ImpSaldoAnt/ImpPagado/ ImpSaldoInsoluto in the payment CFDI's DoctoRelacionado stayed wrong even though the invoice was fully paid. Populate the exchange move mapping in a separate first pass and sort the partials purely by date/id, so credit notes are always deducted from the correct payment. task-id:[6363092](https://www.odoo.com/odoo/project/49/tasks/6363092)
Fixed an issue where Avalara-related fields could be hidden when creating or editing Canadian contacts under a US company setup. This ensures users can correctly enter Avalara codes and exemption details for supported countries.
Original PR description
**Steps to reproduce:**
- Install Accounting and account_avatax
- Use a US company (by default)
- Create a contact with Canada as country
**Issue:**
In "Sales & Purchase" tab, all the fields from avatax module are not displayed (i.e. "Avalara Code", "Avalara Partner Code", "Avalara Exemption").
**Cause:**
The `invisible` property of those fields is using `fiscal_country_codes` char field.
If no company is set on the record, `fiscal_country_codes` will contain the country code of the selected companies in addition to the country code of the record.
In this case, the value of `fiscal_country_codes` will be `US,CA` string, which triggers `fiscal_country_codes not in ('US', 'CA')` invisible condition.
opw-6328395Spanish VAT record book exports now include taxable accounting entries that are not tied to standard invoices or bills, such as entries created when closing Point of Sale sessions. This helps businesses produce more complete VAT records and avoid missing reportable sales activity in Excel exports.
Original PR description
Currently, the Spanish VAT record books (Libros Registro de IVA) only include move types associated with invoices and bills. However, miscellaneous entries (type 'entry'), such as those generated by the Point of Sale session closures or manual liquidations, also carry tax obligations and must be reflected in these reports. Steps to reproduce: - Open a POS Session - Create an order, pay and close session - Go to Accouting > Reporting > Tax report - Select Generic Tax report - Print "VAT record Books" Issue: Only invoices and bills are visible in the excel file, and not the entry generated from point of sale. However, movements that are not related to invoices should be included in the VAT books. opw-5862529 Forward-Port-Of: odoo/enterprise#113681
The Mexican electronic invoicing process now avoids reprocessing recently updated invoices, preventing repeated background job loops. This improves reliability and reduces unnecessary system workload when checking invoice status with SAT.
Original PR description
Fixing the SAT cron in https://github.com/odoo/enterprise/pull/123213 we did not think it through it could cause infinite cron triggering. The write_date is updated on every record that is handled, so we can just not handle the invoices that have been updated in the last 4 hours, so when the cron is retriggered, it will not handle the same thing again. We can also use the notify_progress instead of just retriggering.