Thursday, May 21, 2026
29 changes · master
Resolved issues and error corrections
The point of sale order completion flow was adjusted so error checks can be handled more safely before an order is finalized. This helps reduce the risk of completing a sale when required fiscal device validation fails.
Original PR description
In order to allow patching (in particular for FDM, where we don't want to finalize the validation of the order if there is an error), we extract the waiter method. see odoo/enterprise#104468 Forward-Port-Of: odoo/odoo#265333 Forward-Port-Of: odoo/odoo#244298
The website editor’s guided tour now waits for a side panel to close before moving to the next action. This prevents intermittent failures where editor controls disappeared too soon, improving reliability for testing and validation.
Original PR description
This commit stabilizes the tour flow by ensuring the sliding panel is fully closed before proceeding to the next step. Issue: The tour steps selects a shape, which triggers [hideSlidingPanel]. That…
This commit stabilizes the tour flow by ensuring the sliding panel is fully closed before proceeding to the next step. Issue: The tour steps selects a shape, which triggers [hideSlidingPanel]. That function focuses a `BuilderButton` after a timeout. This introduced a race condition: if the timeout executes before the tour interacts with the `OverlayButtons`, the overlay gets hidden due to the `focusin` event registered on the builder (outside the iframe) [1], which ultimately hides the overlay buttons. The issue made the tour undeterministic following commit [2], which removed several intermediary steps between the shape selection and the failing step. Fix: Wait for the sliding panel to fully close before continuing the tour flow. [hideSlidingPanel]: https://github.com/odoo/odoo/blob/saas-19.3/addons/html_builder/static/src/core/building_blocks/builder_sliding_panel.js#L73-L81 [1]: https://github.com/odoo/odoo/blob/saas-19.3/addons/html_editor/static/src/core/selection_plugin.js#L265 [2]: https://github.com/odoo/odoo/commit/fa328f4e1798a9547e9df749c4144478357e1764 runbot-[242702](https://runbot.odoo.com/odoo/error/242702) Forward-Port-Of: odoo/odoo#264932
This fix ensures the Danish localization demo tool correctly handles calls made in the updated system. It prevents demo-related errors after a recent internal library change, helping test and demonstration flows continue to work reliably.
Original PR description
https://github.com/odoo/odoo/pull/221547 removed decorator library. By doing so, it surfaced signature problems related to usage of args and kwargs for calling _call_nemhandel_proxy, but its demo handler only handled being called with args. This applies the same fix implemented for Peppol in https://github.com/odoo/odoo/pull/225000. task-6065372
Profile pictures in the portal and website profile areas now display in a consistent square shape. This improves visual consistency and prevents profile images from appearing stretched or uneven across customer-facing pages.
Original PR description
After this commit: Ensures profile images render in 1:1 ratio everywhere in the portal for consistent display across portal. task-5973574 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a Point of Sale setup issue that could cause automated tests to fail when the Stock app was not installed. The change removes an unnecessary stock-related setting from Point of Sale demo data, keeping the module independent and easier to validate on its own.
Original PR description
Steps to reproduce: = - Install only the `point_of_sale` module. - Run `_getSplitOrderName`, `onClickLine` HOOT test. Issue: = - The test fails with the following error: - `Unknown field "tracking" on record id=25 in model "product.template"` Reason: = - The `stock` dependency was removed from `point_of_sale` and `tracking` field is defined in the `stock` module. Fix: = - Remove the `tracking` field from the `product.template` demo data in `point_of_sale`. - The field was unnecessary since its default value is already `none`. task-6229617 error-938075 Forward-Port-Of: odoo/odoo#265473
Demo orders in Point of Sale and Restaurant now display clear sequential order references instead of the placeholder '/'. This makes sample data easier to understand and avoids confusion when reviewing demo sales orders, while leaving new draft orders unchanged.
Original PR description
Before this commit: =================== - For demo orders, no proper Order Reference is displayed, by default, it is set to '/'. After this commit: =================== - All default '/' values are replaced with a sequential Order Reference, except for orders in the 'new' state . Task-6004716 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#264971 Forward-Port-Of: odoo/odoo#253272
This fixes an upgrade problem affecting the Brazil localization address form. Businesses using the Brazil module can upgrade without the address form view failing to load due to an outdated dependency.
Original PR description
Issue: ------ `l10n_br.address_form_fields` inherits from `portal.address_form_fields` but targets a `<select>` element that was moved to `portal_address_extended.address_extended_form_fields` in…
Issue: ------ `l10n_br.address_form_fields` inherits from `portal.address_form_fields` but targets a `<select>` element that was moved to `portal_address_extended.address_extended_form_fields` in [saas~19.2]. Traceback: ---------- ```py Error while parsing or validating view: Element '<xpath expr="//select[@name='city_id']/option[not(@value='')]">' cannot be located in parent view ``` Steps to reproduce: ------------------- 1. Install `l10n_br` in v19 2. Upgrade to v19.2 3. Upgrade the `l10n_br` module → Traceback Root cause: ----------- The view is adapting an element owned by a sibling view, making the inheritance hierarchy conceptually wrong and fragile. Solution: --------- Update the `inherit_id` of `l10n_br.address_form_fields` to `portal_address_extended.address_extended_form_fields` so it correctly inherits from the view that owns the targeted element. opw: [6125901] [saas~19.2]: https://github.com/odoo/odoo/commit/026c6f9f2a388ee509a135c53e38f5bb3d08ff73 [6125901]: https://www.odoo.com/odoo/70/tasks/6125901?debug=1 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#264045
This fix ensures date and time fields on website pages are handled correctly in translation mode. It prevents users from accidentally editing date text in places like blog posts, reducing the risk of save errors and content issues.
Original PR description
The plugin `DateTimeFieldPlugin` was only added in registry `builder-plugins`. But it should also be included in the lists `CORE_PLUGINS` of `html_builder` and `TRANSLATION_PLUGINS` of `website` (the same as `MonetaryFieldPlugin` and similar plugins) Steps to reproduce: - Open `/blog` in translate mode - Click on a date - Bug: you can edit the text (and it will likely cause an error on save) task-6226376 Forward-Port-Of: odoo/odoo#265400 Forward-Port-Of: odoo/odoo#264943
This fixes a typo in the Mexican localization accounting group data so records better match official SAT source information. The change helps businesses using Mexico accounting templates keep their accounting classifications accurate and compliant with published references.
Original PR description
Source: https://www.sat.gob.mx/minisitio/NormatividadRMFyRGCE/documentos2026/rgce/anexos/Anexo24delasRGCEpara2026.pdf opw-6174385 Forward-Port-Of: odoo/odoo#265324 Forward-Port-Of: odoo/odoo#262549
Fixed an issue where clicking a dropdown on pages such as /r could trigger an error instead of opening the menu. The dropdown now waits until the menu is ready, improving reliability for users navigating those pages.
Original PR description
Steps to reproduce: - Go to the `/r` page. - Click a dropdown. => traceback Before this commit, `Dropdown.onOpened()` always observed `menuRef.el` as soon as the popover reported it was open. In frontend pages such as `/r`, the menu can still be rendering at that moment. The menu appears just after, but `MutationObserver.observe()` already received `undefined` and raised a `TypeError`. After this commit, `Dropdown.onOpened()` only starts the observer when the menu element exists. The dropdown can finish opening normally, so the menu is shown without traceback. Introduced by [1]. [1]: 7aed5b141f06 Forward-Port-Of: odoo/odoo#265224
This fixes a confusing blank line above email signatures in the full message composer. Users are less likely to type content that gets hidden with the signature, making composed messages clearer and reducing accidental omissions.
Original PR description
**Steps to reproduce:** - Go to the chatter of any record - Open the full composer - Empty line is present above the signature delimiter (`--`) - Adding text to this line will encapsulate it with the rest of the signature (and hide it by default in the message) **Issue:** Extra `<br>` was added to improve readability, but adding it this way (before the delimiter) can be confusing for the users as they can add text on what appears to be a normal empty line, that is actually hidden with the signature ellipsis. **Fix:** Moved the added `<br>` element outside the signature container for the full composer. The user can still find a way to modify the composer structure in a way that will hide part of the text (e.g. by typing just before the delimiter), but this limits the issue. related: https://github.com/odoo/odoo/commit/13a9c6f5010c3dee01aa0f66ed41b25f517a4a8c opw-6087042 Forward-Port-Of: odoo/odoo#265412 Forward-Port-Of: odoo/odoo#257936
Searching link tracker clicks by the Link field now works correctly instead of showing a server error. This helps Email Marketing users find clicked links reliably without disrupting their workflow.
Original PR description
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing…
Overview ------ When searching based on the `Link (short_url)` field in the search bar, in the `link.tracker.click` list view, an error fires up. How to Reproduce ------ 1. Open the Email Marketing app 2. Create a new mailing (or you can use an existing one that has some clicks) and send it 3. Make a click in the email from the recipient's side 4. Open the link tracker `click` related to that mailing (select the mailing → `Link Trackers` stat button → click on a link → `Clicks` stat button) 5. Make a search based on the Link (short_url) field Expected Behavior ------ Return the list of links that matches the entered search query. Current Behavior ------ Odoo Server Error. Cause & Solution ------ The cause of this error is that the `shor_url` field is a computed, non-stored, field, and hence, we cannot directly make a search on it. So, either we make the `short_url` a stored field, which is not so efficient, or we create our own custom `_search_..` method. Task-6131693 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265293 Forward-Port-Of: odoo/odoo#260146
A mismatch in poll vote data handling has been corrected so users can open poll vote details without seeing an error. The poll votes panel also now includes a close button, making it easier to dismiss.
Original PR description
Since this https://github.com/odoo/odoo/pull/257062, `store_poll_option_votes` expected
`pull_option_id` while the fetch payload from
`mail.poll.option` passed `poll_option_id`.
As a result, fetching poll option votes could raise:
```
TypeError: WebclientController.store_poll_option_votes()
got an unexpected keyword argument 'poll_option_id'
```
This PR updates the handler to use the correct `poll_option_id`
param name so it matches the payload and avoids the traceback.
It also adds the missing close button in the poll votes panel.
task-[6237159](https://www.odoo.com/odoo/project/1519/tasks/6237159)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe API documentation area now loads the shared web assets it needs, preventing errors caused by missing supporting files. A basic automated check was added to confirm the documentation page remains accessible.
Original PR description
The PR https://github.com/odoo/odoo/pull/264047 introduced a new utility function in multiple addons including `api_doc`. However, `api_doc` was using fine-grained assets and was missing the needed l10n/utils files. This commit restructures the `__manifest__.py` file in order to include `web._assets_core` which solves the issue. This commit also adds a barebone tour in order to assert `/doc` can be accessed.
Service products now keep the user's chosen default unit of measure instead of automatically switching to hours. Products that are invoiced through timesheets still use a time-based unit, keeping timesheet billing behavior accurate.
Original PR description
A user-defined default on `product.template` Unit is not applied when the product is of type Service 1. Install Sales and Sales Timesheet 2. Go to Settings > Sales > Product Catalog and enable Units of Measure & Packagings 3. Enable debug mode 4. Go to Sales > Products, open a new product form and set unit to Days 5. In the debug menu (bug icon in the top right), select Set Default Values for Unit = Days and save 6. Reload the page 7. Set the type to Service 8. Unit changes from Days to Hours Same issue happens for `product.product` Issue: User default values are overwritten when certain conditions are met by https://github.com/odoo/odoo/blob/6955370fd2d62c83f0ea24247abf7a9e4b4ebed3/addons/sale_timesheet/models/product_template.py#L55-L57 Solution: Use the user defined default on `uom_id` except for service products that are invoiced with timesheets as they need a time unit of measure opw-6139603 Forward-Port-Of: odoo/odoo#262597
This update prevents Odoo from wasting time attempting to create API keys for unreachable databases. Previously, errors would clutter the synchronization results and delay the process by up to 15 seconds. Now, the system simply skips these databases, improving synchronization speed and user experience.
Original PR description
#### The aim of this commit is to: - avoid cluttering the user UI with "obvious" error. - avoid wasting up to 15s trying to create the key if we don't get any response. #### Context: When a db is unreachable, trying to create an api-key on it will result in an error. #### Before this commit: - The wizard showing the result of the synchronization would show the error for every single databases in which it encounters that error. If there are a lot, it would bloat the result. - An unresponsive db would waste 15s of our sync time in a synchronized process. If that happens multiple times, we could end up a lot of time waiting for no reason. #### After this commit: We don't try to create an api key for unreachable databases. task-id: [5945269](https://www.odoo.com/odoo/project.task/5945269) - follow up Forward-Port-Of: odoo/enterprise#117832 Forward-Port-Of: odoo/enterprise#117053
This update enhances the accuracy of VAT and PND tax reports for Thai businesses by integrating branch code information. Previously, the system relied on a different identifier; now, it correctly reads the branch code from the `additional_identifiers` field, ensuring more precise tax reporting. This change is part of a broader migration to improve data consistency.
Original PR description
Following up to the branch code migration to additional identifier in l10n_th. We update VAT and PND tax reports along with the test to read the branch code from `additional_identifiers` instead of `company_registry`. Community PR: https://github.com/odoo/odoo/pull/263746 Upgrade PR: https://github.com/odoo/upgrade/pull/10185 task-6166583
This update resolves a visual issue where priority stars on the Gantt chart were misaligned with the task cards. The change adjusts the layout of the popover to ensure the stars appear correctly, improving the overall clarity and professionalism of the Gantt chart view. This ensures accurate prioritization is visually represented.
Original PR description
- Adjust footer margin in the gantt popover so priority stars align correctly with the card content.
This update corrects a bug where entering spaces in the 'Forecasted Demand' or 'Forecasted Stock' cells of the Master Production Schedule caused an error. The fix ensures that blank input is treated like empty input, preventing the error and allowing users to accurately input data.
Original PR description
## Steps to Reproduce:
1. Install `mrp_mps` module.
2. Manufacturing > Planning > Master Production Schedule
3. Click on "Forecasted Demand" or "Forecasted Stock" of any product.
4. Click `<SPACE>` and then `<ENTER>`.
## Error:
`ValueError: could not convert string to float: ' '`
## Cause:
When a user enters whitespace(' ') in a **Forecasted Demand** or **Forecasted Stock** cell, the string bypasses the existing `isNaN/empty` checks at [1]. Then the raw whitespace string passes to the ORM call, where `float(' ')` raised a ValueError.
## Fix:
This commit trims the value so that blank input is treated the same as an empty string, and the cell reverts to its original value.
[1] - https://github.com/odoo/enterprise/blob/6ae5d3df6e9305416e4d6f74259cd01753025f42/mrp_mps/static/src/components/line.js#L128
sentry-7473062917
Forward-Port-Of: odoo/enterprise#117052This update corrects a visual issue in the Odoo Studio's home menu. Since the saas-19.3 release, an unintended gap appeared between the navigation bar and the applications section, revealing the background. This change removes the problematic margin and adjusts spacing to ensure a clean and professional appearance.
Original PR description
Since saas-19.3, an extra margin on the home menu introduced a visible gap between the Studio navbar and the apps section, exposing the background. This commit removes the margin from the o_home_menu and applies spacing to the search input instead. task-6175467 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/enterprise#116410
This update fixes a bug that prevented users from creating new helpdesk teams. The issue occurred when the system attempted to use a default email template after clearing all helpdesk configurations. The fix ensures the template exists before attempting to use it, preventing an error and ensuring team creation functionality.
Original PR description
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` >…
Currently, an error occurs when a user tries to create a helpdesk team record. **Steps to Reproduce:** - Install the `helpdesk` module without demo data. - Go to `Settings` > `Technical` > `Email` > `Email Templates` and delete the `Helpdesk: Ticket Received` template record. - Go to `Helpdesk` > `Configuration` > `Stages` and remove all records. - Go to `Helpdesk` > `Configuration` > `Helpdesk Teams` and click `New` to create a record. `AttributeError: 'NoneType' object has no attribute 'id'` When the user deletes all stages, the system attempts to create a new stage and assign the "Helpdesk: Ticket Received" mail template to it [1]. However, if this template record does not exist, accessing its id raises the error. This commit ensures that the template record exists before accessing its id, otherwise, None is passed as the default value. [1]: https://github.com/odoo/enterprise/blob/32187f79fb0a595497a5e77db4b22b417b03b8dd/helpdesk/models/helpdesk_team.py#L34 sentry-7482994877 Forward-Port-Of: odoo/enterprise#117446
This update corrects a technical issue where the AI assistant was incorrectly attempting to create project tasks multiple times upon error. This fix ensures that tasks are created only once, improving the reliability and accuracy of the AI-powered task creation process. It addresses a potential for duplicated entries and enhances the user experience.
Original PR description
This commit removes an issue where the LLM would retry on error when performing a creation which would give the impression that it created items twice. task-6229596
This update resolves an issue where the frontdesk kiosk was failing to display the privacy notice and where input fields were growing unexpectedly when data was removed. This ensures users are properly informed about data privacy practices within the frontdesk module, improving user experience and compliance.
Original PR description
This commit fixes the view of frontdesk on the kiosk that was not displaying the privacy notice, and also the privacy notice fields on the form view that had growing input zones when deleting characters. TASK-6236361
This update enables users to reset statement lines directly within the Kanban view, mirroring functionality from previous versions. Previously, this required manually deleting multiple reconciliations, which was inefficient. This change streamlines the process and prevents data loss when managing statement line reconciliations.
Original PR description
This commit adds the possibility to reset a statement line in kanban view like in the previous versions. Function is still there but no UI button was tied to it. This is a problem if you have many reconciliations on one statement line, we do not want to delete them one by one. opw-6015838 Forward-Port-Of: odoo/enterprise#111107
This update corrects a bug where the default prompt within the AI document sorting feature was not updated after a recent code change. The fix ensures the prompt functions correctly, providing the expected guidance to users. This resolves a minor issue impacting the usability of the AI document sorting functionality.
Original PR description
Bug === Since odoo/enterprise/pull/97362 we remove the code action to use a new type of action. But we forgot to update the code in the prompt modal. Task-6230554 Forward-Port-Of: odoo/enterprise#117715
This update resolves an issue where links between related blogs weren't correctly updated. The fix involves a secondary check after blog creation to ensure all links are properly replaced, improving the overall functionality and reliability of the blog system.
Original PR description
Blogs that reference each other were not having their links properly replaced. This commit fixes it by making a second pass to replace the links once the blogs have been created Forward-Port-Of: odoo/enterprise#117871
A recent change removed a template saving step in the planning tour, causing tests for related features to fail. The update now checks for the 'planning_field_service' module, but this check was incomplete, leading to further test failures when multiple apps are installed. This fix ensures the planning tour tests run correctly.
Original PR description
Since fc7b3c2, the "save as template" step of the planning tour was removed, making the test checking for templates in project_forcast fail. The commit also adds a condition checking if planning_field_service is installed before running the planning_test_tour but didn't add it for the sale_planning_test_tour, which extends the planning_test_tour and fails as well if the 3 apps are installed. opw-6176441 runbot-230670 Forward-Port-Of: odoo/enterprise#117882
This update optimizes how bank statement details are recorded, making the system faster and more efficient. By using a batch logging function, the system now processes transactions more quickly without sacrificing accuracy. This change improves overall performance and reduces processing times.
Original PR description
There is no need for a full message post to get the details of the transaction. We can use the batched function instead `_message_log_batch`. Forward-Port-Of: odoo/enterprise#117923 Forward-Port-Of: odoo/enterprise#117742
This update resolves an issue where Odoo was attempting to process GSTR2B attachments that were missing their actual file content. Previously, the system would incorrectly try to process invalid data, leading to errors. Now, the system checks if the attachment content exists before processing, ensuring smoother return filing.
Original PR description
There may be databases contained GSTR2B JSON attachments whose metadata was still present in `ir.attachment`, but whose underlying binary content was missing from the filestore. This caused the matching flow to attempt processing invalid JSON payloads instead of moving the return to `error_in_fetching`. The condition validating JSON attachments now also checks that the attachment raw content exists before adding it to the payload list. opw-6088082 Forward-Port-Of: odoo/enterprise#117684 Forward-Port-Of: odoo/enterprise#117083