Daily updates from Odoo
Friday, November 14, 2025
8 changes · master
Enhancements to existing features
The Indian localization now determines whether invoice lines are goods or services directly from the HSN code, reducing unnecessary mismatch warnings. Missing or invalid HSN codes will now block invoice reporting, helping businesses catch compliance issues earlier.
Original PR description
With this **PR**, we remove the warning about mismatches between HSN code and product type. From now on, the product type will be derived directly from the HSN code: if the HSN starts with '99', it will be considered a 'service'; otherwise, it will be treated as 'goods'. This simplifies the user experience by reducing unnecessary warnings. This will also cover cases where the product is service but the HSN is of goods for e.g. Job Work, Discount Line etc. Additionally, invalid/missing HSN on invoice line will now raise a blocking warning. **task**-5061450 Community PR - https://github.com/odoo/odoo/pull/227879 Forward-Port-Of: odoo/enterprise#95108
Point of Sale can now send refund requests to Six payment terminals when an order line has a negative amount. This helps stores process returns through the terminal more accurately and adds safeguards to avoid incorrect automatic refunds from invalid transaction data.
Original PR description
This PR adds the possibility to refund payments with Six terminals which use TIM (Till Integration Module) protocol. When the amount is negative on an order line in PoS, it will now request a refund instead of a payment on a Six terminal This PR also adds the reversals to Six terminals and adds a check for the `transactionType` field to make sure we don't automatically refund if we get invalid data in this field task-3619619
Kenya payroll is being updated so flexible benefit amounts are configured through salary rules instead of separate payroll input records. This makes payroll setup more consistent and prepares the benefits configuration for the newer salary-rule-based flow, with related test and demo data updates.
Original PR description
The main purpose is to adapt the flexible benefits system to use salary rules for its configuration. At this stage, it simply requires converting the payroll inputs into flexible salary rules. . Adapted the record in the hr_salary_rule_data that linked to payroll inputs to become salary rules with condition_select set to property_input. . Removed the obsolete records previously defined in hr.payslip.input.type and converted their purpose into corresponding salary rules in hr.salary.rule. . Modify the existing tests in test_salary_rules and updated demo data to correctly utilize the new salary rule codes for input creation task-5122338
Planning users will now see more readable names when selecting resources and sale order lines in dropdown fields. This makes it easier to identify the right resource or sales line quickly and reduces selection mistakes.
Original PR description
New formatting for M2X selection of: - Resource - Sale Order Line Improved display_name of Resource and Sale Order line in M2X dropdowns by applying formatted_display_name. task-4972325 Examples : <img width="509" height="459" alt="image" src="https://github.com/user-attachments/assets/6cfa9d8a-59d9-4db5-aa6f-812fe9599068" />
When a call activity is completed by placing a call, the related call record is now shown directly in the chatter. This makes it easier for users to review call details and keep communication history connected to the business record.
Original PR description
If a call activity is marked as done by placing a call, we will show the link to the voip.call record in the chatter. Task-5108217
SEPA payroll payments can now be used without automatically installing the full Accounting app. This keeps Accounting optional while allowing businesses to use Payroll with the free Invoicing module, helping avoid unnecessary plan or pricing changes.
Original PR description
Purpose: Previously, installing Payroll with SEPA payments automatically installed the Accounting app through the `hr_payroll_account` dependency. This forced users out of the OAF plan and added a large module they might not need. This PR includes: - Removed dependency on `hr_payroll_account` from the SEPA Payroll module. - Added dependency on `hr_payroll` instead. - If Accounting is installed, SEPA continues to work as before. Result: With this change, SEPA payroll payments can now work with only the Invoicing module (which is free and doesn’t impact pricing). Accounting remains optional, if already installed, the behavior stays the same. task-5248512
Invoices and sales orders for Brazilian localization now show a clearer tax breakdown for each line, including tax name, amount, and percentage. This improves transparency for users and their customers, especially when taxes are calculated through Avalara.
Original PR description
*: l10n_br_edi, l10n_br_avatax, l10n_br_edi_sale, l10n_br_edi_pos Purpose: Display the tax breakdown of each line on invoices and sale orders, showing the tax name, tax amount, and tax percentage. This implementation will offer transparency to users and their customers alike. Additional changes: - Refactored duplicate logic to mixin since common methods were used across pos.order, sale.order, and account.move - Added _search_existing_tax so that taxes can be searched based on the response received from Avalara - Added l10n_br_tax_details compute to mixin - Extracted _l10n_br_call_avatax_taxes for pos.order and sale.order - l10n_br_edi_avatax_data should be a Json field and not be cleared task-5117824
Planning schedules now show every employee in a selected department when viewing shifts grouped by resource, including employees without assigned shifts. This makes it easier for managers to spot available people and assign work directly from the Gantt view.
Original PR description
Steps to reproduce: - Install the Planning module - Open the Gantt view - Group by Resource - Search using a Department Now, allocated and unallocated employees are shown when grouping by resource and filtering by department. This helps in easily assigning shifts. task-4377548