Thursday, July 9, 2026
10 changes · saas-18.4
Resolved issues and error corrections
Creating a company with an EU VAT number now triggers only one VAT verification instead of two. This reduces unnecessary external service calls, improving performance and lowering the risk of rate limits from the VAT validation service.
Original PR description
When we create a company with a EU VAT, we used to do 2 IAP call to verify the VAT number. One was on the create() and the other one on the write(). For performance reason and because the vies check service may limit ip address, the verification was already disable when importing files (in both create and write). This commit remove the compute on the create one (and keep the one on write), so that it only do 1 IAP call to verify the VAT. Task-6139346 Forward-Port-Of: odoo/odoo#274644
Corrected how a hidden field condition is written in the Contacts base view so the editor no longer reports a missing field named "true". The behavior stays the same for users, but administrators get a cleaner, less confusing editing experience.
Original PR description
There is a warning saying that there is no "true" field when editing the view. But in reality this is currently working as expected and the field is hidden. related to opw-5947987 Forward-Port-Of: odoo/odoo#274719 Forward-Port-Of: odoo/odoo#273041
Portuguese (Portugal) and Hindi now display large numbers with the expected digit grouping, making amounts easier to read. This aligns number formatting with regional standards, including Indian-style grouping for Hindi.
Original PR description
Currently the number grouping for Portuguese and Hindi is missing. Number grouping is used to separate long numbers in logical groups to make then easier to read. In Western countries, the grouping is usually done in groups of three digits (e.g. `1,000,000` instead of `1000000`), while in India, the grouping is done in groups of two digits after the first three digits (e.g. `10,00,000` instead of `1000000`). Source: https://www.unicode.org/cldr/charts/48/by_type/numbers.number_formatting_patterns.html#24a93b3d14ba17b2 All languages will be revised in a follow-up `master` PR. [task-6320391](https://www.odoo.com/odoo/project.task/6320391) Forward-Port-Of: odoo/odoo#274721 Forward-Port-Of: odoo/odoo#274443
Fixes missing labels in the website editor for theme color pickers and product image carousel position options. This makes the editing interface clearer and avoids undefined titles appearing in builder controls.
Original PR description
Steps to reproduce: - Open the website editor. - Go to the Theme tab. - Inspect the Primary or Secondary color picker title. => The title prop is undefined. - Go to a product page with several product images. - Edit the carousel thumbnail position option. => The Left and Bottom button titles are undefined. Before this commit, some builder option titles were passed as OWL expressions instead of translated string props. After this commit, these titles use translated string props and are properly available to the builder components. task-6034856
Sales quotation PDFs no longer show the “Connect your software” message for customers with portal access. This keeps printed and shared quotes consistent for all customers and avoids repeating a prompt that is already available in the customer portal.
Original PR description
Steps to reproduce: 1. Install Contacts and Sales 2. Open any of the contacts, click on the gear icon at the top and click on "Grant portal access" 3. Grant access to all contacts 4. Create a Sale Quotation for that contact and print it Issue: The sentence 'Connect your software... ' appears in the pdf when sending the quote to a contact who was portal access, while it does not appear if the contact does not have portal access Expected behavior: Should not appear regardless of whether the customer has a portal account or not since they have it appear as a smart button in their portal. opw-6308357
Opening the Optimize SEO menu no longer crashes when the same image appears in multiple product page sections. This helps website editors manage SEO settings reliably on e-commerce product pages, even when content blocks reuse images.
Original PR description
## Problem: when snippets with identical images are added in the e-commerce website product page, the "Optimize SEO" option in debug mode causes an error to occur with a traceback. The traceback…
## Problem:
when snippets with identical images are added in the e-commerce website product page, the "Optimize SEO" option in debug mode causes an error to occur with a traceback. The traceback calls out a duplicate key in the `t-foreach` of a loop over `state.altAttributes`. the `t-key` for this loop is `img.id` which is generated by the `/website/get_alt_images` controller endpoint.
## Steps to reproduce:
1. Go to a product page and click on "go to website" smart nav btn.
2. Add a snippet with an image in the `description_ecommerce` field
3. Add a snippet with the same image in the `website_description` field.
4. In debug mode, open `site > Optimize SEO`
5. An error `Got duplicate key in t-foreach` is thrown.
## Solution:
The solution was simple to add a qualifier in the compound key generated by the controller action for the `id` field. The chosen qualifier in this case was `model['field']`. `field` is the position in the template where the image came from.
So now the keys for the two identical images go
FROM
> `${model}-${id}-${index}`
>
> 1st image of `website_description`:
> `product.template-6-0`
>
> 1st image of `description_ecommerce`:
> `product.template-6-0`
TO
> `${model}-${id}-${field}-${index}`
>
> 1st image of `website_description`:
> `product.template-6-website_description-0`
>
> 1st image of `description_ecommerce`:
> `product.template-6-description_ecommerce-0`
task-6325786The messaging interface now correctly shows the Load More button when older messages can be loaded. This fixes a visual issue where the button appeared transparent, helping users navigate message history more reliably.
Original PR description
Since #198829, a `t-att-class` has been added to the `loadOlder` template that relies on `mountedAndLoaded` of thread state to control the visibility of the `Load More` button. But it doesn't read the value from the state properly. As a result, the button is always transparent. This change fixes this by reading the value from the state.
GIFs in Facebook feed comment pop-ups now display as a preview image instead of appearing missing. Users can click the preview to open the animated version directly on Facebook, making social media interactions clearer and less confusing.
Original PR description
Bug === When opening the comments modal of the feed view, the GIF images are not visible. Technical ========= The API does not return the GIF, it only returns the MP4 and the JPG. So we show the fixed image, and when clicking on it, it opens the video on Facebook. Task-6241607 Forward-Port-Of: odoo/enterprise#122871 Forward-Port-Of: odoo/enterprise#118619
Canadian check printing now hides check numbers on payment stubs when using pre-numbered check stock. This keeps the printed stubs consistent with the check itself and helps avoid duplicate or confusing numbering for businesses using manual check sequencing.
Original PR description
The check itself respected the check_manual_sequencing field, but the stubs did not. Hide the numbers on stubs as well, exactly like on US checks. task-6343701 Forward-Port-Of: odoo/enterprise#122565
Updated an internal automated test so it no longer depends on the order in which subtasks are returned. This helps keep quality checks stable and avoids false test failures during development.
Original PR description
Steps to Reproduce --- 1. Install industry_fsm_report. 2. Run the test test_subtasks_worksheet_template_id_duplicate Issue --- The test fails because it relies on positional index assertions (child_ids[0] and child_ids[1]). Since child_ids is now returned with the ordering (id desc), the subtasks are processed in a different order during copy, causing the assertions to no longer match the expected records. Fix --- Sort both the original and duplicated subtask recordsets by name. task-5966684 Forward-Port-Of: odoo/enterprise#123035