Friday, September 18, 2026
7 changes · 17.0
Resolved issues and error corrections
The French e-invoicing module now records the actual status code when it receives an unsupported lifecycle status, instead of showing a blank or unhelpful value. This makes issue investigation clearer for support teams without changing the user workflow.
Original PR description
Currently we just log `None` in case we receive a lifecycle with an unsupported (on community side) status. After this commit we log the status code at least. task-None before fix <img width="711" height="120" alt="image" src="https://github.com/user-attachments/assets/1f939cf4-17b7-49cb-8b31-5cc594fdeadd" /> after fix <img width="700" height="116" alt="image" src="https://github.com/user-attachments/assets/1b8b3853-f2da-4426-9c49-1d135d1c7824" />
This fix ensures EU OSS tax mappings are automatically created or refreshed when the module is installed, so related tax reports become available as expected. It also prevents duplicate mappings for branch companies that share the same tax ID as a parent company, reducing confusion in multi-company setups.
Original PR description
#### [FIX] l10n_eu_oss: tax mappings in a hierarchy unique per tax id Currently creating the tax mappings for a branch company creates the tax mappings in the first parent company (including the…
#### [FIX] l10n_eu_oss: tax mappings in a hierarchy unique per tax id Currently creating the tax mappings for a branch company creates the tax mappings in the first parent company (including the branch) that has a tax id. Multiple companies in a hierarchy may share the same tax id. E.g. let B be a branch of C. Then B would have access to the mappings created for C. There is no need to also create the tax mappings for B. After this commit we only create a tax mapping for a company if none of the parent companies have the same tax id. We also ensure that the needed tax mappings in the parent companies are created. task-4247724 #### [FIX] l10n_eu_oss: tax mappings in a hierarchy unique per tax id Currently creating the tax mappings for a branch company creates the tax mappings in the first parent company (including the branch) that has a tax id. Multiple companies in a hierarchy may share the same tax id. E.g. let B be a branch of C. Then B would have access to the mappings created for C. There is no need to also create the tax mappings for B. After this commit we only create a tax mapping for a company if none of the parent companies have the same tax id. We also ensure that the needed tax mappings in the parent companies are created. task-4247724
This change updates the Peppol setup flow to ensure customers go through the required know-your-customer checks instead of older bypass paths. It helps keep electronic invoicing onboarding compliant and prepares the service to retire legacy routes safely.
Original PR description
so we can deprecate "legacy" routes that bypass kyc on clients`[v16.0; v19.0[` task-6474808 Forward-Port-Of: odoo/odoo#282648
All-day calendar events created from validated time off requests now keep the correct length when their start time changes, such as during Google Calendar sync. This prevents multi-day absences from being shortened unexpectedly and helps calendars accurately reflect employee leave.
Original PR description
**Problem:** When modifying the start time of an all-day Calendar Event created from the Validation of a Time Off Request, the end time will be shortened dramatically, no longer spanning the correct…
**Problem:** When modifying the start time of an all-day Calendar Event created from the Validation of a Time Off Request, the end time will be shortened dramatically, no longer spanning the correct timespan. In the case of the ticket referred to below, this occurs during Google Calendar sync. **Cause:** When a Calendar Event is created from a Time Off Request being Validated, its duration is set according to the amount of days the Time Off Request spans multiplied by the employee's daily work hours as defined on their contract, even if the Calendar Event will be an all-day event. When the start time of a Calendar Event is modified, the end time is recomputed according to the duration added to the new start time. As such, if the duration of the Event does not match the duration of the dates covered, it will be shortened dramatically. **Purpose:** Modify the values defined when creating a Calendar Event as a result of a Validated Time Off Request so that, if the created Event will be an all day Event, the duration is computed according to `calendar.event._get_duration`. **Steps to Reproduce in Runbot:** 1. Create and Validate a Time Off Request of the Paid Time Off leave type spanning multiple days. 2. Modify the start time of the Calendar Event that is created as a result of the validation. (This step will likely require a nonstandard flow as the start time field is normally hidden for all-day Calendar Events) opw-6426586
This fix ensures recent Spanish tax changes are automatically applied to existing Odoo databases during module migration. It prevents companies using the Spanish localization from missing required tax updates when they reload accounting templates.
Original PR description
In commit d3c7e51e94d98da9086a3817b157c4e125c80790 we updated some taxes. This commit bumps the version of the module and adds a migration script to automatically apply this change to existing databases. This was i.e. needed since the changes are not applied when just reloading the chart template (it only updates tax tags for existing taxes). opw-4850585
Point of Sale IoT payment device detection no longer depends on manufacturer information that may be missing from some IoT Box images. This helps keep payment hardware compatible with the latest stable IoT Box setup and reduces connection issues.
Original PR description
We remove the manufacturer from the domain to ensure compatibility with the last stable IoT Box image that doesn't provide a manufacturer.
Fixes Peruvian PLE sales and purchase ledgers so ISC tax is not incorrectly added to taxable base amounts or counted multiple times when other taxes follow. This keeps ledger totals aligned with electronic invoices sent to SUNAT and improves tax reporting accuracy.
Original PR description
When a tax affects the base of the subsequent ones — `include_base_amount`, which is how the ISC is set up in Peru — Odoo links the tax line it generates to those subsequent taxes, so the ISC tax…
When a tax affects the base of the subsequent ones — `include_base_amount`, which is how the ISC is set up in Peru — Odoo links the tax line it generates to those subsequent taxes, so the ISC tax line ends up carrying the IGV in its `tax_ids`. The PLE ledgers build their base columns by summing every move line related to a given tax group, so that ISC tax line was added to `base_igv` as well and the ISC ended up reported twice: once inside the taxable base and once in its own column. A line of 1000.00 with 100.00 of ISC and 198.00 of IGV was declared with a base of 1100.00 instead of 1000.00. `l10n_pe_edi` already subtracts the ISC from the `cbc:TaxableAmount` of the CPE sent to SUNAT, so the electronic invoice and the ledger disagreed on the very same document. ### What changed The base taxes are now joined only for base lines, instead of repeating the condition on each of the twelve `base_*` columns. Besides keeping tax lines out of the base columns, this also stops a tax line from being counted once per subsequent tax: an ISC followed by both the IGV and the ICBPER produced two rows in the join, and its own column was reported twice. ### Scope `_get_ple_report_data` is shared, so this covers the sales ledger 14.1 and the purchase ledgers 8.1 and 8.2. A configuration where no tax affects the base of a later one is unaffected: the standard Peruvian chart template has no purchase ISC, so ordinary IGV-only purchases report exactly the same values as before. ### Tests - `test_sale_report_isc_base`: an ISC preceding the IGV, on an invoice and on a credit note; the base column excludes the ISC. - `test_sale_report_isc_reported_once`: an ISC followed by the IGV and the ICBPER is reported once. Both fail without the fix. Supersedes odoo/enterprise#128300, which targeted 19.0.