Friday, July 11, 2025
17 changes · saas-18.2
Enhancements to existing features
This change adds a developer/debugging option for IoT hardware drivers to disable longpolling and force websocket communication. It helps developers validate fallback behavior more easily, with minimal 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
This change makes the Point of Sale weighing dialog easier to customize by separating the dialog launch into its own reusable function. It has minimal direct impact on daily users, but helps partners and implementers adapt weighing workflows more safely for specific business needs.
Original PR description
Enterprise PR: https://github.com/odoo/enterprise/pull/89280 This commit makes a small change to move the code that calls the weighing dialog into its own function. This is so it can more easily be overridden. task-4910716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218249 Forward-Port-Of: odoo/odoo#217135
This change reorganizes shared tax testing helpers so they are available from a common invoicing test setup. It helps keep accounting-related automated tests easier to maintain without changing day-to-day user workflows.
Original PR description
…tInvoicingCommon --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217767 Forward-Port-Of: odoo/odoo#215588
Resolved issues and error corrections
A flaky automated test in the Mail app was fixed by waiting for a message reaction to be fully removed before reloading the page. This helps keep validation runs reliable and reduces false build failures without changing user-facing behavior.
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
Miscellaneous changes
Steps to reproduce: 1. Enable the cookie bar. 2. Edit the cookie bar to have a link/button at the center. 3. Go to /shop. 4. Click the "compare" button on one product. 5. Scroll down and click "compare" on another product. Issue 1: Product animation goes to the top-left corner. Issue 2: After accepting the cookie bar, the compare button appears but overlaps with the popover. Reason: To cover bottom fixed elements when any modal is open, we added the `o_bottom_fixed_element_hidde
Original PR description
Steps to reproduce: 1. Enable the cookie bar. 2. Edit the cookie bar to have a link/button at the center. 3. Go to /shop. 4. Click the "compare" button on one product. 5. Scroll down and click…
The live chat chatbot rating test flow now waits until the chat conversation is fully created before closing it. This prevents intermittent test failures under slow network or high CPU conditions, improving confidence in live chat quality checks without changing end-user behavior.
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 stops Odoo from trying to export raw binary file contents, such as PDFs, when users inspect record data in developer tools. It prevents a connection error and makes the attachment debugging view more reliable without changing normal user workflows.
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
The Contacts address data now shows the Indian state as "Odisha" instead of the outdated name "Orissa". This keeps customer and company address records aligned with official Government of India naming guidelines.
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
This update fixes an automated stock workflow test that could fail because it read data before recent changes were saved. It makes the test steps more reliable, helping prevent false failures during quality checks without changing day-to-day user behavior.
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
Customers using store pickup will now see out-of-stock messages when an item is unavailable. This restores important availability information so shoppers can make clearer purchase or pickup decisions.
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
The hardware drivers now avoid replacing certificate data when the response from Odoo.com is empty. This helps prevent the related web service from failing to restart, reducing avoidable service interruptions.
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
This fixes a regression that limited menu icons to PNG files only. Businesses can once again use common formats such as JPEG, SVG, GIF, ICO, and WebP for menu icons, preserving existing customizations and branding.
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 change makes stock quantity report tests use a fixed date so they no longer fail when running across midnight. It improves the reliability of automated checks without changing any user-facing stock functionality.
Original PR description
The tests: - `test_report_stock_quantity` - `test_report_stock_quantity_with_product_qty_filter` can fail if the test class was instantiate at midnight and the tests launched at 00:01. The issue has…
The tests: - `test_report_stock_quantity` - `test_report_stock_quantity_with_product_qty_filter` can fail if the test class was instantiate at midnight and the tests launched at 00:01. The issue has been explained extensively in d1e11dc2b41e66709ddd89beded32872af4118b9 Here is a modest retranscription of its holy analysis: The Test class `TestReportStockQuantity` inherit from `TransactionCase`. So, once initialized, a SQL transaction is started and is the same for all the tests of the class: https://github.com/odoo/odoo/blob/d86409d93e096126b32cbb35f442db332628375d/odoo/tests/common.py#L775-L778 Also, in a SQL request, the method `now()` does not really return the current date: > Notice that NOW() and its related functions return the start time of the current transaction. In other words, the return values of the function calls are the same within a transaction. (https://www.postgresqltutorial.com/postgresql-date-functions/postgresql-now/) So, if we we start all the tests of the class `TestReportStockQuantity` at the end of D01. The SQL transaction is created and the tests are executed one by one with a NOW() corresponding to D01. However, certain indiviual tests might be launched on the following day D02 because it takes time to run the rest of the tests of the class: In particular, the python "today()" will notgive the same date as the SQL NOW and the queries of the test will simply not perform the expected. E.g: https://github.com/odoo/odoo/blob/d86409d93e096126b32cbb35f442db332628375d/addons/stock/tests/test_report_stock_quantity.py#L105-L110 runbot-226726 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215687 Forward-Port-Of: odoo/odoo#215424
A purchase module test was updated to use a product type that is valid without relying on the inventory module. This helps keep automated checks reliable and avoids build failures in purchase-only environments.
Original PR description
`is_storable` is defined in `stock`. This test is located in `purchase`, that do not depend on `stock`. We use type='consu' instead. This change ensures that the product is created with the correct type. build_error-229762 Forward-Port-Of: odoo/odoo#218403
Shipping labels now include a unique print reference when sent to IoT-connected printers. This prevents unnecessary printer error messages while keeping label printing reliable for delivery operations.
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
Indian tax reports now use the official state name “Odisha” instead of the outdated “Orissa.” This keeps report wording aligned with Government of India naming guidelines and avoids confusion in compliance documents.
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 Knowledge app's automated tour test now finds the clipboard copy button more reliably. This helps prevent false failures in testing environments, supporting smoother validation of future changes without affecting day-to-day users.
Original PR description
This commit fixes an issue with the embedded clipboard steps in the commands tour. The selector for the problematic steps was too specific as the copy button isn't always the 1st button. runbot-114522 task-4748626 Forward-Port-Of: odoo/enterprise#80845
Steps to reproduce: 1. Enable the cookie bar. 2. Edit the cookie bar to have a link/button at the center. 3. Go to /shop. 4. Click the "compare" button on one product. 5. Scroll down and click "compare" on another product. Issue 1: Product animation goes to the top-left corner. Issue 2: After accepting the cookie bar, the compare button appears but overlaps with the popover. Reason: To cover bottom fixed elements when any modal is open, we added the `o_bottom_fixed_element_hidden` class with the `d-none` property to hide those elements, making them visible once the modal closes. As a result, the compare button hides when scrolled, leading it to redirect to the top-left corner. Additionally, adding a product triggers the applyStyles function of popper.js to handle popover styles. When the cookie bar is accepted and the modal closes, this method doesn't trigger until scroll. This PR aims to resolve animation of product comparision when modal is open by remove the `o_bottom_fixed_element_hidden` class when added to compare products. Additionally, we add debounce leading and trailing params to the `_hideBottomFixedElements` to call function accordingly. task-3877807 Forward-Port-Of: odoo/odoo#182874