Monday, August 4, 2025
25 changes · saas-18.4
Enhancements to existing features
The eInvoicing format dropdown now shows clearer, country-specific labels in customer account settings. This helps users choose the right electronic invoice format with less confusion, especially in localized accounting setups.
Original PR description
Renamed the selection labels for invoice_edi_format field to make them easier to understand based on the user's country context when choosing format inside customer's account tab. This improves the usability of the dropdown when selecting an eInvoicing format, especially for users in localizations where the technical name was unclear or confusing. 4889699 shzi Forward-Port-Of: odoo/odoo#220397
The eWay Bill PDF has been tidied up by removing extra punctuation from address labels and improving alignment in goods and vehicle tables. This makes the document easier to read and more professional for Indian compliance and logistics workflows.
Original PR description
In this commit: --- - Removed unnecessary '::' from 'Dispatch From' and 'Ship To' labels. - Center-aligned table data in the Goods Details and Vehicle Details sections. Forward-Port-Of: odoo/odoo#221419
Resolved issues and error corrections
This fix prevents occasional errors when resizing elements in the HTML builder. It makes the resizing process more reliable so users are less likely to encounter interruptions while editing pages.
Original PR description
This commit declares the sizing promise (awaited by the mutex) before calling the mutex, instead of in the mutex, allowing `sizingResolve` to always have a value during the sizing. Indeed, it seems that sometimes, a traceback may appear when resizing, because this resolver is undefined (surely because the sizing was quick enough to end before the mutex was called). task-4367641
Spanish VeriFactu POS now uses the configured simplified invoice limit instead of a fixed €400 threshold. This keeps point-of-sale invoice handling aligned with current Spanish localization settings and reduces the risk of incorrect invoice classification.
Original PR description
In 18.0+ there is a field that determines the amount up to which an invoice can be simplified (`l10n_es_simplified_invoice_limit`). After this commit we use that instead of the hardcoded limit of 400 € that was used in 17.0. task-None Forward-Port-Of: odoo/odoo#221475 Forward-Port-Of: odoo/odoo#221347
Fixed an issue in the website editor where chart data borders in the sidebar could show the wrong color after removing a dataset background color. The sidebar now uses the dataset border color as a fallback, making chart editing previews more accurate and less confusing.
Original PR description
Before this commit, when editing a chart data in the sidebar table, the color of the border only react to the background color of the data and not the border color (which should be the fallback value). This commit fix the issue and the border color of the data is now used in the sidebar table (if no background color is set). task-4367641
Website editors can now apply shapes and other options to images even when the original image link is broken. The system uses a placeholder image instead, preventing editing issues and restoring automated coverage for this case.
Original PR description
The goal of this commit is to remove the `drop_404_ir_attachment_url` test (introduced by [this commit]) from the skipped tests. To do so, this commit introduces a feature that was missing due to the [website refactoring]; when applying a shape (or any other options) on a 404 image, a placeholder image should be used instead of the 404 to apply the option. [this commit]: https://github.com/odoo/odoo/commit/fbc6a697c1adf67ee8a90c49b0150d6ca170e081 [website refactoring]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2
This fix removes unnecessary pricelist setup from point-of-sale loyalty tests. It helps ensure the loyalty program test suite runs correctly for deployments using only the community apps, improving confidence in ongoing updates.
Original PR description
Since 39b15f1 the pricelists in the loyalty programs creation made them not work if they were only using the community apps. The pricelists were removed from the loyalty program creation so that the tests can be run again. runbot-229672 Forward-Port-Of: odoo/odoo#217665
The website image gallery now keeps images visible and properly sized when large padding is applied in edit mode. This prevents images from disappearing during page design, making the builder more reliable for users creating visual content.
Original PR description
Steps to reproduce: - Open the website builder. - drag and drop the s_image_gallery snippets in the page. - add an image to the carousel. - Add a big padding on the carousel. - The image is not responsive and disapear behind the padding. Cause: Unlike other carousels, the s_image_gallery snippet has a fixed height, while others adapt their height based on the tallest slide. This causes layout issues when extra padding is applied. Solution: This fix removes the height constraint from slides specifically in the s_image_gallery snippet. This ensures that images remain responsive within the fixed-height container and are no longer hidden by excessive padding.
This fix ensures website editing cleanup happens in the right order when saving content. It prevents unwanted invisible characters from appearing around link labels on the published website, keeping edited pages clean for visitors.
Original PR description
The commit b455ea85853dfc19ed01e33986ad270cf80ee5d6 changed which plugin cleans the `contenteditable` attribute. This changed the order in which `contenteditable` is removed compared to the others cleanups The feff plugin depends on the `contenteditable` to clean the correct feffs. With that change of order, it did not cleaned the feff on website anymore. This commit fixes that by explicitely setting the sequence order on the clean up of `contenteditable` so that it is run rather late. Steps to reproduce: - Open website editor - Edit a something that is in the same savable element as a link - Save - Bug: the public website now has feff around the label of the links task-4367641
Restricted website editors can no longer open the snippet selection popup when they do not have permission to add snippets. This prevents avoidable errors in edit mode and makes the editing experience clearer for limited-access users.
Original PR description
[FIX] html_builder: fix restricted editor snippet click Previously, when a user entered the website’s edit mode, they could still open the snippet selection popup. This led to errors, as restricted users don’t have permission to add new snippets. This commit fixes the issue by ensuring the button that opens the snippet popup is not rendered when snippet functionality is disabled for the user.
This fixes a display issue where collaborator avatars could overlap form status buttons while scrolling through long descriptions. The status bar now spans the full form width and only shows its shadow when scrolling, keeping actions visible and the interface cleaner.
Original PR description
User avatars displayed in collaborative mode overlap with buttons when scrolling. This commit extends the statusbar to take the full width, independently of the sheet's one. Also, to avoid an ugly shadow when not scrolling, it only adds it when the scroll is actually performed. Steps to reproduce: - open a task with two users - write in the description in collaborative mode -> user avatars should be displayed - make sure the description is long enough for the sheet to scroll - scroll for one of the avatars to reach the sticky statusbar => overlap between the avatar and the statusbar task-4907797 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221102
The delivery package type dropdown now shows package types in the configured sequence instead of their creation order. This makes pack selection more predictable for warehouse users and aligns the workflow with the order set in Inventory configuration.
Original PR description
#### Step to reproduce: - Go to Inventory > Configuration > Settings and enable Packages - Go to Inventory > Configuration > Package Types - Inverse the order of two packages types. The goal is for…
#### Step to reproduce: - Go to Inventory > Configuration > Settings and enable Packages - Go to Inventory > Configuration > Package Types - Inverse the order of two packages types. The goal is for the sequence order to differ from the id order. (you can display id with studio) - Go to Inventory > Overview > Delivery Orders - Create a new delivery order - Add a line - In 'Additional Info' add a Carrier - Go to Barcode > Operations > Delivery Orders - Select the delivery order (you might need to remove filters) - With the 'Add Product' button add a product - Click on 'Put in Pack' - A 'Package Details' wizard should have opened. In this wizard there is a field 'Delivery Package Type'. #### Current behavior: - In the delivery package type dropdown list, packages are ordered by id #### Expected behavior: - In the delivery package type dropdown list, packages should be ordered by sequence #### Cause of the issue: As no order was defined, stock.package.type was ordered by id which is the default behavior opw-4824064 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#220327
This update restores an automated check for image upload progress in the website editor after layout changes had broken it. It helps ensure future website editing changes continue to support image uploads reliably.
Original PR description
TestImageUploadProgress test was previously broken due to DOM structure changes introduced by the new website builder and was consequently disabled. This commit updates the tour steps to align with the new DOM and re-enables the associated test. 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
Underline and strikethrough formatting now remains visible when gradient text colors are used in the website editor. This keeps styled website content looking as intended and avoids confusing formatting issues for users editing pages.
Original PR description
Problem: Using `-webkit-text-fill-color: transparent;` in `.text-gradient` is required for gradient text, but it also causes underline (`<u>`) and strikethrough (`<s>`) styles to become invisible, since those decorations rely on the text fill color. This results in the lines under `u` and `s` elements not being rendered when gradient text is applied. Solution: Render the underline and strikethrough manually using a `background-image` (gradient) applied to `s` and `u` tags. This simulates the missing lines while keeping the gradient text style. Steps to reproduce: 1. Add a text block in the website editor. 2. Apply a text color gradient. 3. Apply underline or strikethrough. → The underline/strikethrough is not visible. opw-4797201 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#210390
This update fixes an unreliable automated test for the HTML editor's image cropping feature. It helps ensure development checks run consistently, reducing false failures during quality assurance.
Original PR description
The cropper test fixed in [1] still fails non-diterministically on few runbot instances. This PR aims to fix the test. [1]: https://github.com/odoo/odoo/commit/cd8d2e8e1e58a482e9b2bb151e9233b31ecac393 task-4982084 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A leftover diagnostic message was removed from an automated spreadsheet test. This keeps test runs cleaner and reduces unnecessary noise for developers without changing product behavior.
Original PR description
There was a `console.log` leftover in the test `Domain of simple date filter`. 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 an error when users remove the VAT number from an Indian company and then use the GST warning update action. Since VAT is optional, the system now handles missing VAT values safely, avoiding disruption during company tax setup updates.
Original PR description
Currently, a traceback is occurring when the user clicks on the update button of GST warning after removing the vat. To reproduce this issue: 1) Install l10n_in 2) Open the Indian company 3) Change…
Currently, a traceback is occurring when the user clicks on the update button of GST warning after removing the vat. To reproduce this issue: 1) Install l10n_in 2) Open the Indian company 3) Change the VAT to get the GST warning 4) After getting the GST warning remove the VAT and click the `update it` button Error:- ``` TypeError: 'bool' object is not subscriptable ``` On company, VAT is not a required field, so the user can indeed remove it. When the user removes the vat and clicks on the `update it` button from GST warnings, the `action_update_state_as_per_gstin` method triggers. https://github.com/odoo/odoo/blob/c96d2b1d1ee917b1c665842010c56c23df91ccd3/addons/l10n_in/models/res_partner.py#L99-L101 From the above method we try to access the vat value. Here in our case, the `VAT` value is False. So it leads to the above traceback. We can resolve this issue by adding check, which makes the code more robust. sentry-6151570042 Forward-Port-Of: odoo/odoo#190840
This fix ensures invoice legal document retrieval consistently returns the expected data format, preventing errors when users download invoice documents. It also improves support for downloading documents across multiple file types, making invoice document handling more reliable.
Original PR description
`_get_invoice_legal_documents` should, and is expected to, return a dict. however, if called with `filetype = all`, it returns, because of `_get_invoice_legal_documents_all`, a list which breaks calling code as they expect a dict not a list, and this part of the code is not used anywhere nor tested. - remove the line causing `_get_invoice_legal_documents` to return a list. - make `download_invoice_documents_filetype` work with multiple filetypes no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#221358 Forward-Port-Of: odoo/odoo#220170
Accounting error logs now use consistent original wording instead of translated text, making issues easier to investigate across different languages. User-facing error messages remain translated, so the customer experience is unchanged.
Original PR description
Currently, error messages in logs are translated, which can make it difficult to debug issues — especially in multi-language environments or when analyzing logs programmatically. This commit ensures logs use the original, untranslated message templates for clarity and consistency, while keeping translations for user-facing errors. sentry-6763108230 Forward-Port-Of: odoo/odoo#221498
The Website settings now show the Google Search Console option with the correct name instead of the reversed wording. This removes confusion for users configuring search-related website settings.
Original PR description
Before this commit, the Google Search Console label in the settings was wrongly displayed as "Console Google Search". This commit replaces this field label with "Google Search Console". task-3839274 Forward-Port-Of: odoo/odoo#182790
This update fixes a duplicate Spanish domestic fiscal position introduced during earlier version changes. Businesses using Spanish localization will now see a cleaner, consolidated setup, reducing confusion when applying domestic tax rules.
Original PR description
Before this commit: - In version 18.3, due to changes and migrations in fiscal positions, the domestic fiscal position for Spain was duplicated (ES Domestic and Mainland Spain). After this commit: - Merged the duplicated fiscal position 'Mainland Spain' into 'ES Domestic'. task-4972464 Forward-Port-Of: odoo/odoo#220952
This fix updates internal email activity performance tests to match a recent change in how overdue activity counts are calculated. It helps keep automated checks accurate, reducing false test failures without changing day-to-day user workflows.
Original PR description
In [1] we now send the differential in activity count for relevant users when late activities are added or removed for them. This leads to an additional query to read the original count. [1]: odoo/odoo@bc0e1275be40faa919f1b0f70a14e5190c18bd6b Forward-Port-Of: odoo/enterprise#91539
The ESG date range fields now use the correct date-based setup instead of a datetime setup. This removes unnecessary browser console warnings and keeps the ESG interface cleaner without changing user-facing behavior.
Original PR description
The widgets `esgDateRangeField` and `esgListDateRangeField` inherit respectively from `dateTimeField` and `listDateTimeField`. As their name implies, those widgets are made to handle datetime fields, whereas the esg widgets are used on dates. While it does not seem to make a functional difference, it produces a warning in the browser console. This PR makes the esg widgets inherit from the "date" counterpart instead.
This fix prevents an error when users manually enter a tracking reference for a Sendcloud delivery. Instead of crashing, Odoo now handles the missing Sendcloud parcel details gracefully and shows the expected user-facing message.
Original PR description
**Steps to reproduce:** 1. Install delivery_sendcloud. 2. Create a new shipping method (Inventory -> Configuration) - Provider: sendcloud - Put the public and secret key - Assign Delivery Product 3.…
**Steps to reproduce:** 1. Install delivery_sendcloud. 2. Create a new shipping method (Inventory -> Configuration) - Provider: sendcloud - Put the public and secret key - Assign Delivery Product 3. Create a sales order with a deliverable product 4. Confirm the sale order 5. Go to the delivery 6. Manually enter a random tracking reference. 7. Make sure carrier is set to the Sendcloud delivery method 8. Click on "tracking," or get back to the sales order (click "preview"). 9. A traceback occurs. **Issue:** `A TypeError: 'bool' object is not subscriptable` when accessing sendcloud_parcel_ref, which is expected to be a list or JSON but is instead a boolean. **Causes:** The code assumes the presence of valid Sendcloud parcel reference data, but manually entering a tracking reference bypasses the [_send_shipment](https://github.com/odoo/enterprise/blob/6ecf0af6b6874460d300ede6cc7c092927607810/delivery_sendcloud/models/sendcloud_service.py#L102) method that populates this field. As a result, sendcloud_parcel_ref can remain False. https://github.com/odoo/enterprise/blob/df924ef8adffb3e42419a44ecf22fec3059917c4/delivery_sendcloud/models/delivery_carrier.py#L196 **Solution:** Return None if there is no Sendcloud parcel reference, which will raise a UserError from the below line https://github.com/odoo/odoo/blob/17.0/addons/stock_delivery/models/stock_picking.py#L288 Co-Author By - alsh@odoo.com opw-4894677 Forward-Port-Of: odoo/enterprise#89444
When a Belgian salary offer is created, the company car is now selected automatically from the linked contract template when available. If the template has no car, the system uses the employee version's car instead, reducing manual entry and avoiding incorrect empty car fields.
Original PR description
In this PR, we fixed the assignation of the car in the contract when the contract template for the version has company car. When creating an offer, automatically set the transportation car based on the linked contract template. If the contract template has no car, fall back to the car defined on the employee version. If neither has a car, leave the field empty. Related task: 4926053.