Tuesday, February 3, 2026
7 changes · 19.0
New functionality added to Odoo
This update expands our tax reporting capabilities to include EC Sales Lists and Intrastat returns for key European markets – Austria, Germany, Italy, Poland, Portugal, and The Netherlands. This aligns with previous tax return implementations and ensures compliance with local regulations, simplifying reporting processes for our international customers.
Original PR description
Following the implementation of the Tax returns feature in 18.3 which was focused on the general implementation and Belgium, we want to add the specification for other country and in this case Austria, Germany, The Netherlands, Italy, Poland, and Portugal. Adding EC sales list, Intrastat specific deadlines and periodicities. task-4776236
Enhancements to existing features
This update improves the speed of database synchronization by intelligently grouping requests and processing them in parallel. This resulted in a significant reduction in synchronization time – specifically, a 30-database sync that previously took 50 seconds now completes in just 15 seconds. This enhancement improves overall system performance and responsiveness.
Original PR description
With this commit, the requests sent to retrieve the information from the databases are grouped by IP, and each group is treated in parallel using a ThreadPoolExecutor, which uses a pool of 5 times the number of CPUs. On a set of SaaS databases, we reduced the time needed to synchronize 30 databases from 50s to 15s.
Resolved issues and error corrections
A crash in the Accounting module's Working Files feature, triggered during mass edits, has been resolved. The fix utilizes optional chaining to safely handle situations where configuration data is temporarily unavailable, preventing the web client from freezing.
Original PR description
**Steps to reproduce:** * Install **Accounting** with the **account_reports** module. * Go to **Accounting → Review → Working Files**. * Create or open an audit. * Open any line under **To Review**. * Set the status to **No Error** individually. * Select multiple lines and set the status to **Error** using mass edit. **Observed behavior:** * The web client crashes with `TypeError: Cannot read properties of undefined (reading 'viewType')`. **Cause:** * The status badge component assumes `env.config` is always defined. * When mass editing, the component is rendered in a context where `this.env.config` is undefined, causing the crash. **Fix:** * Add optional chaining (`?.`) to safely access `viewType`: `this.env.config?.viewType` instead of `this.env.config.viewType`. * This ensures the component handles contexts where `env.config` is undefined. opw-5481071
This update fixes a potential issue in the US payroll module by establishing a standardized way to manage city information for employees. Instead of free-form editing, a linked list of cities is now used, ensuring data consistency and accuracy for tax reporting. This improves the reliability of payroll calculations within the US.
Original PR description
**Description:** In United States we load all cities in the L10N package. idea was to make the city field on employee personal address a M2O referring to the list and not something freely editable. **Implementation:** . Add l10_us_private_city_id which's a M2O field referring to the list and not something freely editable. task-5877610
This update resolves an issue preventing the 'compare' button from appearing on the website's rental product selection page. The fix ensures users can now correctly compare rental options, improving the overall user experience. It also adds a waiting step to ensure the comparison process completes reliably.
Original PR description
This commit fixes the issue where the "compare" button wasn't visible in the view. Now, the compare button is accessible within the process. Additionally, it addresses the indeterminacy by adding a step where the comparison bar is explicitly waited for before adding a product. runbot-error-id~231524
This update corrects a bug where canceled refunds were incorrectly included in global invoices generated from Point of Sale (PoS) orders. The fix filters out canceled refund lines during invoice generation, ensuring accurate invoice totals. This improves the reliability of financial reporting for Mexican VAT (EDI) transactions.
Original PR description
When generating global invoices for orders in the PoS, refund of those orders are also included in the global invoice. However, if the refund has been canceled, it should not be included in the global invoice. Steps to reproduce: ------------------- * Create a PoS order and validate it. * Go to the backend and create a refund for that order. * Cancel the refund. * Go to the PoS order list and select the original order * Click on "Generate Global Invoice" > Observation: The canceled refund is included in the global invoice. Why the fix: ------------ We simply filter out the canceled orders when searching for refunded order lines. opw-5492576 Forward-Port-Of: odoo/enterprise#105959 Forward-Port-Of: odoo/enterprise#105868
This update resolves an issue where CFDI payroll validation failed when no deductions were present in the Mexican payroll structure. The fix ensures that the CFDI report accurately reflects the absence of deductions, aligning with official Mexican tax regulations. This prevents validation errors and ensures compliance.
Original PR description
…eductions Currently, if users modify the MX Payroll structure in order to have no deductions in the final payroll, CFDI validation for the payroll entry will fail. Steps to reproduce: - Set up…
…eductions
Currently, if users modify the MX Payroll structure in order to have no deductions in the final payroll, CFDI validation for the payroll entry will fail.
Steps to reproduce:
- Set up Payroll Structure "Mexico: Regular Pay" with Salary Rules:
- Used subsidy:
- Code: SUBSIDY
- Category: Allowance
- CFDI Concept: (O02) Employment Subsidy (Effectively Delivered to the Worker)
- Deduction:
- Code: DEDUCTION
- Category: Deduction
- CFDI Concept: (D04) Others
- Net Salary:
- Code: NET
- Category: Net
- CFDI Concept: (P01) Salaries, Wages, Stripes, and Day Labor
- Formula: `result = payslip.paid_amount`
- In Payroll > Payslips, Click 'New Off-Cycle'
- Select employee, compute sheet, create draft journal entry and post it
- Back to the payslip, mark as paid and generate CFDI
Issue:
CFDI Validation will fail with error
`Code : 301 Message : Error en complemento Nómina. [Error #NOM38] El atributo Nomina.TotalDeducciones, no debe existir. Folio: 0002. Serie: SLR/2025/12.`
It occurs because, according to the official specs [1] attribute `TotalDeducciones` should not be reported in case there are no deductions
[1] http://omawww.sat.gob.mx/tramitesyservicios/Paginas/documentos/GuiallenadoNomina311221.pdf
opw-5348789