Daily updates from Odoo
Friday, November 21, 2025
8 changes · 18.0
Enhancements to existing features
This update corrects how VAT values are calculated in the Indonesian E-Faktur Coretax export so the XML now uses the right tax grouping instead of relying on invoice type in some cases. It also adds a safeguard to prevent invalid tax combinations, helping reduce reporting errors and improving consistency in tax documents.
Original PR description
Update Coretax XML file to compute the values for nodes in the correct way. Currently the computation is based on the invoice type for some of the nodes + STLG is based on wrong tax group. This leads to wrong computation of values + inflexibility. - Update the VAT calculation inside the E-faktur XML based on tax group - Add new tax group and modify existing tax - Add restriction when downloading E-faktur Coretax XML Task [#4948267](https://www.odoo.com/odoo/project.task/4948267) Forward-Port-Of: odoo/odoo#233347
The payroll payment report for Swiss companies now defaults to the Swiss ISO 20022 format instead of the generic SEPA option. This makes payroll exports easier to use correctly out of the box and reduces the need for manual selection.
Original PR description
Previously the sepa and iso20022_ch were together in the hr_payroll_account_iso20022 module, but we needed to separate between them so that for the ch localization we have the export format, iso20022_ch, to be the default value when we're on the swiss company. task-5189295
This change improves how GSTR-2B issues are handled by recognizing an additional error code and treating it as a warning instead of leaving it unhandled. It also stops scheduled checks from retrying records already marked with errors, which reduces unnecessary processing and helps keep return period status handling cleaner and more reliable.
Original PR description
Before this commit: - `RET2B1017` error code was not handled. - Cron methods `_cron_get_gstr2b_data` and `_cron_gstr2b_match_data` processed all records with status: - `"waiting_reception"` - `"being_processed"` - Records with blocking level `"error"` were still being processed by cron. After this commit: - Added handling for `RET2B1017` and mapped it to `"warning"` level. - Updated cron domain filters to exclude records where `gstr2b_blocking_level = "error"`. - Cron jobs now skip invalid/error-state return periods, preventing unnecessary processing. Forward-Port-Of: odoo/enterprise#99378
This update makes the test runner more forgiving when no tests are found, avoiding an error and recording the situation as a log instead. It also improves how test results are reported at the end of a run in headless mode, making debugging easier and test output clearer.
Original PR description
[FIX] web: Hoot - remove error if no tests This commit replaces the error thrown if there is no test found by a log. --- [IMP] web: Hoot - log root suites at end of run This commit makes the unit test runner log all root suites results after each test run, only in headless mode.
This update automatically creates the buyer record on ECPay before sending B2B invoices when needed. It helps prevent invoice issuance failures caused by missing buyer identifiers, and also validates VAT locally earlier to reduce avoidable errors.
Original PR description
This commit aims to address an edge case where the buyer identifier might not exist on ECPay before issuing a B2B invoice. A call to "Add" a customer is made. RtnCode 1 indicates successful creation, 6160052 - indicates buyer already exists, others are failure. Additionally, add "base_vat" as dependency to enable client-sided validation for VAT before sending to ECPay. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change avoids running extra stock processing when a package is already empty. It reduces unnecessary work during unpacking, which can make the user experience faster and more responsive.
Original PR description
For an empty package the `quant_tasks` function will be executed without restriction of scope and can potentially slow the user request intensly. And if there is no quants in the package the tasks are not necessary. After the unpacking of the quants they are not in the package anymore. Causing the call to quant_tasks to be done on an empty recordset. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update lets users set the Saudi e-invoice issue date manually before confirming an invoice, so documents can be backdated when needed. It helps keep Odoo’s invoice periods aligned with ZATCA’s VAT calculations, reducing the risk of invoices ending up in the wrong tax return period.
Original PR description
Previously, l10n_sa_confirmation_datetime was automatically set when invoices were confirmed, causing issues when users needed to backdate invoices. This created mismatches between Odoo's invoice date recognition and ZATCA's VAT liability calculation, forcing invoices into wrong tax return periods. Changes: - Expose l10n_sa_confirmation_datetime as "Issue Date" in form view - Allow manual setting of l10n_sa_confirmation_datetime before invoice confirmation - Preserve original Issue Date for rejected Phase 2 invoices (400 errors) - Hide Invoice Date field but sync it with Issue Date - Update PDF to display Issue Date instead of Invoice Date - Remove footer date from PDF - Extend future date validation to include Issue Date task-5009969 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#229517
The system now waits longer between homepage data refreshes when a browser tab stays open for a long time. This reduces unnecessary traffic to the IoT Box while still keeping the homepage information up to date.
Original PR description
In order to avoid spamming the IoT Box with requests to update the homepage when a tab is kept open, we now progressively delay the `/data` fetch during the first 30min to end up fetching only once every 30min. Forward-Port-Of: odoo/odoo#236664