Tuesday, November 18, 2025
12 changes · saas-18.3
Enhancements to existing features
The IoT Box technical information view now turns the displayed commit hash into a clickable link to the matching GitHub commit. This makes it faster to verify the exact software version running on the device and simplifies troubleshooting.
Original PR description
To ease checking the HEAD commit on the IoT Box, we now compute the github url to the commit, and redirect to it clicking on the hash in the technical information tab. Forward-Port-Of: odoo/enterprise#99607 Forward-Port-Of: odoo/enterprise#99422
Resolved issues and error corrections
This update avoids a browser-side error when the system no longer provides the platform information the app previously checked. It makes the web client more resilient across browsers and devices by using a safer way to detect features instead of relying on browser-identification data.
Original PR description
This commit uses "Feature detection" to avoid some error when the platform key is not available from navigator. > The platform property indicates the platform/OS the browser is running on. > Theoretically this information is useful for detecting the browser and serving code to work around browser-specific bugs or lack of feature support. However, this is unreliable and is not recommended for the reasons given in User-Agent reduction and Browser detection using the user agent. > Feature detection is a much more reliable strategy. https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Testing/Feature_detection task-4420689 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#235958
This fix corrects where two Indonesian QRIS configuration fields are inserted in the bank form, so they no longer end up inside a hidden section. As a result, users can now see and fill in the QRIS API key and MID when configuring local payment settings.
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
This change makes the Swiss payroll transmission tests independent from accounting setup details, so they no longer rely on a specific journal being present on the payroll structure. It helps keep automated tests stable and reduces the risk of unrelated configuration causing failures.
Original PR description
Forward-Port-Of: odoo/enterprise#99264 Forward-Port-Of: odoo/enterprise#98672
This change prevents the voice system from trying to reconnect when a user leaves the page normally. It avoids a conflict between two logout-related network requests, which could otherwise cause errors during sign-out or page unload.
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
This change fixes an intermittent failure in the manufacturing work order tour. It removes a search step that could cause timing issues and makes the target product appear first, so the test runs more reliably.
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 update restores the ability to delete highlighted digits in the VoIP softphone when the selection starts at the beginning of the input. It keeps the safety checks that prevent unwanted cursor issues while making backspace work as expected again.
Original PR description
This commit fixes a regression introduced in commit [1] prevented deleting when a selection began at index 0; extend the guard so the numpad (keypad) backspace still removes the highlighted characters while keeping the cursor-safety logic. [1]: https://github.com/odoo/enterprise/commit/73b01fa5e1f56d4ab71d67760b15942fb2fa0e31 task-5217676 Forward-Port-Of: odoo/enterprise#99515 Forward-Port-Of: odoo/enterprise#99358
The test suite was updated so a payment-related test only runs when the Accountant module is available. This avoids false failures in setups where that module is not installed and the tested behavior is not supported.
Original PR description
Some new tests weren't checking if the accountant module were installed. Without that module installed, those tests make no sense as the behaviour expected (possibility to create payments without creating an entry) is not present unless `accountant` is installed
This change restores tab switching in module information pages when the index.html file contains multiple tabs. It makes the behavior consistent with the Odoo Apps Store description view, so users can navigate the content as expected.
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
Vendor batch payments will now use the correct sequence number when they are created and validated. This prevents vendor batches from being labeled with the wrong incoming-payment number, which could cause confusion and make tracking harder.
Original PR description
Currently when creating a vendor batch payment, the system may incorrectly use the inbound batch payment sequence to generate the batch name Steps to reproduce: - Create a Vendor payment. - Create a Vendor batch payment, add the payment, validate it. Issue: Name has been set using the incoming batch payment sequence This occurs because `batch_type` is set to readonly when a payment is added to the list. As result, the current batch type is never sent to the backend that will use the default 'inbound'. opw-5128426 Forward-Port-Of: odoo/enterprise#99570
Fixed an issue where the expand/collapse button in email-style messages could appear without its icon. This makes long quoted emails easier to read and interact with inside the chatter and portal views.
Original PR description
Before this commit, when a message is of type "email" and contains parts are in foldable with more/less (like `<quote>`), the icon of the button for fold/unfold is missing. This happens because the icon is `.oi` and requires `odoo_ui_icons`. Message of type "email" have their content inside a shadow DOM, because we want to preserve the style of email inside the web client, at least in white theme. Shadow-DOM prevents the parent document to pass `odoo_ui_icons` thus the Shadow-DOM could not apply expected style on `.oi` icons. This commit fixes the issue by passing the required CSS as stylesheet to the shadow DOM, so that `.oi` icons are working inside the shadow DOM of message content of type "email".
This fix ensures mail records correctly update when they are deleted or restored. It improves the reliability of the messaging interface by keeping record status in sync with the latest changes.
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#236159 Forward-Port-Of: odoo/odoo#236042