Friday, July 11, 2025
19 changes · saas-18.3
Enhancements to existing features
This update adds a development setting for IoT hardware drivers that can turn off long polling so teams can test websocket-only communication. It helps developers validate fallback behavior more easily, with no expected impact on regular business users.
Original PR description
In order to ease development/debugging lonpolling=>websocket fallback we added the possibility to disable longpolling calls in order to force the communication via websocket. Task: 4929877 Forward-Port-Of: odoo/odoo#218433
Domestic VAT return names no longer show the country ISO code, reducing unnecessary clutter for users. ISO codes will still appear for foreign VAT returns where the country distinction is useful.
Original PR description
Showing ISO codes for every return is unnecessary and should only be shown for foreign VAT returns. This commit removes the ISO code from the return name for domestic return only. task-4783937
Resolved issues and error corrections
This fix prevents the developer record data view from trying to load raw binary file contents, such as PDFs, that cannot be safely converted for display. It avoids a connection-lost error when inspecting attachment records, improving reliability for administrators and support teams.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Enable developer mode; 2. go to Settings / Technical / Database Structure / Attachments; 3. open a PDF attachement; 4. open developer tools; 5. click on Record / Data. Issue ----- > Connection lost. Trying to reconnect... Traceback in logger: > `UnicodeDecodeError: 'utf-8' codec can't decode byte ...` Cause ----- Commit 5ef4c07ada1b4 moved the `json_default` function from `date_utils` to `json`, with the purpose of letting it serialize objects besides `date` & `datetime`. When used for raw data of binary files like PDF, it encounters values that cannot be represented in UTF-8, and because `decode` defaults to strict error handling, an exception is thrown. Solution -------- When sending the `read` request to the ORM, only request fields of that aren't of type `binary` to ensure they're serializable. opw-4717657 Forward-Port-Of: odoo/odoo#218401 Forward-Port-Of: odoo/odoo#209702
Miscellaneous changes
…ith manual confirmation **Steps to reproduce:** - Install Appointement app - Edit an appointement appointment type - Set manual confirmation for the appointement type - Add CC contact as well - Go to the appointement website (/appointement) - Create an appointement and submit it - Nothing is sent to CC contact when the request is made **Issue:** Process was designed to only send notification mails to the CC contacts (`message_partner_ids`) when the request was approved or cancelle
Original PR description
…ith manual confirmation **Steps to reproduce:** - Install Appointement app - Edit an appointement appointment type - Set manual confirmation for the appointement type - Add CC contact as well - Go…
…ith manual confirmation **Steps to reproduce:** - Install Appointement app - Edit an appointement appointment type - Set manual confirmation for the appointement type - Add CC contact as well - Go to the appointement website (/appointement) - Create an appointement and submit it - Nothing is sent to CC contact when the request is made **Issue:** Process was designed to only send notification mails to the CC contacts (`message_partner_ids`) when the request was approved or cancelled (`booked` or `cancelled` appointment_status) but not for `request` when using manual confirmation. This is also quite problematic if `Availability on` is set to resources, as no confirmation mail is sent to anyone in that case (when no CC is specified, there is no other user than the requester). The observed behavior is due to the new process used when making appointement, previously in 17.0 the state was directly set to 'booked' so the mail was directly created and no further mail was sent unless the user explicitly cancelled its appointment. **Fix:** Added 'request' to the filtering on 'appointment_status' when adding the mail templates. Adapted field description and mail templates for clarity. related: cc field description https://github.com/odoo/enterprise/commit/adf47c32ee190dbf98c266d0816c8d03c8cd3e4f appointment_status https://github.com/odoo/enterprise/commit/3c64aa6dcd191248f0806c0b84ffa416d455fde4 request template https://github.com/odoo/enterprise/commit/2316947a0251709f3e469fea996ffac8f4623d98 opw-4658521 Forward-Port-Of: odoo/enterprise#86710
Odoo now cleans Peppol endpoint values before checking whether they are valid, including values already present after a database upgrade. This prevents existing partner records with older invalid formatting from causing errors during recomputation.
Original PR description
Commit odoo/odoo@769a7ec5ed4c introduced a restriction to ensure the Peppol Endpoint only contains valid characters. This causes some issues with upgraded database having existing partner with an invalid value. This commit ensures we properly sanitize both Peppol Endpoint existing and new value (before testing its validity). [opw-4925940](<https://www.odoo.com/odoo/project.task/4925940>) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents the hardware drivers module from replacing certificate data when the response from odoo.com is empty. This helps avoid service restart problems that could disrupt connected hardware operations.
Original PR description
We now ensure that the certificate data returned by odoo.com is not empty, to avoid nginx not restarting. Task: 492610 Forward-Port-Of: odoo/odoo#218325
The Contacts state list now uses the official name "Odisha" instead of the outdated "Orissa" for India. This keeps customer address data aligned with current Government of India naming guidelines and avoids confusion when users select Indian states.
Original PR description
<b>Steps to reproduce:</b> 1. Install the `Contacts` module. 2. Go to Contacts > Create a new contact. 3. Select country "India", then open the State dropdown. 4. Observe that "Orissa" appears instead of the updated name "Odisha". <b>Issue:</b> As per [Government of India guidelines](https://www.mha.gov.in/sites/default/files/2022-08/odishaAlterationAct2011%5B1%5D.pdf), the state name was officially changed from "Orissa" to "Odisha" in 2011. However, Odoo still uses the outdated name in the state selection. <b>Solution:</b> Update the name of the state from "Orissa" to "Odisha" in state records. <b>opw-4935633</b> Forward-Port-Of: odoo/odoo#218342
Products using in-store pickup will now still display an out-of-stock message when inventory is unavailable. This helps shoppers understand product availability clearly instead of missing important stock information during the buying process.
Original PR description
Before the commit, when a 'pick up in store' was published, the out-of-stock message was hidden to avoid confusion. However, customers want to benefit from it, and now we reintroduce it. opw-4791969 Forward-Port-Of: odoo/odoo#218284
Employees with minimal point-of-sale permissions can no longer use the +/- button to set cart item quantities below zero. This prevents unauthorized negative quantities that could affect order accuracy and checkout controls.
Original PR description
Fix issue where minimum rights employee were able to put negative orderline qty in the cart with the `+/-` button task-id: 4922318 enterprise PR: https://github.com/odoo/enterprise/pull/89669 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217774
This fix restores the ability to use common image formats such as GIF, JPEG, SVG, WebP, and ICO for menu icons. It matters because businesses can keep using existing branded icons without converting everything to PNG.
Original PR description
Description of the issue/feature this PR addresses: PR #135607 breaks support of image types other than `png` for menu icons. This puts back the support for previously supported image types. Current behavior before PR: You can't use a menu icon which has a type other than `png`. Desired behavior after PR is merged: You can use `gif`, `ico`, `jfif`, `jpeg`, `jpg`, `svg` and `webp` files like version `16.0`. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218131
This update makes an automated stock workflow test more dependable by avoiding a timing issue where recent changes could appear to disappear during the test. It helps keep quality checks stable and reduces false failures in the stock module.
Original PR description
The `test_add_new_line_in_detailled_op` fails in 18.0+ since clicking on the head of the modal content will trigger a web_read before the records has been updated in db. So that the last applied change disappear. This commit attempt to clean the tour to be more reliable. runbot-113534 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216860 Forward-Port-Of: odoo/odoo#216645
The live chat test flow now waits until a real chat session is created before closing the window and asking for a rating. This prevents intermittent failures in chatbot rating validation caused by slower systems or network delays, improving confidence in release testing.
Original PR description
Chatbot rating tours can sometimes fail. They all share the same steps: start a chat, close the chat, then rate the agent. Before closing the chat, the tours check that the message is present in the DOM, assuming it has been posted, then close the chat window. However, this is not enough to guarantee the thread was properly created. Initially, a temporary thread is shown. When the user sends the first message, a temporary message is posted on that thread while the real thread is created asynchronously. As a result, closing the chat after checking the message in the DOM doesn’t guarantee the window belongs to the persisted thread. If it doesn’t (due to slow network or high CPU load), the rating panel never shows because the real thread was never closed. This commit fixes the issue by waiting for the persisted thread to be created before closing the chat. fixes runbot-159683 Forward-Port-Of: odoo/odoo#218318
This fix prevents an automated mail discussion test from reloading the page before an emoji reaction has been fully removed. It improves the reliability of Odoo's quality checks without changing the user-facing mail experience.
Original PR description
Before this commit, tour "discuss_channel_public_tour" was failing non-deterministically at the following step: ``` .o-mail-Message:not(:has(.o-mail-MessageReaction)) ``` This happens because prio steps added a new reaction and asserted it was shown. It clicks on reaction to remove it and then page reload to see the reaction is gone. Problem is that it can reload page too fast and the RPC to remove the reaction did not have time to occurs. This commit fixes the issue by awaiting message no longer has reaction before page reload. Fixes runbot-error-227769 Forward-Port-Of: odoo/odoo#218132
This fix corrects translation data generated by a recent refactoring across several localization reporting modules. It helps ensure country-specific reports and labels display the right translated text for users in affected regions.
Original PR description
Forward-Port-Of: odoo/enterprise#84682
Users can now share shortcut folders directly from the cog menu next to the breadcrumbs in Documents. This restores a missing sharing option and makes folder sharing more consistent, while also cleaning up unused code.
Original PR description
Before this commit, the share action in the cog menu (next to the breadcrumbs) wasn't available for shortcut folders. This commit fix this issue. This commit also removes some dead code. Task-4897840 Forward-Port-Of: odoo/enterprise#89161 Forward-Port-Of: odoo/enterprise#88512
The India reporting module now uses the official state name "Odisha" instead of the outdated "Orissa" in GSTR-3B report records. This keeps reports aligned with Government of India naming guidelines and avoids presenting outdated regional information.
Original PR description
Issue: As per Government of India guidelines, the state name was officially changed from "Orissa" to "Odisha" in 2011. However, Odoo still uses the outdated name in report. Solution: Updated the records from "Orissa" to "Odisha". opw-4935633 Forward-Port-Of: odoo/enterprise#89947
The Belgian payroll report for double holiday pay now uses the correct label instead of referring to the 13th month. This makes payroll documents easier to identify and reduces confusion for HR teams and employees.
Original PR description
Originally, the name structure for double holiday follows "13th Month -[Legal Name] -[year]". It has been renamed to "[Payslip name]- [Legal Name] -[year]" .
Shipping labels now include the required print identifier when sent to IoT printers. This prevents unnecessary error messages while keeping label printing behavior unchanged for users.
Original PR description
Before this commit, the shipping label printing would send documents to the printer without using a print_id, which would cause an error (but the document would still print). After this commit, we send a print_id using a UUID just like for report printing, ensuring no error occurs on the IoT. opw-4829908 Forward-Port-Of: odoo/enterprise#89962 Forward-Port-Of: odoo/enterprise#89930
Before this commit, when one tries to upload a file to a document request for the first time it does nothing. This is caused by an async memoize call which causes the file to be cleared between the memoize rpc call and the file processing after that call... After that first call the user can upload a new file without issue but it's still annoying. This commit fix this issue by storing the file in a variable before doing the memoize rpc call. Task-4778429 Forward-Port-Of: odoo/enterpri
Original PR description
Before this commit, when one tries to upload a file to a document request for the first time it does nothing.
This is caused by an async memoize call which causes the file to be cleared between the memoize rpc call and the file processing after that call... After that first call the user can upload a new file without issue but it's still annoying.
This commit fix this issue by storing the file in a variable before doing the memoize rpc call.
Task-4778429
Forward-Port-Of: odoo/enterprise#87893
Forward-Port-Of: odoo/enterprise#86002