Wednesday, August 6, 2025
14 changes · saas-18.2
Resolved issues and error corrections
Cancelling a new link in the editor now properly closes the link popover and removes the unfinished link. This prevents the popover from getting stuck or reopening unexpectedly, making text editing smoother for users.
Original PR description
reproduction 18.0 and 18.1: 1. Go to the To-do app and type some text. 2. Select the typed text and click the Link button in the toolbar. 3. A link editing popover appears, without adding an href,…
reproduction 18.0 and 18.1: 1. Go to the To-do app and type some text. 2. Select the typed text and click the Link button in the toolbar. 3. A link editing popover appears, without adding an href, click anywhere outside the popover. 4. The popover does not close when clicking outside. And pressing Escape and clicking again in the editor, the popover reopens **Before this commit:** When creating a link from the toolbar, the link element is not padded with `feff` . This results in the selection remaining inside the link when clicking away and keeps the popover open. Pressing Escape only closes the popover but does not clean up the created link element. **After this commit:** We pad the newly created link element with `feff` when it is eligible for visual link isolation but not already padded. This ensures the padding is limited to newly created links. Additionally, when pressing Escape, we now clean up empty link elements after closing the popover. task-4948641 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220108
Duplicating a pivot table in a spreadsheet now preserves any matching global filters that were already applied. This prevents duplicated reports from showing broader or inconsistent data, helping users trust copied spreadsheet analyses.
Original PR description
Steps to reproduce: - insert a pivot in a spreadsheet - create a global filter matching one of the pivot fields - use the global filter to restrict the values - duplicate the pivot => the filter is not applied on the duplicated pivot Task:4966634 opw-4950469 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#220588
This fixes a point-of-sale self-order screen issue where the numpad dropdown menu was no longer appearing. Restoring it helps staff or users access the expected order input controls without disruption.
Original PR description
The forwardport https://github.com/odoo/odoo/commit/621bc2ed48ce4e2486f1604fdfe4d85cc4dc179b introduced a `t-if=!isEditMode` that was making the latest `t-else` statement never reached, thus making `NumpadDropdown` never displayed. Therefore, we simply remove the t-if statement and adjust the xpath inherit to place the `QrOrderButton` just before the `NumpadDropdown` button 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
Returning products from a helpdesk ticket no longer crashes if the delivery field is cleared. This keeps the return workflow usable and prevents users from being blocked by an avoidable error.
Original PR description
step to reproduce : create a sales order with a service and a consumable product deliver the consumable product enable the 'returns' feature on your helpdesk team create a helpdesk ticket in this team select the customer and the SOL you created click on return empty the delivery field => traceback source of the issue : Setting the delivery_id field to false triggers a compute, in which an ensure one is later call on the delivery_id. Since the delivery is empty, it triggers an error. Solution : When the compute is triggered, we can prevent the rest of the code execution when the picking is set to False. task - 4935957 Forward-Port-Of: odoo/odoo#221160
This fix restores a missing safeguard so sales orders are only locked when they meet the intended locking rules. It helps avoid incorrectly locking orders such as subscription-related orders or orders handled through similar processes, reducing operational disruption.
Original PR description
The diff from this commit was introduced in the past up until saas-17.1, to prevent locking of subscription sales orders. https://github.com/odoo/odoo/pull/159863 However, the forward porting commits after saas-17.2 are missing this diff. https://github.com/odoo/odoo/pull/159993/files Few months after the commits were merged, someone mentioned about this diff being missing, but no actions were taken afterwards. This commit applies the missing diff. --- In another [bugfix](https://github.com/odoo/enterprise/pull/91339), which is dependent on this , we decided to not lock SOs from FSM tasks, taking similar approaches as how Subscription Orders process it, utilizing the `_should_be_locked()` function. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221281
This fix ensures a base test related to hidden view fields also runs for localization checks. It helps catch localization-related issues earlier in testing, reducing the risk of nightly failures after changes are merged.
Original PR description
This test is not run during the l10n standalone tests leading to error in nightly that are not detected before the merge. 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#219376
This fixes an issue where meetings created from a contact could lose the proper contact link because an empty value was saved instead of the expected default. Users should now see newly created meetings remain correctly associated with the selected contact.
Original PR description
To reproduce:
=============
- Pick any contact
- Click on meeting
- Select the time for the meeting with that contact
- Click on more options
- Add a meeting and save
- Click on meeting & contact
Problem:
========
- When creating calendar events, res_id=0 is passed in vals_list
- Events are created with res_id=0 instead of using default value
Solution:
=========
- Add separate handling for res_id in vals_list processing
- Apply defaults.get('res_id') when vals.get('res_id') is falsy
opw-4892445
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#221767
Forward-Port-Of: odoo/odoo#216042The messaging menu now shows the right help text when quick search finds no matching conversation. Users will no longer see confusing duplicate messages that suggest both an empty search result and no conversations at all.
Original PR description
**Steps to reproduce:** - Open the messaging menu with 20+ threads (quick search btn shows on 20+ threads) - Dismiss (or install) the 'Install Odoo' notification - Dismiss (or allow) the 'Turn on notifications' notification - Use quick search to look for a thread that doesn't exist => Both 'No thread found.' and 'No conversation yet...' messages are displayed This happens due to an incorrectly handled condition. This PR ensures only the relevant message is shown: - 'No thread found.' is displayed when the search yields no results. - 'No conversation yet...' is shown only when the user has no threads at all. <img width="565" height="279" alt="image" src="https://github.com/user-attachments/assets/689bc007-dfb4-4041-8543-18bc4ad2e19d" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221878
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log int
Original PR description
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct…
Before this change, the VAT Content section in Argentinean Legal PDF was always shown as "VAT Content" although the user has Spanish as its language. With this change will show the correct translation: "IVA Contenido" when printing the PDF report in Spanish. ### **Description of the issue/feature this PR addresses:** Missing Spanish translation of "VAT Content" column in the Argentinean Legal PDF Report 1. Install Argentinean - Accounting module 2. Install Spanish language 3. Log into to one of the demo Argentinean Companies: (AR) Responsable Inscripto 4. Create a customer invoices of type "B" 5. Go to the partner and change the Language to Spanish 6. Return to the invoice and print the PDF 7. Check that the VAT Content section is not translated. ### **Current behavior before PR:** <img width="572" height="407" alt="image" src="https://github.com/user-attachments/assets/e28e609e-2cd2-4ace-9509-f969692ec893" /> ### **Desired behavior after PR is merged:** The "VAT Content section should appear as "IVA Contenido" when printing the report in Spanish. opw-4938520 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220910 Forward-Port-Of: odoo/odoo#219912
The DHL shipping integration now sends commodity code information using the field name expected by DHL's API. This helps prevent shipment creation issues when customs commodity codes are included.
Original PR description
Changed the field name in commodityCodes from `code` to `value` to match with DHL API documentation. Check ticket log notes for details of DHL documentation. opw-4892324 Forward-Port-Of: odoo/enterprise#91645
The rental shop page now keeps original list prices hidden from public visitors and search engines when products are unavailable due to zero pricing. This prevents unintended price exposure while preserving the intended behavior for website editors.
Original PR description
Versions
--------
- 17.0+
Steps
-----
1. Create a pricelist setting product prices to zero;
2. configure website to make zero-priced products unavailable for sale;
3. go to /shop as a public user;
4. open the product page of a zero-priced product;
5. open the browser console;
6. use `document.querySelector('.css_non_editable_mode_hidden .oe_currency_value')`
Issue
-----
The query returns an element with the product's original list price.
Cause
-----
In `website_sale`, this element is part of a `t-if` that only gets rendered when `editable` is `True`. A `website_sale_renting` override changes the conditional to `not combination_info.get('is_rental')`.
Solution
--------
Instead of replacing the `t-if` attribute in the override, add `and not combination_info.get('is_rental')` to it, ensuring it remains hidden outside of editable mode.
opw-4865141
Forward-Port-Of: odoo/enterprise#91112Searching for loans in the Loan Analysis view now uses the correct loan field, preventing an error page from appearing. This lets users find loan records reliably without interruption.
Original PR description
Behaviour before this commit: While searching for 'Loan' in the Loan Analysis view, a traceback appears since the filter_domain for the search is on `name` but `name` is not present in account.loan.line, instead it is `loan_name`. Desired behaviour after this commit: The filter_domain for 'Loan' is updated to search for `loan_name` instead of `loan`, and domain for `display_name` is removed. TaskID:4991369 Forward-Port-Of: odoo/enterprise#91637
This fix prevents an error when a user clears the delivery field while processing a product return from a helpdesk ticket. It keeps the return flow stable by waiting until a valid delivery is selected before recalculating related information.
Original PR description
step to reproduce : create a sales order with a service and a consumable product deliver the consumable product enable the 'returns' feature on your helpdesk team create a helpdesk ticket in this team select the customer and the SOL you created click on return empty the delivery field => traceback source of the issue : Setting the delivery_id field to false triggers a compute, in which an ensure one is later call on the delivery_id. Since the delivery is empty, it triggers an error. Solution : The field 'delivery_id' is required. So we can simply prevent the execution of the compute when the delivery is set to false and wait for the user to put a new value to trigger the compute correctly. task - 4935957 Forward-Port-Of: odoo/enterprise#90496
Installing Luxembourg localization now avoids automatically enabling the full Accounting app when only Invoicing should be installed. This keeps new databases lighter and prevents users from receiving unintended accounting features.
Original PR description
Steps to reproduce:- - Install `l10n_lu` on new enterprise database. - `Accounting(accountant)` gets installed instead of `Invoicing(account_accountant)`. Cause:- - `l10n_lu` depends on `account` which in enterprise converted to `account_accountant`. - `account_reports` is auto installed with `account_accountant`. - `l10n_lu_reports` gets auto installed with `account_reports` and `l10n_lu`. - `l10n_lu_reports` depends on `account_asset`. - `account_asset` depends on `accountant` FIX:- - Add `account_asset` in auto_install list of `l10n_lu_reports`, which will prevent auto installing `accountant`. Befre this commit:- - When installing `l10n_lu`, `Accounting(accountant)` and `l10n_lu_reports` gets auto installed. After this commit:- - When installing `l10n_lu`, only `Invoicing(account_accountant)` gets auto installed, and `l10n_lu_reports` and `Accounting(accountant)` are not auto installed. task-4919231