Daily updates from Odoo
Monday, July 7, 2025
33 changes · saas-18.4
Resolved issues and error corrections
When users create a link in the website editor and then choose Discard, the link editing popup now closes correctly. This prevents stale link details from remaining on screen after the actual page changes have been undone.
Original PR description
Steps to reproduce: - Open website builder - Select some text and "Add a link" with the toolbar - Fill the URL field - Select "Button Primary" - Click "Discard" - Bugs: The link popover does not closes The dom changes are discarded, but it still shows the same info task-4367641
Website users will now see link previews refresh immediately as they type a URL or choose an autocomplete suggestion. This makes creating links clearer and reduces mistakes before publishing or saving content.
Original PR description
### Steps to reproduce: - Install the Website module. - Go to a To-Do and type a slash command, e.g., /link. - Enter a label for the link. - Type in the URL input — observe the preview. - Select a suggestion from autocomplete dropdown — observe the preview. ### Description of the issue/feature this PR addresses: - The link preview did not update while typing in the URL input. - It also did not update after selecting an item from autocomplete dropdown. ### Desired behavior after PR is merged: - The link preview updates live while typing and upon selecting a suggestion. task-4910827 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix updates older image-related data used in the website editor so it matches the current naming format. It helps avoid inconsistencies when editing existing pages or content with images, with no expected impact outside edit mode.
Original PR description
When `html_builder` was introduced, some data attributes related to images have changed. Unfortunately, the attributes on static data were not adapted accordingly. Because of this, both namings might appear in this version. This commit migrates images and background images attributes so that, upon edition, a single naming scheme remains used. It should be safe enough given that those attributes are only used by edit mode. Dataset changes: - copy `originalId` to `attachmentId` - rename `originalMimetype` to `formatMimetype` task-4367641
The calendar side panel now stays the same width regardless of the content shown in it. This makes the Timesheet calendar filters and controls more stable and easier to use.
Original PR description
Before this commit, the width of the calendar side panel varied depending on the content. Steps to reproduce: - Go to Timesheet - Select the calendar view - Click on the "+" button and click on the filter button. task-4921562 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 update makes automated checks for the HTML editor more reliable by waiting properly for link preview popovers and splitting an overly long test. It helps reduce random test failures in the release pipeline, supporting smoother validation without changing user-facing behavior.
Original PR description
Forward-Port-Of: odoo/odoo#217434 Forward-Port-Of: odoo/odoo#215168
This fix prevents long website builder dropdown menus from extending beyond the visible screen. Users can now access all available options without parts of the menu being cut off, improving usability when editing website forms or other elements with many choices.
Original PR description
The goal of this commit is to prevent the BuilderSelect from having part of its dropdown outside the screen. This makes some of the elements in the dropdown inaccessible.
This problem is linked to a popover limit that should be set in the future.
Solution:
We will set a limit of 50% of the screen for the height in BuilderSelect
To reproduce:
- Have a BuilderSelect containing many items For example, Type when a Field is selected in a Form.
- Click on the BuilderSelect
Before this commit:
Part of the dropdown is outside the screen and therefore few elements
are impossible to select.
After this commit:
The size of the dropdown is limited to prevent it from being outside the screen.
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-prFont selections such as Open Sans now work reliably in the website theme editor. This ensures the chosen typography is displayed as expected, helping websites maintain their intended branding and appearance.
Original PR description
Since `html_builder` was merged, font family selection is not implicitly quoted anymore. This is a problem for font families having names that contain spaces. This commit puts font family names between quotes before calling `customizeWebsiteVariable`. Steps to reproduce: - Go to the Theme tab - Pick "Open Sans" as font family - Inspect page => The used font was not "Open Sans". task-4367641
A small typo in the Belgian tax configuration was corrected from “.00” to “0.0”. This helps ensure the Belgium localization data is formatted consistently and avoids potential issues when setting up or using Belgian tax records.
Original PR description
Forward-Port-Of: odoo/odoo#216453 Forward-Port-Of: odoo/odoo#216098
This update improves Odoo's internal Hoot testing framework with fixes for search, error handling, event behavior, and debugging usability. It helps developers run and troubleshoot automated tests more reliably while keeping changes limited to the test environment, reducing risk for business users.
Original PR description
## Pull Request HOOT (PRHOOT) 34 This pull requests brings various improvements and fixes to Hoot and the Odoo unit test ecosystem. See the different commit messages for more details. Note: these changes are made in stable to avoid having to support multiple versions of the HOOT API. As such, these changes are intended to be strictly limited to unit tests as to not put the rest of the code base at risk. Enterprise: https://github.com/odoo/enterprise/pull/88949 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#217463 Forward-Port-Of: odoo/odoo#216546
This fix ensures that changes made to cached web responses do not accidentally alter the saved cache content. It helps keep application data more reliable and prevents hard-to-track display or behavior issues caused by reused cached information.
Original PR description
Before this commit, modifying the response directly (whether from the RAM cache or the IndexedDB cache) would also modify the RAM cache content. Now, rather than storing a reference, the RAM cache stores a copy of the IndexedDB value. Also, when the RAM cache is returned, a copy of the stored value is returned.
This change gives the web desktop test suite more time to complete as the number of automated tests has grown. It reduces the chance of false failures caused by busy machines rather than actual product issues, helping keep development checks stable.
Original PR description
The number of tests in the hoot suite keeps increasing, and we're close to the timeout for the desktop suite. Depending on the CPU load, it happens that the suite timeout. This commit thus shifts it up to 40 minutes. 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
Translation export now shows a warning instead of blocking the process when no translatable text is found. This keeps automated synchronization running smoothly and gives users an option to try another export while preserving the correct export window title.
Original PR description
A blocking error is too much, because it impedes the automatic sync flow. Warnings have been added to the `i18n` command and the `base_language_export` wizard. A retry / more button has been added,…
A blocking error is too much, because it impedes the automatic sync flow. Warnings have been added to the `i18n` command and the `base_language_export` wizard. A retry / more button has been added, in case the user wants to export something else. The title was changing to the default `Odoo` after switching state. Now it stays `Export Translation` <details><summary>Screenshots (click me)</summary> Model:    Module:    CLI:  </details> *(note: retargeted to saas-18.4)* ref: https://github.com/odoo/odoo/pull/194933#discussion_r2176924160
This change makes an automated website popup test more reliable by waiting longer for the popup to appear before checking its close behavior. It helps reduce intermittent test failures in validation systems without changing the customer-facing website experience.
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
The website builder now shows snippet previews in the correct right-to-left layout when editing RTL websites. This prevents confusing or incorrect preview layouts, especially when the website language direction differs from the user's language.
Original PR description
__Current behavior before commit:__ When using a right-to-left (RTL) language on a website, the snippet dialog in the website builder does not correctly apply the RTL direction to the snippet previews. The CSS for the frontend assets is loaded without considering the RTL context of the website. This is mainly an issue when the website default language has a different direction than the user language. __Description of the fix:__ This commit corrects the RTL behavior in the snippet dialog by: - Setting the dir attribute to the snippet preview container based on the direction of the editable element. - Ensuring the correct CSS bundle (including the RTL version) is loaded for the snippet previews by retrieving the CSS bundle URL from the editor's document similarly as it was done in `web_editor`. - Adding a tour to test the fix. Website refactor: https://github.com/odoo/odoo/pull/187419 task-4367641
This fix lets payments made with branded card methods, such as Visa through Adyen, use the manual and partial capture settings of the main card payment method. It also allows related card brands like Hipercard and Elo to be enabled correctly, reducing failed or blocked payment operations for merchants.
Original PR description
Versions -------- - saas-18.2+ Steps ----- 1. Set up Adyen as a payment provider; 2. enable manual capture; 3. set up a sales order; 4. pay for sales order with Adyen using VISA; 5. do a partial manual capture. Issue ----- Payment method doesn't support partial capture. Additionally, you're not allowed to enable the Hipercard & Elo payment method brands for the Card payment method. Cause ----- Commit 25feb5b11c2df added the `support_manual_capture` field to `payment.method`. This field is only set to a non-default value for primary payment methods, e.g. Card. For branded payment method, e.g. VISA, it defaults to 'none'. Solution -------- Add a `_get_primary_method` method to `payment.method` and `payment.transaction`, retrieving the relevant primary payment method to check support on. opw-4817961 Forward-Port-Of: odoo/odoo#216890
Changing the organizer of a regular Odoo calendar event no longer archives the original event and creates a replacement. This prevents accidental loss or confusion for users while keeping the special handling limited to Microsoft-synced events.
Original PR description
**Issue:** when you change an odoo event organizer the original gets archived and a new one is created this behavior should only be happening with microsoft synced events **Steps to reproduce:** - install microsoft_calendar - create new event - change organizer and save the event is archived opw-4765254 Forward-Port-Of: odoo/odoo#217462 Forward-Port-Of: odoo/odoo#210100
This fix ensures calendar events open with the specific edit form configured for that calendar view. It prevents Odoo from overriding that choice behind the scenes, making behavior more consistent for users in HR holidays, homeworking calendars, projects, and other calendar views.
Original PR description
*hr_holidays,hr_homeworking_calendar Before this commit, when clicking on a calendar event to edit it, a `get_formview_id` rpc was done to retrieve the id of the form view to use to edit the event. However, the documentation [1] states that the attribute `form_view_id` can be set in the arch, for the same purpose. The given id was then overruled by the id returned by `get_formview_id`. This commit removes the rpc, so the id is always the one given in the arch, as written in the documentation. [1] https://www.odoo.com/documentation/18.0/developer/reference/user_interface/view_architectures.html#calendar Task-4910395 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 public website components from being accidentally saved into page content while editing, avoiding duplicated or inactive elements after publishing. It also makes component behavior in edit mode more predictable, reducing the risk of broken-looking pages for website editors.
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
Portal discussions now distinguish between the logged-in user and the portal contact they are allowed to act for. This avoids confusing labels and hints that incorrectly make messages, mentions, or actions look like they belong to the current user.
Original PR description
Since [1], discuss considers both the logged in and the portal partner as "self". However, even if the token grants access to act as the portal partner, it doesn't mean that both users are the same. Visually, it's confusing that every hint in the UI assimilate the current user to the portal partner (messages, mentions, ...). This commit fixes that by separating the concept of portal partner and "self". The user providing the portal token can access portal partner actions (editing/deleting message) but is considered a different user. [1]: https://github.com/odoo/odoo/pull/211204 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#217395 Forward-Port-Of: odoo/odoo#217062
This fix prevents manufacturing replenishment flows from generating duplicate manufacturing order names when orders originate from combined references. It helps avoid scheduler failures and keeps automated manufacturing replenishment running reliably.
Original PR description
__Issue:__ Condition used for MOs triggered under the `pbm_sam` manufacturing flow only checks the start of the group name, not the whole name, which could fail in case triggered by reordering rules where the origin might be a compound string such as: "OP/00001,WH/MO/00001" __Steps to reproduce:__ 1.) Install sales; inventory; manufacturing 2.) Enable multi-step routes 3.) Unarchive MTO 4.) Set warehouse manufacture steps to: Pick components, manufacture, then store products (3 steps) (manufacture_steps == 'pbm_sam') 5.) Create product A-bom (enable manufacture and mto routes) 6.) Create product B (enable manufacture) 7.) Add Product A as bom for product B 8.) Add a reordering rule (manufacture) for product B 9.) run SA Procurement: run scheduler Error: duplicate key value violates unique constraint opw-4866263 bug found: [[#c50cb9d]](https://github.com/odoo/odoo/commit/c50cb9d552f352bde4e3b8d92e8509476f194830) Forward-Port-Of: odoo/odoo#216874
This fix prevents key parts of a website table of contents block from being dragged into unrelated page areas. Editors can still reorder those parts using the existing arrow controls, reducing accidental layout issues while building pages.
Original PR description
When the table of content options were converted to `html_builder`, the drag'n'drop of the content part and the navbar part was not restricted to remain within the table of content section. Because of this it was possible to e.g. drop the navbar inside the grid layout of another block. This commit prevents this. task-4367641
This fix keeps Discuss call controls usable on browsers that do not support picture-in-picture. Instead of failing or hiding the call view, Odoo now opens the call in a separate popout window so users can continue their conversation reliably.
Original PR description
Use popout as a fallback to the pip feature when pip is not available on the browser.
Users can now print several invoices at once without the process failing. This prevents an error screen during bulk invoice printing and keeps accounting workflows moving smoothly.
Original PR description
When User tries to print multiple invoices, A traceback will appear. Steps to reproduce the error: - Install ``account`` module with demo data - Go to Invoices > Select multiple invoices > Print Traceback: ``` ValueError: Expected singleton: account.move(2, 1) ``` After this commit: https://github.com/odoo/odoo/commit/1a8123177dbcb01435f3608508302f40532477c1 https://github.com/odoo/odoo/blob/871c7d23336cf06619998795c073bd2001b20af1/addons/account_edi_ubl_cii/models/account_move.py#L76 When user prints multiple invoices, self will have multiple records. So, checking ``self.state`` will lead to the above traceback. opw-4912628 sentry-6717623103 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#216807
This fix restores previously removed user setting methods related to muting in Mail to comply with Odoo's stable version policy. It helps preserve expected behavior and compatibility for existing users and customizations.
Original PR description
This commit reintroduces the methods removed in https://github.com/odoo/odoo/pull/215866 in order to follow stable policy.
This fix makes automated point-of-sale tests for the Brazilian electronic invoicing module more reliable by waiting for product searches to fully finish before continuing. It reduces false test failures in build checks, helping teams validate changes with fewer interruptions.
Original PR description
The tours regularly fail in single app builds because the "No other products found" notification is not found. Waiting on that notification is necessary because the product search happens asynchronously. I was not able to reproduce the test failure locally. But in an attempt to improve the situation this changes the approach to use the little "loading" spinner to wait on the search to finish by using Chrome.isSynced(). This method is used elsewhere in POS tests and should hopefully be less flaky. builx_error-224202 Forward-Port-Of: odoo/enterprise#88300
Customer statement emails now respect the sender or reply-to address configured on the email template. This ensures statements are sent from the expected business contact instead of unexpectedly defaulting to the current user's address.
Original PR description
Steps to reproduce:
Go to Settings> Email templates
Open the template Customer statements
Change the value in email from or reply to
Go to Accounting > Customers > Customers
Open a customer
Send a customer statement
Issue:
The address in use is not the same as we specified in the customer template
Cause:
if no email_from is provided, we will use the current partner's use's email address https://github.com/odoo/odoo/blob/cc0aaff5f93d5332c60d5bd8097173326a0a12b3/addons/mail/models/mail_thread.py#L2863-L2864
We don't check if the template has any email_from address defined
Note:
As from this fix, if no address is defined, by default it will be the `{{ object._get_followup_responsible().email_formatted }}`
opw-4864155
Forward-Port-Of: odoo/enterprise#88262Appointment bookings now avoid matching a website visitor to a customer record from a company the appointment staff cannot access. This prevents failed opportunity creation in multi-company setups and keeps online booking flows working reliably.
Original PR description
**Steps to reproduce:** - Set up CRM / Appointment / Website apps - Create new company (2) - Create partner contact with specific email and the new company - Create appointment type linked to a staff…
**Steps to reproduce:**
- Set up CRM / Appointment / Website apps
- Create new company (2)
- Create partner contact with specific email and the new company
- Create appointment type linked to a staff user of another company (1) who has no access to the new one
- Enable `Create Opportunities` on the new appointment type
- Go to the website as an anonymous user
- Submit an appointment request using the partner's email
- `Incompatible companies on records:` error
**Issue:**
Previous solution (17.0) was trying to use existing partner if the email was provided and existed in the database
`customer = request.env['res.partner'].sudo().search([('email_normalized', '=', email_normalized)], limit=1`
This means that, in a multi-company environment, the lead created by the new appointment for the appointment user of company 1 can be linked to the partner contact of company 2 and throw an error on validation.
**Fix:**
Restricted partner search domain using current allowed companies using the `staff_user` or the user which created the `appointement_type`.
opw-4713060
Forward-Port-Of: odoo/enterprise#89196
Forward-Port-Of: odoo/enterprise#84006Marketing automation campaign tests can now use tracked links again, so teams can validate click-based journeys before launch. The update also prevents overlapping tests for the same campaign and recipient details, reducing confusing or failed test results while still allowing separate tests to run in parallel.
Original PR description
Previously, marketing campaign testing (through debug) could cause an issue where tracked links could cause a traceback if a marketing activity was edited after a test was attempted. To work around…
Previously, marketing campaign testing (through debug) could cause an issue where tracked links could cause a traceback if a marketing activity was edited after a test was attempted. To work around this, #13665 deactivated link tracking in marketing campaign tests. However, this meant that flows including click actions could no longer be tested. As this issue has been resolved in odoo/odoo#48845, this commit reverts https://github.com/odoo/enterprise/pull/13665 to once again permit marketing automation testing. -- Additional changes are needed to fix other issues: Tests using one's own coordinates are prone to breaking due to newer mailing traces attaching themselves to the oldest marketing trace. This commit makes it so that marketing campaign tests for the same marketing campaign and coordinates cannot run concurrently, by cancelling older test campaigns upon starting a new one. Different tests can still run concurrently on distinct partners/leads/ etc. Additionally: - Running tests are now visible on campaigns in the "New" state; - Activities don't mark themselves as needing sync unless their campaign is in the "Running" state. task-4557855 Forward-Port-Of: odoo/enterprise#89473 Forward-Port-Of: odoo/enterprise#78793
This fix ensures several Odoo Enterprise apps correctly identify where real-time updates should be sent. It helps prevent missed or misrouted notifications in areas such as approvals, knowledge, VoIP, helpdesk live chat, WhatsApp, and Mexican e-invoicing tests.
Original PR description
\* = approvals, knowledge, l10n_mx_edi, voip, website_helpdesk_livechat, whatsapp Enterprise counter-part. https://github.com/odoo/odoo/pull/215869
Users can now open Studio from the Documents list even when a document shortcut is selected. This prevents an error that interrupted customization work in Documents and keeps the workflow usable.
Original PR description
Steps: - Install `documents` and `studio` - Open documents, go to list view - Select a random file and 'Create a shortcut' via the actions - Try to open studio - traceback opw-4900667 Forward-Port-Of: odoo/enterprise#89508
This fix ensures that when users open a task from the Field Service calendar, the intended form layout is used. It keeps the Field Service calendar aligned with a related platform change, preventing confusing or incorrect task editing screens.
Original PR description
This commit is the counter part of odoo/odoo#216631 which removes a parameter to the editRecord function. Task-4910395
Fixes an issue where processing overdue invoice follow-ups could fail when SMS follow-up settings were enabled. The follow-up process now avoids using outdated customer mobile field data, helping staff complete payment reminders without interruption.
Original PR description
When clicking the `Process Follow-ups` button after creating a due invoice, a traceback could occur due to missing data on the related records. Steps to reproduce: --- - Install `account_followup`…
When clicking the `Process Follow-ups` button after creating a due invoice, a traceback could occur due to missing data on the related records.
Steps to reproduce:
---
- Install `account_followup` module(without demo)
- Go to `Follow-up Levels` and enable SMS in `15 Days`
- Create an invoice with Invoice Date(2 months ago) and Payment terms: `15 Days`
- Now, click on the selected customer and fill in all important details
- In the action button, click `Process Follow-ups`
Traceback:
---
```
KeyError: 'mobile'
ValueError: KeyError('mobile') while evaluating
'if records:\n action = records.action_manually_process_automatic_followups()'
```
The mobile field was removed from `res.partner` (see related commit), but it was not removed from here. This commit cleans it up to avoid referencing a non-existent field.
commit- https://github.com/odoo/odoo/commit/6b820eb6fc6f782ba6a83d605d87b4a1dd2a87be
sentry-6720070075
Forward-Port-Of: odoo/enterprise#89241Odoo Studio now uses the platform’s built-in field capabilities to decide whether fields can be grouped, sorted, or aggregated, instead of relying on less reliable guesses. This helps users see more accurate options when configuring views such as lists, kanban, pivot, graph, gantt, and search.
Original PR description
Before this commit we used some heuristics in studio to determine whther some field had some ability (groupable, sortable, aggregator) After this commit, we use the not so new tools given by https://github.com/odoo/odoo/commit/b177b058be1531c3d2af2b591c22591c19240d33 Note that we still rely on the field type, because even if possible, groupong by some fields doesn't make much sense (eg.: float) task-4879382 Forward-Port-Of: odoo/enterprise#89342 Forward-Port-Of: odoo/enterprise#88522