Thursday, September 10, 2026
4 changes · saas-18.4
New functionality added to Odoo
Belgian companies can now generate SAF-T reports directly from Odoo. This supports local audit and compliance requirements by making standardized accounting data exports available for Belgium.
Original PR description
SAF-T reports can now be generated for Belgium. task-5129628 Forward-Port-Of: odoo/enterprise#107270
Resolved issues and error corrections
The Chilean electronic invoicing process now reports progress while sending large batches of invoices to the tax authority. This prevents the scheduled job from being automatically disabled during heavy backlogs, so invoices continue to be sent over multiple runs instead of getting stuck.
Original PR description
Steps to reproduce: - Have a large number of invoices (thousands) with l10n_cl_dte_status 'not_sent' - Let the "Cron Job - Send document to SII" cron run and time out before it can send them all -…
Documentation and clarification updates
This pull request records that contributor hostomani has signed Odoo's Contributor License Agreement. It is an administrative legal update that enables contributions from this individual to be accepted under Odoo's contribution rules.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Steps to reproduce: - Have a large number of invoices (thousands) with l10n_cl_dte_status 'not_sent' - Let the "Cron Job - Send document to SII" cron run and time out before it can send them all - After a few consecutive timeouts, the cron gets deactivated by Odoo, leaving the backlog stuck and growing Cause of the issue: cron_send_dte_to_sii() searches for every 'not_sent' move and sends them one by one in a single unbounded loop, committing after each send but never reporting progress to the cron framework Odoo cron worker treats a job that times out without ever calling _notify_progress as a full failed run, even though most of the batch was actually sent and committed. After enough consecutive failures within a short time span, the cron is auto-deactivated, which is exactly what happens once daily invoice volume outpaces what a single cron run can send before the worker times out Solution: Report progress via ir.cron._notify_progress() after each invoice is sent. A timeout mid-run is then treated as partially done instead of failed, the cron gets rescheduled immediately instead of waiting for its daily interval, and it no longer counts towards deactivation, This lets the cron drain an arbitrarily large backlog safely over several runs instead of dying after a handful of timeouts opw-6487236 opw-6511624 Forward-Port-Of: odoo/enterprise#129789
Product identifiers sent to Google Analytics now match the identifiers used in Google Merchant Center feeds. This helps Google Ads correctly connect Shopping ad clicks with resulting purchases, improving attribution and diagnostic reporting.
Original PR description
**Issue:** When google analytics (GA) and google merchant center (GMC) are setup, Google Ads diagonistic reports that item IDs cannot be matched to Merchant Center. **Why this happens:** `order_lines_2_google_api` sets `product.barcode or product.id` for `item_id`, while `product.feed._prepare_gmc_items` defaults to `product.default_code or product.id` for the feed's `id` field. Google Ads/Analytics attribution relies on GA4's `item_id` matching GMC's `id` for the same product to connect Shopping ad clicks to purchase events. **References:** https://support.google.com/merchants/answer/6324405?sjid=15224664355638221483-NC https://support.google.com/google-ads/answer/14943675?hl=en Backport of d0bf183b053eb0133e6f7e5e04481ca07bff6bb3 opw-6443326 Forward-Port-Of: odoo/odoo#287152