Daily updates from Odoo
Thursday, September 11, 2025
95 changes
26 changes
Enhancements to existing features
This update makes Odoo’s internal web testing tools faster, cleaner, and easier to diagnose when tests fail. It is limited to the unit test ecosystem, reducing risk for regular product behavior while improving developer confidence and test stability.
Original PR description
## Pull Request HOOT (PRHOOT) 36 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/93167 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225744 Forward-Port-Of: odoo/odoo#221367
The Peppol demo bill data was cleaned up to use clearer, safer sample information. This reduces confusion in demonstrations by avoiding real-looking bank details, using reserved example domains, and making vendor details more distinct.
Original PR description
Minor improvements to the demo bill such as usage of VAT number different from belgian company in demo data, removal of IBAN account number, usage of a different address for vendor company and usage of example.com instead of beexample.com, which is not IANA reserved domain name. XML used: [INV_2025_00017_ubl_bis3.xml](https://github.com/user-attachments/files/22254686/INV_2025_00017_ubl_bis3.xml) no-task Forward-Port-Of: odoo/odoo#226305
The Incoterm field on accounting documents now shows a helpful placeholder based on the company’s default setting. If no default is configured, users still see general guidance, making the form easier to complete correctly.
Original PR description
This commit adds a dynamic placeholder to incoterm field form view in `account.move`. The placeholder is dynamically set as the default incoterm value in setting. If no default is chosen, a default text is shown. task-4788236 Current behavior before PR: No placeholder is set to incoterm field in account move form view. Desired behavior after PR is merged: Dynamic placeholder set to incoterm field in account move form view with default incoterm value chosen in setting. If no default incoterm is chosen, a default text placeholder is shown. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225905
The financial budgets menu is available again, but only when debug mode is enabled. This gives administrators and support teams an easier way to review or import budget records without adding extra clutter for regular users.
Original PR description
This menuitem was removed with the idea to clean the view, but we now have second thoughts. Having a means to access a tree view of those objects is interesting for debugging purposes and in order to import them. We now put in debug mode only, though. Forward-Port-Of: odoo/enterprise#94155
Resolved issues and error corrections
Website editor popovers such as color pickers and link styling controls now stay correctly positioned when users scroll inside the page editor. This prevents editing controls from drifting away from the selected content, making page design tasks smoother and less confusing.
Original PR description
__Current behavior before commit:__ Some popovers that are toggled from the toolbar are not repositioned when the user scrolls in the website iframe. __Description of the fix:__ `this.__owl__.childEnv` is passed as `env` to `usePopover` such that the `POSITION_BUS` entry is included. Child env is used to avoid polluting the env of the parent component. __Steps to reproduce the issue on runbot:__ 1. Open the Website builder 2. Select some text 3. Click on the *Background Color* item (or *Highlight* or *Link* > *Custom* > *Text Color*) 4. Scroll the page The color picker popover doesn't follow the page scrolling.
The blog sidebar once again includes a dedicated RSS button, making it easier for visitors to subscribe to blog updates. The button is now separate from general social media links, which keeps blog subscriptions clearer and avoids mixing them with website-wide social channels.
Original PR description
Commit [1] changed the "follow us" social media snippet in the blog sidebar to not be dynamic anymore (meaning, it uses the website related social media by default but they are not added/removed automatically based on if they are set or not)... but doing so it removed the custom "RSS" button by mistake. This commit restores it, placing it at the top right of the sidebar, instead of being a part of the "follow us" social media. This keeps everything as static as possible + it actually makes sense to have this dedicated button outside of the more general "follow us" which is more website related than blog related. [1]: https://github.com/odoo/odoo/commit/8b7e44c8c6a7b5c267da39f438e0dfc20699befd
Product images in the catalog now display without being stretched when they are not square. This keeps quotations and product browsing visually accurate and more professional for sales users.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have products with non-square images available for sale; 2. open a quotation; 3. open the product catalog. Issue ----- The product images appear stretched. Cause ----- Commit e8836b42200e3 replaced the `div.kanban_image` element with a `field` element using the `image` widget. It maintained the same size limit of 55x55 via the widget's options, but without additional input, this causes the widget to stretch the images to fill the area. Solution -------- Add the `object-fit-contain` as `img_class` to the options. This class contains the image to the area instead of stretching it. opw-5007629 Forward-Port-Of: odoo/odoo#225112
Website editors can now add a Floating Cards item and resize its title area without triggering an error. This prevents an editing interruption and makes the snippet behave reliably after adding new cards.
Original PR description
*: html_builder In the "Floating Cards" snippet, after adding a new card, when trying to resize its title column vertically, a traceback appears. It happens because this grid item does not have the `g-col-*` class, which is needed for the resize in grid mode to work. This commit adds this class. Steps to reproduce: - Drop a "Floating Cards" snippet. - Add a card. - Click on the new card title and resize the column vertically. => Traceback The issue was previously addressed in [1], but a refactor of the Floating Cards snippet in master introduced a duplicate template, and the fix was applied to the incorrect one. [1]: https://github.com/odoo/odoo/commit/78f6e70e0777f5b063524ead73ddaae93ba55f22
The website builder now scrolls more smoothly in Chrome when using a laptop trackpad. This reduces distracting visual stutter in the editing panels, making page editing feel more polished and comfortable.
Original PR description
__Current behavior before commit:__ On Chrome, some elements of the builder, like the options headers, move at different times when scrolling with the trackpad creating unpleasant jank visual effect. __Description of the fix:__ Use `will-change: scroll-position;` to tell the browser to optimize the scroll rendering. __Steps to reproduce the issue on runbot:__ 1. Open the website builder in Chrome 2. Scroll with the laptop trackpad in the *Edit* or *Theme* tab
This fixes how separator lines appear in website price list and product catalog sections when users adjust border settings in the web editor. It helps keep published pages visually consistent when businesses customize these snippets.
Original PR description
Prior to this commit, the separators in the `s_product_catalog` and `s_pricelist_*` snippets didn't render correctly when changing the border values in the web editor. Steps to reproduce: - Open the…
Prior to this commit, the separators in the `s_product_catalog` and `s_pricelist_*` snippets didn't render correctly when changing the border values in the web editor. Steps to reproduce: - Open the Web Editor. - Drag and drop a price list snippet (`s_product_catalog`, `s_pricelist_cafe`, or `s_pricelist_boxed`). - Click on the snippet. - Set the border value to `0`. task-5081626 | Before | After | |--------|--------| | <img width="1914" height="646" alt="Capture d’écran 2025-09-11 à 09 30 11" src="https://github.com/user-attachments/assets/f7dc319f-e151-4fc4-9349-df70719aec9f" /> | <img width="1912" height="643" alt="Capture d’écran 2025-09-11 à 09 31 02" src="https://github.com/user-attachments/assets/dbbaacff-9f20-4ec4-9fec-f4cc3770952a" /> | | <img width="1915" height="646" alt="Capture d’écran 2025-09-11 à 09 30 52" src="https://github.com/user-attachments/assets/f138bd04-60cd-4238-9338-2fa5921d7715" /> | <img width="1911" height="647" alt="Capture d’écran 2025-09-11 à 09 31 37" src="https://github.com/user-attachments/assets/c38e486a-2b23-4685-83f1-de363c15c881" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fix makes automated checks for the Discuss command palette more reliable by waiting for the interface to settle before interactions are tested. It also corrects supporting test data so related messaging features can be validated consistently, reducing false failures in quality checks.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. The commit also fixes the mock of `discuss/search` ( for https://github.com/odoo/enterprise/pull/94075 ) and a test that was incomplete and relied on the incorrect implementation https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/odoo#225951 Forward-Port-Of: odoo/odoo#225844
Website editors now get more predictable link behavior when editing pages. Image links no longer show an unintended live preview while typing, and empty link URLs are preserved with a safe placeholder instead of silently discarding the change.
Original PR description
### Description of the issue/feature this PR addresses: - onChange was triggered both while typing in the URL input and when selecting an autocomplete item, causing live preview even for image links. - When editing a link, removing URL and clicking outside discarded changes. ### Desired behavior after PR is merged: - Live preview is now applied only for normal text links, not for image links. - If the URL field is empty and the user clicks outside, the link now default its href to '#'. task-5028570 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Vendor price lists created from blanket orders now use the unit of measure from the blanket order line instead of defaulting to the product's base unit. This helps purchasing teams keep vendor pricing aligned with negotiated order terms and avoids unit-related pricing mistakes.
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
Fixes an issue where reloading a page after folding a group in a grouped Kanban view could show an error. The view now refreshes its saved group state from the latest server response, improving reliability for users returning to grouped records.
Original PR description
- Open a grouped kanban; - Fold a group; - Reload the page; Before this commit, an error occurred because the configuration says that the group is unfolded, but the returning RPC didn't have any records. This commit clears the current configuration, which will then be reloaded based on the returning RPC.
The wishlist purchase journey test now allows more time to complete, reducing false failures when the process runs slowly. This helps keep automated validation stable without changing the customer-facing shopping 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
Users editing technical views now receive a clear, user-friendly message if they include an XML encoding declaration that cannot be saved. This prevents a confusing system error and helps administrators correct the view architecture more easily.
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
The Uruguay localization app now links directly to the Uruguay fiscal localization documentation instead of a general documentation page. This helps users find the relevant country-specific guidance faster 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
The Send & Print wizard now skips a Uruguay electronic invoice file type that caused download errors. Users can download invoice attachments without interruption, while the skipped CFE document remains available from its own form view.
Original PR description
When downloading attachment via the send & print wizard, we get an error from the server. This is because we raise an assertion error if any attachment is not from 'account.move' model. But the CFE file is from 'l10n_uy_edi.document' model. With this commit, we extend the `_action_download` method to filter the CFE file from the attachments. It is not blocking for client as he can still download it from the form view of the CFE document. Steps: - Create an invoice - Set a 0% tax on the invoice line - In 'Other infos' tab, fill the 'Incoterm', 'Sales Modality' and 'Transportation Rules' fields - Confirm - Open S&P wizard, select 'Create CFE' and confirm - Reopen S&P wizard, select 'Download' and confirm (can be done along the previous step too) -> Error opw-5043902 Forward-Port-Of: odoo/enterprise#93830
Internal users can now use AI agents that rely on tools without being blocked by an access error. The change adds read-only access for these AI tools and includes tests to help prevent the issue from returning.
Original PR description
Purpose: --------- The access rule for internal users on the `ai.tool` model is missing, and internal users can therefore not chat with an agent that has tools (an `AccessError` is raised) This commit adds the rule with read permission only, and adds a few basic tests to check model permissions. Task-5064332
Scanning package type barcodes with GS1 barcode settings no longer causes server errors. This keeps warehouse barcode workflows running smoothly when identifying package types.
Original PR description
Steps to Reproduce: - Set the barcode nomenclature to GS1 - Scan a package type barcode - Server logs an AttributeError(in Odoo 18) or KeyError(in Odoo 16 and 17) Issue: - The model class "stock.package.type" is missing an attribute "_barcode_field" Solution: - Add the attribute "_barcode_field" to the model class "stock.package.type" Task: [4888064](https://www.odoo.com/odoo/49/tasks/4888064) Forward-Port-Of: odoo/enterprise#94347 Forward-Port-Of: odoo/enterprise#93116
This update adjusts internal test code to use the standard shared helper entry point instead of deeper framework paths. It makes test maintenance easier and reduces the chance of inconsistencies, with no expected impact on day-to-day users.
Original PR description
This commit reduces imports to the 'tests/_framework/' subfolder, which is meant to be accessed through the 'web_test_helpers' module as to reduce the amount of imports, as well as centralizing all web helpers to have a quick overview of the available helpers. Community: https://github.com/odoo/odoo/pull/225865 Forward-Port-Of: odoo/enterprise#94074
This fix makes automated WhatsApp command palette tests wait for the interface to settle before clicking items. It reduces false test failures, helping keep development and release validation more stable without changing customer-facing behavior.
Original PR description
Before this commit, clicking on some elements of the command palette would not trigger the associated event, this was probably caused by clicking on outdated owl fragments which cannot trigger events while being destroyed. This commit fixes this issue by making sure that the interface is in a stable configuration before clicking. https://runbot.odoo.com/odoo/runbot.build.error/112148 Forward-Port-Of: odoo/enterprise#94075
Opening the rental availability view from a rental order now works reliably. The fix prevents an error that blocked users from checking product availability in the rental schedule.
Original PR description
**Steps to reproduce:** 1. Go to Rental > Create a rental product and enable Sales. 2. Create a rental order with a customer and created product. 3. Click the availability icon and open the view rental. **Issue:** A traceback occurs: `Caused by: InvalidDomainError: Invalid domain representation: product_id,=` **Cause:** The rental availability check crashed due to improper domain construction: <img width="453" height="89" alt="image" src="https://github.com/user-attachments/assets/fd3ff556-fdab-40ab-9c1b-a539e5b164e8" /> **Solution:** Now the `product_id` is correctly retrieved from the record’s `id` property before building the domain, preventing crashes when opening the rental gantt view. opw - 5066061
This update fixes an issue in the Belgian CodaBox integration that could cause errors when processing company records. It helps ensure CodaBox-related company operations run reliably without interruption.
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 Quality Points button on product pages now excludes archived quality points from both the count and list. This prevents users from seeing outdated quality controls and keeps product quality information accurate.
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
Code cleanup and technical improvements
This update reorganizes internal test code so shared web testing tools are accessed from one central place. It helps keep Odoo's automated tests easier to maintain and reduces the chance of future conflicts, with no expected change for end users.
Original PR description
This commit reduces imports to the 'tests/_framework/' subfolder, which is meant to be accessed through the 'web_test_helpers' module as to reduce the amount of imports, as well as centralizing all web helpers to have a quick overview of the available helpers. Enterprise: https://github.com/odoo/enterprise/pull/94074 Originally contained within the following pull request: https://github.com/odoo/odoo/pull/225744 But has been separated for convenience sake since the original PR was involving security overrides, and would be consistently interrupted by conflicts ensuing from this specific commit. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#225865
13 changes
Resolved issues and error corrections
The Peppol demo bill data was cleaned up to use more appropriate sample values, including a distinct VAT number, a reserved example.com domain, and a different vendor address. This helps keep demo documents realistic and avoids using misleading or non-reserved sample information.
Original PR description
Minor improvements to the demo bill such as usage of VAT number different from belgian company in demo data, removal of IBAN account number, usage of a different address for vendor company and usage of example.com instead of beexample.com, which is not IANA reserved domain name. XML used: [INV_2025_00017_ubl_bis3.xml](https://github.com/user-attachments/files/22254686/INV_2025_00017_ubl_bis3.xml) no-task Forward-Port-Of: odoo/odoo#226305
Product images in the catalog now display without being stretched when they are not square. This keeps product listings looking accurate and professional when users browse items from quotations.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Have products with non-square images available for sale; 2. open a quotation; 3. open the product catalog. Issue ----- The product images appear stretched. Cause ----- Commit e8836b42200e3 replaced the `div.kanban_image` element with a `field` element using the `image` widget. It maintained the same size limit of 55x55 via the widget's options, but without additional input, this causes the widget to stretch the images to fill the area. Solution -------- Add the `object-fit-contain` as `img_class` to the options. This class contains the image to the area instead of stretching it. opw-5007629 Forward-Port-Of: odoo/odoo#225112
Vendor price records created from blanket orders now use the unit of measure chosen on the blanket order line instead of defaulting to the product's base unit. This helps keep supplier pricing accurate when purchases are negotiated in different 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
Users editing technical views now receive a clear, user-friendly message if they include an XML encoding declaration that cannot be accepted. This prevents an unhandled system error and makes the issue 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
The Uruguay localization module now points users directly to the Uruguay-specific fiscal localization documentation instead of a generic overview page. This makes it easier for users to find the right guidance for Uruguay-related finance setup and compliance 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 prevents an error when sending Indian electronic invoices. Businesses using Indian e-invoicing can send invoices more reliably without the process failing due to a data handling 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 fixes a mail discussion issue where an error message could remain visible after messages successfully loaded on retry. Users who temporarily lose connection can now retry loading older messages and see the correct state once the data is available.
Original PR description
**Description of the issue this PR addresses:** When a thread fails to fetch its messages (e.g., due to a network error), the `hasLoadingFailed` flag is set to `true`. However, even if the next fetch…
**Description of the issue this PR addresses:** When a thread fails to fetch its messages (e.g., due to a network error), the `hasLoadingFailed` flag is set to `true`. However, even if the next fetch attempt succeeds, the flag is not reset. As a result, the UI may continue to show an error state even though the data has successfully loaded. **Steps to Reproduce:** - Open a thread with many messages. - Go offline. - Scroll up to load older messages → failure message appears. - <img width="311" height="68" alt="image" src="https://github.com/user-attachments/assets/e18832cb-5d37-4add-a126-fdc301131721" /> - Go back online and click Retry → messages load successfully. - Scroll again → failure message still appears, even though you’re online. - <img width="311" height="68" alt="image" src="https://github.com/user-attachments/assets/e18832cb-5d37-4add-a126-fdc301131721" /> **Current behavior before PR:** After a failed attempt to fetch messages in a thread, the `hasLoadingFailed` flag remains set to `true`. Even if the user goes back online and the subsequent fetch succeeds, the UI continues to show a failure state. **Desired behavior after PR is merged:** After a successful fetch of a thread’s messages, the `hasLoadingFailed` flag is reset to `false`, ensuring the UI no longer shows a failure state once the data has been correctly loaded. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#226145 Forward-Port-Of: odoo/odoo#222001
The Documents chatter now consistently shows the Activities button for every document, including files linked to other document-related apps such as Sign. This prevents users from losing access to activity tracking when viewing certain documents.
Original PR description
Step to Reproduce: - Install `Documents_sign` module - open Documents - click on 'info & tags` button on the top right corner to show chatter - Open 'Odoo CLA.pdf' document Observation: - The Activities button is not shown in Chatter. Issue: - after this https://github.com/odoo/enterprise/commit/a32825ee00f2b330d99113f4d8c1488903fe744e, the activities button shows only for those documents which are related to `documents.documents` model or a document has no model, but it should be shown for all documents https://github.com/odoo/enterprise/blob/23fb26ae0f91a5bdb74d0d4fce48b31fa7abef86/documents/static/src/views/kanban/documents_kanban_renderer.xml#L21-L26 Solution: - Remove condition for Kanban and list view to show `activities` button in Chatter opw-5013427 Forward-Port-Of: odoo/enterprise#93093
This fix makes the online rental checkout test wait for the cart page and pricing details to finish updating before validating totals. It reduces false build failures and helps ensure rental duration changes are reflected correctly in the shopping cart.
Original PR description
steps to reprduce: 1. duplicate multi enterprise 18.0 database 2. run the tour `website_sale_change_rental_duration` in the duplicated database inspired from: https://github.com/odoo/enterprise/commit/c7542e897c537650966497065db9c7d033dcb8ee added a delay to wait when choosing the rental duration, after page is loaded when go to cart , check if the next page is loaded before checking untaxed amount build_error-227718 Forward-Port-Of: odoo/enterprise#89274
This update fixes an issue in the Belgian CodaBox integration that could cause errors when processing company records. It ensures the system uses the correct company information, improving reliability for affected accounting 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
This update adjusts internal test code to use the standard shared helper module instead of reaching into private test folders. It helps keep Odoo's testing setup easier to maintain and reduces the risk of future test breakages, with no expected impact on end users.
Original PR description
This commit reduces imports to the 'tests/_framework/' subfolder, which is meant to be accessed through the 'web_test_helpers' module as to reduce the amount of imports, as well as centralizing all web helpers to have a quick overview of the available helpers. Community: https://github.com/odoo/odoo/pull/225865
Archived quality points are now correctly excluded from the product Quality Points smart button. This prevents outdated or inactive checks from inflating counts or appearing to users, keeping product quality information accurate.
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
Miscellaneous changes
It's not rare to have databases with a huge number of svls for some products. For instance, the database of opw-4326597, which is currently on 17.0 and hosted on Odoo.sh, has 166 000 svls for the same product. Because of that, the current code in `svl_empty_stock` is likely to raise a MemoryError in those databases. The reason for that is the `__get__` call on `stock_valuation_layer_ids` along with a call to `filtered`. After expanding the singleton with the `prefetch_ids` and fetching all the
Original PR description
It's not rare to have databases with a huge number of svls for some products. For instance, the database of opw-4326597, which is currently on 17.0 and hosted on Odoo.sh, has 166 000 svls for the…
It's not rare to have databases with a huge number of svls for some products. For instance, the database of opw-4326597, which is currently on 17.0 and hosted on Odoo.sh, has 166 000 svls for the same product. Because of that, the current code in `svl_empty_stock` is likely to raise a MemoryError in those databases. The reason for that is the `__get__` call on `stock_valuation_layer_ids` along with a call to `filtered`. After expanding the singleton with the `prefetch_ids` and fetching all the fields of the related svls, the cache will probably raise a MemoryError. We are preempting this issue by changing this part of the code with a call to `_read_group` to get the correct lots directly. Thanks to @mwath for pointing this out. #### speedup Benchmark of the `_svl_empty_stock` method, with a product with 200 000 svls with a lot. | Before PR | After PR | |:----------:|:---------:| | 15.03s | 198.64ms | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#188285
5 changes
Enhancements to existing features
Kitchen display screens now show stage names only when viewing all stages, reducing repeated information on individual stage views. Pending course cards now use a warning-style label, making it easier for staff to spot items that still need attention.
Original PR description
Before this commit: - Stage names were visible even when the selected stage matched the order’s stage. - Preparation cards for pending courses displayed `Pending` as a normal label. After this commit: - Stage names are now visible only when the `All` stage is selected. - Pending course preparation cards now display `Pending` as a warning label. Related: - Community: https://github.com/odoo/odoo/pull/223568 task-4985324
Resolved issues and error corrections
This fix restores the intended layout of the quick-create area in bank reconciliation. Users should again see the fields sized and arranged correctly, reducing confusion when entering reconciliation details.
Original PR description
In commit[1] the css handling the grid-template-columns was removed, breaking the quick-create layout. task-5079288 Follow-up of task-4749379 [1]: odoo/enterprise@f9725d7b01cbd1235f022821a6861adb2955e49e
A timesheet grid test now uses a consistent calendar timezone so results do not vary depending on demo data. This helps keep automated checks stable without changing how scheduling works for users.
Original PR description
The test `test_create_from_future_template` was failing with demo data due to timezone differences. Demo companies often have a resource calendar with a non-UTC timezone (e.g., Europe/Brussels). In that case, calling `action_create_from_template` schedules tasks via `_scheduling`, which computes the task start/end in local time and stores them in `UTC`, shifting the expected hours. Without demo data the company calendar timezone itself is already `UTC`, so the test passed. This change enforces the company resource calendar timezone to `UTC` at the start of the test to ensure consistent behavior regardless of demo fixtures. No change in scheduling logic, only a test stabilization. [runbot-231452](https://runbot.odoo.com/odoo/error/231452)
Fixed an issue that could prevent payroll payment report CSVs from being generated when an employee had multiple bank accounts with a 100%/0% salary split. Reports can now include the 0% split account without causing an error, helping payroll teams complete payments reliably.
Original PR description
-When generating a payment report CSV for user with multiple bank accounts that have a salary split of 100%/0%, a trace-back occurs. -The logic has been adjusted so that bank account of 0% split percentage can be included in the payment report.
The Colombian withholding certificate report no longer shows a confusing compliance message. This makes the report clearer for users while preserving legal compliance with DIAN requirements.
Original PR description
Before PR: - retention reports showed a confusing message which was intended to show compliance with DIAN. After PR: - the confusing message has been removed. Omitting this message does not affect legal compliance. Task Id: 4859088
41 changes
Enhancements to existing features
The stock transfer list now separates date-related filters from other filter options. This makes it easier for users to find and apply date filters when managing warehouse operations.
Original PR description
Task: 5075847 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 shop configurator preset images have been refreshed with a new placeholder logo. This keeps the setup experience visually consistent and better aligned with current branding when users choose product and shop layouts.
Original PR description
Update configurator preset images in `website_sale` with new placeholder logo. task-5080114 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Color choices now use a rounded visual style and clearly show which color is selected. This makes color selection more consistent and easier to understand across project and general interface areas.
Original PR description
We now have rounded item colors, and we can now see which color is selected. task-5049476 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 mail composer now better detects when users are actively editing a message, so messages can be marked as read at the right time. Its border styling also gives clearer visual feedback when the composer is focused.
Original PR description
This commit binding the focusin and focusout handlers to the HTML composer, making the mark as read feature working as expected. Also, this commit improves the border styling of the composer with focus state. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update reorganizes how spreadsheet borders are handled to make editing behavior more consistent and easier to maintain. It helps reduce the risk of future issues in spreadsheet features such as list and pivot autofill, with minimal direct impact for users.
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
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
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
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
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 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
The 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 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.
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.
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
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.
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
Code cleanup and technical improvements
The builder asset bundle was renamed to better reflect that it is now shared by website editing and mass mailing email composition. This is an internal naming cleanup that improves clarity for future maintenance without changing business workflows.
Original PR description
*: mass_mailing, portal, website, website_mail, website_mail_group, website_mass_mailing, website_payment, website_profile, website_sale The new html_builder is used by both website and mass_mailing. While the old name `[html_builder|website].assets_edit_frontend` makes sense in the context of the website builder, where the iframe is indeed used to "edit the frontend", it is not the case in mass_mailing, where the email being composed is not a "frontend". A more generic name is more appropriate.
This update tidies the internal tests for subscription optional products without changing customer-facing behavior. It helps keep the subscription area easier to maintain and reduces future risk when related features are updated.
Original PR description
See Also: - https://github.com/odoo/odoo/pull/226052
This change updates an internal asset bundle name so it better fits shared use across website building and mass mailing. It helps keep naming consistent as the same editor technology is used beyond website pages, with no expected direct impact for end users.
Original PR description
The new html_builder is used by both website and mass_mailing. While the old name `[html_builder|website].assets_edit_frontend` makes sense in the context of the website builder, where the iframe is indeed used to "edit the frontend", it is not the case in mass_mailing, where the email being composed is not a "frontend". A more generic name is more appropriate. This commit is linked to the community PR that updates the bundle name everywhere.
Miscellaneous changes
This pull request updates Odoo's release information for version 19.0. It helps ensure the product correctly identifies and communicates the new release version across business and operational contexts.
10 changes
Enhancements to existing features
The Peppol demo bill has been cleaned up to use clearer and safer sample information, including a distinct vendor address, a reserved example domain, and no IBAN account number. This helps avoid confusion when users or testers rely on the demo bill as a realistic example.
Original PR description
Minor improvements to the demo bill such as usage of VAT number different from belgian company in demo data, removal of IBAN account number, usage of a different address for vendor company and usage of example.com instead of beexample.com, which is not IANA reserved domain name. XML used: [INV_2025_00017_ubl_bis3.xml](https://github.com/user-attachments/files/22254686/INV_2025_00017_ubl_bis3.xml) no-task Forward-Port-Of: odoo/odoo#226305
Resolved issues and error corrections
This fix ensures critical issues found during the web test runner's dry run are reported as real errors. It helps the team detect blocking test problems earlier and avoid missed failures in automated checks.
Original PR description
The test runner replaces most occurences of `console.log` with a formatted `console.trace`, as to avoid duplicate runbot error messages in general. The issue is that during the dry run, errors that are caught should be logged on the runbot since these errors are more critical (i.e. duplicate test name, which will prevent the runner to run at all). This commit ensures that errors caught during dry run are logged as actual errors to prevent this issue. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
On small screens, selecting an option such as Preferences from the user menu now closes the main menu automatically. This prevents dialogs from opening hidden behind the menu, making mobile navigation smoother and less confusing.
Original PR description
This commit ensures the BurgerMenu is closed when clicking on one of its items, and specifically on one of the BurgerUserMenu items. Steps to reproduce (on small screen): - on a "base" database (no app installed) - click on the BurgerMenu (top right) - click on "Preferences" => the user's preference dialog opens behind the BurgerMenu Forward-Port-Of: odoo/odoo#225696
The web test runner now correctly keeps excluded tests when simplifying test URLs. This prevents intended test exclusions from being lost, helping internal testing remain accurate and reliable.
Original PR description
Before this commit, when the test runner simplified the URL (e.g. if the runner is given the ID of every test in a suite, it will remove them and only include the suite ID), it always considered IDs as being "included", and ignored the "-" specifying that some IDs should be "excluded". --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Survey datetime answers now show using the current user's time zone in list labels and answer tabs. This prevents confusion when the displayed answer time differs from the value shown when opening the detailed response form.
Original PR description
Steps to reproduce ==================== 1. Create survey with some datetime questions. 2. Receive some response on it. 3. Check answer of datetime questions in answer tab. 4. Click on that answer to open form. ->The time shown in answer tab differs from actual value in form. The display_name of survey.user_input.line is computed based on the answers submitted by users. For questions of type datetime, the display_name was generated by converting the datetime value to a string without accounting for the user's timezone, leading to a mismatch between the actual value and the displayed time. After this commit ================== This commit updates the computation of display_name for datetime answers to consider the current user's timezone. Task-4890423 Forward-Port-Of: odoo/odoo#226243 Forward-Port-Of: odoo/odoo#216281
This fixes an internal server issue where a missing comma could cause thread startup to fail. The change helps prevent avoidable server errors and improves reliability without changing business workflows.
Original PR description
From the references([Reference 1],[Reference 2])issue occurred because arguments were passed without a trailing comma, which caused a string to be interpreted as multiple positional arguments instead of a tuple. This resulted in a error during thread initialization. Adding the missing comma ensures arguments are correctly passed as a tuple. Error:- `ImDispatch.run() takes 1 positional argument but **Y** were given` [Reference 1]: https://stackoverflow.com/questions/37116721/typeerror-in-threading-function-takes-x-positional-argument-but-y-were-given [Reference 2]: https://stackoverflow.com/questions/69657746/a-function-takes-1-positional-argument-but-133-were-given **sentry-3928947199**
Due to time constraints the translations were not added in the commit adding the modules (72ac059edfcc35ad44c5faa9daf971123377af24). This commit adds the translations / fills the `.po` files. The translations were created by LMAN based on the 18.0 po files. Veri*Factu task: task-3745982 Forward-Port-Of: odoo/odoo#225173
Original PR description
Due to time constraints the translations were not added in the commit adding the modules (72ac059edfcc35ad44c5faa9daf971123377af24). This commit adds the translations / fills the `.po` files. The translations were created by LMAN based on the 18.0 po files. Veri*Factu task: task-3745982 Forward-Port-Of: odoo/odoo#225173
Scanning package type barcodes with GS1 barcode settings now works without server errors. This prevents interruptions in warehouse barcode workflows when identifying package types.
Original PR description
Steps to Reproduce: - Set the barcode nomenclature to GS1 - Scan a package type barcode - Server logs an AttributeError(in Odoo 18) or KeyError(in Odoo 16 and 17) Issue: - The model class "stock.package.type" is missing an attribute "_barcode_field" Solution: - Add the attribute "_barcode_field" to the model class "stock.package.type" Task: [4888064](https://www.odoo.com/odoo/49/tasks/4888064) Forward-Port-Of: odoo/enterprise#94108 Forward-Port-Of: odoo/enterprise#93116
This fixes a crash that could occur when a currency rate filter dropdown was closed after the accounting report view had already been left or removed. Users should see more stable accounting reports when navigating away while filters are open.
Original PR description
For the currency rate filter, applyFilters is called when the dropdown is closed. It might heppen that we have the dropdown open then we click on something that trigger the destruction of the report view but that still trigger applyFilters which try to apply filter on a destroyed component which is illegal. To prevent this we check if the component is destroyed before reloading the controller.
Documentation and clarification updates
This update records a contributor license agreement signature for tsezgin. It supports the project’s legal compliance process and does not change any product functionality.
Original PR description
The commit contains my CLA signature