Wednesday, July 9, 2025
21 changes · saas-18.3
Resolved issues and error corrections
This update prevents an online checkout error that could occur when an order contains more than one delivery charge line. It uses the delivery app’s standard calculation method so shipping amounts are handled reliably in these cases.
Original PR description
Before this commit an error can appear if there two delivery line. Use method in delivery module to compute delivery amont. This method can compute if there are two line with delivery https://github.com/odoo/odoo/blob/18.0/addons/delivery/models/sale_order.py#L27 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#217705 Forward-Port-Of: odoo/odoo#217624
Website form fields that depend on another field now appear correctly when that field is automatically filled in, such as with a logged-in user's email. This prevents visitors from seeing incomplete or confusing forms and helps ensure they can submit the intended information without extra manual input.
Original PR description
When [1] introduced a cached version of the form data to compute visibility, it did not take into account the values that are completed through `prefillValues`. Because of this, input events are required for those to be taken into account. This commit fixes this by re-evaluating the form content after the execution of `prefillValues`. Steps to reproduce: - Drop a "Form" snippet - Make "Your Question" field visible only if "Your Email" is set. - Save page. => Upon display, the email is populated with the user's email, but "Your Question" did not become visible. [1]: https://github.com/odoo/odoo/commit/027ce4e3991c9fefdbbb862a69f73e865a1100c8 task-jke Forward-Port-Of: odoo/odoo#217729
The website donation form now handles cases where no custom amount is configured without crashing. Instead of showing an error page, visitors are prompted to select a donation amount, keeping the donation flow usable.
Original PR description
Since [1], a crash occurs when the Custom Amount option for the `s_donation` snippet is `None` and you use it. Steps to reproduce: - Drop `s_donation` snippet - Set Custom Amount option as `None` - Save and exit edit mode - Click on `Donate Now` button - A traceback occurs instead of showing an error to select an amount [1]: https://github.com/odoo/odoo/commit/22e777c046521f3f89b62caa5876680beb7f5aba Forward-Port-Of: odoo/odoo#217991
A Point of Sale test was updated because it checked a tax periodicity setting that is only available in the Enterprise edition. This prevents false test failures in the standard codebase and helps keep release validation reliable.
Original PR description
this commit fixes the test for the account_tax_periodicity_journal_id field in the res.config.settings model, which was failing due to an assertion error cause it is not in the community version of Odoo 18.2. but it is in the saas-18.2 version enterprise version of Odoo 18.2. refer to this [commit](https://github.com/odoo/odoo/commit/8d841025ecb0b62719fa92236696c0e3421ca270) build_error-227602 Forward-Port-Of: odoo/odoo#215611
Long dashboard names in the spreadsheet dashboard search panel now show their full text when users hover over them. This makes it easier to identify and select the right dashboard when names are too long to fit in the panel.
Original PR description
Before this pr: - Long dashboard names were truncated in the search panel. - There was no way for the user to see the full name. After this pr: - A tooltip has been added to display the full dashboard name on hover. Task: [4903713](https://www.odoo.com/odoo/2328/tasks/4903713) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217905 Forward-Port-Of: odoo/odoo#216578
Product availability reminder emails no longer display a price when an out-of-stock item becomes available again. This avoids showing customers a price that may exclude taxes, reducing confusion and improving consistency with the website's tax-inclusive pricing settings.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Configure website to display prices tax-included; 2. disable selling out-of-stock products; 3. go to an out-of-stock product page; 4. request a reminder email; 5. replenish product stock; 6. run the `_send_availability_email` action; 7. check email that was sent. Issue ----- The price display in the email does not include taxes. Cause ----- The email only checks the `list_price` defined on the product. Solution -------- Don't include the price in the email: - On stable: hide the element to avoid breaking xpaths - On master: remove the price element from the email template opw-4712613 Forward-Port-Of: odoo/odoo#215292
Changing a company's country VAT label now reliably updates the label shown on contact forms. This prevents users from seeing outdated field names after configuration changes, reducing confusion and support issues.
Original PR description
**PROBLEM** When changing the vat label associated to the country of the user's company, it should change the label of the `vat` field. The cached partners views are not invalidated as they should…
**PROBLEM** When changing the vat label associated to the country of the user's company, it should change the label of the `vat` field. The cached partners views are not invalidated as they should and the old views with the old label are presented to the user instead of the new ones. This can be confusing to the user, because while their change had an effect on the database, it doesn't reflect on the views showed to them. **STEP TO REPRODUCE** 1. On a fresh database, install the contact app. 2. From the contact app, Configuration->Countries, select United States which should be the country of the demo company. 3. Change the Vat Label field value. 4. Go on any contact form view, and notice the label of the `vat` field wasn't updated. 5. You can refresh the pages, and sometimes the new value will be there, sometimes not. **CAUSE** https://github.com/odoo/odoo/blob/ac106704f3c2d3e3fa94415134b9d5522b325378/odoo/addons/base/models/res_partner.py#L41C1-L55C1 In the mixin `FormatVATLabelMixin` we modify the form view, changing the label of the vat field accordingly. However, the `_get_view_cache_key` override that would add the field used to make the change (`self.env.company.country_id.vat_label`) to the cache key is missing. Which means the cache isn't invalidated when it should. **FIX** Invalidating cache when writing on `vat_label` opw-4825749 Forward-Port-Of: odoo/odoo#213101
This fixes an issue in the website editor where the background positioning overlay could appear with the wrong size on some content blocks. Editors can now adjust background image positioning more reliably, with tooltips appearing in the correct place.
Original PR description
Before this commit in some snippets background overlay wouldn't have
proper height and/or width because of the snippets `h-{}, w-{}` classes.
This commit overrides it with `!important`.
To reproduce the issue:
- open website and start editing
- drop columns snippet, add background image to one of the cards, click
on it
- Click on the background position option to change it(the one with
a crosshair icon)
- the overlay isn't shown properly, which also breaks the tooltip
position
This should be forward-ported up to 18.3 inclusive, and from 18.4 on, `background_position_overlay.js L135` should be changed because of the [html_builder refactoring].
task-4930050
[html_builder refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddb
Forward-Port-Of: odoo/odoo#215377Recipient tags in the mail composer now use the contact's display name when a contact has no specific name or email address. This avoids showing a generic "Unnamed" label and helps users recognize invoicing or child contacts more easily.
Original PR description
Steps to reproduce =============== 1. Create a company called Acme. 2. Create a child contact of type Invoicing address but do not give it any name. 3. Go to Sales. 4. Open send mail composer and add this partner as a recipient. ---> The recipient tag will show Unnamed. From [Commit 1], the fallback was given Unnamed. After this commit we'll use display_name as a fallback for no name and email. [Commit 1]: https://github.com/odoo/odoo/commit/cba81ac77d3bad1c686d95f3a9a67f6bde51c569 Task-4812554 Forward-Port-Of: odoo/odoo#211830
This update makes automated live chat checks run more consistently by ensuring chat sessions are ordered predictably and test steps wait for the interface to be ready. This helps reduce false failures in validation pipelines, supporting more stable releases without changing day-to-day user behavior.
Original PR description
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
This fix prevents invoice export errors when an invoice line includes tax details without a tax grouping. Those details are now skipped during e-invoice generation, helping ensure invoices can be generated reliably.
Original PR description
Before this commit: If a tax detail of an invoice line has the None tax grouping key, there is a traceback when generating the UBL InvoiceLine/ClassifiedTaxCategory After this commit: We exclude tax details that have the None grouping key when generating the InvoiceLine/ClassifiedTaxCategory. task-none Forward-Port-Of: odoo/odoo#217731
Rotating large images in the HTML editor no longer causes the rotate control to lose focus when the editable area becomes scrollable. This makes image editing smoother and prevents interruptions during transformations.
Original PR description
Problem: When a user rotates an image, certain image sizes can cause the editable area to become scrollable. This triggers `resetHandlers` from `usePositionHook`, resulting in loss of focus on the rotate controller. Solution: Add a flag to detect when the user is actively transforming (`mousedown`). Delay the reset until interaction ends (`mouseup`), preventing premature handler reset. Steps to reproduce: - Add a long image - Transform > Rotate until a scrollbar appears - You lose focus on the rotate controller opw-4890029 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#215401
This fixes an issue where some Malaysian MyInvois point-of-sale documents could be left without their linked order information. It helps keep invoice-related PoS records complete and consistent for users handling electronic invoicing in Malaysia.
Original PR description
Otherwise, it causes it fails to assign value to certain records, which is unadvised. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217713
The Time Off Type configuration screen now presents leave, localization, and payroll options in a more consistent two-column layout. This makes settings easier to scan and reduces confusion when configuring time off policies with country-specific or payroll-related options.
Original PR description
* = l10n_in_hr_holidays, l10n_ae_hr_payroll, l10n_be_hr_payroll Steps: - Navigate to Time Off > Configuration > Time Off Types. - Open any time off type form with localization or payroll-related options. Issues: - Configuration fields (including localization modules) appeared misaligned. - The Payroll section was not utilizing space effectively in the layout. Fix: - Aligned all configuration fields in a consistent two-column layout, including localization and payroll-related options., - Repositioned the Payroll section below the Negative Cap section. Task - 4759116
VoIP now removes parentheses when cleaning phone numbers, so numbers entered with formats like (123) 456-7890 are handled correctly. This reduces dialing issues caused by common phone number formatting.
Original PR description
Add parentheses to the list of characters that are stripped from phone numbers. Part of task-4891947. Forward-Port-Of: odoo/enterprise#89625 Forward-Port-Of: odoo/enterprise#89551
Helpdesk tickets created directly in a closed stage are now marked with a close date immediately. This keeps the customer portal's Open filter accurate, so portal users do not see already resolved tickets mixed with active ones.
Original PR description
**Steps to reproduce:** 1. Install the Helpdesk module. 2. Create a ticket directly in a closed stage (e.g., 'Solved') and add the portal user as a customer. 3. Log in as the portal user. 4. Apply the Open filter. **Issue:** - The ticket appears under Open Tickets, even though it was created in a closed stage. **Cause:** - Currently we consider a stage as closed if 'floded in kanban' is True and When a ticket is created directly in a closed stage, the close_date field is not set. Since the portal filter relies on close_date to distinguish open from closed tickets, this shows closed tickets in open filter. https://github.com/odoo/enterprise/blob/c34256932e593ac2774fa65af813d64edb70ec43/helpdesk/controllers/portal.py#L63 **Solution:** - During ticket creation, if the specified stage is a closing stage, set the close_date field to the current time. opw-4847097 Forward-Port-Of: odoo/enterprise#88983 Forward-Port-Of: odoo/enterprise#87293
The VoIP keypad now uses consistent bottom spacing between the in-call and transfer screens. This fixes a small visual mismatch, making the calling interface look more polished and predictable for users.
Original PR description
Prior to this commit, the bottom margin differed between the "In call" and "Transfer" views, creating inconsistency. This commit adjusts the spacing to maintain consistency. | Before | After | |--------|--------| |  |  | task-4908502
This fix prevents Uruguayan electronic invoice generation from failing when a user clears an item description in journal entries. It keeps document submission to DGI working even when optional line descriptions are left empty.
Original PR description
This PR addresses an issue encountered when the product description is removed from an account.move.line within the "Journal items" section. ### Problem: Normally, the `account.move.line` description…
This PR addresses an issue encountered when the product description is removed from an account.move.line within the "Journal items" section. ### Problem: Normally, the `account.move.line` description automatically populates with the product name upon line creation. However, users can intentionally clear this field. If the description field becomes empty, its value is interpreted as `False`. This leads to an `AttributeError: 'bool' object has no attribute 'replace'` traceback when the `_l10n_uy_edi_get_line_nom_and_desc` method attempts to process this boolean value, as it expects a string. This issue specifically affects the generation of the "DscItem" tag in the XML file sent to DGI. ### Solution: To prevent this error, an additional validation has been implemented for the line description. This validation ensures that if the field's value is `False`, it is not processed by the `_l10n_uy_edi_get_line_nom_and_desc` method, thus avoiding the traceback. Forward-Port-Of: odoo/enterprise#89407
The Time Off type configuration form now presents payroll and localization options in a clearer two-column layout. This makes settings easier to review and reduces confusion when configuring leave policies for different countries or payroll needs.
Original PR description
* = l10n_in_hr_holidays, l10n_ae_hr_payroll, l10n_be_hr_payroll Steps: - Navigate to Time Off > Configuration > Time Off Types. - Open any time off type form with localization or payroll-related options. Issues: - Configuration fields (including localization modules) appeared misaligned. - The Payroll section was not utilizing space effectively in the layout. Fix: - Aligned all configuration fields in a consistent two-column layout, including localization and payroll-related options., - Repositioned the Payroll section below the Negative Cap section. Task - 4759116
This fix ensures the Indian GST return JSON output always includes the expected document issue section, even when it is empty. This prevents automated validation and test failures, helping keep tax reporting exports consistent and reliable.
Original PR description
- Assigned doc_issue with empty list to comply with formatting of gstr1 json. - This prevents test failures caused by missing keys during JSON validation. runbot error: 229705 Forward-Port-Of: odoo/enterprise#89711 Forward-Port-Of: odoo/enterprise#89635
Miscellaneous changes
Current behavior before PR: When print an expense report with different company currency, the currency it's displayed incorrectly [bug](https://drive.google.com/file/d/1GWjcIGA_czPpl44QAORN6vj6hLcMOYhF/view?usp=sharing) [Related ticket](https://www.odoo.com/odoo/project/49/tasks/4807756) Description of the issue/feature this PR addresses: Update widget currency symbol Desired behavior after PR is merged: The report will show the correct symbol depending on the currencies used for the ex
Original PR description
Current behavior before PR: When print an expense report with different company currency, the currency it's displayed incorrectly [bug](https://drive.google.com/file/d/1GWjcIGA_czPpl44QAORN6vj6hLcMOYhF/view?usp=sharing) [Related ticket](https://www.odoo.com/odoo/project/49/tasks/4807756) Description of the issue/feature this PR addresses: Update widget currency symbol Desired behavior after PR is merged: The report will show the correct symbol depending on the currencies used for the expense fixed versions: saas-18.2 saas-18.3 master --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#212858