Friday, July 11, 2025
5 changes · saas-18.4
Enhancements to existing features
This update simplifies how external systems send data to Odoo's web JSON API by requiring all inputs to be named directly in the request. It reduces ambiguity for integrations and helps prevent naming conflicts in public methods.
Original PR description
Before this work, the scheme was: POST /json/2/res.partner/create Content-Type: application/json { "ids": [] "context": {}, "args": [ { "name": "bob" } ], "kwargs": {} } With this work it becomes:…
Before this work, the scheme was:
POST /json/2/res.partner/create
Content-Type: application/json
{
"ids": []
"context": {},
"args": [
{
"name": "bob"
}
],
"kwargs": {}
}
With this work it becomes:
POST /json/2/res.partner/create
Content-Type: application/json
{
"ids": []
"context": {},
"vals_list": [
{
"name": "bob"
}
]
}
We removed the `args` way of providing positional arguments, now all parameters need to be given as named argument.
All the `kwargs` now must be defined at the same level as `ids` and `context`. A linter is being added in Odoo to prevent public methods from using `ids` and `context` as parameter name to prevent conflicts at #218355.
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-prThis update restores automated checks for website navigation, mega menu editing, and event ticket purchasing after recent website builder changes disrupted them. It helps ensure these website flows continue to work reliably for users and administrators.
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
Indian e-invoicing now performs stronger checks when the government reports a duplicate IRN, comparing returned invoice details with the invoice in Odoo when verification support is available. This helps users spot mismatched duplicate IRNs more clearly and provides better guidance when verification cannot be completed.
Original PR description
Before this commit: - Duplicate IRNs were not deeply verified if the response already contained a `SignedInvoice`. - Mismatches between government-returned IRNs and the system’s invoice data were not clearly logged or validated. After this commit: - If the `jwt` library is available and the response includes a `SignedInvoice`, the decoded content is compared against the invoice’s `Gstin` and `TotInvVal`. - A mismatch triggers a user-friendly error message about the duplicate IRN with non-matching data. - Decode errors are logged as warnings to aid in debugging. - A fallback message is shown when the `jwt` library is not installed, indicating that verification could not be performed. This ensures more robust validation of duplicate IRNs and improves user feedback in case of discrepancies or missing dependencies. Forward-Port-Of: odoo/odoo#213909
Expense receipt scanning now captures real merchant or location descriptions, such as restaurant or fuel station names, instead of broad categories like food or gasoline. This makes automatically created expense records clearer and easier for employees and approvers to understand.
Original PR description
The detection of the description has been improved in the latest version of the expense OCR API. It now actually detects a description (restaurant name, fuel station name, etc) instead of predicting a category ('food', 'parking', 'gasoline', etc).
Task [link](https://www.odoo.com/odoo/project/2068/tasks/4623180)
task-4623180
Forward-Port-Of: odoo/enterprise#89898
Forward-Port-Of: odoo/enterprise#89448IoT requests and responses are now matched with a unique identifier, reducing the chance that simultaneous device communications are mixed up. This helps improve reliability when multiple IoT actions happen at the same time.
Original PR description
We now generate a unique identifier we provide both longpolling and websocket requests and responses to ensure we don't callback for the wrong response if two requests are made simultaneously.