Tuesday, March 24, 2026
32 changes · saas-19.2
New functionality added to Odoo
This update adds pre-configured asset models for Odoo users in China, aligning with local tax regulations (Article 60). These default models simplify the setup process for depreciation accounting under ASBE and ASSBE localization packs, improving user convenience and compliance.
Original PR description
Create a batch of default asset models for both ASBE and ASSBE localization pack for users' convenience according to China Corporate Income Tax Regulations Article 60. task-[5976588](https://www.odoo.com/odoo/project/967/tasks/5976588)
Enhancements to existing features
This update enhances the way users filter journal items, allowing them to specifically select ledgers within the list view. Additionally, a new naming convention ('Local Gaap') has been implemented for journal groupings when grouping by ledgers is disabled, improving clarity and consistency.
Original PR description
When at least a ledger exists, allowing to filter on these ledgers in the list view of journal items. Also when grouping by ledgers, when the journal_group is set to False, change the name to 'Local Gaap'. task-6034807 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Resolved issues and error corrections
This update fixes a bug where right-clicking on keypad buttons incorrectly triggered a long-press action. This issue stemmed from the way the context menu was handled, leading to unintended behavior. The fix ensures that only left-button actions are recognized, improving the overall user experience.
Original PR description
Since [1], some keypad buttons have a long-press value/action and, at worst, they enter the normal key value after the long-press duration. It was later improved by [2] (19.2) and other actions were…
Since [1], some keypad buttons have a long-press value/action and, at worst, they enter the normal key value after the long-press duration. It was later improved by [2] (19.2) and other actions were added such as long-pressing backspace at [3] (19.2) and more recently [4] (19.3) which allows calling the voicemail with long-pressing "1". In all those versions and features, there is the same bug: right-clicking the key triggers the long-press action as the context menu opens over the cursor, then our implementation ends up believing a long-press was performed. Solution: we should never have considered anything else than left-button actions anyways. [1]: https://github.com/odoo/enterprise/commit/82b4c4327fc722f55a0c14b14a916a5cddafa0eb [2]: https://github.com/odoo/enterprise/commit/b9dd0d6fc1fee479e9c8cd4c89dc0a9147891185 [3]: https://github.com/odoo/enterprise/commit/2723ef65622bb206d64e08482f3acd6594c03d28 [4]: https://github.com/odoo/enterprise/commit/dea0baa0dfd76962865717173807e4c945414cd3 task-6055182 Forward-Port-Of: odoo/enterprise#111490
This update fixes a technical error that occurred when users tried to take pictures without an IoT device connected to a quality control point. The fix adds a check to ensure a device is set, preventing a system error and guiding the user to properly configure the control point.
Original PR description
Currently, an error occurs when the user clicks the Take Picture button without an IoT box set on the quality control point. ## Steps to replicate: - Install Quality, Purchase, IoT - Quality >…
Currently, an error occurs when the user clicks the Take Picture button without an IoT box set on the quality control point. ## Steps to replicate: - Install Quality, Purchase, IoT - Quality > Quality Control > Control points - Create a new Control point with - Type: Take A Picture - Operations: My Company: Receipts - Create and confirm a purchase order for a test product - Receipts > Quality Checks > Take A picture ## Observed behavior: TypeError: Cannot read properties of undefined (reading '0') ## Root cause: This error occurs because no device has been set on the control point. When the user clicks the **Take a Picture** button, the `onClick` method [1] is triggered. Since `this.iotDevice` is false, both `iotBoxId` and `deviceIdentifier` are undefined. These undefined values are then passed to the action function [2], which in turn passes them to the `_attemptFallbacks` function. At [3], a type error occurs because the system tries to index `iotBoxId` even though it is undefined. [1]: https://github.com/odoo/enterprise/blob/2c2e358695357a730b66480fd99c27d7e922bd0b/quality_iot/static/src/iot_picture_button.js#L7-L17 [2]: https://github.com/odoo/enterprise/blob/2c2e358695357a730b66480fd99c27d7e922bd0b/iot/static/src/network_utils/iot_http_service.js#L213-L236 [3]: https://github.com/odoo/enterprise/blob/2c2e358695357a730b66480fd99c27d7e922bd0b/iot/static/src/network_utils/iot_http_service.js#L149-L152 [4]: https://github.com/odoo/enterprise/blob/1d25675de808521dc8ad8c56bc9fbd320a0ae56b/quality_iot/static/src/iot_measure_button.js#L27-L32 ## Solution: Add a check for an unset device and notify the user to add a device to the quality point. This prevents a traceback and clearly informs the user about the issue. Similar to how it was done in [4] opw-6010095 Forward-Port-Of: odoo/enterprise#110615
This update fixes an issue where the 281.50 PDF report occasionally generated an extra page due to formatting. The change optimizes the report layout to ensure it consistently uses only one page for standard reports, improving readability and reducing unnecessary PDF sizes. This primarily impacts reports for Belgian companies.
Original PR description
**Behavior:** Currently when generating the 281.50 report the pdf ends up taking an extra page filled only with header and footer, the page appears when creating the report for a natural person and…
**Behavior:** Currently when generating the 281.50 report the pdf ends up taking an extra page filled only with header and footer, the page appears when creating the report for a natural person and adding a national number. The solution is not to fully prevent the report form being more than 1 page long, as some informations could span over more than one line which would make the pdf need an extra page. But to shave a few milimeters so that by default when filled with standard informations the pdf appears cleaner. **Steps to reproduce:** - Log to a Belgian company - Create a contact that is a person - Add the 281.50 tag to them - Create a credit note for any positive amount for that person and set the date to the previous year - Make sure the account used in the credit note has any 281.50 x tag assigned - Go to Accounting/Reporting/Open 325 forms and create a new form for the year indicated in the credit note - When generating the 281.50 PDF you'll seee it span over 2 pages if you have filled the national number of the contact opw-5930339 Forward-Port-Of: odoo/enterprise#111310
This update ensures the 'Mark as Complete' button is always visible when a return flow has been started, regardless of the user's connection preferences or temporary API issues. This resolves a previous issue where the button was hidden, preventing users from finalizing returns, particularly in localized versions or during API downtime.
Original PR description
When a flow is already started, the button "mark as complete" on returns was invisible. This is an issue for some localizations that don't handle the flow when the API connection is not desired by the user. Another use case, for example, is the API connection is down temporarily, the user manually uploads it on the website, then wants to close the started return. Forward-Port-Of: odoo/enterprise#111600
A technical issue causing a tour to fail has been resolved. This change adjusted the company referenced within the tour, addressing a previously unreplicable access rights problem. The fix ensures the tour now runs correctly, improving the user experience.
Original PR description
Before this commit, the tour `hr_referral_utm_campaign_tour` was failing because of some weird access rights issues. The issue did not seem to be reproducible in local with similar condition. This commit changes the company used in that tour runbot issue 239152
This update fixes a situation where the Gemini AI feature would sometimes fail to respond to users, appearing as a system error. The fix automatically retries the request with a slightly increased processing limit and, after three attempts, informs the user of the failure. This ensures a smoother and more reliable experience with the AI functionality.
Original PR description
It often occurs that gemini responses come back empty without anything to show to the users. Specifically, the response object has content but the "parts" are empty - the place were you either get a…
It often occurs that gemini responses come back empty without anything to show to the users. Specifically, the response object has content but the "parts" are empty - the place were you either get a function call or a message to the user by the LLM. Prior to this commit, when this occured, we didn't perform any explicit handling. We would always just return what the LLM responded with, which when empty would be nothing. UX wise, it would seem like something broke because the user would basically get no reply. In this commit, we add a retry mechanism in `_request_llm_google` of `llm_api_service.py`, where if we get no response, we increase the thinking budget of the next request to 512 and try again. 512 tokens were chosen completely arbitrarily - anecdotally, the model should use around 300 thinking tokens for its tasks so 512 should be enough. After 3 unsuccessful tries, we send a failure response to the user. Task-5959805 Forward-Port-Of: odoo/enterprise#111228 Forward-Port-Of: odoo/enterprise#108755
This update fixes an issue where subscription quotations weren't displaying correctly in the portal. Recent changes caused orders to always redirect to a general subscription page, which wasn't suitable for draft or sent orders. Now, draft and sent orders are correctly directed to the specific order details page, improving the user experience.
Original PR description
Version: - saas~19.2 Steps to reproduce: - Create a subscription quotation. - Open it from the portal. Issue: - The portal view of the subscription quotation is not displayed correctly. Cause: - After recent changes, subscription orders were always redirected to `/my/subscriptions/` route. - This route renders the `subscription_portal_template`, which is not suitable when the order is still in draft or sent state. Solution: - If the subscription order is in draft or sent state, redirect the user to `/my/orders/<order_id>` instead. task-5966871
This update corrects a small, unintended message appearing in the documents generated for employee payroll. This ensures that all payroll documents are clear and accurate, providing employees with the correct information. The change is a simple fix to improve document clarity.
Original PR description
Task#5980045 Forward-Port-Of: odoo/enterprise#109063
This update corrects a bug where archived employee versions were incorrectly included in pay run reports. The fix filters out archived employees from the pay run domain, ensuring accurate payroll calculations. This prevents potential errors and ensures data integrity for employee compensation.
Original PR description
Steps to reproduce: 1. Create an employee with a contract for this month 2. Archive the employee (but not the version) 3. Create a pay run 4. The employee's version will appear in the list Cause: The domain takes versions for archived employees. Fix: Add active_employee in the domain. Task: 6022437 Forward-Port-Of: odoo/enterprise#110527 Forward-Port-Of: odoo/enterprise#110073
This update resolves an issue where users were directed to the wrong document form view when configuring PEPPOL document syncing settings. The change adds a dedicated Kanban view for PEPPOL documents within the settings, ensuring users can easily manage their PEPPOL documents. This improves the user experience and streamlines the configuration process.
Original PR description
Before this commit: clicking through on the setting of configuring the folder to sync peppol documents would lead to the document form view instead of the kanban view. Task-6040802 Forward-Port-Of: odoo/enterprise#111765 Forward-Port-Of: odoo/enterprise#111341
This update resolves an issue where documents uploaded to the 'All' folder in the Documents app were inaccessible through the bridge interface. The fix ensures that uploads to 'All' now default to the standard bridge folder, restoring full accessibility for users. This improves the usability of the Documents app.
Original PR description
Problem: When a user uploads a document through a bridge to the Documents app, if the destination is set to the `All` folder, the file becomes unviewable from the bridge. It can only be accessed directly via the Documents app. Cause: This occurs because `All` is not an actual folder. Uploads directed to it default to the `My Drive` folder instead. Because `My Drive` is restricted and inaccessible via the bridge, the uploaded documents remain hidden. Solution: To solve this problem, this PR ensures that uploads directed to the `All` folder default to the default bridge folder rather than to `My Drive`. task-6023290 Forward-Port-Of: odoo/enterprise#111715 Forward-Port-Of: odoo/enterprise#111290
This update resolves a problem where invoice lines were not appearing correctly when certain tax modules (l10n_in and l10n_ar) were installed. The fix ensures that invoice line data is handled properly, preventing conflicts and ensuring accurate display of financial information. This improves the reliability of invoice processing.
Original PR description
Create the invoice line through the `invoice_line_ids` o2m write command instead of a standalone `account.move.line` create with move_id. The mock server's `inverse_fname_by_model_name` mapping only keeps one o2m per co-model; when extra modules add another o2m with the same inverse (`l10n_in_withholding_line_ids` from l10n_in, `l10n_ar_withholding_ids` from l10n_ar_withholding), it shadows `invoice_line_ids` and the list renders empty. runbot-233670 Forward-Port-Of: odoo/odoo#255188
This update fixes an issue where foreign partners were incorrectly identified as being from Argentina due to a technical detail in how identification codes were processed. The change now accurately determines if a partner is in Argentina, ensuring correct business logic and reporting for Argentinean users. This improves data accuracy and reliability.
Original PR description
In `_compute_is_company`, partners were identified as Argentinean (`l10n_ar_partners`) if their identification type had an AFIP code. However, some foreign identification types also carry an AFIP code (e.g., US 'it_fid' uses AFIP code '91'). This caused foreign partners to be incorrectly identified as Argentinean, which led to incorrect `is_company` computation for those records. This change ensures that only partners actually located in Argentina are processed using the local identification heuristic. runbot-241126 Forward-Port-Of: odoo/odoo#252945
Previously, emails weren't automatically sent when a task was created using a task template. This update ensures that emails are consistently sent, mirroring the behavior when a task is copied. This improves notification reliability for users.
Original PR description
Steps to reproduce: - Open form view project that has task templates. - Add a partner to follow project when task is created. - From `New` button click on any available task templates . Issue: - Mail is not sent when task is created from template. Fix: - Now we are treating creating task from template same as we do copy. Solution: - Make sure we send a mail and stop the normal logging which happens when copying the task. Forward-Port-Of: odoo/odoo#255170 Forward-Port-Of: odoo/odoo#250306
This update fixes an issue where mass email sorting failed due to inconsistent date information in messages. The fix adds a default date of midnight to emails lacking a date or create_date, ensuring reliable sorting and preventing errors during email processing. This improves the reliability of sending emails to applicants.
Original PR description
Background: In odoo.com, due to some migration scripts, there are messages without neither a date nor create_date Issue: When sending mass emails to applicants, when determining the parent email, emails are sorted using their date, but since some emails have a date and some don't, comparing them results in an exception (comparing datetime with bool). Fix: Add datetime.min as a fallback for the email's date if neither date nor create_date are set. Task-6041584 Forward-Port-Of: odoo/odoo#254372
This update resolves an issue where unnecessary data fields (like phone number) were appearing in newly created project tasks when using the contact form. The change ensures that task descriptions only include data that's actually provided, improving the clarity and organization of project information. This was caused by a recent update to how partner data is added to task descriptions.
Original PR description
# How to reproduce - Add a contact form to your website - Make it so the contact form creates a task on submit - Remove some field from the contact form, but no the email (ex: Phone) - Fill in the contact form; the email must be from one of the existing partners - Submit the form and go look at the task in the project application # The problem The fields removed from the form are still present in the task's description (ex: partner_phone: False) # Why This commit (https://github.com/odoo/odoo/commit/7d0660e034f3be1b92869c266dc2cfb0bc6b6941) changed the way the partner's data was added to the description. When adding that data, it does not check if it exists before hand and instead adds a default value if not found. opw-5920816 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252848
This update addresses a customer confusion issue where exporting XML from bills resulted in incorrect customer and supplier information. The 'Export XML' button has been removed for non-imported bills to prevent this problem and ensure accurate data processing. This change simplifies the process for users working with bills.
Original PR description
Problem --------- Currently, in the bills list view, when you select bills > Print > Export XML; not-imported bills gets their customer and supplier party inverted. This is because the XML export of those trigger the XML computation which is not designed for bills but only for invoices or self-bills. For imported bills (coming from Peppols for example), we re-use the imported XML. Since XML export of created bills is not supported anymore. The button leaves customers confused as to why their partner are inverted in the XML. Solution --------- Don't show the "Export XML" if one or more move are selected for the import and don't compute the XML for bills that are not self-bills. no-task --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255289
This update resolves a bug where the live chat channel name was incorrectly duplicated when a user (agent) was chatting with themselves. The fix ensures the visitor user is handled correctly, preventing this duplication and maintaining accurate channel naming. This improves the overall live chat experience.
Original PR description
Since PR #212150 when getting the livechat channel values, the `visitor_user` value is set to the current visitor user even when the visitor user is the same as the agent (self chat). The code is guarded in the next step and so this visitor is not added to the channel members but the already set value affects the livechat channel name. The bug becomes visible when the `displayName` computation is changed later by the PR #227240. This change ensures that the visitor user remains falsy throughout the process when the visitor and agent are the same. task-6015652 Forward-Port-Of: odoo/odoo#255281 Forward-Port-Of: odoo/odoo#255093
This update corrects an issue where product names in the website's table of contents were overflowing when many products were listed. The fix changes the HTML tag used for product titles within the snippet template to ensure it aligns with the table of contents plugin's scanning criteria. This prevents the table of contents from becoming excessively wide and improves the user experience.
Original PR description
# How to reproduce - Have atleast one product published on the website. The more products published, the more noticable the issue is - Edit the website - Add a table block to a page (Search for table…
# How to reproduce
- Have atleast one product published on the website. The more products published, the more noticable the issue is
- Edit the website
- Add a table block to a page (Search for table in the "Insert block" popup and pick the first one)
- Add a catalog block to the table. This catalog block needs to be the one with the title "Our latest content".
- Add any other block in the table block to update the table of content
# The problem
The table of contents display the names of the different products. If there are a lot of products, it fills the whole table of content
# Why
The TableOfContentPlugin scans for ```<h2>``` tags to use them in the table of content.
```js
updateTableOfContentNavbar(tableOfContentMain) {
const tableOfContent = tableOfContentMain.closest(".s_table_of_content");
const tableOfContentNavbar = tableOfContent.querySelector(".s_table_of_content_navbar");
const currentNavbarItems = [...tableOfContentNavbar.children].map((el) => ({
title: el.textContent,
href: el.getAttribute("href"),
}));
if (tableOfContentMain.children.length === 0) {
// Remove the table of content if empty content.
this.dependencies.remove.removeElement(tableOfContent);
return;
}
const targetedElements = "h1, h2";
const currentHeadingItems = [...tableOfContentMain.querySelectorAll(targetedElements)]
.filter((el) => !el.closest(".o_snippet_desktop_invisible"))
.map((el) => ({ title: el.textContent, id: `#${el.id}`, el }));
```
The product snippet template uses ```<h2>``` for their product title dispite having the h6 CSS class.
Note that the reason you need to add another block to the table to see the issue is that the table of content is updated before the products are loaded in the catalog.
opw-5992937
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#253002This update resolves an issue where users without live chat access were encountering an error when trying to open the live chat invite panel. The fix ensures that active live chat partners are correctly retrieved for invited users, improving the usability of the live chat feature. This prevents frustration and ensures a smoother experience for all users.
Original PR description
When opening the livechat invite panel, users without livechat access rights encounter an access error. This commit fixes the issue by ensuring active live chat partners can be retrieved for invited users. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255207 Forward-Port-Of: odoo/odoo#254565
A bug in the composer was causing a technical error when users selected mentions (@). This was due to an outdated reference to an old attribute name. This update corrects the code to properly handle mentions, ensuring the composer functions smoothly for all users.
Original PR description
Problem: Opening the composer, typing "@" and selecting any item causes a traceback. Cause: After 8c99b17fcc3a612fd897da9ee29e2f53254d5933, the attribute `channel` was renamed to `thread`. Some code still referenced the old `channel` attribute, leading to errors when selecting mentions. Steps to reproduce: - Open the composer. - Type "@" to trigger mentions. - Select any item from the suggestions. - Observe a traceback. opw-6030307 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254127
This update resolves an issue preventing the hover effect for Bento product designs within the website editor. The previous version had an incorrect variable reference, which was corrected in this commit. This ensures that users can now properly view and hide product descriptions when hovering over Bento designs.
Original PR description
During the introduction of the Bento product design in commit [1], a specific hover effect to show and hide the description was implemented. However, due to an incorrect reference to the 'catalog' variable, this feature was not available in the editor. This commit updates the variable to the correct one, enabling the feature in the editor. [1]: https://github.com/odoo/odoo/commit/1739b954fa34bc62223d892f2cdacbccebd5f8a2 task-6051497 | Current | This branch | |--------|--------| | <img width="1792" height="836" alt="Capture d’écran 2026-03-19 à 14 29 16" src="https://github.com/user-attachments/assets/7a900d47-73b4-4c35-b51e-8ff847361f0b" /> | <img width="1785" height="901" alt="Capture d’écran 2026-03-19 à 14 16 30" src="https://github.com/user-attachments/assets/eb5312bd-04dd-4acb-a44b-fc500b89ddda" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254886
This update resolves an error that occurred when returning inventory with a zero quantity on the original move. The fix ensures that returns with no quantity are properly valued at zero, preventing calculation errors in inventory valuations. This improves the accuracy of financial reporting.
Original PR description
An error is raised when we try to acces the inventory valuation if a move has been returned and the quantity set on the original move is changed to 0 Steps to reproduce: 1. Install Accounting and…
An error is raised when we try to acces the inventory valuation if a move has been returned and the quantity set on the original move is changed to 0 Steps to reproduce: 1. Install Accounting and Inventory 2. Create a product called "Product" and set the Category to "Goods" 3. Go to Inventory > Configuration > Categories, open category "Goods" and change the costing method to "Average Cost (AVCO)" 4. Go to Inventory > Operations > Deliveries and create a new delivery for any customer with one of product "Product" 5. Validate the delivery, click on "Return" then on "Return All" 6. Validate the return 7. Go back to the original delivery and in Actions, click on "Lock/Unlock" 8. Set the quantity to 0 and save 9. Go to Accounting > Review > Inventory valuation 10. Change the day to any day after today 11. An error is raised Issue: Trying to get the inventory valuation at another day then today will replay the history https://github.com/odoo/odoo/blob/88df50bc96448dfaff28bd37e970ffd18bf8d554/addons/stock_account/models/product.py#L444-L450 Which will call `_get_value()` on the moves related to the product https://github.com/odoo/odoo/blob/88df50bc96448dfaff28bd37e970ffd18bf8d554/addons/stock_account/models/stock_move.py#L388-L391 A ZeroDivisionError will then be raised when trying to get the value of a return move and the original move's quantity is 0 https://github.com/odoo/odoo/blob/873d4d262ed3e85362aa677b5a782d6e7fa00f09/addons/stock_account/models/stock_move.py#L457 Solution: If the original move's quantity is 0, set the value to 0 This ensures the move is valued at 0 if the move has no quantity. In other words, a move that has no quantity shouldn't be considered to have any value as there really is nothing to value. opw-5980600 Forward-Port-Of: odoo/odoo#253392
This update resolves an issue where button colors were inconsistently applied across different themes. Specifically, the contrast-adjusted colors previously used for button outlines were incorrectly applied when users manually selected colors. Now, manual color selections are used directly, ensuring a consistent and visually appealing button experience.
Original PR description
Previously, we created a contrast-adjusted color for the `btn-outline` classes to ensure readability. This was also applied to manual colors selected via Theme tab, which made some inconsistencies…
Previously, we created a contrast-adjusted color for the `btn-outline` classes to ensure readability. This was also applied to manual colors selected via Theme tab, which made some inconsistencies with standard `btn`. This commit fixes that by providing the contrast-adjusted color only on default palettes, and use the manual color as is when selected in the Theme tab. task-5392258 | State | Before | After | |--------|--------|--------| | Normal | <img width="261" height="122" alt="image" src="https://github.com/user-attachments/assets/482ed97f-303c-4332-a748-1130a9ee5db7" /> | <img width="261" height="124" alt="image" src="https://github.com/user-attachments/assets/5e0b14ba-677a-480e-8aad-85c13f3a5f6e" /> | | Hover | <img width="261" height="124" alt="image" src="https://github.com/user-attachments/assets/87cec4fc-521c-4b36-84d3-81460cefa68c" /> | <img width="259" height="123" alt="image" src="https://github.com/user-attachments/assets/b17c309d-2b64-4dc2-a33b-e576831647e0" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#239584
This update ensures that presence status notifications are sent only after a user's presence record is removed from the system. Previously, notifications were sent with outdated information, leading to incorrect status updates. This change guarantees accurate and reliable presence status broadcasts for users.
Original PR description
Before this commit, presence channel notifications for unlinked records were sent before the records were actually removed from the database. This caused `im_status` to be calculated using stale data, occasionally resulting in statuses other than "offline" being broadcast. This commit ensures notifications are sent only after the presences have been unlinked, guaranteeing an accurate status. Forward-Port-Of: odoo/odoo#254186 Forward-Port-Of: odoo/odoo#249314
This update fixes a bug in the website builder where unfolding a group would reset to its default state after a page reload. The change ensures that user-selected group configurations are maintained, improving the website building experience and preventing data loss.
Original PR description
When the user has unfolded a group, then click on an action that reloads the builder, the groups got folded. This commit preserves the unfolded groups, in a similar way as the target was already preserved. Steps to reproduce: - Open website builder on `/shop` - Click on a product card - Unfold the "Products page" group - Click on a reloading action (for example "Floating") - Bug: the unfolded group is folded after the reload task-5973113
This update resolves an issue where a "This question requires an answer" alert incorrectly appeared on survey questions, even when it was the first time a user saw them. With recent changes to survey flow handling, we've refined the alert logic to ensure it only displays when a question is part of the post-submit flow and was genuinely skipped by the user. This improves the survey experience for all users.
Original PR description
Purpose ======= Fix the "This question requires an answer" alert which is displayed under the question even if it's the first time the user sees it. Specification ============= Following…
Purpose ======= Fix the "This question requires an answer" alert which is displayed under the question even if it's the first time the user sees it. Specification ============= Following odoo/odoo#215237 conditional questions can now be displayed in the post-submit flow. The purpose was to give the user the chance to see and answer the conditional questions that are triggered by a mandatory question that was skipped. However the condition to display this error alert was only relying on the fact that the question was considered post-submit or not. But now that the post-submit questions also includes the conditional questions that are waiting for answer, this condition is not enough anymore. Making the condition more precise to be sure that the error is displayed only if the questions is considered post-submit AND it's already the post-submit flow or it's the pre-submit flow and the question was effectively skipped by the user. Task-6048598 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254848
This update resolves an issue preventing standard Inventory users from printing inventory count sheets. The fix adjusts access permissions to allow retrieval of system parameters needed for the report, ensuring all users can generate these reports. This improves usability for all inventory staff.
Original PR description
### Steps to reproduce: - Impersonate a user with only Inventory user access rights - Inventory > Operations > Adjustments> Physical Inventory - Select any quant in the list > Print > Count Sheet…
### Steps to reproduce: - Impersonate a user with only Inventory user access rights - Inventory > Operations > Adjustments> Physical Inventory - Select any quant in the list > Print > Count Sheet #### > Access Error: You are not allowed to access 'System Parameter' (ir.config_parameter) records. ### Cause of the issue: The template of the count sheet relies on the `get_param` methods of the `ir.config_parameter` model which requires read access rights on the model: https://github.com/odoo/odoo/blob/69ec92cd6fd1b5f19c3db8763c12f003c9acf0dd/addons/stock/report/report_stockinventory.xml#L36-L39 https://github.com/odoo/odoo/blob/69ec92cd6fd1b5f19c3db8763c12f003c9acf0dd/odoo/addons/base/models/ir_config_parameter.py#L59-L69 This access right is limited to the the `base.group_system` (admin) user group: https://github.com/odoo/odoo/blob/69ec92cd6fd1b5f19c3db8763c12f003c9acf0dd/odoo/addons/base/security/ir.model.access.csv#L118 opw-5959200 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254294 Forward-Port-Of: odoo/odoo#253251
This update resolves an issue where creating a project from a template without a linked company would trigger a 'company inconsistencies' error. The fix ensures the customer's company information is correctly applied during project creation, allowing users to seamlessly create projects connected to customers with existing company records. This improves usability and prevents data errors.
Original PR description
### Issue: Creating a project from a template that has no company with a customer who has one results in a "company inconsistencies" error. ### Steps to reproduce: - Install `hr_timesheet` and `project` - Convert a project with no companies and the option "Timesheets" ticked, to a template - Create a new project using the template - In the wizard, input a name and select a customer with a company - Click "Create Project" - An error pops up ### Cause: `hr_timesheet` overrides the `create()` of `project.project` to create an `account.analytic.account` if the project allows timesheet and none is given. During the creation of the analytic account, as the field `partner_id` is `check_company=True`, the error is raised in `_check_company()`. ### Solution: We set the company of the customer on the generated project before building the `analytic_accounts_vals` list. opw-5931994 Forward-Port-Of: odoo/odoo#250150
A bug in Odoo's testing framework was causing it to freeze due to an infinite loop. This has been resolved by switching from an array to a set data structure, which prevents duplicate processing and ensures the testing process completes without errors. This improves the stability of the Odoo system.
Original PR description
Problem: Triggering the `child_of` operator in the testing framework caused an infinite loop that froze Odoo. This occurred because the framework attempted to fetch all children of the root operand without accounting for already visited nodes, resulting in children being added indefinitely. Solution: Switched from using an `array` to `set` to prevent duplicate traversal. Task-6023290 Forward-Port-Of: odoo/odoo#255419 Forward-Port-Of: odoo/odoo#254857