Wednesday, September 9, 2026
6 changes · master
New functionality added to Odoo
Time off balances can now be tracked separately in both days and hours, instead of always calculating one from the other. This gives payroll and HR processes more accurate balances for leave types where day-based and hour-based tracking need to differ.
Original PR description
[IMP] hr_holidays: track time off balance in both days and hours Adds a generic extension point so a leave type's day/hour balance can be tracked as two independent counters instead of one derived from the other: - Extracted the per-work-entry-type leave consumption loop into _consume_leaves_for_work_entry_type, operating on a list of `LeaveCounter` (a way to track both days and hours for some specific tome types) - Added _get_consumed_leaves_extra_counters(work_entry_type), empty by default: a module can register additional counters consumed in the same FIFO pass as the primary one. Only the primary counter (the type's own unit_of_measure) can block a request; extra counters never block, they just go negative on the last allocation touched instead (see l10n_be_hr_payroll). - Renamed `number_of_hours_display` to number_of_hours on hr.leave.allocation, now that it not just derived from number_of_days. Task-6212208
Mass mailing users can now save campaigns as reusable templates and manage them from a dedicated Templates menu. This makes it easier to standardize future mailings, reuse proven designs, and preview templates more reliably.
Original PR description
Overview ------ This commit introduces the mailing templates in mass mailing. Before this commit, the only way to save a mailing as a template is to set it as favorite so that it will appear in the…
Overview ------ This commit introduces the mailing templates in mass mailing. Before this commit, the only way to save a mailing as a template is to set it as favorite so that it will appear in the theme selector alongside the common themes. Setting a mailing as favorite does not create a new mailing (template) it only set the favorite flag to true. This commit extends the favorite behavior and adds a complete template library, where the mailing can be saved as a true template, and hence a new mailing (with is_template=True) is created and listed under the `Templates` menu. Specification ------ - Remove the 'favoritism' from mailing.mailing: this includes the favorite star icon and the favorite field. - Add a cog menu item in the form view to save a mailing as a template. - Using a template (clicking on the `use this` button) will create a new mailing out of that template. Technical Notes ------ In order to have a proper display of the templates in the kanban view, we had to add a few things: - Load the kanban renderer inside an iframe: this will help isolate the html content of the templates from the outer Odoo one. -> Better for security and customized stylesheets load. - Wrap the renderer component in a wrapper component to make the reload smoother at every props update; the rationale behind this is to avoid reloading the whole iframe, which is a costing operation with all the stylesheets being refetched, at every props update. task-5358279 subtask-6110541 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Thai localization now creates compliant tax invoices for VAT sales and receipts, including cases where tax is due on invoice or on payment. Users get separate numbering, a dedicated tax invoice print action, clearer PDF details, and an invoice page to manage generated tax invoices, while older simplified print options are removed.
Original PR description
For VAT-registered sellers, tax invoices must comply with the Revenue Code and Revenue Department regulations. A tax invoice can also serve as a standard invoice or a receipt, so support is required…
For VAT-registered sellers, tax invoices must comply with the Revenue Code and Revenue Department regulations. A tax invoice can also serve as a standard invoice or a receipt, so support is required for both invoice and payment-based tax invoicing. - Create TINV tax invoices when posting invoices containing invoice lines with tax_exigibility='on_invoice'. - Create RCT tax invoices for payments when reconciling payments against invoice lines with `tax_exigibility='on_payment'`, including both full and partial payments. - Use independent numbering sequences for TINV and RCT tax invoices. - Add a dedicated action to print Thai tax invoices. - Display the tax invoice number, date, payment information, and tax breakdown on the PDF. - Support the appropriate tax invoice lifecycle for invoice posting, payment reconciliation, and cancellation. Note: - Initially, in the TH localization, we only added 'Tax' as a prefix to the invoice PDF title to indicate that it was a tax invoice. To print the regular invoice PDF, we provided a separate Commercial Invoice print option. - With this task, we are introducing a complete Thai tax invoice feature. As part of this change, we are removing the old template that only added the 'Tax' prefix to the PDF, since it is no longer needed. - We are also removing the Commercial Invoice print option from the menu. The normal Print PDF button will now print the standard invoice PDF. - To manage and print tax invoices, we have added a new page to the invoice form view where users can see all the tax invoices generated for the invoice and print their corresponding PDFs. - As a result, we are removing the old tax invoice templates and introducing new templates specifically for printing the complete Thai tax invoices. Upgrade: https://github.com/odoo/upgrade/pull/11191 task-[6384295](https://www.odoo.com/odoo/project/967/tasks/6384295)
Belgian payroll now supports the 281.30 and 274.30 declarations used mainly for reporting presence tokens. Businesses can also mark employees to be excluded from existing .10 and .20 declarations and included in the new .30 declaration instead, improving compliance coverage for Belgian payroll reporting.
Original PR description
This commit introduces the 281.30 and 274.30 declarations to the Belgian payroll localization. Those declarations are used mainly for reporting presence tokens (jetons de présence). There was also an option added for the version where an employee can be excluded from .10 and .20 declarations, and be included in the .30 declaration instead. task-6147823
Commissions can now be calculated on point of sale orders, using either quantities sold or sales amounts. This aligns point of sale commission tracking with the existing sales order process and also corrects a reporting issue for invoice-based commission data.
Original PR description
This new bridge module allow to compute commissions based on quantity sold or amount sold in pos.order. The behavior is similar to what we do with sale.order task-6391378
Odoo now supports submitting Pakistan customer invoices and debit notes to the Federal Board of Revenue through Odoo's proxy service. Businesses can validate partner registration, complete required compliance checks, store FBR references and responses, and print QR codes on invoice reports for compliant e-invoicing.
Original PR description
Add support for submitting customer invoices and debit notes to Pakistan's FBR (Federal Board of Revenue) via Odoo's proxy service. Add a button that lets users check a partner's FBR registration status. Sending is blocked by compliance checks until required parameters are set. Once posted to FBR, the request/response and FBR reference are stored and printed with a QR code on the invoice report. Onboarding support is also included to run FBR's required sandbox test scenarios needed to whitelist the database. see odoo/iap-apps#1168 task-2879519