Tuesday, February 17, 2026
20 changes · saas-19.1
Enhancements to existing features
This update adjusts Odoo's Indian localization to align with new requirements for GST e-invoices. Specifically, it switches to a new GST Suvidha Provider (GSP) configuration, ensuring accurate and compliant invoice generation. This change is necessary due to recent integration updates with Indian tax authorities.
Original PR description
Update the Indian localization to switch the GST e-invoice GSP (GST Suvidha Provider) configuration to a new provider as required by recent integration updates. This change ensures that GST credentials uses the new GSP configuration and aligns with updated operational requirements. Task: 5379879 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243296
This update adjusts Odoo's payroll system to comply with the new 'One Big Beautiful Bill Act' (OB3) in the US, specifically regarding overtime tax deductions. The changes allow for capped overtime deductions based on income levels, ensuring accurate tax calculations for employees. This update primarily impacts US payroll functionality.
Original PR description
Purpose: In July 2025, the US Federal Government passed the "One Big Beautiful Bill Act" (OB3), which incurred policy changes around taxes, spending, and economic incentives. Odoo will need to adapt…
Purpose: In July 2025, the US Federal Government passed the "One Big Beautiful Bill Act" (OB3), which incurred policy changes around taxes, spending, and economic incentives. Odoo will need to adapt data and features to be compliant with the following changes: - No tax on overtime: Qualified overtime can be deducted, capped at $12,500 for singles and $25,000 if married filing jointly. The deduction is not avaiable if MAGI is over $150,000 for singles and $300,000 if married filing jointly. To adapt to the changes, the following salary rule and rule parameters were added: - l10n_us_hr_payroll_structure_us_employee_qualified_overtime (hr.salary.rule) - rule_parameter_federal_qualified_overtime_deduction_cap (hr.rule.parameter) - rule_parameter_federal_qualified_overtime_deduction_cap_2025 (hr.rule.parameter.value) The new salary rule is meant for informational purposes only. It will always show on the employee payslips if they inputted overtime work entries for the month and if the deduction cap has not been met yet. task-4964361 Forward-Port-Of: odoo/enterprise#107187
This update switches the GSP provider for Indian GST e-invoices to align with recent integration updates. This change ensures Odoo correctly processes and reports on Indian GST data, maintaining compliance with regulatory requirements. It’s a necessary update to support ongoing operations.
Original PR description
Update the Indian localization to switch the GST e-invoice GSP (GST Suvidha Provider) configuration to a new provider as required by recent integration updates. This change ensures that GST credentials uses the new GSP configuration and aligns with updated operational requirements. Task: 5379879 Forward-Port-Of: odoo/enterprise#103984
Resolved issues and error corrections
This update restores a previously removed feature that allowed users to designate orders as 'trusted' within the Point of Sale system. This functionality was critical for streamlining order processing and reducing manual intervention. The change ensures that trusted orders are correctly handled, improving operational efficiency.
Original PR description
The button save and all the logic about trusted orders were removed. This commit puts it back. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234941 Forward-Port-Of: odoo/odoo#200567
This update prevents an infinite page reload cycle when applying multiple gift cards from the same program. The fix addresses a discrepancy in how discount lines are handled, specifically when multiple gift cards are used. This ensures a smoother checkout experience for customers.
Original PR description
### Issue: Applying multi gift card from the same program results in an infinite reload cycle. #### Steps to reproduce: 1- Create a gift card program and generate two gift cards. 2- In eCommerce add…
### Issue: Applying multi gift card from the same program results in an infinite reload cycle. #### Steps to reproduce: 1- Create a gift card program and generate two gift cards. 2- In eCommerce add a deliverable product to cart. 3- Open cart and add both gift card codes. 4- Click on checkout to navigate to delivery step. The page is going to keep refreshing. ### Cause: The reload is supposed to sync the discount lines in the back-end with the discount lines displayed during checkout. If the number of lines don't match, a reload is triggered.: https://github.com/odoo/odoo/blob/7462ec423e8b106a5175a71ac009176d16cdf225/addons/website_sale_loyalty/static/src/js/checkout.js#L22-L24 After the fix #191132, discount lines are grouped by `reward_id`. This is done because in the back-end, by applying a single percent discount, separate lines are created per product lines with different taxes, while in front-end there is still single line. However, that fix doesn't consider that a SO might have multiple lines of the same reward: ewallet, gift_card ### Fix: This can be fixed by separating logic of groupable lines which are the lines with `percent` mode, with `per-point` mode lines. Discount is the only mode that might be added to multiple lines separately, keeping #191132 fix, and `per-point` is the only mode that might be applied multiple times per reward (in ewallet and gift_card). opw-5485912 Forward-Port-Of: odoo/odoo#248215
This update fixes an issue where the currency rate used to value purchase invoices wasn't correctly applied when the rate was manually adjusted. This resulted in inaccurate product valuations. The fix ensures that the correct currency rate is always used, regardless of manual rate changes, leading to accurate accounting.
Original PR description
**Problem:** The value of a move does not take the correct currency rate if it was changed manually on the invoice. **Steps to reproduce:** - make sure dollar is your main currency - activate euro…
**Problem:** The value of a move does not take the correct currency rate if it was changed manually on the invoice. **Steps to reproduce:** - make sure dollar is your main currency - activate euro and set a rate of 1 USD -> 2 euros - create an avco perpetual storable product with no tax - confirm a purchase order for 1 product at 100 euros with no tax - validate move - create a bill for this purchase order - set the currency to euro - below 'EUR' change the currency to 4 (the bug also happens if you open the widget calendar and select a date with another rate than the invoice date) - in the journal items tab you should see the value going from 50 to 25 for the account move lines. - confirm the invoice - open stock and search your product **Current behavior:** the unit price is 50 **Expected behavior:** it should be 25 **Cause of the issue:** In _get_value_from_account_move when computing the value, we convert the value of the account move line using the _convert method on the currency at the date of the invoice, but if the rate was changed manually this is no longer correct. https://github.com/odoo/odoo/blob/4ad397e94b4661cd64515e137b3e650dc330269c/addons/purchase_stock/models/stock_move.py#L170 **fix** When manually changing the rate on the widget, the account move lines are updated using currency_rate https://github.com/odoo/odoo/blob/8d7194128b26a09be75bf5bfe4e63c8bbfaac69f/addons/account/models/account_move_line.py#L1634 Using the same compution for the valuation of the move ensures alignment. currency_rate is computed based on invoice_currency_rate which is updated in case the rate was set manually. https://github.com/odoo/odoo/blob/4ad397e94b4661cd64515e137b3e650dc330269c/addons/account/models/account_move_line.py#L726 opw-5416654 Forward-Port-Of: odoo/odoo#245714
This update resolves payment issues with Adyen, Mercado Pago, and Stripe caused by incorrect currency rounding. The fix ensures all payment amounts are rounded down to the currency's minor unit during transaction validation, preventing payment failures and improving payment processing accuracy. This change impacts all payment provider integrations.
Original PR description
*: payment{,_adyen,_mercado_pago,_stripe} ### Issue: The payment in some payment providers are failing to due setting currency decimals. #### Steps to reproduce: 1- In USD currency form in developer…
*: payment{,_adyen,_mercado_pago,_stripe}
### Issue:
The payment in some payment providers are failing to due setting
currency decimals.
#### Steps to reproduce:
1- In USD currency form in developer mode, set the rounding factor
to `0.001000`, so we have 3 decimal places.
2- From `Decimal Accuracy` set Price Unit to 4 digits.
3- Refresh the page.
4- Create a SO and add a line. Set the price to `200.7647`.
5- Refresh the page again and generate a payment link.
6- Pay through Adyen. As you see payments fail.
### Cause and Fix:
This issue is the same as https://github.com/odoo/odoo/pull/245059. That fix only focused on Stripe, however, the same issue is reproducible on other providers e.g. `Adyen`. In order to avoid the same issue, we can have a general fix to round down all payment transaction amounts to currency's minor unit in `_validate_amount_and_currency`.
---
There is another issue in Mercado Pago which the if currency is not one of these currencies then it will not be sent to provider rounded:
https://github.com/odoo/odoo/blob/035b701cbf7bd654f56f07244e606e4038c4115a/addons/payment_mercado_pago/const.py#L39-L43
Mercado Pago rounds **up** in these cases, which will cause mismatch in `_validate_amount_and_currency`.
opw-5871470
Forward-Port-Of: odoo/odoo#248320
Forward-Port-Of: odoo/odoo#245877This update resolves an issue where importing EDI invoices with products restricted to a different company would fail. The fix ensures products are correctly identified during import, preventing 'Incompatible company' errors and improving the reliability of multi-company invoice processing. This ensures accurate financial data import across multiple companies.
Original PR description
In a multi-company environment, importing an EDI invoice could fail if a line contains a product restricted to another company. The error "Incompatible company on records" was raised because company consistency rules were applied.
Example steps to reproduce:
- Create two Italian companies, A and B
- In company A, create a product with default code or barcode "TEST"
- This can also occur using the barcode and the “Vendor Product code” from the Purchase supplier.
- Restrict this product to company A
- Create an EDI invoice in company A with this product for company B as customer
- Import the invoice in company B, which would fail
This fix adds a search domain to correctly find products during import
opw-5496912
Forward-Port-Of: odoo/odoo#248893
Forward-Port-Of: odoo/odoo#248149This update fixes a bug where future-dated POS orders placed via self-checkout weren't properly canceled. Now, canceling a future order correctly removes it from both the POS interface and the system, ensuring accurate order management. This improves the reliability of our POS system.
Original PR description
Before this fix, when we placed an order from the self-checkout with a preset slot for a future date, we weren't able to cancel it from the POS. The UI showed it as canceled, but after refreshing, the order was still there. Now, when we cancel an order scheduled for the future, it is correctly canceled both in the UI and in the POS. task : 5246089 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248246 Forward-Port-Of: odoo/odoo#235775
This update resolves an issue where manual deletion of WhatsApp templates during production upgrades caused database migration blocks. By modifying the configuration to allow missing templates without errors, the upgrade process is now more robust and reliable. This ensures smoother and faster updates for our users.
Original PR description
Issue: ------ The database migration was blocked during the `config_parameter` [loading](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/config_parameter_whatsapp_template.xml#L6)…
Issue:
------
The database migration was blocked during the `config_parameter` [loading](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/config_parameter_whatsapp_template.xml#L6) phase. This occurred because several `ir.config_parameter` records used `ref()` to point to [whatsapp templates](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/sign_request_whatsapp_templates.xml) that were manually deleted in the production environment.
ValueError is raised:
```py
raise ValueError('External ID not found in the system: %s' % xmlid)
ValueError: External ID not found in the system: whatsapp_sign.sign_request_whatsapp_template
```
Cause:
-------
Since these whatsapp templates are defined with [`forcecreate="0"`](https://github.com/odoo/enterprise/blob/19.0/whatsapp_sign/data/sign_request_whatsapp_templates.xml#L3), Odoo does not recreate them automatically during migration. This left the External IDs (IMD) pointing to non-existent records, causing a `ValueError: External ID not found in the system` that blocked the migration.
Solution:
-----------
Updated the `ref()` calls in the XML for these configuration parameters to include `raise_if_not_found=False`. This allows the registry to initialize successfully by returning None instead of crashing if a template is missing.
tgb: [2448](https://upgrade.odoo.com/odoo/tbg/2448?debug=1)
upg: [3895200](https://upgrade.odoo.com/odoo/upgrade.request/3895200?debug=1)
opw: [5931388](https://www.odoo.com/odoo/project/70/tasks/5931388?debug=1)
Forward-Port-Of: odoo/enterprise#107477This update fixes a reporting issue where VAT numbers were incorrectly excluded from INF reports for businesses without a country setting. The changes now include partners with no VAT number and harmonize warning messages, ensuring more accurate reporting and compliance for Estonian companies using Odoo Enterprise.
Original PR description
Both inf-a and inf-b reports should include partners with no vat number. Also updated partner warning on reports to harmonize with main query itself. Now warning is shown if: - no country and no VAT - no country and VAT not starting with EE - no country and VAT is "/" Forward-Port-Of: odoo/enterprise#106954
This update resolves an issue where incorrect data formatting in certain locales (like the Netherlands) caused problems with Stripe account creation. To ensure accuracy and compliance, the automated KYC pre-filling process has been replaced with a fully manual process, reducing potential errors and improving the user experience.
Original PR description
Context:
When creating a livemode account, the data pre-sent by the database to stripe may cause issues in some localizations. e.g. the Netherland where people are forced to use a zip in the "\d{4} ?[A-Z]{2}" pattern, which they do not alway do
Solution:
Pre-filling KYC was deemed too error-prone and this would be switched to a fully manual KYC
OPW-5899276
Linked (but not depending on) https://github.com/odoo/iap-apps/pull/1431
Forward-Port-Of: odoo/enterprise#107115This update corrects a bug where changing a bank account in the salary settings would incorrectly add multiple accounts to an employee's profile, leading to incorrect allocation percentages. The fix now replaces all existing bank accounts with the new one, ensuring accurate payroll processing.
Original PR description
When changing a bank account in the salary configurator, the system was adding the new bank account to the employee's existing bank accounts list, ending up having multiple bank accounts where the first retained 100% allocation and subsequent ones had 0% allocation. The fix replaces all existing bank accounts with only the new one. task-5905542 Forward-Port-Of: odoo/enterprise#106333
This update adjusts the calculation of sickness relapse periods for Belgian payroll, aligning with new tax regulations. Starting January 1, 2026, the allowed relapse period between sick leaves will be increased from 14 to 56 days. This ensures accurate reporting and compliance with Belgian tax laws.
Original PR description
Spec :- Since 01/01/2026, the period between two sick time off to consider it as a relapse has been increased from 14 days to 56 days. Implementation :- . Update sickness relapse period from 14 to 56 days if the leave starts from 2026 . Add leave work_entry type where work_entry use date_start . Add corresponding tests task-5476174 Forward-Port-Of: odoo/enterprise#107294 Forward-Port-Of: odoo/enterprise#104782
This update resolves a critical issue (274XX) within the Belgian payroll module. The fix ensures accurate calculations for employee compensation, preventing potential errors in payroll processing. This update improves the reliability of the HR payroll functionality.
This update resolves an issue where Odoo couldn't successfully process Fedex freight requests due to missing information required by the Fedex API. The fix adds a necessary field, 'expressFreightDetail,' to the API request, allowing rate calculations to proceed without errors. This ensures users can accurately obtain delivery estimates for Fedex shipments.
Original PR description
Issue ----- Fedex freights services require extra information not present in the db, so requests will not be accepted by the API. A rate can be retrieved but the delivery cannot by validated by users as they get a `SHIPMENT.LOADCOUNT.INVALID` error. This is due to the lack of a `expressFreightDetail` entry in the request sent to the Fedex API. This `expressFreightDetail` field should contain some information which Odoo does not have a way to retrieve, such as a `bookingConfirmationNumber`. API details: https://developer.fedex.com/api/en-us/catalog/ship/v1/docs.html#:~:text=expressFreightDetail Feedback 5913471 ----- Ticket: opw-5876616 Forward-Port-Of: odoo/enterprise#106590
This update resolves a bug that prevented users from generating reports by billing time when grouping by employee. The fix corrects an error in the data processing logic, ensuring the report accurately displays hours worked for each employee. This improves the accuracy and usability of the Timesheet analysis feature.
Original PR description
## Short functional explanation of the error In Timesheets, when reporting by billing time, if we try to group by employee, an error occurs. ## Reproduction Steps 1. Go to Timesheets. 2. Click on the…
## Short functional explanation of the error
In Timesheets, when reporting by billing time, if we try to group by employee, an error occurs.
## Reproduction Steps
1. Go to Timesheets.
2. Click on the Reporting tab > By Billing type.
3. Click on the search bar and click on Employee under the Group By section.
### Expected behavior
A report shows the different hours worked on billing time for each employee.
### Unexpected behavior
An error occurs:
```TypeError: data.forEach is not a function```
## Origin of the issue
When retrieving the data to show in the report after having grouped
it by employee, this piece of code is called:
https://github.com/odoo/enterprise/blob/42102423069c2cebbc01eb4d1d8f9b6215358639/sale_timesheet_enterprise/static/src/views/timesheet_analysis_pivot/timesheet_analysis_pivot_model.js#L23-L36
However, the variable (data) on which we perform the forEach isn't
an array: it's an object of structure:
```
{ "group": { "rowValues": [], "colValues": [] }, "rowGroupBy": [ "employee_id" ], "colGroupBy": [], "subGroupIndex": 2, "subGroups": [ { "employee_id": [ 1, "Administrator" ], "__extra_domain": [ [ "employee_id", "=", 1 ] ], "unit_amount:sum": 0, "__count": 2, "__domain": [ "&", [ "project_id", "!=", false ], [ "employee_id", "=", 1 ] ] } ] }
```
on which we can't perform a forEach. The data we want to access to
use in the report is actually the `subGroups` element of data.
__
opw-5910036
Forward-Port-Of: odoo/enterprise#106969This pull request addresses a critical error in the Belgian payroll calculation (l10n_be_hr_payroll) related to a specific tax code (274XX). The fix ensures accurate payroll processing and compliance with Belgian tax regulations. This update resolves a potential revenue impact for businesses using this module.
Original PR description
Forward-Port-Of: odoo/enterprise#107679
This update corrects a calculation error related to union and professional association fees within the Australian payroll system. The change ensures more accurate deductions are applied, aligning with updated Australian tax regulations and improving the reliability of payroll reporting for our Australian clients. This is a critical fix for accurate financial reporting.
Original PR description
. Update `Union and professional association fees` code in computations of `Fees and Deductions` rule task-5402666 Forward-Port-Of: odoo/enterprise#104911
This update fixes an error in the calculation of end-of-service benefits for employees in Saudi Arabia who resign after less than two years of service. Previously, the system incorrectly generated a negative value; now, it correctly calculates a zero value, aligning with Saudi regulations. The change improves accuracy and compliance for payroll processing.
Original PR description
purpose: In the saudi eos rule, if the employee resigned after working in the company less than 2 years, their end of service is being computed as a negative value when it should be 0 instead. - added the correct check for the case of employee resignation - moved the logic of the salary rules for EOS benefit and provision from python methods to the rule itself to be more clear for the user task-id: 5499646 Forward-Port-Of: odoo/enterprise#104466