Thursday, September 10, 2026
10 changes · master
New functionality added to Odoo
Belgian companies can now generate SAF-T reports directly in Odoo. This supports local accounting compliance needs by making the required audit file export available for Belgium.
Original PR description
SAF-T reports can now be generated for Belgium. task-5129628 Forward-Port-Of: odoo/enterprise#107270
Financial reports can now include fields where users choose from predefined options instead of typing free text. This helps standardize report inputs and reduce data-entry mistakes, with related editing support added for report administrators.
Original PR description
### [IMP] account_reports: Add support for selection figure type in reports This commit adds support for selection type values in report cells that enables user to select a value from a list of…
### [IMP] account_reports: Add support for selection figure type in reports
This commit adds support for selection type values in report cells that enables user to select a value from a list of available values
This values can be defined in the report XML by defining a dict as `selection={'key1': 'value1', 'key2: 'value2'}` and setting the report `figure_type` as `string`.
### [CLN] account_reports: order imports in account_report.py
### [IMP] account_reports: manage selection options in report expressions
Following the related community commit, we add the UI to allow users to edit the selection options for report expressions. We use a small hack to show the translation button for the selection options field, while still allowing users to edit the HTML/XML in the original language only. This is done to avoid users editing the HTML/XML in translations, which could break the report expressions.
We also modify the code extracting the selection options to extract them from the HTML/XML string.
### [IMP] l10n_fr_reports: add sample selection options
THIS COMMIT SHOULD BE DELETED BEFORE MERGING. IT'S ONLY FOR TESTING PURPOSES.Belgian payroll now supports the withholding tax reduction for eligible extra hours, including different deduction rates and annual hour limits. This helps employers calculate overtime-related payroll tax reductions more accurately and stay aligned with Belgian rules.
Original PR description
**Description** This PR implements the Belgian withholding tax reduction for extra hours/overtime (code: P.P.DEDEH) in l10n_be_hr_payroll, where it introduces support for deduction rates (66.81% and…
**Description** This PR implements the Belgian withholding tax reduction for extra hours/overtime (code: P.P.DEDEH) in l10n_be_hr_payroll, where it introduces support for deduction rates (66.81% and 57.75%), annual hour capping (360h standard / 450h Horeca and cash register), **Implementation** . Added the P.P.DEDEH salary rule linked to Belgian CP200 and applicable structures. . A work entry type qualifies for the extra hours reduction if it is flagged as an extra hours entry (is_extra_hours = True) and satisfies the minimum surcharge requirement of at least 20%. Qualification is determined either directly on the work entry type—when its base rate is 120% or higher (amount_rate >= 1.20)—or through its associated category hierarchy. In cases where the base rate itself is lower (e.g., 100%), the system evaluates both assigned categories and optional categories for any child category marked with premium pay (is_premium_pay = True). If the combined sum of the base rate and the child category's premium percentage reaches or exceeds 120%, the work entry line successfully qualifies for the reduction. . To calculate the reduction amount, the system first determines the employee's basic hourly wage rate by dividing their contract wage by the total worked hours in the payslip period. It then evaluates the eligible extra hours against an annual cumulative cap, set to 360 hours or 450 hours if the company uses a registered cash register, by subtracting any extra hours already claimed on prior validated or paid payslips within the same calendar year. For the remaining eligible hours, the system determines the effective rate by adding the work entry type's base rate and any applicable child category premium rates. Surcharges between 20% and 50% receive a 66.81% deduction rate, while surcharges of 50% or higher receive a 57.75% deduction rate. Finally, the total deduction is computed by multiplying the capped extra hours by the basic hourly rate and the applicable deduction percentage. **Example** > Scenario: An employee with a monthly wage of 2,650.00 € works 15.2 extra hours (2 days) in January 2026 under a 200% overtime rate (+100% premium $\ge 50\%$) > . Total Monthly Worked Hours: $167.2 > . Basic Hourly Rate: 2,650.00 / 167.2 = 15.84928$ > . Extra Hours Base Amount: $15.2 *15.84928 €/h = 240.91€ > . Applicable Rate: 57.75 > . Computed Reduction Amount: $240.91 * 57.75 = -139.13€ task-5431919
Odoo now supports Canadian Pre-Authorized Debit as a Stripe payment option. This lets eligible Canadian customers pay through a locally supported debit method, expanding payment choice for businesses using Stripe.
Original PR description
Add support for the Canadian Pre-Authorized Debit payment method in the Stripe provider. task-6276419
This pull request adds a new set of internal guidance documents that make Odoo’s development, review, web, and security expectations easier to find and apply. By documenting rules that were previously informal, it helps new contributors and automation tools produce more consistent, safer code.
Original PR description
Before this commit, the JS conventions of the framework only existed in review comments and in the heads of the people enforcing them. Nothing in the repository stated them, so a new developer, or a coding agent, had no way to find them.
Turkish companies can now store both official buying and selling exchange rates and choose which one applies to invoices, bills, and payments. This helps apply the correct rate per transaction while keeping existing records on the previous selling-rate behavior.
Original PR description
## Description of the issue/feature this PR addresses: Odoo's TCMB integration applies a single selling exchange rate everywhere, but Turkish customers need to apply either the buying or the selling…
## Description of the issue/feature this PR addresses: Odoo's TCMB integration applies a single selling exchange rate everywhere, but Turkish customers need to apply either the buying or the selling rate depending on the transaction - a single rate doesn't fit every case. This lets a TR company fetch both rates and explicitly select which one - Buying or Selling - applies to a given invoice, bill, or payment. ## Current behavior before PR: Only a single (selling) exchange rate is fetched and applied to all invoices, bills, and payments, regardless of the direction of the transaction. ## Desired behavior after PR is merged: `l10n_tr_currency_live_rate` fetches and stores TCMB's buying rate alongside the existing selling rate, and adds a Selling/Buying toggle on invoices, bills, payments, and the Register Payment wizard. The toggle defaults from the document's sale/purchase type or the payment's direction, with a per-partner override that is learned from the first document posted for that partner. Buying rates and the relabelled columns are shown only for companies whose currency provider publishes both rates, so nothing changes for other companies. A `pre_init_hook` backfills existing records to the Selling rate, preserving prior behavior. task-5017817 I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Uruguayan point-of-sale orders can now generate the correct electronic tax document directly from the POS. Business customers with a RUT receive electronic invoices, while other customers receive electronic tickets, reducing manual invoicing work and keeping checkout uninterrupted if submission fails.
Original PR description
UY POS sales had no CFE of their own: `l10n_uy_pos` forced every order to be invoiced, so an e-Ticket only ever came out by accident. This module issues the correct type of document based on the customer. E-Invoice 111/112 for RUT partners, and e-Ticket 101/102 built and sent from the `pos.order`. Removes `l10n_uy_pos`: odoo/odoo#281845 task-4221895
Dashboards now open in a visual kanban-style gallery with thumbnails, making it easier for users to browse, create, and open dashboards. This replaces the older landing-page flow and simplifies dashboard creation by letting users start from the dashboard app or convert an existing spreadsheet.
Original PR description
Add kanban view for dashboards Task: [3848129](https://www.odoo.com/web#id=3848129&menu_id=4720&cids=1&action=333&active_id=2328&model=project.task&view_type=form) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Adds support for QRMP taxpayers to prepare monthly IFF filings for the first two months of a quarter, with only eligible invoice sections included. The change helps businesses stay compliant with India GST rules by enforcing the ₹50 lakh taxable value cap and carrying excluded or missed invoices into the quarterly GSTR-1 filing.
Original PR description
QRMP taxpayers file GSTR-1 data monthly for the first two months of a quarter via the IFF (Invoice Furnishing Facility), limited to B2B and CDNR invoices and capped at a cumulative taxable value of…
QRMP taxpayers file GSTR-1 data monthly for the first two months of a quarter via the IFF (Invoice Furnishing Facility), limited to B2B and CDNR invoices and capped at a cumulative taxable value of ₹50 lakh. For the third month, a regular quarterly GSTR-1 is filed with all sections, including any B2B/CDNR invoices missed or excluded from the IFF filings of month 1 and month 2. This introduces a new IFF return type and report. - The report reuses the existing GSTR-1 checks and JSON builder, but restricts sections to B2B, CDNR (regular and RCM), SEZ with/without payment, and deemed export - i.e. GSTR-1 Table 4A, 4B, 4C, 6C, 9B. - A new check enforces the ₹50 lakh cumulative taxable value limit on invoices pending for the IFF month. - The `missing_einvoice` check (l10n_in_edi_gstr) is skipped for IFF, as e-invoice completeness is only enforced at quarterly filing. - A new boolean field on account.move tracks whether an invoice is excluded from IFF filing. Excluding an invoice from the check's invoice list defers it to the quarterly GSTR-1 instead of the current IFF month; it remains editable until claimed by a return. task-id 6314238
Odoo spreadsheets can now display hierarchical Odoo data using sunburst and treemap chart formats. This gives business users clearer visual ways to explore grouped data, spot proportions, and understand nested relationships directly in spreadsheets.
Original PR description
This commit adds the odoo_sunburst chart type, which allows to visualize hierarchical odoo data in a sunburst format. Task: [4953941](https://www.odoo.com/odoo/2328/tasks/4953941) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr