Tuesday, July 15, 2025
17 changes · saas-18.3
Resolved issues and error corrections
A flaky automated test in the Mail discussion area was corrected so it selects the intended message when editing or reacting. This helps keep validation runs stable and reduces false failures during development and releases.
Original PR description
Before this commit, "test_discuss_channel_public_page_as_internal" tour would fail non-deterministically at following step: ``` FAILED: [21/33] Tour discuss_channel_public_tour.js → Step Click on edit (trigger: .o-mail-Message-moreMenu [title='Edit'], .o-mail-Message [title='Edit']). ``` This happens because this tour is run twice, and in the 2nd run the selector to hover and click on 'Expand' is just targeting the 1st message. This works fine in the 1st run, but in the 2nd run this picks the message of previous test instead of the 2nd one. A full run of tour posts a message "cheese" and edits its content to "vegetales", so targeting the message with content "cheese" ensures the right message is picked, which is what this commit does to fix the issue. This commit also properly targets the right message for message reaction. Fixes runbot-error-227756 Forward-Port-Of: odoo/odoo#219009
This fixes an intermittent failure in an automated Mail test by making it wait until sending is actually available before submitting a message. It helps keep release validation stable and reduces false alarms in testing without changing the user experience.
Original PR description
Before this commit, tour "test_mail_group_public_page_as_portal" failed non-deterministically at the following step: ``` FAILED: [14/37] Tour discuss_channel_public_tour.js → Step Check message is…
Before this commit, tour "test_mail_group_public_page_as_portal" failed non-deterministically at the following step:
```
FAILED: [14/37] Tour discuss_channel_public_tour.js → Step Check message is shown (trigger: .o-mail-Message-body:contains("cheese")).
```
When looking at screenshot from runbot, it shows that the message is indeed not on UI, but the composer still contains "cheese" in input, which means the message hasn't been effectively posted.
This can happen when the press Enter is made before the composer is not in a state to send the message. In practice the conditions should be met: have some text in composer and some attachments have been attached and fully uploaded. However test it running steps fast and it can trigger the "press Enter" sooner than it's actually made available.
This commit fixes the issue by pressing Enter when the "send" button is enabled, which is the right time when press Enter is also available to use.
Fixes runbot-error-229828
Forward-Port-Of: odoo/odoo#218999This fixes a website editor issue where animated highlighted titles could stop working when the text wrapped onto multiple lines. Visitors now see the intended title animation consistently across different screen sizes, improving page presentation and reliability.
Original PR description
Steps to reproduce: 1. Go to Website (Edit mode) and drop a title block. 2. Select the title and set a highlight effect, then a text animation on it, and save the page. 3. Load the page in a reduced viewport in a way that makes the highlighted text split into multiple lines. 4. The animation won't work. The issue is caused mainly by the highlights being automatically split (and also the animation wrapper inside) when there is no available space for the text content, which destroys the "animation" interaction targeted element without retargeting the new wrappers. The goal of this commit is to fix this behavior by forcing the animation to target the whole highlight when a part of its content is animated. opw-4865891 Forward-Port-Of: odoo/odoo#218445
Calendar views that support creating multiple records now always show the sidebar, even if a user previously hid it in another calendar view. This prevents users from getting stuck without access to required sidebar options in those views.
Original PR description
The sidebar can be toggled in calendar views where the multi create feature isn't enabled. The toggled status is then stored in the session_storage s.t. when coming back, it is restored. In calendar views with the multi create feature, the sidebar can't be toggled: it is always displayed. Before this commit, if the user first went to a "normal" calendar view, toggled off the sidepanel, and then went to a calendar view with multi_create, the sidepanel wasn't displayed (and there was no way for him to toggle it in that view). This commit fixes the issue: when the multi_create feature is enabled, the sidepanel must always be displayed, no matter the state saved in the session_storage. 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
Fixed an issue where the link editing popover could close immediately after opening when users added a link from the full composer. This makes adding links to selected text more reliable and prevents interruption during note or message composition.
Original PR description
Issue: currently, the linkpopover get closed as soon as it is open, due to fact that autofocus hooks do not work as expected when working inside full composer we have faces same issue previously, fixed by odoo/odoo@99a01a66e3bda18a7655581ddc5c768ed92c14d1 but issue arises again after odoo/odoo@deaeecc54a10519656338546c18eb091ac84ff4e overrides the the original component and relies on `useAutofocus` again. Step to reproduce: - open crm - open a record and click on "Log note" -> full composer - enter some text - select it and try to add link form toolba observation: The LinkPopover opens and closes immediately Fix: - we manually focus on the input instead of using autofocus opw-4874775 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217029
Fixed a survey reporting translation problem that could trigger warnings when answer statistics were prepared. This helps keep survey results working reliably for users in translated environments.
Original PR description
Issue: Prior to this commit, a translation issue occurred due to the use of a list comprehension. The _get_translation_source function attempts to scan the local variables, but in the context of a list comprehension, only variables defined within the comprehension are accessible. As a result, variables like uuid and cursor were not available to the _get_lang function, ultimately leading to an error. Fix: Replaced the list comprehension with a standard for loop to ensure proper access to local variables. runbot-135198 Forward-Port-Of: odoo/odoo#216030
Manufacturing users can now print Bill of Materials reports even when a byproduct has a quantity of zero. The report avoids an invalid cost calculation and shows a zero cost in that case, preventing an interruption in production documentation.
Original PR description
**Issue**:
Printing the BOM crashes when one of the byproduct quantity is set to 0
**Steps to reproduce**:
- Open the manufactoring app
- Go to settings and activate by-product settings
- Go to Products > Bills of Materials
- Open a BOM
- Put the quantity of one the by-product by 0
- Click on overview
- Click on the print button
**Cause**:
In the `mrp_report_bom_structure.xml` template, there is this division:
- `<td class="text-end" t-esc="byproduct['bom_cost'] / byproduct['quantity']" t-options='{"widget": "monetary", "display_currency": currency}'/>`
without checking if `byproduct['quantity']` is different than 0.
**Solution**:
Added the check on `byproduct['quantity']` in the foreach
**Additional notes**:
Since it makes no real sense to have a non-zero BoM cost associated with a byproduct whose quantity is zero, the cost is set to 0 when the quantity is 0.
opw-4853525
Forward-Port-Of: odoo/odoo#213936This fixes an issue where archiving an employee could prevent the departure wizard from correctly saving related employee information. The change helps ensure HR records remain accurate when processing employee departures, especially when the departing employee was responsible for others' time off.
Original PR description
When we archive an employee that is the time off responsible of another employee, the `_clean_leave_responsible_users` method will clear our cache before we set some departure related fields. This will cause us to have to recompute the relation for `employee_ids` and the domain that ensures the suggested employees in the wizard are not already archived will prevent us from finding the employee we were archiving. To ensure these fields are written properly, we save the value of `employee_ids` before archiving the employee. opw-4729600 Forward-Port-Of: odoo/odoo#211174
When an employee is archived through the departure process, Odoo now clears related approver links even if the same user is only assigned to one approval role. This prevents outdated Time Off, Expense, or Timesheet approver assignments from remaining on other employee records.
Original PR description
Currently, a user needs to be time off, expense and timesheet approver of an employee for those links to be removed by the departure wizard. If not all the approver fields are the same user, that link will not be removed. Steps to reproduce: - Set Marc Demo as only Time Off approver on an employee. - Archive Marc Demo's employee (This does not remove time off approver from the previous employee) To rectify this issue, we correctly group the `user_domain` so that their contents are properly OR'd. Forward-Port-Of: odoo/odoo#213513
Popovers such as date pickers now close automatically when users move between pages, including with the browser back or forward buttons. This prevents outdated popups from remaining visible and keeps the interface clearer during navigation.
Original PR description
Before this commit, popovers like the datepicker remained open when navigating between pages, using the browser's previous/next page button for example. In this commit, popovers listen to page changes and are closed when such events are detected. Task 4812869 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website editor sidebar now handles longer translated labels correctly, such as Spanish text in the Layout options. This prevents unwanted horizontal scrolling when editing image snippets, making the editing experience cleaner and easier to use.
Original PR description
Step to reproduce: - Set the odoo backend language to spanish (tested in V16.0) - Go to edit mode - Drop "Text-Image" snippet. - Click on Image from dropped snippet. - Bug: The sidebar "Layout" menu overflows, there is a horizontal scrollbar. Issue: There was an issue with the dynamic width of the we-buttons within the button group. The text in the "Layout" options was overflowing, causing the sidebar to overflow. Solution: This commit addresses the specific issue with the layout option. Without altering any other styles and assuming this is the only case, we equally divide the available space between the buttons using the grid template. task-4378522 Forward-Port-Of: odoo/odoo#217722 Forward-Port-Of: odoo/odoo#189856
Internal users can now add sub-contacts to contacts that use FACe Center roles without needing Accounting permissions. This removes an unnecessary access restriction and prevents non-accounting staff from being blocked during contact management.
Original PR description
**Steps to reproduce:** - Install l10n_es_edi_facturae - With an admin user, create a contact - From the contact, add a "FACe Center" sub-contact with a Role - Save the contact - With a user that doesn't have any Accounting rights, try to add a sub-contact to the previously created contact **Issue:** An access error is raised because some Accounting rights are needed to access "l10n_es_edi_facturae.ac_role_type" records. **Cause:** "l10n_es_edi_facturae.ac_role_type" is only readable for "account.group_account_invoice" group and "account.group_account_readonly" group. **Solution:** There's is no point to restrict the read access to an Accounting group. The model is made readable for all internal users. opw-4788636 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217370
This fixes an error that occurred when testing a live chat chatbot step that creates and forwards a lead. Business users can now validate chatbot lead flows without the test chat crashing due to missing live chat channel information.
Original PR description
When user tests the chatbot with create lead and forward step, A traceback will appear. Steps to reproduce the error: - Install ``website_crm_livechat`` module - Go to Livechat > Configuration >…
When user tests the chatbot with create lead and forward step, A traceback will appear. Steps to reproduce the error: - Install ``website_crm_livechat`` module - Go to Livechat > Configuration > Chatbots > Open Welcome Bot > Add a line > Step Type: Create Lead & Forward > Save & Close - Test > the chat will open > Click on ``I have a pricing question`` > The Bot will ask for an email > Enter a valid email > Send Traceback: ``` KeyError: im_livechat.channel() ``` When user clicks the Test button a discuss channel is created as shown in [1]. In this case, the discuss channel created for the chatbot test script does not have a ``livechat_channel_id``. https://github.com/odoo/odoo/blob/5c7a4716ef1b1c55e1ce8848c11c27c79768d1ec/addons/crm_livechat/models/chatbot_script_step.py#L109-L111 Here, ``livechat_channel_id`` will be an empty record. So, It will raise the above traceback. [1]: https://github.com/odoo/odoo/blob/5c7a4716ef1b1c55e1ce8848c11c27c79768d1ec/addons/website_livechat/controllers/chatbot.py#L52 sentry-6729421960 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217902
Replacing a background video in the website editor no longer creates an invalid URL with a duplicated protocol. This prevents confusion and failed video previews when users update background videos.
Original PR description
Problem: After https://github.com/odoo/odoo/pull/175663/commits/75c2343ed3a41f32964fc91a007c6b11b5a75d9f, if a background video is added and then replaced, the resulting video URL contains a duplicated protocol in video selector. Cause: For background videos, the URL is retrieved from `iframe.src`, which already includes the protocol. The current logic unconditionally prefixes the URL with a protocol, leading to duplication. Solution: Check whether the URL already contains a protocol before prefixing it. Steps to reproduce: - Add a block - Add a background video - Open the video selector to replace the background video -> The resulting URL has the protocol duplicated opw-4931945 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#218554
The shop page sidebar now uses non-heading labels for product filters, so the main page title is recognized first by SEO tools. This removes an SEO Optimizer warning without changing the visible layout or shopping experience.
Original PR description
Steps to reproduce: - Go to Website → Shop page - Open SEO Optimizer (Site → Optimize SEO) - Notice after this bug fix there is no warning Issue: - When attribute filters (e.g., Color, Size, Price Range) are shown in the sidebar, each section uses a `h6` tag as the section header. - This causes the `h6` to appear before the main `h1`(product title) in the DOM triggering the SEO Optimizer warning. Cause: - The sidebar accordion uses `h6` tags, which are rendered before the main page content. - This breaks the recommended heading hierarchy expected by SEO tools. Fix: - Replaced all `<h6>` tags in the sidebar accordion headers with `<div>` elements. - This preserves styling and structure while ensuring the main `<h1>` appears first semantically. opw-4896986 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes rare cases where Hong Kong payroll payslip amounts did not match the amounts exported in HSBC autopay files. The change aligns rounding behavior so payment files better reflect payroll records, reducing reconciliation issues.
Original PR description
Explanation: In some rare cases, the autopay amount in payslip and the amount in hsbc autopay file doesn't match. This is due to hsbc autopay files are trimming all the decimal places, and the amount in payslip are rounded. Forward-Port-Of: odoo/enterprise#89118
Miscellaneous changes
Currently when /iot/setup method is called if the iot box record exists we always update the record with the received data, even if the data is the same as the record's data. This PR only updates it if the data changes Forward-Port-Of: odoo/enterprise#88043
Original PR description
Currently when /iot/setup method is called if the iot box record exists we always update the record with the received data, even if the data is the same as the record's data. This PR only updates it if the data changes Forward-Port-Of: odoo/enterprise#88043