Friday, May 1, 2026
9 changes · 19.0
Resolved issues and error corrections
This fix prevents abandoned cart reminder emails from failing when Click & Collect is enabled and no active website cart is available. It helps ensure automated follow-up emails continue to run reliably for eligible abandoned carts.
Original PR description
Problem: The abandoned cart reminder can crash when Click & Collect is enabled. The stock availability check reaches website_sale_collect._get_product_available_qty(), which assumes request.cart…
Problem: The abandoned cart reminder can crash when Click & Collect is enabled. The stock availability check reaches website_sale_collect._get_product_available_qty(), which assumes request.cart always exists. Solution: Safely access the cart with hasattr and fall back to the existing no-cart behavior when it is unavailable. Why: Scheduled actions may have a request object without a frontend cart. This fix prevents the cron from failing while sending abandoned cart reminders. Reproduction Steps: - Configure the website with a warehouse. - Create/publish a delivery method with delivery type “Pick up in store”. Confirm the website has both warehouse_id and in_store_dm_id - Create a cart from the website shop using a storable product that has does not have "Sell When Out of Stock" turned on. - Leave the cart without checking out. - On the generated quotation set the date to the past, but also the date must be after the website.send_abandoned_cart_email_activation_time - Run the abandoned cart reminder scheduled action for the eligible abandoned cart with a storable product. Related Ticket: opw-6133986 Related PR: https://github.com/odoo/odoo/pull/242864
The mail app now avoids extra database lookups when preparing notification data for users. This improves performance in scenarios such as automatically subscribing many people, reducing unnecessary system work without changing the user experience.
Original PR description
Only query for the last bus notification id when the target is the current user. This avoids unnecessary queries in flows like auto-subscribe, where an individual store is generated for each newly created member, preventing an N+1 query issue. task-5941186 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
When a task that is already done, cancelled, or waiting is moved to another project, Odoo now keeps its existing status instead of recalculating it. This prevents completed or closed work from being accidentally reopened or changed during project reorganization.
Original PR description
Before this commit, when the project of a task is changed, even if the state of that task is done or cancelled, the state is reset (except if the task is blocked by another one). This behavior is not expected for a task done/cancelled, we should not reconsider that task since it has been done/cancelled and so there is no reason to re-consider it once the project changed. This commit makes sure the state of the task is not reset when the project changed only if the state is a closed state or Waiting state. task-5361864 Forward-Port-Of: odoo/odoo#261648 Forward-Port-Of: odoo/odoo#252752
This fix makes Odoo's internal test selection more reliable when test names or parameters contain brackets, commas, or backslashes. It reduces incorrect parsing and noisy test logs, helping developers maintain test quality without affecting regular users.
Original PR description
When using test tags for js tests, some tests are not parsed correctly when containing brackets `[ ]` This is because the tag selector use them to set parameters bounds as in…
When using test tags for js tests, some tests are not parsed correctly when containing brackets `[ ]` This is because the tag selector use them to set parameters bounds as in `.test_method[test_param]` The previous implementation using a regex could generate invalid test tags when the params contains comma, and brackets This commits fixes this two ways: Nested brackets will work, meaning that something like `.test_method[test, witch brackets[]]` will be correctly parsed as a tag `.test_method` with a parameter `test, witch brackets[]`since the brakets are balanced. Before, it was parsed as twho tags, `.test_method[test` and ` witch brackets[]]` the second one being considered invalid and spamming logs with errors Brackets and backslashes can be escaped with a backslash, meaning that something like `.test_method[test, with brackets], and backslash\]` can be escaped as `.test_method[test, with brackets\], and backslash\\]` Note that the parser will make it's best effort to parse non escaped strings, so a \ not followed by and escaped character will remain there in order to make potential copy paste easier. For the previous example `.test_method[test, with brackets\], and backslash\` will work the same way. So in practice, we only really need to escape \ when followed by another backslash or a bracket, and we need to escape brackets when they are not balanced. Comma in hoot tests are also a problem since they are used to separate parameters, this can easily be tested by only splitting on `,@` since all hoot test should start with a @ and parameters of test_unit_* tests should be a list of hoot tests. A followup pr will introduce the params to the canonical tag, and escape it as needed Forward-Port-Of: odoo/odoo#261896 Forward-Port-Of: odoo/odoo#261516
The Danish Nemhandel integration now automatically removes the 'DK' country prefix when a company CVR number is entered. This prevents incorrect Nemhandel identifiers and avoids confusing errors for users sending or receiving documents.
Original PR description
Before this PR: - When a user enters a full VAT number with the 'DK' prefix in the company registry, the Nemhandel identifier becomes incorrect and results in a cryptic error being returned to the client. After this PR: - The prefix is removed if the CVR contains the 'DK' country code, to ensure the correctness of the Nemhandel identifier. task-5449059 Forward-Port-Of: odoo/odoo#261856 Forward-Port-Of: odoo/odoo#261719
Czech invoices no longer show the Tax ID or VAT number twice in the header. This makes printed invoices cleaner and avoids confusion for customers while keeping the Czech company registration number visible.
Original PR description
**Steps to reproduce:** * Install the **l10n_cz** module. * Create a customer invoice for a Czech company. * Print the invoice. **Observed behavior:** * The **Tax ID (DIČ)** is displayed **twice** in…
**Steps to reproduce:** * Install the **l10n_cz** module. * Create a customer invoice for a Czech company. * Print the invoice. **Observed behavior:** * The **Tax ID (DIČ)** is displayed **twice** in the invoice header in default layout. * **VAT** is displayed **twice** in the invoice headed in folder layout. **Cause:** * The `registry_vat_external_layout` template adds `company.vat` to `company_address_list`. * Base external layouts already include `company.vat` in the same list. * This results in duplicated DIČ rendering. **Fix:** * Remove the redundant VAT `<li>` from `registry_vat_external_layout`. * Keep only the Czech-specific **Company ID** (`company_registry`) entry, which is not provided by base layouts. Before: <img width="900" height="261" alt="image" src="https://github.com/user-attachments/assets/9b5b81aa-a79d-4c93-8109-3c97d79356f4" /> After: <img width="804" height="221" alt="image" src="https://github.com/user-attachments/assets/4b62eddc-6117-4f52-a8fb-2b03812aad8b" /> opw-6125766 Forward-Port-Of: odoo/odoo#262399 Forward-Port-Of: odoo/odoo#260966
This update fixes a minor usability issue in the bank reconciliation quick creation process. Previously, an error would open a form dialog unexpectedly. Now, errors are displayed directly, providing a clearer and more intuitive user experience for creating bank reconciliation records.
Original PR description
Before this commit, when there is an error in the bank rec widget quick create. We open the form dialog which is kind a weird, we would rather expect to have the error displayed. This commit will override the showFormDialogInError to close the quick create and throw the error. no task id
This update resolves an issue where the Enterprise portal's worksheet wasn't saving correctly, leading to a failure in the automated tour. The fix ensures the worksheet functions properly, preventing tour disruptions and improving the user experience.
Original PR description
The worksheet is not auto saving and the worksheet is not rendering properly in portal, which caused the tour to fail. runbot error-242479 Forward-Port-Of: odoo/enterprise#115761
A bug was causing the appointment builder to crash when editing appointments. This update corrects a misconfiguration that was sending incorrect data, preventing the builder from functioning properly. The fix ensures the builder loads correctly and reliably.
Original PR description
'Reload' was wrongly passed as a prop to BuilderContext in 'Appointment Type' Option. This ended up in a traceback when user opened the builder on an appointment page. To see the issue: - Create an appointment, and go to its frontend page in debug mode - Start editing - Click anywhere on the page => Traceback We also replace `isReload` with `reload` in order to reload the page when applying the actions. task-6147936 opw-6144915 Forward-Port-Of: odoo/enterprise#115506