Tuesday, September 23, 2025
8 changes · saas-18.2
Resolved issues and error corrections
Fixed an issue that blocked invoice creation when multiple Point of Sale orders for the same customer were selected in a Mexican company. This prevents an error during batch invoicing and helps staff complete sales administration without manual workarounds.
Original PR description
Currently, an error is raised when generating an invoice for multiple POS orders created for the same customer in a Mexican location. **Steps to reproduce:** - Install `l10n_mx_edi_pos` module. -…
Currently, an error is raised when generating an invoice for multiple POS orders created for the same customer in a Mexican location. **Steps to reproduce:** - Install `l10n_mx_edi_pos` module. - Switch the company to a **Mexican** company. - Create two POS orders for the same customer (ensure Invoice is disabled on the payment screen). - Without closing the POS session, go to the backend and navigate to Orders. - Select both orders and click **"Create Invoice"**. **Error:** `ValueError - Expected singleton: pos.order(5, 4)` **Cause:** The method `_prepare_invoice_vals()` accesses fields on `self`, assuming a single record. However, during batch invoicing, `self` can be multiple `pos.order` records. - [1] [1] - https://github.com/odoo/enterprise/blob/6e0396b078e7c6ffc98eef5a0d21a7df80651c19/l10n_mx_edi_pos/models/pos_order.py#L130-L135 **Fix:** Ensure the method only accesses fields on the first record, which prevents the singleton error during multi-record processing. sentry-6563854524
Sales orders for field service products with zero-priced lines now show the correct invoicing status after an invoice is created. This prevents orders from incorrectly appearing as still needing invoicing, reducing confusion for sales and accounting teams.
Original PR description
Steps: - Install sale and fsm module. - Enable anglo-saxon from the setting. - Create a service type product with fsm project as template. - Select that product on SO and set unit price to 0 on SOL. - Confirm that order and create and post invoice. Issue: - Sale order status still shows `To invoice` even though we create SOL related invoice. Cause: - In [PR] we made invoice status for anglo-saxon line `To Invoice` so it always say `To Invoice` even user create related invoice. Fix: - Make those lines `Invoiced` if there is related invoice by checking qty_invoiced is greater or equal to qty. [PR]: https://github.com/odoo/enterprise/pull/70132 opw-5055540 Forward-Port-Of: odoo/enterprise#94723
Credit notes for Mexico's public customer tax regime now keep the selected returns/discounts usage instead of being changed to no fiscal effects. This helps businesses generate compliant electronic invoice XML when issuing refunds or discounts under updated SAT rules.
Original PR description
**Steps to reproduce:** 1. Install `l10n_mx` and `l10n_mx_edi`. 2. Create an invoice with: * Enable *CFDI to Public*. * Confirm, then send to SAT. 3. Create a credit note with: * *Usage* = `Returns,…
**Steps to reproduce:** 1. Install `l10n_mx` and `l10n_mx_edi`. 2. Create an invoice with: * Enable *CFDI to Public*. * Confirm, then send to SAT. 3. Create a credit note with: * *Usage* = `Returns, discounts or bonuses` (G02). 4. Download the generated XML for the credit note. **Observed behavior:** - The `<UsoCFDI>` tag in the XML shows `S01` (No fiscal effects). **Expected behavior:** - The `<UsoCFDI>` tag should show `G02` for credit notes under regime 616 when explicitly selected. **Root cause:** - For regime 616 (`Público en general`), the code always defaults to `S01`. - The condition only allowed `G02` when refunding a global invoice (`is_refund_gi`), not for normal credit notes. **Solution:** - Allow `G02` usage to be preserved for credit notes (tipo_de_comprobante = 'E') even when `CFDI to public` is active, as this is now permitted by SAT regulations for fiscal regime 616. **ref:** http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/catCFDI_V_4_20250820.xls opw-5012917 Forward-Port-Of: odoo/enterprise#93071
Brazilian service invoices with payment installments will now be sent to AvaTax without taxes included in the installment values. This prevents invoice rejection errors caused by mismatches between installment totals and line totals.
Original PR description
Service invoices require us to send installments without taxes. If we include taxes we get an error: **Errors**: Rejection: Total Installments doesn’t match Total Lines ∑ installments[m]grossValue - ∑ (lines[n].lineAmount-line[n].lineTaxedDiscount) <> 0 This **PR** clears taxes before tax calculation to ensure the installments we send are correct. **task**-4761630 Forward-Port-Of: odoo/enterprise#85108
Sendcloud delivery shipments can now use customs HS codes up to 12 characters, matching Sendcloud's API requirements. This helps avoid delays for international parcels, especially shipments to the US that may be held in customs when codes are incomplete.
Original PR description
**PROBLEM** We limit the `hs_code` length to 8 characters, but if we refer to the [sendcloud v2 api doc](https://api.sendcloud.dev/docs/sendcloud-public-api/branches/v2/parcels/schemas/parcel-item), we see that `hs_code` length can be up to 12 characters. Some clients have issue with parcels being held longer in custom when sending them to the US. [opw-5051585](https://www.odoo.com/odoo/project/49/tasks/5051585) Forward-Port-Of: odoo/enterprise#94894
Field Service sales orders now calculate service line prices using the product's currency before converting to the order currency. This prevents incorrect prices when products and customers use different currencies, improving invoice accuracy.
Original PR description
### Steps to reproduce: - Open Field Service module. - Create a new task. In the Customer field, select “Bloem GmbH”. - Open the task’s project. - In the Invoicing tab, create a new line for any…
### Steps to reproduce: - Open Field Service module. - Create a new task. In the Customer field, select “Bloem GmbH”. - Open the task’s project. - In the Invoicing tab, create a new line for any employee and any service. - Return to the task and in the Timesheets tab, add a new timesheet. - Click the Mark as done button. - Click the Sales order button. ### Cause: When creating the sale order out of the fsm task we use _get_tax_included_unit_price to get the price of the SO line but we are passing the order currency twice to this method so it doesn't convert the price as when it checks the currency and the product_currency it found they are the same so no need to convert https://github.com/odoo/odoo/blob/6653355b8bc063ceadf08af17fbf2c4a250553e6/addons/account/models/product.py#L239-L240 ### Fix: We pass the product currency instead of the order currency in order to be able to convert the price according to the currencies opw-5045071 Forward-Port-Of: odoo/enterprise#95134 Forward-Port-Of: odoo/enterprise#94947
Tax return closing entry reports now show the selected reporting month instead of the month when the closing entry is posted. This prevents incorrect PDF and XML report labels, helping businesses file and review tax returns with the right period information.
Original PR description
**Issue** When posting a closing entry in September on a tax return report for the month of August, the generated report (PDF/XML) incorrectly shows September instead of August. **Steps to…
**Issue** When posting a closing entry in September on a tax return report for the month of August, the generated report (PDF/XML) incorrectly shows September instead of August. **Steps to Reproduce** 1. Install Belgian localization. 2. Go to Accounting > Reporting > Tax Return. 3. Select August as the reporting period. 4. Post the Closing Entry. 5. The report shows September as the month instead of August. **Root Cause** The logic in `_init_options_date` was changed in PR #89290 mutating the `options['date']['filter']` by replacing `"tax_period"` with a resolved period type (e.g., `"month"`). As a result, the `"month"` branch was triggered later in the code, recomputing `date_from` and `date_to` based on the current date instead of the selected tax period boundaries. **Fix** Keep the `options['date']['filter']` unchanged (e.g., `"custom_tax_period"`). Use `period_type` field to indicate whether the tax period represents a month, quarter, or year. Opw-5073081 Forward-Port-Of: odoo/enterprise#94322
The Mexican electronic invoicing flow now handles customer names entered with accents when matching them to official legal names that do not include accents. This reduces failed CFDI stamping for self-service invoices requested after point-of-sale purchases.
Original PR description
Currently, the self-invoicing portal lets client request an invoice after making a purchase in PoS. A form allows them to enter their personal informations such as their name. Many of them enter their name with accents, however the government has all the names without any accents which causes errors when trying to match the requesting party with their legal name during the stamping process of the CFDI. task-4952174 Forward-Port-Of: odoo/enterprise#95207