Thursday, September 11, 2025
54 changes · 19.0
Resolved issues and error corrections
This fix ensures the online store uses the right template when displaying an alternative website snippet. It helps prevent incorrect page elements from appearing, keeping the shopping experience consistent for visitors.
Original PR description
This commit use correct template key in alternative snippet. Issued PR: https://github.com/odoo/odoo/pull/214744
This fix prevents internal display conditions from appearing in the shop page header markup. It keeps the website storefront output cleaner and avoids unintended visible or hidden technical values in the page structure.
Original PR description
In odoo/odoo@f207c7644400228a2ee10dcb3f2731250fcbea08 we introduced conditions on the `o_wsale_products_header` to tweak its styling. However some of the conditions were returning the value of `category` instead of a False boolean. This commit replaces it with `bool(category)` to ensure the condition is False and not rendered in the DOM. task-5059179 What was rendered before this fix: <img width="365" height="157" alt="image" src="https://github.com/user-attachments/assets/ae60629b-7b3d-46bd-bfb4-d935419402a9" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website search empty-state icon has been updated to match the current user interface. This keeps the search experience visually consistent and avoids a small mismatch in the website design.
Original PR description
Before this PR, the empty search icon was not the same as the current one in the UI. task-5062081 | Before | After | |--------|--------| | <img width="469" height="288" alt="Screenshot 2025-09-03 at 11 46 46" src="https://github.com/user-attachments/assets/2d9b1a3b-bfe1-4b3a-af3a-bfc00da1f535" /> | <img width="469" height="288" alt="Screenshot 2025-09-03 at 11 46 36" src="https://github.com/user-attachments/assets/08da73c6-28fd-4ab8-8c83-034af891ca36" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users receiving a Discuss call invitation can now see and use the join button instead of only being able to refuse. This fixes a call invitation workflow issue so invited users can enter calls as expected.
Original PR description
Before this commit, when receiving a discuss call invitation, the user could only refuse the call. This happens due to wrong condition for the showing the "join" call button: this button condition had "no call invitation", which is the exact opposite of the flow that should work! This happens from https://github.com/odoo/odoo/pull/223004 that convert the call invitation buttons into call actions. When doing this improvements, it also reconciled the actions as there was a lot of code duplication, one of which was "join" button in call invitation but also "join" on the call view when not in call. PR made the mistake to have the condition of "join" in call view when not in call (and no invitation), but completely forgot the "join" from call invitation whose condition was excluded from the condition. This commit relax the condition so that it takes into account both cases for the showing of the "join" call button.
Public visitors could see a forbidden error on product pages when certain extra product fields were configured. This fix ensures those extra fields can be displayed correctly, preventing blocked product pages and improving the shopping experience.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Enable debug mode; 2. go to Website / Configuration / Websites; 3. open first website; 4. open Product Page Extra Fields tab; 5. add Icon (Product); 6. go to a product page as Public User. Issue ----- > **403: Forbidden** > [!Note] > For this issue to occur, the extra field cannot be loaded into cache yet, making it difficult to reproduce in versions before 18.3. As of 18.3, access rights are checked regardless of cache status. Cause ----- It's possible to add extra fields that don't allow access to public users by default. Solution -------- In the `ecom_show_extra_fields` template, retrieve the field values in `sudo` mode. opw-5031708 Forward-Port-Of: odoo/odoo#225352
The website shop editor now shows each sample product name only once when previewing a dynamic product catalog without real products. This avoids confusing duplicate text in the preview and makes the editing experience cleaner.
Original PR description
When editing the dynamic product catalog snippet with no real products available, a default sample is generated. Each sample product is assigned a fictitious name. However, the card template for each product also renders a default product name when sampling is enabled, leading to an issue where two names were displayed. This fix ensures only one name is shown by removing the default product name if one is already available.
This fix adjusts several spreadsheet dashboards so their charts are properly aligned. Users reviewing expense, restaurant, sales, timesheet, and eCommerce dashboards should see cleaner, more consistent layouts.
Original PR description
This commits fixes some misaligned charts. Task: 5081680 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 fixes the compact Discuss sidebar so avatars and their clickable areas are centered. It improves visual consistency and makes the sidebar easier and more reliable to use.
Original PR description
Items were not centered, so the avatar and click zone was off-centered. This commit centers the avatar to fix the issue. Before / After <img width="56" height="578" alt="Screenshot 2025-09-10 at 14 34 09" src="https://github.com/user-attachments/assets/400de8c1-6a87-49d3-823e-157048962bca" /> <img width="59" height="578" alt="Screenshot 2025-09-10 at 14 34 21" src="https://github.com/user-attachments/assets/c4dd72cb-04e9-40df-8e13-f0fe39643c3a" />
The Indian localization now requires a PAN entity name before saving. This prevents users from encountering an error during record creation when the field is left blank.
Original PR description
Cause: When saving a PAN Entity without a PAN, `record.name` is False. The create() method calls `record.name.upper()`, which crashes with "AttributeError: 'bool' object has no attribute 'upper'". Before this commit: It was possible to save a PAN Entity without a name, leading to a traceback during record creation. After this commit: The PAN field is marked as required. Ref - https://pastebin.com/Gu15zLwA
The website builder now applies SVG dynamic colors correctly, so icons no longer disappear when users choose certain palette or grey colors. Color previews also show the actual selected color, making website editing more reliable and easier to understand.
Original PR description
__Current behavior before commit:__ The color palette for SVG Dynamic Colors doesn't work properly. The color preview doesn't show the current color and some colors make the SVG disappear.…
__Current behavior before commit:__ The color palette for SVG Dynamic Colors doesn't work properly. The color preview doesn't show the current color and some colors make the SVG disappear. __Description of the fix:__ - The [`_update_svg_colors`] backend method only works with rgb, hex and the palette colors matching `/^o-color-[1-5]$/`. So all other custom CSS variables (e.g. `var(--white)`) are converted to hex notation in the SVG URL search params. - Furthermore, to show the correct color in the little color preview circle, [`getValue`] now always returns a normalized CSS color value. - The regex matching rgba color in [`convertCSSColorToRgba`] has been fixed to include alpha values that don't have the 0 before the decimals (e.g. `rgba(255, 255, 255, .5)`). __Steps to reproduce:__ 1. Open the website builder 2. Switch to "Artists" theme 2. Drop a Horizontal Attributes snippet 3. Click on one of the SVG icon => the color previews in Image > Dynamic Colors don't correspond to the SVG colors 4. Click on one of the color to open the palette 5. Choose one in the top row => the SVG disappears 6. Go in the "Custom" tab of the color palette => the current color is not the correct one 7. Choose one of the grey shade at the top => the SVG disappears [`_update_svg_colors`]: https://github.com/odoo/odoo/blob/64efa6b7dc7/addons/html_editor/controllers/main.py#L92 [`getValue`]: https://github.com/odoo/odoo/blob/64efa6b7dc7/addons/website/static/src/builder/plugins/dynamic_svg_option_plugin.js#L29 [`convertCSSColorToRgba`]: https://github.com/odoo/odoo/blob/64efa6b7dc7/addons/web/static/src/core/utils/colors.js#L218 Forward-Port-Of: odoo/odoo#224850
Fixes an editor issue where pasting the same hyperlink twice in a row could merge both links into one element and cause an error. The editor now only merges safe text-formatting elements, improving reliability when users paste links into content.
Original PR description
Steps to reproduce: - Copy a valid hyperlink (e.g., https://example.com). - Paste it into the editor. - Without changing the selection or moving the cursor, paste the link again. - Inspect the DOM: both links are merged into single tag, causing a traceback. Description of the issue/feature this PR addresses: - When pasting the same hyperlink multiple times without moving the cursor, editor merged them into a single anchor tag, which triggered a traceback. This appeared after commit [1](https://github.com/odoo/odoo/commit/2752ca733b4feda4ef16eef02fdaba1561ceb6b7), it introduced root-level check for mergeability. Desired behavior after PR is merged: - Only formattable inline tags (SPAN, FONT, B, STRONG, I, EM, U, S) are eligible for merging. task-4965381 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#223366
Website editors now see navbar logo height changes immediately while adjusting them, instead of only after saving or reloading assets. This makes the editing experience more accurate and avoids confusion when customizing a site's header.
Original PR description
Steps to reproduce: - Website > Go to Website > Edit - In the sidebar: Navbar logo, change Height - Before: the logo size does not change until clicking Save (or after bundles reload) - After: the logo resizes immediately while editing Since [1], the header logo is rendered with width and height attributes to reserve space and reduce CLS. But since [2], the `width` and `height` attributes have been removed and converted to inline styles, which take precedence over the CSS stylesheet. This commit addresses this issue. [1]: https://github.com/odoo/odoo/commit/d80b8cbc28b6e9d16608f9ecfcf4b360d0c792c7 [2]: https://github.com/odoo/odoo/commit/cb2510f4e525192e4b3d5d673218775c2d9d174e Forward-Port-Of: odoo/odoo#226283
This update fixes an error that could prevent Indian electronic invoices from being sent correctly. Businesses using India e-invoicing should see more reliable invoice processing and fewer failed submissions caused by this issue.
Original PR description
In this commit- --- Fixed a typeError in l10n_in_edi_send_invoice method Replaced - incorrect syntax `data.get['SignedInvoice']` with `data['SignedInvoice']`. opw-5071703 Forward-Port-Of: odoo/odoo#226106
This update brings the spreadsheet component up to the latest version and fixes several user-facing issues. Business users should see cleaner dashboard sorting, better translated chart labels, fewer unnecessary Excel import warnings, and more reliable copy/paste behavior with formulas.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd79eea46 [REL] 19.0.1 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bd79eea46 [REL] 19.0.1 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/5c0bf705c [FIX] dashboard: align sort icon with text [Task: 5075237](https://www.odoo.com/odoo/2328/tasks/5075237) https://github.com/odoo/o-spreadsheet/commit/7c8c52255 [FIX] translation: dynamic translation for chart terms [Task: 5076040](https://www.odoo.com/odoo/2328/tasks/5076040) https://github.com/odoo/o-spreadsheet/commit/0ac0e86e0 [REL] version 19.0 [](https://www.odoo.com/odoo/2328/tasks/) https://github.com/odoo/o-spreadsheet/commit/325073b55 [FIX] Menu: Fix item text truncation [Task: 5072649](https://www.odoo.com/odoo/2328/tasks/5072649) https://github.com/odoo/o-spreadsheet/commit/3c7a71302 [IMP] carousel: improve drag & drop of chart over carousel [Task: 5059979](https://www.odoo.com/odoo/2328/tasks/5059979) https://github.com/odoo/o-spreadsheet/commit/6e09fa499 [FIX] xlsx: remove useless warnings on import [Task: 5075112](https://www.odoo.com/odoo/2328/tasks/5075112) https://github.com/odoo/o-spreadsheet/commit/b5ad83388 [FIX] selection: copy then paste instead of copy/paste loop [Task: 4930718](https://www.odoo.com/odoo/2328/tasks/4930718) https://github.com/odoo/o-spreadsheet/commit/4a4312e57 [REF] Border: Bordel [Task: 4852413](https://www.odoo.com/odoo/2328/tasks/4852413) https://github.com/odoo/o-spreadsheet/commit/6fa1bbcdc [REF] cellComputedStyle: use positionmap [Task: 4930718](https://www.odoo.com/odoo/2328/tasks/4930718) https://github.com/odoo/o-spreadsheet/commit/71360e47d [MOVE] positionMap: move to helper [Task: 4930718](https://www.odoo.com/odoo/2328/tasks/4930718) https://github.com/odoo/o-spreadsheet/commit/7be6b4636 [FIX] clipboard: insert cells bugged with array formulas [Task: 4938311](https://www.odoo.com/odoo/2328/tasks/4938311) https://github.com/odoo/o-spreadsheet/commit/27bbe0fa6 [FIX] xlsx: `=undefined` when importing array formula [Task: 4812508](https://www.odoo.com/odoo/2328/tasks/4812508) https://github.com/odoo/o-spreadsheet/commit/9bfd31dff [REV] xlsx: make import verbose [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya <rmbh@odoo.com> Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com>
The Uruguay localization now points users to the dedicated Uruguay fiscal localization documentation instead of a general localization page. This makes it easier for users to find the relevant guidance directly from the app information.
Original PR description
Description of the issue/feature this PR addresses: The website link in the `l10n_uy` manifest was pointing to a generic documentation page. Current behavior before PR: Link in manifest points to `https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations.html` Desired behavior after PR is merged: Link in manifest points to `https://www.odoo.com/documentation/17.0/applications/finance/fiscal_localizations/uruguay.html` Forward-Port-Of: odoo/odoo#226169 Forward-Port-Of: odoo/odoo#225460
This fix moves product sellability logic to the correct eCommerce module, where the required website publishing information is available. It helps prevent cart-related errors after the recent eCommerce cart redesign while keeping related sales, delivery, and loyalty behavior aligned.
Original PR description
*: sale, delivery, sale_loyalty, website_sale_loyalty In [^1], the eCommerce cart page was refactored to enhance its responsiveness and design. During development, a method closely tied to the `website_sale` module was mistakenly placed in the `sale` module. This method relies on the `is_published` field, which is only available in `website_sale`. This commit corrects the placement by moving the method to its appropriate module, `website_sale`. [^1]: https://github.com/odoo/odoo/pull/190720
Deleting a single calendar event now correctly opens the confirmation window again, so users can preview and send cancellation emails to attendees before removal. This prevents confusing redirects and failed deletion flows caused by missing email template language settings.
Original PR description
Since [1], we removed the 'lang' value from mail templates, as we allow to use a fallback on main partner's lang instead. However, when deleting a calendar.meeting (from Form or calendar) we usually…
Since [1], we removed the 'lang' value from mail templates, as we allow to use a fallback on main partner's lang instead. However, when deleting a calendar.meeting (from Form or calendar) we usually (if no sync is on, and when deleting a single event) open the wizard of confirmation that allows to preview and send cancelation email to the attendees, in order for them to have the information before complete deletion. (see the following wizard: calendar.popover.delete.wizard) Before [1], we wanted to make sure the template had a lang set. But we forgot to change that condition, resulting in a lot of cases where deletion is just not working, and redirects to the calendar view instead (default behavior), as the lang on the template is not set. We now use the ´_render_lang´ method instead in order to compute the lang value and use it in the condition as well, actively opening the confirmation modal instead of doing nothing and redirecting to the calendar event. [1]: odoo/odoo@dc016190e3f3fd90b10fb1eac07204e22d715109 Task-5079771
The Indian localization demo company data now includes a TAN number when TDS is enabled. This prevents setup or demo data issues caused by a missing mandatory tax deduction identifier.
Original PR description
TAN number is a mandatory field when TDS is enabled on a company. 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 restores transparent gray color options in the website editor's custom color filter settings. Business users editing website content can now reliably select these grayscale filter options as intended.
Original PR description
Following the [refactor] of the html_builder, [addition] of the transparent grayscale, and this [commit], we had an issue when the transparent grayscale wasn't displayed as needed because it wasn't…
Following the [refactor] of the html_builder, [addition] of the transparent grayscale, and this [commit], we had an issue when the transparent grayscale wasn't displayed as needed because it wasn't added to 'EDITOR_COLOR_CSS_VARIABLES', which later were used to save colors together with the theme color prefix, i.e., --hb-cp-'color'. Steps to see the issue: - Open website and start editing - Drop a s_cover snipper and click on it - Click on the "Filter" option and select "Custom" - Click on "Color Filter" and go to the "Custom" tab -> Transparent Grayscale isn't displayed correctly. This commit copies [1], which was lost in the refactor. [refactor]: https://github.com/odoo/odoo/commit/9fe45e2b7ddbbfd0445ffe25a859e67a316d02b2 [addition]: https://github.com/odoo/odoo/commit/55c58bf45165e3a3eafcbaecc516e7c1d19809a6 [commit]: https://github.com/odoo/odoo/commit/eb12451a169c752034abb5d4aab9926c19067ebf [1]: https://github.com/odoo/odoo/commit/5490c126f42bd1729ba0d4b4103d7284ba7ab8c0 Forward-Port-Of: odoo/odoo#225931
The wishlist checkout test now allows more time to complete, reducing false failures when automated validation runs slowly. This helps keep release checks stable without changing the customer-facing wishlist experience.
Original PR description
Increase timeout for wishlist tour. As it was taking too long to complete. runbot-229616 Forward-Port-Of: odoo/odoo#225357 Forward-Port-Of: odoo/odoo#219653
This update prevents the web app from downloading the same large JavaScript file twice when users switch between light and dark mode. It improves loading efficiency and reduces unnecessary data usage, especially for users on slower networks.
Original PR description
CSS bundles are different. JS bundles are the same. Don't download it twice. Note: this avoids downloading a duplicated 3MB compressed (12MB uncompressed) JS bundle with a different name (which avoids the cache being properly used) when switching from light to dark mode. task-5074720
Duplicating sections on invoices, quotations, and templates now preserves settings such as optional sections and hidden composition. This prevents users from having to manually reapply those choices after copying a section.
Original PR description
Steps to reproduce: - Create a quotation/invoice with a section and a product line - Mark the section as optional section or hide composition - Duplicate the section Issue: - The duplicated section does not retain its "optional/hidden composition" status. - This happens because readonly/invisible fields (like `is_optional`, `collapse_*`) are not copied when duplicating records in a StaticList. Cause: - By default, StaticList skips readonly/invisible fields during duplication to avoid issues with some technical fields (e.g., in accounting). Solution: - Introduce a `copyFields` option to `duplicateRecords` in StaticList to explicitly allow copying certain fields, even if they are readonly or invisible. Affected version: 19.0 opw-4669991 Co-Authored by: Julien Carion <juca@odoo.com> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix prevents a confusing system error when saving a view that includes an XML encoding declaration. Users now receive a clearer, handled message explaining the issue, making the problem easier to understand and correct.
Original PR description
Currently, an error occurs when a user includes an XML encoding declaration in the view architecture. **Steps to reproduce:** - Enable **developer mode**. - Under `Settings > Technical > User…
Currently, an error occurs when a user includes an XML encoding declaration in the view architecture. **Steps to reproduce:** - Enable **developer mode**. - Under `Settings > Technical > User Interface > Views` Create or edit any view. - Enter the `view name` and select `view type`. - In the Architecture field, declare encoding as: `<?xml version='1.0' encoding='utf-8'?>`. - Attempt to save the view. **Error:** `ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.` **Root Cause:** The [1] call raises a ValueError when the XML declaration includes an encoding attribute. This low-level error is not handled and results in an ungraceful failure. [1]- https://github.com/odoo/odoo/blob/bf4ccb21f6c9c8bcda9c6f94d844c89296523954/odoo/tools/translate.py#L281 This commit ensures raising an UserError, improving the error message clarity. sentry-6505918596 Forward-Port-Of: odoo/odoo#226396 Forward-Port-Of: odoo/odoo#205324
Vendor price lists created from blanket orders now keep the unit of measure chosen on the blanket order line instead of switching to the product's default unit. This helps purchasing teams avoid pricing mistakes when negotiating or buying in alternate units.
Original PR description
This commit fixes setting the UoM of the vendor pricelist generated by a blanket order. Previously, the created pricelist had the base unit of the product. Now, it has the unit of the blanket order line. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226033
This fix prevents the Point of Sale from crashing when taxes are enabled and added to a product after that product was already used in an active POS session. It helps store staff continue selling without interruption after tax settings are changed in the backend.
Original PR description
Steps to reproduce: ---- - From accounting disable taxes - Create new product - Open PoS UI and add product in orderline - Go to backend and enable taxes - Add tax in previously created product - Open UI again Issue: ---- - We will have traceback Cause: ---- - undefined error as pos_receipt_label is undefined as we don't have chance to reload data as product is already in orderline Fix: ---- - added optional chaining so we don't have undefined error also we have to reload data after enabling taxes from the configurations in the backend ---- task - 4762770 Forward-Port-Of: odoo/odoo#208511
This fix prevents invoice creation from crashing when a company's country has been removed and VAT number verification is enabled. Users can continue creating invoices while the system safely handles incomplete company address settings.
Original PR description
The system crashes with an error when a user tries to create an invoice. **Steps to produce:-** - Install `Accounting` module and switch to `BE Company`. - Go to `Settings > Users & Companies >…
The system crashes with an error when a user tries to create an invoice.
**Steps to produce:-**
- Install `Accounting` module and switch to `BE Company`.
- Go to `Settings > Users & Companies > Companies` and remove the country from the BE company.
- Create a new customer with:-
- Country as `Belgium`.
- Tax ID as `DE123456788`.
- `Accounting > configuration > settings > enable Verify VAT Numbers`.
- Now try to make `invoice` with customer as previously created customer.
**Error:-**
`TypeError : argument of type 'bool' is not iterable`
**Root cause:-**
- At [1], the code attempts to access `company.country_id`, but since the country was manually removed from the company, it evaluates to null record, leading to the error.
**Solution:-**
- Add a safeguard to ensure `company.country_id` also exist before accessing `country_group_codes`.
[1] -https://github.com/odoo/odoo/blob/4c2330f3cc0d1a0046e28d351f894763aeea57d2/addons/base_vat/models/res_partner.py#L764
**sentry-6851141424**
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#225158Portal users can now buy paid eLearning courses after completing a quiz from a shared preview link. The change restores the cart action so the purchase flow no longer fails with an error.
Original PR description
Steps to reproduce: 1) Install `website_sale_slides`. 2) Create a course with enroll policy 'On payment' and publish it. 3) Add a content allow preview it and add a quiz 4) Go to website, click Share…
Steps to reproduce:
1) Install `website_sale_slides`.
2) Create a course with enroll policy 'On payment' and publish it.
3) Add a content allow preview it and add a quiz
4) Go to website, click Share button and open the generated link in incognito.
5) Login as a portal user, pass the quiz and click "Buy this course".
Issue:
- A traceback occurred:
`Cannot read properties of undefined (reading 'addToCart')`.
Cause:
- The method call `self.call('websiteSale', 'addToCart', ...)` relied on the deprecated `call` service, which was removed in commit https://github.com/odoo/odoo/commit/b8d0ab4275b24510161de9db793020f3489b0446.
- The service and method `call('websiteSale', 'addToCart'` is not valid and was not updated here :
https://github.com/odoo/odoo/blob/35161ecf0dd3fde47db9b2166718339c2e30ac92/addons/website_sale_slides/static/src/js/slides_course_join.js#L29
- As a result, `addToCart` was no longer accessible and triggered a JS error.
Solution:
- Update the code to use the new service and method: `call('cart', 'add',`
opw-5045424
Forward-Port-Of: odoo/odoo#224760The Belgian demo company now uses a properly formatted VAT number. This prevents validation issues when users test Belgian localization features with demo data.
Original PR description
The Belgian VAT doesn't have the right length, which is causing weird behavior when testing feature with demo data.
In particular, since the company_registry is computed based on it, Odoo doesn't pass some validation since it's not a correctly formatted data.
The VAT should be following the format `^BE[0-1][0-9]{9}$`. So "BE" followed by 10 digits, while we only had 9.
task-noneThis fixes an issue where images in duplicated Team Basic blocks could not be selected or edited. Users can now duplicate team content and still adjust image options as expected in the website editor.
Original PR description
[FIX] html_builder, *: enable image options on duplicated team snippet *: html_editor Steps to reproduce the problem: - Drop the "Team Basic" snippet. - Duplicate it. -> When you click on an image of…
[FIX] html_builder, *: enable image options on duplicated team snippet *: html_editor Steps to reproduce the problem: - Drop the "Team Basic" snippet. - Duplicate it. -> When you click on an image of the duplicated block, the image is not selected and you can not change the options related to it. The problem is that the `o_editable_media` class does not appear on the images of the duplicated snippet as it is a system class. This commit removes the `o_editable_media` class from the system classes. Indeed, it was added by [1] to avoid the closest savable to be marked as dirty when this class was added. However, this class is added during the `normalize` and since [2], the mutations done at the `normalize` do not trigger the adding of the `o_dirty` class anymore. [1]: https://github.com/odoo/odoo/commit/c20dfb73528d60a079d73564504646fe7d1d4272 [2]: https://github.com/odoo/odoo/commit/7c5cdb6d70eea29dec4ba126e62eeb93c6e6eeb2 Related to task-4367641 Forward-Port-Of: odoo/odoo#226051
This update fixes errors when opening subsection options in sales orders and ensures quote PDFs respect hidden pricing for combo products. It also adds missing combo product quantities in PDFs, making customer-facing quotes clearer and consistent with the portal.
Original PR description
### **Description:** - This PR addresses two functional issues in the Sale module and a minor cleanup in `sale_management` tests. ### **Fixes:** - **Traceback on subsection options:** - Opening options for subsections in Sale Orders raised a traceback due to a missing export introduced during refactor 5f4db1d. - Fixed by restoring the missing export. - **PDF report for combo products:** - Combo product prices were shown in PDF quotes despite "hide prices" being enabled. - Quantities of combo products were also missing in the PDF. - Fixed by adding the missing condition for hidden prices and showing the quantity (e.g., Office combo x 5). **Cleanup:** - Removed redundant logic in the optional products test method in `sale_management`. task-4999851 See Also: - https://github.com/odoo/enterprise/pull/94276 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The website theme settings panel now avoids unnecessary background rendering when opening sections. This reduces the delay users experience when working in the theme tab, making website customization feel faster and smoother.
Original PR description
The purpose of this commit is to reduce the rendering time of the theme tab. Currently, when we have a BuilderRow that contains a collapse slot, we always render it in order to know whether it contains content or not, so that we can display the collapse arrow. The collapse feature is widely used in the theme tab. This results in a lot of unnecessary calculations, because the only case that requires dynamic calculation of the collapse arrow is the BuilderOption for visibility. So we will therefore add the “observeCollapseContent” props to enable or disable the rendering of the slot in order to dynamically display the collapse arrow. This change saves approximately 20% of time. 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#223929
Fixes an error that blocked users from posting Work in Progress accounting entries from manufacturing orders. This keeps manufacturing accounting workflows usable after recent inventory valuation changes.
Original PR description
Steps to reproduce: * install MRP and Accounting * open an MO * go to actions -> "Post WIP Accounting Entry" Odoo shows an error message, ending with: ``` KeyError: 'property_stock_account_input_categ_id' ``` This looks like a missing part of the "New Inventory valuation" (commit https://github.com/odoo/odoo/commit/08b62a4bbcc6f9a391b2cc00a621ef4c76100229). 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 makes the import screen easier to customize by allowing its startup behavior to be overridden. It helps teams and extensions adapt import workflows without changing the core application, reducing maintenance risk.
Original PR description
This commit, allows to override the `onWillStart` of the import action component.
This fixes a case where email or message processing could fail when expected message details were missing. The change helps keep mail-related workflows running smoothly instead of stopping on incomplete internal data.
Original PR description
msg_vals might not be propagated.
The purchase catalog's Add All action now adds only the currently suggested and filtered products, preventing unintended items from being added to purchase orders. This makes bulk purchasing suggestions more reliable and reduces manual cleanup for buyers.
Original PR description
--- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Unbuild operations now use the current product valuation method instead of forcing a match to the original manufacturing cost. When build and unbuild costs differ, Odoo creates a corrective accounting entry so inventory values and product costs stay accurate.
Original PR description
**Current behavior:** Since https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3, we valuate an unbuild operation by attempting to match the ensuing OUT layer with the IN…
**Current behavior:** Since https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3, we valuate an unbuild operation by attempting to match the ensuing OUT layer with the IN layer from the original MO. The point being to eliminate a potential valuation imbalance for the manufactured product (might affect cost, etc.). **New behavior** Don't attempt to match an unbuild valuation layer with the original MO valuation layer. If there is some cost difference between build time and unbuild time, make a corrective journal entry for it. **Issue with current behavior** The following sequence: 1. Create Product A with average costing, real-time valuation 2. Create 2 components, avg costing, real-time val 3. Create a BoM for Product A with the components 4. Manufacture 3 units of Product A with different component quantities (can set flexible consumption on BoM) 5. Unbuild the first manufactured unit Results in Product A's cost not matching the expected average cost according to the valuation layers. **Cause of the issue:** Unbuilding the first MO created an out move at the original "build time" cost, but since we've built 2 additional qty, that original cost is not the current average cost- thus the "theoretically current" standard price of the product (sum of layers value divided by remaining qty) is no longer the value we see on the product form. **Fix:** Don't try and match the valuation layers. Aside from issues such as the one described above, it might not actually make functional sense to do so (e.g., FIFO isn't actually adhering to first-in-first-out if we're preferring the original IN layer for an unbuild valuation). Instead we make a journal entry with any excess cost of production (it was actually a solution proposed in the discussion on https://github.com/odoo/odoo/commit/84dda968146d2f3743ab7fc516300e50780725e3 in the first place). Additionally, now that we aren't doing this mapping, we can revert the non-test difference of https://github.com/odoo/odoo/commit/3a69456a291da593748475c86e7efc6234019e47, as this commit was fixing an issue introduced by the change which added the mapping. opw-[4877597](https://www.odoo.com/web#id=4877597&view_type=form&model=project.task) Forward-Port-Of: odoo/odoo#222014 Forward-Port-Of: odoo/odoo#221718
This fix lets users open meeting chats from embedded live chat, matching the intended live chat experience. It removes a small limitation where the meeting chat option existed but was blocked in the embedded version.
Original PR description
The embed live chat has a subset of allowed thread actions. The meeting chat action was added but not added to the allowed thread actions. In the future, we will allow most of the thread actions, at least the ones allowed for guests. Environment should not impact feature availability. However for now, let's just enable the missing action. 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 fixes a confusing mobile display issue for product cards with secondary images. The image indicators now better reflect how shoppers can scroll through product images, reducing the chance that the product card appears broken.
Original PR description
=> https://github.com/odoo/odoo/pull/226578 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website editors can now replace background images in Banner Categories, such as sofas, drawers, and desks. This fixes a missing editing option and makes content updates easier without needing technical help.
Original PR description
Steps to reproduce: 1. Go to Website > Edit Mode. 2. Add a Banner Categories snippet from catalog. 3. Click on the image of a category (including sofas, drawers or desks) to replace it. 4. There will be no replace media button. Issue: The banner categories snippet does not contain a selector through which replace option was triggered. Fix: Added a generic selector named o_background_image to both the banner categories snippet and the replace media options. As, it is the generic selector, It can be used for other snippets too.
Restores missing context information so the Import Template button appears again where users expect it in accounting moves and timesheets. This helps users access the correct import template labels and links, reducing confusion during data import workflows.
Original PR description
The context was removed in a previous change (https://github.com/odoo/odoo/pull/222793), which caused the "Import Template" button to disappear in `account.move` and `hr.timesheet`. These models rely on context keys in `get_import_template` to display the correct label and link. This commit adds the `context` back and tests for both models.
The checkout and portal address selector now displays more consistently on mobile devices. Spacing and edit icon placement were adjusted so customers can review and manage addresses more easily during checkout and in the portal.
Original PR description
This PR fixes some issues regarding the mobile design of the address selector, mainly by adapting the margins and paddings in and between the components. 1. The 'edit' icon placement was changing if…
This PR fixes some issues regarding the mobile design of the address selector, mainly by adapting the margins and paddings in and between the components. 1. The 'edit' icon placement was changing if there was no badge on the card (address checkout & portal page). 2. Refine the spaces in the address & billing summary on the payment method page. task-5081875 | | Before | After | |--------|--------|--------| | 1 | <img width="1179" height="2556" alt="image" src="https://github.com/user-attachments/assets/33faf30b-3b6c-47ce-acef-12265b50df0d" /> | <img width="368" height="802" alt="image" src="https://github.com/user-attachments/assets/1432d00e-9d41-488d-b482-b64728319206" /> | | 2 | <img width="1179" height="2556" alt="image" src="https://github.com/user-attachments/assets/195da2f4-9f0e-4cc8-bb4d-df55fc887216" /> | <img width="1095" height="2040" alt="image" src="https://github.com/user-attachments/assets/046f1353-df4b-4b4b-b14c-1fe4d7db85c1" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A bug in the Belgian CodaBox integration could cause an error when processing company records. The fix ensures the correct company is used, helping avoid interruptions for businesses using CodaBox bank document workflows.
Original PR description
We incorrectly used the recordset `self` instead of the record `company` This commit fixes this opw-5036698 Forward-Port-Of: odoo/enterprise#94289
The Ask AI button now opens the AI chat window as expected, even when background loading is still in progress. This prevents users from clicking the button and seeing no response, improving reliability of the AI assistant experience.
Original PR description
The issue is caused by the use of orm service wrapped in "useService". When the button is clicked, it will be unmounted but an orm query is still pending. The pending query is blocked by the useService because the component is already unmounted. The remedy is to use the raw orm service.
The Swiss balance sheet now calculates previous-year unallocated earnings correctly and separates current-year earnings into retained and allocated amounts. This helps businesses reviewing Swiss financial reports see accurate profit and loss carryforward figures at fiscal year-end.
Original PR description
Before this commit, `Previous Year unallocated profit and loss` was showing wrong amount. With this commit, we adapt this line (change period of one of its expression) and we add two new lines to reflect the actual year earnings, retained and allocated. Steps, with fresh db: - 1 invoice confirmed in the past year for 1000 - Create the carryforward move (1000 debit for 999 account, and 1000 credit for 2979 account) - Go to balance sheet, set date as 'End of last fiscal year' -> See 'Previous Years Unallocated Earnings` showing -1000 opw-4054341 Forward-Port-Of: odoo/enterprise#94243 Forward-Port-Of: odoo/enterprise#91281
This fix prevents improvement suggestions from being created for extra work orders that are not part of the original bill of materials. It avoids duplicate quality check setup that could trigger an error when manufacturing orders are duplicated, improving reliability for shop floor and PLM users.
Original PR description
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the…
## Issue: Creating multiple suggestions sequences for differents Workorder in Manufacturing Orders that are added aside BoM defined WorkOrder cause an issue with a Traceback error ## Cause: In the method `add_check_in_chain()`, the `point.sequence` cause issue because the check can have multiple points https://github.com/odoo/enterprise/blob/e85d11f9b3bf07a55e5365adac7370955a149566/mrp_workorder_plm/models/mrp_workorder.py#L58-L66 That the case because multiple quality checks sequences are created when the operation_id is False That's unexpected because PLM isn't made to suggest WorkOrder additions and Suggestions to New WO, but only Suggestions to existing operations So we avoid to create `quality.point` when there is no operation_id ## Information: To get the Traceback, you need to install Quality_control because this module will copy the QC to the MO including the one with operation_id set to False ## Steps to reproduce: Quality_control and plm need to be installed - Enable Work Orders in Settings - Create a Product with a BoM - Create a MO for the Product - Add an extra WO - In the Shop Floor, Mark as Done the BoM's WO - On the Extra WO, click Gear Icon > Update Instructions > Improvement Suggestion > Add a Step - Insert a Title and Propose Change - Duplicate the MO and redo the Shop Floor steps to get the Traceback opw-4874108 Forward-Port-Of: odoo/enterprise#92384
Several spreadsheet dashboards now display charts with improved alignment, making reports easier to read and compare. The updates also refine the Helpdesk and Operation Analysis dashboards for a cleaner viewing experience.
Archived quality control points are now correctly excluded from the product Quality Points button and its count. This prevents users from seeing outdated or inactive quality checks when reviewing products.
Original PR description
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all…
**Steps to reproduce:** 1. Install the module `quality_control`. 2. Go to **Products → select any product → Quality Points (smart button)**. * Create a new Quality Point that applies to *all products*. 3. Open any product form. * Verify that the *Quality Points* smart button shows the created point and the correct count. 4. Archive the Quality Point. 5. Reopen the same product form and check the *Quality Points* smart button again. **Observed behavior:** - The archived Quality Point is still counted and shown in the smart button. **Root cause:** - During the refactor from raw SQL (`get_sql` + `cr.execute`) to the ORM query builder (`query.add_where(SQL(...))`), one outer bracket was dropped. [ref](https://github.com/odoo/enterprise/pull/66290/commits/a6362bc07eac7640f68d145a0f6a14a81f499913#diff-2ffdc2ffc25417076b580b772447514c7e9d8b3e2d2fff2d3100721eb5ccbaf4L542-R561) - This changed the operator precedence, causing the `active = true` condition to no longer properly apply when combined with the OR block. - As a result, archived Quality Points bypass the filter and are still counted. **Solution:** - Fix the missing bracket in the `query.add_where` SQL expression so that the `active` condition is always enforced before evaluating the OR block. opw-5046289 Forward-Port-Of: odoo/enterprise#94173
The "Count Entire Locations" button now appears correctly during regular warehouse actions such as deliveries and receipts. It remains restricted only on the physical inventory page, helping staff access the right counting action without disrupting standard operations.
Original PR description
This commit fixes showing "Count Entire Locations" button in normal operations (delivery, receipt, etc.) and only restricts it in physical inventory page.
This fixes rental pricing rules so night-based rental periods cannot be combined with other rental period types. It helps avoid incorrect rental setups and pricing issues for businesses using Odoo rental products.
Original PR description
with other rental periods. Fixes from regression testing post merge.
The Aged Receivable and Aged Payable reports now correctly expand all lines when users apply custom grouping. This prevents incomplete or broken report views, helping finance teams review outstanding customer and vendor balances more reliably.
Original PR description
We previously checked if the groupby is not changed to use the _common_custom_unfold_all_batch_data_generator. However, the user cannot change this field and is instead editing the user_groupby, so _common_custom_unfold_all_batch_data_generator was always used.
The bank synchronization duplicate-finding tool now removes wording that incorrectly suggested users could choose a journal. This avoids confusion by keeping the message aligned with what users can actually do in that screen.
Original PR description
The aim of this commit is removing a small part of sentence in the find duplicate tool in bank synchronization. Indeed, this sentence is proposing the customer to select the journal where it's not possible to do it. no task id
A bug was fixed so accounting import buttons can pass the correct target directly, instead of relying on the surrounding screen to guess it. This helps ensure each import option opens the intended workflow when several import buttons are available on the same page.
Original PR description
Since [1], the import action will infer the model from the current action. In this case, the action is a client action with multiple import buttons. This commit, adapts the extends of the import action to accept the model as as a parameter.
The Indian tax report document summary now avoids showing a misleading “Missing” status when the expected data is already available. This improves clarity for users reviewing GSTR-1 reporting information and helps prevent unnecessary follow-up on valid records.
Original PR description
Issue: - `Missing` tag appeared in document summary even when data was present. - Additionally, record_name was passed in `_check_suite_in_gstr1_report`, but as a computed field it never worked as intended. Fix: - No `missing` tag appears if document summary exists. - Replaced `record_name` with `record_model` to ensure correct record count and computed record name.
The AI context feature now safely handles files that have been added but not fully saved yet. This prevents errors during quick record creation or file uploads, improving reliability for users working with attachments.
Original PR description
When a record contains unsaved binary fields during quick creation or file upload, no ir.attachment exists yet. This leaves `raw bytes objects` in the record’s values, which caused `_get_ai_context()` to crash during `json.dumps()`. This fix updates `_ai_context_json_default()` to also handle raw bytes values (in addition to NewId), converting them into safe string representations so they can be serialized. This prevents crashes in `_get_ai_context()` and ensures consistent JSON output for records with unsaved binaries. task-19060