Tuesday, November 18, 2025
17 changes · saas-18.2
Enhancements to existing features
The mail plugin now has a way to identify the Odoo version it is connecting to. This helps the newer add-in show a clear message when an older Odoo version is not supported, reducing confusion for users during setup or use.
Original PR description
Purpose ======= The new addin has been refactored and doesn't work with older Odoo version, and so we add an endpoint to be able to show a message if we don't support that Odoo version. Task-4727609 Forward-Port-Of: odoo/odoo#236047
Resolved issues and error corrections
This fix ensures the Indonesian QRIS API key and merchant ID fields are visible on partner bank forms when they should be. It prevents configuration details from being hidden due to how the form layout was assembled, helping users complete QRIS payment setup reliably.
Original PR description
**Description of the issue/feature this PR addresses:** This issue occurs because the XPath targeting the `currency_id` field is placed inside a `<div>` that becomes invisible under certain conditions. The `view_partner_bank_form_inherit_hr` view is loaded first due to its sequence, and the `l10n_id` view is applied afterward, causing the QRIS fields to be inserted into that hidden `<div>` from `view_partner_bank_form_inherit_hr`. **Current behavior before PR:** The fields l10n_id_qris_api_key and l10n_id_qris_mid are not visible. **Desired behavior after PR is merged:** The fields l10n_id_qris_api_key and l10n_id_qris_mid are visible by changing XPath target Task: [5247678](https://www.odoo.com/odoo/project.task/5247678) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235949
Miscellaneous changes
When selecting "Brazil" in the _Country_ field in a checkout delivery form, four new fields appear: _Street_, _Street Number_, _Complement_ and _Neighborhood_. These fields would never be translated. ### Steps to reproduce: 1. Have the following modules installed: - Website (`website`) - eCommerce (`website_sale`) - Brazilian - Accounting (`l10n_br`) 2. Use a Brazilian company 3. Go to Settings > Website and set the website's company to the Brazilian company, and add a few languag
Original PR description
When selecting "Brazil" in the _Country_ field in a checkout delivery form, four new fields appear: _Street_, _Street Number_, _Complement_ and _Neighborhood_. These fields would never be translated.…
When selecting "Brazil" in the _Country_ field in a checkout delivery form, four new fields appear: _Street_, _Street Number_, _Complement_ and _Neighborhood_. These fields would never be translated. ### Steps to reproduce: 1. Have the following modules installed: - Website (`website`) - eCommerce (`website_sale`) - Brazilian - Accounting (`l10n_br`) 2. Use a Brazilian company 3. Go to Settings > Website and set the website's company to the Brazilian company, and add a few languages (e.g., Portuguese (BR), Portuguese) 4. In incognito mode, open the website, go to the _Shop_ tab, add an item to cart, and proceed to checkout. 5. During checkout, switch to any language other than English (e.g., Portuguese) 6. Change the _Country_ field to "Brazil" 7. Four fields appeared (_Street_, _Street Number_, _Complement_ and _Neighborhood_), but they're not translated to the selected language This fix adds the Portuguese translations for these fields. After applying the fix, following the same steps will display these fields translated into Portuguese when that language is selected. opw-5123922
Portal users can no longer type in the task discussion area before a new shared project task has been saved. This prevents an error that could interrupt collaboration when using shared project links.
Original PR description
Currently, an error occurs when a portal user opens a `shared project` and tries to `mention(@)` someone in the chatter of a `new(unsaved) task`. **Steps to produce:** - Install the `project` module.…
Currently, an error occurs when a portal user opens a `shared project` and tries to `mention(@)` someone in the chatter of a `new(unsaved) task`. **Steps to produce:** - Install the `project` module. - Open the project app and create a new project with at least one task. - From the project’s `dropdown menu(⋮)`, select `Share Project`. - Add a `collaborator: Joel Willis`, with `Edit access` mode, copy the public link, and click `Share Project`. - Open the shared link in an incognito window and sign in as a portal user. - Open the `project folder` > open any task > click `New` > type `'@'` in the chatter. **Error**: `ValueError: Expected singleton: project.task()` **Root cause:** The `composer(message box)` allows typing and mention suggestions even when the task record is not yet saved (`self.thread.id` is `undefined`). At [1], the method is called on an `empty` recordset, causing an `error`. **Fix:** This commit prevents users from writing in the chatter by stopping the composer initialization when the record(thread) is `unsaved`. [1]: https://github.com/odoo/odoo/blob/5cf96828652c2388808b3e49ae67e188c401ec63/addons/project/models/project_task.py#L2051-L2071 sentry-6982269693 Forward-Port-Of: odoo/odoo#235184
On mobile devices, the employee org chart button now opens the hierarchy view instead of the kanban view. This makes it easier for users to see reporting lines and manager relationships as intended from an employee record.
Original PR description
Steps to Reproduce: - Open an employee record. - Set managers for the employee. - Open the employee’s form view on mobile. - Click org chart stat button. Before: - On mobile, the org chart button opened the Kanban view by default. After: - On mobile, the org chart button now opens the Hierarchy view by default. task-5245129 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235228
Fixes an issue where users could see an error when opening a new inventory quantity record without a location selected. The form now remains usable instead of failing, improving reliability during inventory quantity updates.
Original PR description
Currently, an error is produced when accessing the stock quant form view without a location set. **Steps to Reproduce:** 1. Install the Inventory module. 2. Create a product with tracking enabled (By Unique Serial Number). 3. Click **"Update Quantity"** (opens list view). 4. Click **New**, click View on the unsaved record (opens form view). 5. Remove the Location field. **Error:** `TypeError - sequence item 0: expected str instance, bool found` **Cause:** In the display name computation at [1], the system attempts to join name parts where one of them can be `False` if the location is not set. **Fix:** Before generating the display name, it now checks whether the record is saved (record.ids). If the record is unsaved (no ID), it sets an empty `display_name` and skips the name-joining logic. [1] - https://github.com/odoo/odoo/blob/16e889bf5885c4d827b8c2c5dce102f98aad689f/addons/stock/models/stock_quant.py#L599 sentry-6717759358 Forward-Port-Of: odoo/odoo#234552
Odoo no longer enables iDEAL by default for new Mollie payment setups, because new Mollie accounts only support card payments initially. The deprecated Sofort option is also removed from Mollie’s linked payment methods, reducing confusion and preventing unavailable payment choices from appearing.
Original PR description
**[FIX] payment_mollie: remove iDEAL from the default payment methods** When a new Mollie account is created, it only accepts card payments out of the box. In Odoo, both the Cards and iDEAL payment methods were activated by default upon enabling the payment provider, while iDEAL required manual activation from Mollie's dashboard. --- **[FIX] payment_mollie: remove Sofort from the linked payment methods** See https://help.mollie.com/hc/en-us/articles/20904206772626-SOFORT-Deprecation-30-September-2024ard. Forward-Port-Of: odoo/odoo#236044
This update improves Odoo's automated test environment so file and attachment handling behaves more like a real browser. It reduces false test results and helps teams catch issues around uploads, downloads, and external routes more reliably before they reach users.
Original PR description
See commit messages for details --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#234558
Saving a product from the Point of Sale screen no longer causes its internal reference to appear before the product name. This keeps product labels consistent for cashiers and avoids confusion until the page is refreshed.
Original PR description
In PoS, when editing and saving a product’s information, there was a bug where the product reference was shown before its name. Steps to reproduce: ------------------- * Add a reference to a product available in PoS * Open PoS * Click on the 'i' on the top right of that product * Click on Edit * Click on Save (no need to do any modification) > Observation: The reference appears before the name. Refreshing the page removes, as it triggers a new read. Why the fix: ------------ Reference are never shown in pos thank to this context key `display_default_code: false` opw-5001355 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#222640
Flutterwave payment requests now include a time-based suffix so each transaction reference stays unique, even if test or merchant databases are reset. This helps avoid payment request failures caused by reused references and keeps Flutterwave transactions easier to distinguish.
Original PR description
The `/payments` endpoint of the Flutterwave v3.0.0 API expects unique `tx_ref` parameters (matching Odoo's payment transaction `reference` field) to be passed. This is guaranteed by a UNIQUE() SQL constraint in Odoo, but testing sometimes involves dropping the database, leading to transaction references being repeated at the provider level for a given merchant account. This commit singularizes all transaction references by suffixing them with the current timestamp, ensuring that the `tx_ref` API parameter remains unique across transaction reference sequences. Forward-Port-Of: odoo/odoo#235799
This fix ensures the Mail app correctly notices when a record has been deleted or no longer exists. It helps prevent outdated information from remaining visible and supports more reliable messaging behavior.
Original PR description
The `exists` function of mail records is not reactive. Indeed, it uses a symbol, stored on the proxy internal field which is not observed. This commit fixes the issue by storing it on the record and ensuring we write on the full proxy when the record is deleted. 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 Forward-Port-Of: odoo/odoo#236042
This fix makes tabbed sections in a module's information page clickable when viewing its index.html content. Users can now switch between tabs as expected, matching the behavior seen in the Odoo Apps Store.
Original PR description
* Before: if we have a block contain multiple tab in index.html file we can not click on it to switch between tab, unlike the behiviour in odoo apps store description https://github.com/user-attachments/assets/ab7f8213-2112-46e2-bb72-5e01cc1f7883 * After: Make the nav tabs work as it should be https://github.com/user-attachments/assets/12c05abc-84f6-495e-ae5b-b6eca4d81a92 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 Forward-Port-Of: odoo/odoo#186568
A problematic automated test was removed because it depended on functionality from another module and from Enterprise-only fields. This prevents test/build failures and keeps the accounting codebase validation reliable while a better replacement can be added later.
Original PR description
The unit test `test_can_reset_deferred_invoice()` has several issues. 1. It should be in the `account_audit_trail` module, as the test requires this module. [Unit test documentation: modules](https://www.odoo.com/documentation/19.0/developer/tutorials/unit_tests.html#modules). 2. The test references fields from the Enterprise module `account_accountant`, `account.move.line.deferred_start_date` and `account.move.line.deferred_end_date`. This causes build tests to fail. As such, the test should be removed now and replaced later if necessary. Fixes [PR 235223](https://github.com/odoo/odoo/pull/235223) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235813
This fixes an internal web testing issue where simulated file uploads could fail after interacting with elements inside embedded page sections. It improves reliability for automated checks, helping prevent false test failures without changing end-user behavior.
Original PR description
Before this commit, using 'setInputFile' after interacting with an element contained in any shadow root would not work ("no input has been interacted with" error).
This commit allows the listeners responsible for detecting clicks/focus on file inputs to handle the shadow root cases properly.
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#235961This change makes the manufacturing test flow more reliable by removing a search step that could refresh the screen at the wrong moment. It also ensures the intended product appears first in the catalog, reducing intermittent failures in the add-component process.
Original PR description
The search in the "Add Component" dialog caused a re-render race, making the tour ``test_add_component_from_shop_foor_in_multi_step_manufacturing`` fail intermittently. This fix removes the search steps and marks the “Courage” product as favorite so it appears first in the catalog. runbot-227694 Forward-Port-Of: odoo/enterprise#92403
This change prevents the phone system from trying to register twice when a user leaves a page. It avoids an error during page unload, making sign-out and navigation smoother and more reliable.
Original PR description
On page unload, two conflicting things happen: - A REGISTER request with expires=0 is sent to invalidate the registration - The WebSocket disconnects, triggering the reconnection mechanism that attempts to reissue a registration These two concurrent and conflicting REGISTER requests result in the following error: > RequestPendingError: REGISTER request already in progress, waiting for final response This commit prevents the reconnection mechanism from occurring in the event of a "natural" disconnection, such as one triggered by a page unload. This way, the two conflicting REGISTER requests aren't sent on page unload. [Task-5261940](https://www.odoo.com/odoo/project/5778/tasks/5261940) Forward-Port-Of: odoo/enterprise#99560 Forward-Port-Of: odoo/enterprise#99376
Fixes an issue where locking a document in the preview did not refresh the available actions in the menu. Users will now see the correct options right away after changing a document’s lock status, avoiding confusion and inconsistent behavior.
Original PR description
Steps to reproduce =================== - Preview any documents. - Click on the actions menu and lock the document. - Now go to the actions menu again. => The set of options is not updated. Technical =========== - The action menu, which we are using inside the file previewer, is passed explicitly inside the FileViewer component of the document. We were using the `record.load()`, which will not have any effect on the FileViewer component and that's why the action menu was not updating. After this commit ================== - Used the `this._notifyChange()` method, which closes the preview and loads the model to align with the same behaviour as other actions. Task-4988116