Daily updates from Odoo
Friday, July 3, 2026
189 changes
20 changes
Resolved issues and error corrections
This update ensures the website always displays the default cookie policy page when the cookies bar is enabled and the policy field is cleared. Previously, clearing the policy field without disabling the cookies bar resulted in the page disappearing, requiring a workaround. This fix maintains a consistent and compliant user experience.
Original PR description
Steps to reproduce: - enable the cookies bar in the website settings and save - clear the "Cookie Policy Page" field and save The website was left without a cookie policy page while the cookies bar was still enabled. Since the settings view only displays the field when it has a value, it disappeared with no way to set it back, other than toggling the cookies bar off and on again. The default policy page was only restored when the `cookies_bar` flag itself changed, so a write clearing only `cookie_policy_id` slipped through. Restore the default page whenever the policy is emptied while the cookies bar remains enabled, so the field reappears with the default page after saving. task-6356766
This update ensures that only complete and accurate buyer address data is sent to Fiskaly, our payment processing partner. Previously, placeholder values like 'N/A' were included, which is now corrected to only send available information, streamlining the process and improving data quality. This change avoids unnecessary data transmission and potential issues with Fiskaly.
Original PR description
In this commit: ------------------- - Buyer address fields are optional and should only be sent to Fiskaly when they are actually available. - Avoid sending placeholder values like "N/A". If the data is not present, the fields should simply be omitted from the request. task: 6113133 Forward-Port-Of: odoo/enterprise#122188 Forward-Port-Of: odoo/enterprise#113621
This update ensures the website correctly displays the cookie policy page even after it's cleared through the settings. Previously, clearing the field only worked when the cookies bar was toggled off and on, creating a confusing user experience. This fix guarantees the policy page is always visible when the cookies bar is enabled.
Original PR description
Steps to reproduce: - enable the cookies bar in the website settings and save - clear the "Cookie Policy Page" field and save The website was left without a cookie policy page while the cookies bar was still enabled. Since the settings view only displays the field when it has a value, it disappeared with no way to set it back, other than toggling the cookies bar off and on again. The default policy page was only restored when the `cookies_bar` flag itself changed, so a write clearing only `cookie_policy_id` slipped through. Restore the default page whenever the policy is emptied while the cookies bar remains enabled, so the field reappears with the default page after saving. task-6356766
This update resolves an issue where the Odoo logging system was not correctly configured in version 19.4. Specifically, a necessary argument was missing from a key function, ensuring accurate logging data capture. This ensures consistent and reliable logging performance.
Original PR description
During the forwardport, it was missed that get_log_metadata needs an argument starting from 19.0. Forward-Port-Of: odoo/odoo#273694
This update fixes an issue where customer addresses were excessively long in form view titles and breadcrumbs, making them difficult to read. The change ensures only the customer's name is displayed, aligning with how other fields are formatted, resulting in a cleaner and more user-friendly navigation experience.
Original PR description
- Create a new Invoice; - Assign a Customer with a multiline address; - Click on the internal link (arrow icon) of the Customer field. Before this commit, the form view title and the breadcrumb would contain not only the customer's name but also their full address. This resulted in an excessively large and unreadable breadcrumb. Now, only the name is retained. This commit applies the same behavior already used in many2one fields: the display name is split by line breaks, and only the first line is kept for the title and breadcrumb. task-id 6329662 Forward-Port-Of: odoo/odoo#272550 Forward-Port-Of: odoo/odoo#272059
This update resolves an issue where self-ordering table references were being lost when a self-order was created from a QR code. The fix ensures that the original table link is maintained, allowing users to seamlessly validate and pay their orders, even when the table is initially empty. This improves the reliability of the self-ordering mobile experience.
Original PR description
Steps to reproduce: --------------- - Enable QR Menu & Ordering in POS - Enable Service at Table - Create a self-order from a table QR - Validate/pay the order from the POS Cause: ----------- The write override unconditionally `table_id` to `self_ordering_table_id`, even when `table_id` was falsy, clearing the original self-order table link. Fix: ---------- Only update `self_ordering_table_id` when `table_id` is explicitly set and truthy. Task-6272642 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268459
This update fixes a minor issue with the website event quiz where users weren't receiving a clear confirmation message after completing a quiz. The change ensures a positive and informative message is displayed, enhancing the user experience. This improves the overall impression of the event tracking feature.
Original PR description
opw-6332274 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272593 Forward-Port-Of: odoo/odoo#272371
This update corrects a warning message within the Odoo Enterprise system related to data constraints. The change ensures the system functions correctly without impacting user workflows. It involved adjusting the trigger for a key constraint to focus on warehouse assignments, aligning with how the system is designed.
Original PR description
The `@api.constrains` decorator was listening to `company_id`, which is a readonly related field. This triggers an ORM warning ("parameter 'company_id' is not writeable").
Swapped the constraint trigger from `company_id` to `warehouse_id`. Since the company is fully dependent on the warehouse, this safely achieves the exact same trigger logic.
build: [940408](https://runbot.odoo.com/odoo/runbot.build.error/940408)This update ensures users can only define default values for fields they are authorized to access within Odoo. Previously, this wasn't properly enforced, leading to potential inconsistencies in data. This change improves data accuracy and reliability by aligning default values with user permissions.
Original PR description
Users should be able to set default values only for fields they have access to. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273619 Forward-Port-Of: odoo/odoo#273089
This update fixes a visual issue in the translate dialog, ensuring consistent styling across both debug and non-debug modes. Specifically, the background color and selection behavior have been adjusted for a cleaner and more reliable translation experience. The fix also addresses a bug where the last translator's translation was automatically selected in debug mode.
Original PR description
Before the commit: the translated text is with green background color. In debug mode, the translation generated by the last translator is selected by default. After this commit: In non-debug mode, the translated text is now wrapped in a div and with a similar style as the previous versions. In debug mode, when there are multiple translators, the translated text is no longer automatically selected. When there's no translation selected, the confirm button is disabled. The translated texts are now wrapped inside gray/dark gary background color. task-6250193 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#267934
This update fixes a display issue in the Intrastat report where bill names were being cut off before hyphens. The fix adjusts a regular expression to allow hyphens in bill names, ensuring complete and accurate reporting of Intrastat transactions. This improves the clarity and usability of the report for accounting and reporting teams.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
This update fixes a labeling issue with the French e-invoicing module. The disconnect button previously referenced 'peppol,' which was confusing for users. It has now been renamed to 'Disconnect French electronic invoicing' for clarity and accuracy.
Original PR description
The name of the disconnect button for the France e-invoicing was incorrect as it referenced peppol and was fixed in this pr to be called Disconnect French electronic invoicing task-6266337 Forward-Port-Of: odoo/odoo#273092 Forward-Port-Of: odoo/odoo#268536
This update fixes an issue where project settings within the Timesheet systray were not saved when closing the window. The previous code prevented data loss by temporarily disabling saving during systray closure, but this is no longer needed. This change ensures that project selections made within the Timesheet systray are reliably saved.
Original PR description
## Issue When using the Timesheets systray, if we set a project after clicking the *Save* or *Reset* button, the project is not saved after closing the systray. ## Steps to reproduce 1. Install…
## Issue When using the Timesheets systray, if we set a project after clicking the *Save* or *Reset* button, the project is not saved after closing the systray. ## Steps to reproduce 1. Install *Timesheets* (`timesheet_grid`) 2. Open the Timesheets systray 3. Click *Reset* and set a description, a project and/or a task, then close the systray 4. Open the systray again 5. **The description/project/task set in step 3 do(es) not appear anymore.** ## Cause Commit https://github.com/odoo/enterprise/commit/b9b7f8a0acf7a1c545c6613cf8bbc29871632e26 introduced the `preventUnmountSave` attribute. The attribute is set to `true` after saving and discarding an entry. When the systray is unMounted, the manual values (e.g., description, project and task) are not saved if the attribute is set to `true`: https://github.com/odoo/enterprise/blob/7cd8dd008eb88d6c12f3e65fb8d311058290a301/timesheet_grid/static/src/components/timesheet_timer_inline_form/timesheet_timer_inline_form.js#L171-L174 ## Fix After discussing with the author of the previous commit, it appears this was done to prevent an issue with values stored in cache, but that issue does not seem to occur anymore, which leads to believe that the attribute is not required anymore. opw-6284016 Forward-Port-Of: odoo/enterprise#122332 Forward-Port-Of: odoo/enterprise#121605
This update cleans up error logging within the IoT drivers, specifically for devices connected to the FDM (Financial Data Management) system. By removing unnecessary stack traces and using a more targeted error catch, the system's logs are now cleaner and more focused on relevant issues. This improves overall system stability and reduces noise in the logs.
Original PR description
We remove the stack trace from the exception reading FDM response to avoid polluting the logs when probing non FDM ports. We also now catch a more precise `IndexError` instead of `Exception` as it wasn't necessary to catch this wide. We also caught the opportunity to ruff the file. Forward-Port-Of: odoo/odoo#272078
This update resolves a test failure related to how methods were being overridden in the Point of Sale and Loyalty modules. By using a specific testing technique, the system now cleans up after itself, preventing errors and ensuring the stability of the core Odoo code. This improves test reliability and overall system health.
Original PR description
Avoid polluting the Odoo model registry and failing `test_lint_override_signature` by using `patch.object` instead of manual assignment. This ensures the injected method is properly torn down after the test block, keeping the registry clean and bypassing static analysis failure as the patched method is only used for tests. runbot-939298 Forward-Port-Of: odoo/odoo#273151 Forward-Port-Of: odoo/odoo#273096
This update resolves a test failure within the Point of Sale (POS) module. The change uses a more reliable testing technique to ensure test data is properly reset after each test, preventing errors in static analysis. This ensures the POS functionality continues to operate correctly.
Original PR description
Avoid polluting the Odoo model registry and failing `test_lint_override_signature` by using `patch.object` instead of manual assignment. This ensures the injected method is properly torn down after the test block, keeping the registry clean and bypassing static analysis failure as the patched method is only used for tests. runbot-939298 Forward-Port-Of: odoo/enterprise#122331 Forward-Port-Of: odoo/enterprise#122283
This update corrects a technical issue preventing multiple pension fund taxes from being applied to a single invoice line in Italy. The fix aligns with Italian electronic invoicing regulations that permit more than one tax on a line. This ensures accurate tax calculations and compliance for IT companies using the Odoo system.
Original PR description
### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi_withholding 2. Switch to IT company 3. Create 2 taxes with a Pension fund type set (in Advanced Options) 4. Create an invoice…
### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi_withholding 2. Switch to IT company 3. Create 2 taxes with a Pension fund type set (in Advanced Options) 4. Create an invoice and set on the same line the 2 taxes created 5. Click on send and print and see the error: Invoices must have at most one Pension Fund tax set per line. (even if it's not true) ### Cause of the issue: The following function check how many taxes we have per line but this limit is incorrect because it is accepted by the Italian electronic invoicing specifications to have also more than 1 tax. https://github.com/odoo/odoo/blob/bd095fe286930acc54d85bdf7f92af15569f5b82/addons/l10n_it_edi/models/account_move.py#L1268-L1273 ### Reference documentation: 1. [Art. 10 della Legge n. 183_2011, successivamente integrato dal D.L. n. 1_2012 (art. 9-bis)..pdf](https://github.com/user-attachments/files/29056003/Art.10.della.Legge.n.183_2011.successivamente.integrato.dal.D.L.n.1_2012.art.9-bis.pdf) 2. Following image: <img width="823" height="580" alt="estrattoEppi" src="https://github.com/user-attachments/assets/e79be16f-651e-467a-84f4-8400185ceea4" /> opw-6264685 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273040 Forward-Port-Of: odoo/odoo#269456
This update resolves an issue where payroll rules weren't being updated correctly in the AE (UAE) version of Odoo. The change adds necessary data structures to ensure that all relevant payroll rule files are properly refreshed, maintaining accurate financial reporting and compliance.
Original PR description
. Add hr_rule_parameter_data & hr_salary_rule_data to _get_data_files_to_update() task-6347544 Forward-Port-Of: odoo/enterprise#122304
This update removes the ability to quickly create new journals from the POS payment method form. The accounting team requested this change to ensure journals are created only within the dedicated accounting application, improving data integrity and process control. This change applies locally and enhances the overall accounting workflow.
Original PR description
Currently on the pos payment method form, if you click "Select more" on the journal field, you will see two buttons 'New' & 'Create New'. Steps to reproduce: ------------------- * Open any pos…
Currently on the pos payment method form, if you click "Select more" on the journal field, you will see two buttons 'New' & 'Create New'. Steps to reproduce: ------------------- * Open any pos payment method * Select the journal field * Select "Search more" > See two creation buttons Why the fix: ------------ One button is the standard "On search more" button which can be hidden using options such as no_create, no_create_edit, ... The second button is defined on the list view for journals and since the search more uses the list view it shows the button as well. Currently we can do that with a context key to ensure that on the "real" list view it's still visible. Why do we want to hide those buttons? Asked the R&D accounting team, it should not be allowed to create journals on the fly. You should only be able to create them inside accounting app. This behavior is not limited to this view but will only be applied locally. The fix can however be applied everywhere where needed. Before the fix: ------------------- <img width="700" height="417" alt="image" src="https://github.com/user-attachments/assets/ca11ea13-c38e-40a1-9848-cbc5edc6226e" /> <img width="1507" height="887" alt="image" src="https://github.com/user-attachments/assets/1cde5d3b-3372-4aca-b5d0-2319bd82c1de" /> After the fix: ---------------- <img width="707" height="474" alt="image" src="https://github.com/user-attachments/assets/01dc7b42-43d6-4b18-a12d-54330d51b92b" /> <img width="1457" height="870" alt="image" src="https://github.com/user-attachments/assets/ff387d3f-f59c-47ad-abfe-a2003669db1a" /> opw-6131231 Forward-Port-Of: odoo/enterprise#120379
This update resolves a technical error in the payroll calculation process for Belgium. Specifically, when a required salary scale wasn't found, the system was failing. This fix ensures accurate wage calculations and prevents potential disruptions to payroll processing.
Original PR description
When computing _get_student_min_wage and the specific salary scale is not found, it returns None and then fails in the tuple compression as None is not an interable. task-6318004 Forward-Port-Of: odoo/enterprise#121392
27 changes
New functionality added to Odoo
This update adds missing translations for various messages within the Point of Sale (POS) modules. This ensures that the POS system is accessible and understandable for users in different languages, improving the overall user experience and supporting global operations. The changes include translations for dialogs, errors, and UI messages across multiple POS-related applications.
Original PR description
pos* = All POS module In this commit: -------------------------------- Add missing translations for user-visible strings across POS modules. - Translated dialogs, errors, alerts, and other UI-visible messages - Updated Python-side UserError, ValidationError, and warning messages Task-5406947 Related PR-https://github.com/odoo/enterprise/pull/102094 Forward-Port-Of: odoo/odoo#273265 Forward-Port-Of: odoo/odoo#239972
This update adds missing translations for various user-visible messages within the Odoo POS modules. This ensures that the POS system is correctly localized for users in different languages, improving the overall user experience and supporting international expansion. It addresses inconsistencies in translated text across multiple POS applications.
Original PR description
pos* = All POS module In this commit: -------------------------------- Add missing translations for user-visible strings across POS modules. - Translated dialogs, errors, alerts, and other UI-visible messages - Updated Python-side UserError, ValidationError, and warning messages Task-5406947 Related PR-https://github.com/odoo/odoo/pull/239972 Forward-Port-Of: odoo/enterprise#122403 Forward-Port-Of: odoo/enterprise#102094
Enhancements to existing features
This update streamlines logging within the IoT drivers by removing unnecessary stack traces, reducing log clutter when checking ports other than FDM. The change also refines error handling for improved efficiency and stability. This improves the overall reliability of the IoT integration.
Original PR description
We remove the stack trace from the exception reading FDM response to avoid polluting the logs when probing non FDM ports. We also now catch a more precise `IndexError` instead of `Exception` as it wasn't necessary to catch this wide. We also caught the opportunity to ruff the file. Forward-Port-Of: odoo/odoo#272078
This update ensures that the font used for general customer notes in the Point of Sale system now matches the font used for line customer notes. This improves the visual consistency and overall presentation of customer information within the POS interface.
Original PR description
We updated the general customer note font to match the line customer note's one. task-6294200 Forward-Port-Of: odoo/odoo#270060
Resolved issues and error corrections
This update resolves an error that occurred when previewing canceled subscription orders. The fix ensures that canceled orders use the standard sale order preview instead of attempting to render the subscription-specific portal view, preventing a technical error. This improves the user experience for canceled subscriptions.
Original PR description
Currently, an error occurs when a user previews a canceled subscription order. **Steps to Reproduce:** - Install `sale_subscription` module. - Go to `Subscriptions` and create a `subscription order`…
Currently, an error occurs when a user previews a canceled subscription order.
**Steps to Reproduce:**
- Install `sale_subscription` module.
- Go to `Subscriptions` and create a `subscription order` with:
- a `subscription product`,
- a `recurring plan`,
- an `Until` (end date) value.
- `Cancel` the subscription order.
- Click `Preview`.
`TypeError: unsupported operand type(s) for +: 'bool' and 'relativedelta'`
When previewing a subscription order, the portal view is rendered. During rendering, the
subscription portal template is used, which computes tax values and requires calculating the
next invoice date based on the recurring plan's billing period. However, for canceled
subscription orders, next_invoice_date is False because it is only set when the order is in
the sale state. As a result, an error is raised [2].
This commit ensures that only subscription orders in the sale state use the subscription
portal template. Canceled subscription orders use the default sale order preview, similar
to orders in the draft and sent states. This is appropriate because canceled subscriptions
are not correctly displayed in the subscription portal, and they should not attempt to
render the subscription-specific portal view.
[1]- https://github.com/odoo/enterprise/blob/f833154b61fdb73c24d99462815a55313212b909/sale_subscription/controllers/portal.py#L686-L687
[2]- https://github.com/odoo/enterprise/blob/f833154b61fdb73c24d99462815a55313212b909/sale_subscription/models/sale_order.py#L2172-L2175
sentry-7579114635This update corrects a bug in the self-ordering POS feature. Previously, when a self-order was created, the link to the original table QR code was lost, causing issues with order validation and payment. The fix ensures that the table reference is maintained correctly, allowing users to seamlessly validate and pay their self-ordered items.
Original PR description
Steps to reproduce: --------------- - Enable QR Menu & Ordering in POS - Enable Service at Table - Create a self-order from a table QR - Validate/pay the order from the POS Cause: ----------- The write override unconditionally `table_id` to `self_ordering_table_id`, even when `table_id` was falsy, clearing the original self-order table link. Fix: ---------- Only update `self_ordering_table_id` when `table_id` is explicitly set and truthy. Task-6272642 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268459
This update fixes an issue where customer form view titles and breadcrumbs displayed excessively long addresses. Now, only the customer's name is shown, creating a cleaner and more readable navigation experience. This change aligns with existing behavior in other Odoo fields.
Original PR description
- Create a new Invoice; - Assign a Customer with a multiline address; - Click on the internal link (arrow icon) of the Customer field. Before this commit, the form view title and the breadcrumb would contain not only the customer's name but also their full address. This resulted in an excessively large and unreadable breadcrumb. Now, only the name is retained. This commit applies the same behavior already used in many2one fields: the display name is split by line breaks, and only the first line is kept for the title and breadcrumb. task-id 6329662 Forward-Port-Of: odoo/odoo#272550 Forward-Port-Of: odoo/odoo#272059
This update resolves an issue where the webhook URL field in the Odoo form view would overflow, preventing users from clicking the renew button. The fix ensures the URL is properly truncated, maintaining the button's accessibility and functionality. This improves the user experience for renewing subscriptions.
Original PR description
Before this commit, the webhook URL field could overflow in the form view, causing the adjacent renew button to become partially or fully unclickable. This commit fixes the issue by allowing the copy clipboard URL field container to shrink properly within layout, so the URL is truncated as intended and the renew button remains accessible. task:6317827 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a minor issue with the website event quiz where users weren't receiving a clear success message after completing a quiz. The change ensures a positive and informative message is displayed, enhancing the user experience. This improves the overall usability of the event tracking feature.
Original PR description
opw-6332274 Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272593 Forward-Port-Of: odoo/odoo#272371
This update resolves an issue where the preview of webhook sample payloads would fail when certain fields returned complex data structures (specifically `frozendict` objects). The fix ensures that the payload is correctly formatted for JSON serialization, preventing the preview from crashing and allowing users to properly configure webhook notifications.
Original PR description
**Steps to Reproduce:** - Create a Server Action of type 'Webhook Notification'. - Select a model containing a field that returns a `frozendict`-based structure (e.g. `account.move` →…
**Steps to Reproduce:** - Create a Server Action of type 'Webhook Notification'. - Select a model containing a field that returns a `frozendict`-based structure (e.g. `account.move` → `needed_terms`). - Add the field to the webhook fields. - Open the webhook sample payload preview. **Issue:** - During sample payload generation: - The selected fields are read from a sample record. - A selected field returns a structure containing `frozendict` objects. - The payload is serialized using `json.dumps()`. - JSON serialization fails with: ```text TypeError: keys must be str, int, float, bool or None, not frozendict ``` - The webhook sample payload computation crashes and the preview cannot be displayed. **Root Cause:** - The webhook sample payload may contain `frozendict` objects returned by selected fields. - The serializer used for payload generation does not handle such mapping-like objects, causing `json.dumps()` to fail. **Solution:** - Use a serializer that converts mapping-like objects into JSON-compatible structures before serializing the webhook sample payload. **OPW-6295777** Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#272324 Forward-Port-Of: odoo/odoo#271864
This update allows users to define default values for specific fields within Odoo, but only for fields they are authorized to access. This ensures data consistency and simplifies workflows by allowing users to pre-populate fields with their appropriate settings. It addresses a previous limitation where default values were not always correctly applied based on user permissions.
Original PR description
Users should be able to set default values only for fields they have access to. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273619 Forward-Port-Of: odoo/odoo#273089
This update fixes an issue where incoterm information was missing from purchase quotation reports. After a recent code update, the report now correctly displays the incoterm, providing clearer visibility for sales and procurement teams. This ensures accurate reporting and better decision-making regarding international shipments.
Original PR description
After a refactor the incoterm and location didn't show on the purchase quotation Task-id: 6206523 Forward-Port-Of: odoo/odoo#270991
This update resolves a sporadic issue where the 'Turn camera on' button wasn't appearing correctly during video calls. The fix ensures the meeting view is fully initialized before the user navigates away, preventing delays in the call setup process. This improves the reliability of the camera functionality within meetings.
Original PR description
The test starts a meeting, then switches to another channel to join its call, expecting the camera button to read "Turn camera on". Starting a meeting runs startMeeting(), which fires enterFullscreen() as a fire-and-forget tail once the meeting call is joined. The test only waited for the meeting's "Stop camera" button (set mid-join, before that tail) before navigating, so enterFullscreen could still be pending during the channel switch. When it ran late it pointed the fullscreen channel at the newly joined channel and turned isFullscreen on. That channel's in-call view is gated on showCallView (!isFullscreen), so it was torn down and the "Turn camera on" button never rendered within the 3s timeout. Wait for the meeting view to be fully active before navigating away, so the whole startMeeting chain (enterFullscreen included) has settled first. https://runbot.odoo.com/odoo/error/939805 Forward-Port-Of: odoo/odoo#273650
This update resolves a technical issue that could cause server errors when handling WebSockets. The fix focuses on how the system manages database connections, ensuring resources are properly cleaned up even in error situations. This improves the overall reliability and stability of the Odoo SaaS platform.
Original PR description
Currently, when a `PoolError` from `psycopg2.pool` is raised (code ref [1]) during the execution of `retrying()` inside `acquire_cursor()`, Python's contextlib generates the following server error: ``` RuntimeError: generator didn't stop after throw() ``` This occurs because the exception is suppressed within the generator-based context manager, causing the generator to continue execution after throw(). This commit fixes the issue by limiting the `suppression/retry` logic to the cursor acquisition step. It also uses `ExitStack()` to ensure proper management of the exit callback stack across the `yield`, guaranteeing that resources are cleaned up correctly even if an exception is raised after the cursor is yielded. [1]: https://github.com/odoo/odoo/blob/1956c5e3e14086f699e4582a7332577bc2fbf557/odoo/sql_db.py#L648 Sentry-7567409750,7401155298
This update corrects a bug where users would continue to be suggested as recipients after unfollowing a record. The fix ensures that the user is completely removed from the suggested recipient list, preventing them from being re-added unless they re-follow the record. This improves the user experience by streamlining the follow/unfollow process.
Original PR description
### Steps to reproduce: - Open any mail thread in chatter - Click the "Send To" button once - Click "Unfollow" - You will be a suggested recipient ### Cause of Issue: The suggested recipient generation did not filter out the current user. When the user unfollows, `_message_get_suggested_recipients` is called when storing the thread, and since the user is no longer on the followers list, they get added back as a suggested recipient. https://github.com/odoo/odoo/blob/b4c7247ff218fb850fd91af3e2baa726a82d439c/addons/mail/models/models.py#L467-L468 ### Fix: Since followers are excluded from suggested recipient candidates in the mail thread, and the current user should be excluded when they unfollow, the current user is excluded altogether. This means the current user will not be suggested as a recipient again unless they re-follow the record. opw-6122351 Forward-Port-Of: odoo/odoo#269611
This update fixes an issue where the bill name in the Intrastat report was being cut off, preventing full visibility. The fix adjusts a regular expression to allow hyphens in bill names, ensuring all information is displayed correctly. This improves the accuracy of Intrastat reporting.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
This update corrects a labeling issue with the French e-invoicing disconnect button. The button was previously confusingly referencing PEPPOL and has now been renamed to 'Disconnect French electronic invoicing' for clarity. This ensures users can easily manage their e-invoicing connections.
Original PR description
The name of the disconnect button for the France e-invoicing was incorrect as it referenced peppol and was fixed in this pr to be called Disconnect French electronic invoicing task-6266337 Forward-Port-Of: odoo/odoo#273092 Forward-Port-Of: odoo/odoo#268536
This update corrects a technical issue preventing users from applying multiple pension fund taxes to a single invoice line in the Italian accounting module. The fix addresses an incorrect limit within the system, aligning with Italian electronic invoicing regulations. This ensures accurate tax calculations and compliance for IT companies using the l10n_it_edi add-on.
Original PR description
### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi_withholding 2. Switch to IT company 3. Create 2 taxes with a Pension fund type set (in Advanced Options) 4. Create an invoice…
### Steps to reproduce the issue: 1. Download Accounting and l10n_it_edi_withholding 2. Switch to IT company 3. Create 2 taxes with a Pension fund type set (in Advanced Options) 4. Create an invoice and set on the same line the 2 taxes created 5. Click on send and print and see the error: Invoices must have at most one Pension Fund tax set per line. (even if it's not true) ### Cause of the issue: The following function check how many taxes we have per line but this limit is incorrect because it is accepted by the Italian electronic invoicing specifications to have also more than 1 tax. https://github.com/odoo/odoo/blob/bd095fe286930acc54d85bdf7f92af15569f5b82/addons/l10n_it_edi/models/account_move.py#L1268-L1273 ### Reference documentation: 1. [Art. 10 della Legge n. 183_2011, successivamente integrato dal D.L. n. 1_2012 (art. 9-bis)..pdf](https://github.com/user-attachments/files/29056003/Art.10.della.Legge.n.183_2011.successivamente.integrato.dal.D.L.n.1_2012.art.9-bis.pdf) 2. Following image: <img width="823" height="580" alt="estrattoEppi" src="https://github.com/user-attachments/assets/e79be16f-651e-467a-84f4-8400185ceea4" /> opw-6264685 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273040 Forward-Port-Of: odoo/odoo#269456
This update corrects a technical issue that prevented proper logging functionality in the SaaS version of Odoo, specifically impacting versions 19.0 and later. The fix ensures that logging records are correctly generated, maintaining data integrity and operational stability.
Original PR description
During the forwardport, it was missed that get_log_metadata needs an argument starting from 19.0. Forward-Port-Of: odoo/odoo#273694
This update removes the ability to quickly create new journals from the POS payment method form. The accounting team requested this change to ensure users only create journals within the dedicated accounting application, improving data integrity and workflow. This fix applies locally and can be implemented across relevant areas.
Original PR description
Currently on the pos payment method form, if you click "Select more" on the journal field, you will see two buttons 'New' & 'Create New'. Steps to reproduce: ------------------- * Open any pos…
Currently on the pos payment method form, if you click "Select more" on the journal field, you will see two buttons 'New' & 'Create New'. Steps to reproduce: ------------------- * Open any pos payment method * Select the journal field * Select "Search more" > See two creation buttons Why the fix: ------------ One button is the standard "On search more" button which can be hidden using options such as no_create, no_create_edit, ... The second button is defined on the list view for journals and since the search more uses the list view it shows the button as well. Currently we can do that with a context key to ensure that on the "real" list view it's still visible. Why do we want to hide those buttons? Asked the R&D accounting team, it should not be allowed to create journals on the fly. You should only be able to create them inside accounting app. This behavior is not limited to this view but will only be applied locally. The fix can however be applied everywhere where needed. Before the fix: ------------------- <img width="700" height="417" alt="image" src="https://github.com/user-attachments/assets/ca11ea13-c38e-40a1-9848-cbc5edc6226e" /> <img width="1507" height="887" alt="image" src="https://github.com/user-attachments/assets/1cde5d3b-3372-4aca-b5d0-2319bd82c1de" /> After the fix: ---------------- <img width="707" height="474" alt="image" src="https://github.com/user-attachments/assets/01dc7b42-43d6-4b18-a12d-54330d51b92b" /> <img width="1457" height="870" alt="image" src="https://github.com/user-attachments/assets/ff387d3f-f59c-47ad-abfe-a2003669db1a" /> opw-6131231 Forward-Port-Of: odoo/enterprise#120379
This update resolves an issue where the "Ask AI" button would fail when multiple default prompts were configured for an AI agent. The fix ensures that only one prompt is selected, preventing errors and improving the reliability of the AI functionality. This change ensures a smoother user experience when interacting with the AI features.
Original PR description
## Problem When multiple Default Prompts are configured for the same AI Agent and interface key, clicking the "Ask AI" button raises a ValueError. ## Cause The `_get_composer_from_key_and_model`…
## Problem When multiple Default Prompts are configured for the same AI Agent and interface key, clicking the "Ask AI" button raises a ValueError. ## Cause The `_get_composer_from_key_and_model` method searches for composers matching an interface_key and model, but doesn't limit the results. When multiple Default Prompts exist for the same agent, the search returns multiple records, causing a singleton error when accessing `ai_agent_id`. ## Steps to Reproduce [[Video](https://drive.google.com/file/d/1yMAmX4RuevS0vH07qex2V0fMAiLrtJBg/view?usp=sharing)] 1. Go to AI > Configuration > Default Prompts 2. Create a new Default Prompt with Odoo Agent 3. Click the Ask AI button in the top-right corner 4. Error: ValueError: Expected singleton: ai.agent(2, 1) ## Fix Replace the two-step search with a single search using an `OR` domain: - Search both model-specific and generic Default Prompts in one query. - Order the results with `focused_model_id desc` so model-specific prompts are preferred over generic ones. - Return only one record using `limit=1`. This preserves the previous behavior while preventing singleton errors. --- opw-6323764
This update resolves an issue preventing the successful display of a Peppol activation notification after registering as a Peppol participant. The fix corrects a validation error caused by passing 'null' as the notification title, ensuring the notification now appears correctly.
Original PR description
**Steps to reproduce:** * Install the **account_peppol** and **l10n_be** module. * Switch to BE Company. * Create and confirm a BE customer invoice. * Open the "Send & Print" dialog. * Activate…
**Steps to reproduce:**
* Install the **account_peppol** and **l10n_be** module.
* Switch to BE Company.
* Create and confirm a BE customer invoice.
* Open the "Send & Print" dialog.
* Activate Peppol (register as a Peppol participant) in developer mode and demo mode by clicking on `Why should you use it ?` on the banner in wizard.
**Observed behavior:**
* An Uncaught Promise OwlError trace is thrown on the screen: `TypeError: Cannot use 'in' operator to search for 'toString' in null`.
* The success notification indicating that Peppol was activated fails to appear.
**Cause:**
* Upon successful registration, the `peppol.registration` wizard triggers a client action to display a success notification via `display_notification`.
* The backend Python code explicitly passed `title=None` in the notification parameters, which is serialized to `null` in the JavaScript frontend.
* In previous versions (like 19.2), the `Notification` component's `title` prop validation was defined loosely as `{ type: [String, Boolean, { toString: Function }] }`. OWL did not strictly validate this shape, allowing `null` to pass through without error.
* In 19.3, the prop validation was updated to strictly enforce the object shape: `{ type: [String, Boolean, { type: Object, shape: { toString: Function } }] }`. Because JavaScript evaluates `typeof null` as `"object"`, the OWL validation schema now attempts to verify the shape by evaluating `'toString' in null`. Using the `in` operator on `null` is illegal in JavaScript and immediately crashes the application.
**Fix:**
* Replace `title=None` with `title=False` in the `_action_send_notification` method.
* This translates to `false` in the JavaScript frontend, which seamlessly satisfies the `Boolean` prop type validation for the OWL component and allows the notification to render safely without errors.
opw-6333224This update resolves an issue where the order of attribute values on the shop page wasn't consistently maintained after rearranging them in the product settings. The fix ensures that the user-defined sequence for attribute values is respected, providing a more reliable and intuitive experience for customers browsing products.
Original PR description
In saas-19.3, the shop controller was refactored to fetch attribute values using `ProductAttributeValue._read_group()` with `aggregates=["id:recordset"]`. This aggregate internally uses `ARRAY_AGG(id ORDER BY id)`, which orders values strictly by database ID, ignoring the `sequence` field defined in `product.attribute.value._order = 'attribute_id, sequence, id'`. Steps to reproduce: 1. Go to ecommerce attributes. 2. Add an attribute value to any attribute. 3. Make sure the attribute is used by a product. 4. Rearrange the order of the attribute value. 5. Go to the shop page, and try to access the attribute value by clicking on the proper attribute. 6. We see that the order isn't maintained. Fix by calling `.sorted()` on each value recordset after the aggregate, so the user-defined sequence is respected before storing into `pavs_per_attribute`. opw-6325814
This change reduces the amount of log data generated by the IoT boxes, specifically by lowering the log level. This helps manage the volume of data sent to our monitoring system (Sentry), preventing potential subscription limits and improving overall system performance. This is a proactive step to optimize our monitoring infrastructure.
Original PR description
Each time IoT box sends its logs to the server (route `/iot/log`), we then print them with the same log level. However, IoT box logs can be quite noisy (for instance when there are some connection issues), which affects the logs. Sentry side, it also implies a huge wave of useless events that reach the limits of our subscription. The logs management have been improved on next versions. In the meantime, we should at least decrease the logger level so we can keep working on Sentry
This update fixes a minor issue where call activity notifications weren't being properly updated after a call was marked as complete. The change ensures that mail messages are correctly associated with completed calls, improving the reliability of notification delivery. This ensures users receive timely updates regarding their calls.
Original PR description
In [1], we removed `action_call_done` for call activity, and to use `action_feedback` to mark a call activity done like other activities. However, we forgot to assign `activity_mail_message_id` for later mail message update. Add this in `action_feedback`. [1]: 70ba1812812596e00509415cedcc8f4bdf6c6e37 COMPR: https://github.com/odoo/odoo/pull/267663 Forward-Port-Of: odoo/enterprise#118396
This update resolves a technical issue that caused build failures in certain testing modes. The team moved assertions to the correct location, ensuring the Odoo Enterprise system builds correctly regardless of whether all apps are running simultaneously. This improves the stability and reliability of the live chat functionality.
Original PR description
Oversight of: https://github.com/odoo/enterprise/pull/98569 Some assertions were put in the wrong module, making the builds work in "all apps" mode but fail in "single app" mode. This commit moves assertions where they belong. Task-6353709 Forward-Port-Of: odoo/enterprise#122486
This update resolves a bug that prevented barcode scanning of packages containing extra products when specific warehouse settings were enabled. The fix removes an unnecessary check in the barcode scanning process, allowing packages to be correctly identified as result packages. This ensures accurate inventory tracking during barcode operations.
Original PR description
### Steps to reproduce: - In the settings Enable: Multi-steps Routes, Packages - Put your warehouse in delivery in 2-steps - On the Pick operation type in the barcode tab disable: "Allow extra…
### Steps to reproduce: - In the settings Enable: Multi-steps Routes, Packages - Put your warehouse in delivery in 2-steps - On the Pick operation type in the barcode tab disable: "Allow extra products" - Create two storable products P1 and P2 - On P2 > On hand > Update Quantity > New - Create a new line in WH/Output with a package POOK for 1 unit - Create a new internal transfer for 1 unit of P1 using the pick operation type so that the picking goes WH/Stock -> WH/Output - Set the quantity of the move to 1 unit and go to the barcode app - Open the Pick > Scan WH-STOCK > Scan P1 > Scan POOK #### > An error is raised: This package contains extra products and extra products are not allowed on this operation. #### Expected behavior: The package should be set as result package. ### Cause of the issue: In the `_processPackage`, a check that is done to ensure that the package scan will not add extraproduct to the picking if this operation is not allowed: https://github.com/odoo/enterprise/blob/5e4c8ecb0c644e21755570ed59cd8f6e9f618c8a/stock_barcode/static/src/models/barcode_picking_model.js#L2024-L2035 Unfortunately, this check is done just before a possible usage of the package as package dest. And, in that case, since we do not try to add any product to the picking the check is irrelevant anyway. opw-6303969 Forward-Port-Of: odoo/enterprise#121789
8 changes
Resolved issues and error corrections
This update resolves an issue where the video preview stopped working after the first scan in the Brave browser. The fix automatically restarts the video playback after a pause, ensuring the barcode scanning functionality continues to work correctly.
Original PR description
Issue: ====== - In the latest Brave Browser version (1.90+), the first scan works properly, but the video preview disappears during the second scan. Fix: ==== - During the second scan, the video is unexpectedly paused. We now automatically play the video again if it is paused. task-6218047 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#265436
This update streamlines the process for adding tracked products with lots to the point of sale. Now, products using FIFO or LIFO removal strategies are automatically added to the cart without requiring users to manually select a lot. This simplifies the checkout experience and reduces potential errors.
Original PR description
Before this commit: ==== - The lot/serial selection popup was always shown when adding products tracked by lots. Following this commit: ==== - Products configured with FIFO/LIFO removal strategies are automatically assigned the corresponding lot and added directly to the cart without opening the selection popup. - If no removal strategy is configured, the existing lot selection behavior is preserved. task-6226577 Forward-Port-Of: odoo/odoo#273138 Forward-Port-Of: odoo/odoo#265708
A recent update to the SEPA XML processing for Sweden (l10n_se_bban) caused a test failure when both the account_iso20022 and l10n_se_bban modules were used. This commit resolves the test issue by temporarily skipping the failing test and adding a new test to ensure proper functionality.
Original PR description
Here https://github.com/odoo/enterprise/pull/114662 we changed the way the CdtrAgt node is used in the SEPA XML file for Sweden. But this change broke a test when both account_iso20022 & l10n_se_bban are installed, leading to a Non-expected child error. This commit skip the failling test if l10n_se_bban is installed, and add a new one to replace it. runbot-938366 runbot-938367 Forward-Port-Of: odoo/enterprise#122359 Forward-Port-Of: odoo/enterprise#121485
This update resolves an issue where header text on mobile was too dark against the background, making it difficult to read. The fix corrects a conversion error that prevented the correct CSS from applying to the header, ensuring optimal color contrast and readability for users. This improves the overall user experience.
Original PR description
Steps to reproduce: - Set the header position to "Over the Content" - Set the background color to the last preset (dark) - Go to mobile view => If you are at the top of the page when opening the menu, the text is too dark to be readable. When the conversion from publicWidget to interaction was done, a mistake was made when converting HeaderGeneral. `o_top_menu_collapse_shown` was not toggled on `header#top` anymore. Therefore some css was not applied, leading to issues with the color constrasts. This commit fixes this issue by fixing the selector in dynamicContent. task-6311038 Forward-Port-Of: odoo/odoo#271410 Forward-Port-Of: odoo/odoo#270560
This update corrects a bug where negative forecast quantities could cause issues in the MRP planning process. The fix ensures that any remaining negative forecast demand is correctly added to the first forecast period, resolving a data inconsistency. This improves the reliability of production planning forecasts.
Original PR description
Steps to reproduce: - Fresh DB - Add a negative number to the forecast demand in the last period Cause: A variable was used without declaration Fix: According to odoo/enterprise#56128, it was intended that any remaining negative quantity to add should be added to the first forecast. Forward-Port-Of: odoo/enterprise#122261
This update fixes an issue where customer names weren't correctly displayed in Odoo bookings created through Reserve with Google. Previously, booking details showed the customer's email address instead of their full name. Now, customer names (first and last) are accurately reflected, improving the user experience and data clarity.
Original PR description
When a customer books through Reserve with Google, the createBooking payload carries the booker given_name and family_name next to the email, but the handler passed only the normalized email to…
When a customer books through Reserve with Google, the createBooking payload carries the booker given_name and family_name next to the email, but the handler passed only the normalized email to _mail_find_partner_from_emails. The new res.partner was therefore created with its name falling back to the email, see https://github.com/odoo/odoo/blob/aa7b5921191a0ff53ef1cc32af99fe458c45c0da/addons/mail/models/res_partner.py#L177 That name then flows into the calendar.event name, the attendee common_name and the contact details, all showing the email instead of the customer name. The module has read neither field since it was added in https://github.com/odoo/enterprise/commit/2e855b910173b56e8501d0ebe9ee6f83ac5845bc. Build the booker name from given_name and family_name and pass it with the email through formataddr in google_reserve_booking_create, so a newly created partner is named after the customer. A partner matched on an existing email keeps its current name. Steps to reproduce: 1. Enable Reserve with Google on an appointment type. 2. Book a slot from Google Maps with given name John and family name Doe. 3. Open the created booking and its contact in Odoo. => the contact name is the email instead of John Doe Ticket [link](https://www.odoo.com/odoo/project/49/tasks/6232318) opw-6232318 Forward-Port-Of: odoo/enterprise#120604
This update resolves an issue where users could select customers from different companies within the Helpdesk module. The fix adds a restriction to the customer dropdown, ensuring users only see customers associated with their own company. This improves data accuracy and prevents incorrect customer assignments.
Original PR description
Steps to reproduce: - Create two companies (Company A and Company B) - Create one partner in each company - Enable both companies for the user - Open Helpdesk and go to the tickets Kanban view for a Company A team. - In the quick create form, the customer dropdown shows customers from Company B Issue: - Customers from other companies are visible in the customer field, Cause: - The partner_id field in the quick create view had no domain, so it displayed partners from all allowed companies. Solution: - Added a domain on partner_id in the ticket quick create form view. task-4971466 Forward-Port-Of: odoo/enterprise#122358 Forward-Port-Of: odoo/enterprise#121944
This update fixes a display issue where the activity counter in the Odoo interface was occasionally showing a negative value. The root cause was a mismatch between how the server and client sides tracked activities. The fix prevents the counter from going below zero, ensuring accurate activity counts for users.
Original PR description
# Setup Ensure you currently have no activity # How to reproduce - Go to any form view with a chatter (e.g. Quotation form view) - Add 2 activities with a due date of today or before > Notice there…
# Setup Ensure you currently have no activity # How to reproduce - Go to any form view with a chatter (e.g. Quotation form view) - Add 2 activities with a due date of today or before > Notice there activity counter next to the activity clock icon in the top right should be 2 - Click on the activity clock icon in the top right > Notifce the activity counter decreases to 1 - Mark as done both To-Do activites # The problem The activity counter is negative # Cause This issue is due to a desync between the activity counter client side and server side. When clicking on the activity clock icon, the front-end fetches the mail store data from the backend, which is why we see the activity counter decrease. The server computes the activity counter the following way : https://github.com/odoo/odoo/blob/86b2da224a5c543b279a188928bd47e4d59c2037/addons/mail/models/res_users.py#L457 It searches for up to 1000 activities and group them by the record they are associated to (e.g. a sale.order). Then, for each of these records, if atleast one activity is late or for today, increase the counter by 1 : https://github.com/odoo/odoo/blob/86b2da224a5c543b279a188928bd47e4d59c2037/addons/mail/models/res_users.py#L504-L509 Essentially, server side, we get a single +1 in the activity counter by record, not by activity On the other hand, client side, we simply add 1 in the activity counter every time a new activity is created. If an activity is deleted, then we remove 1 : https://github.com/odoo/odoo/blob/86b2da224a5c543b279a188928bd47e4d59c2037/addons/mail/static/src/core/web/mail_core_web_service.js#L17-L30 https://github.com/odoo/odoo/blob/86b2da224a5c543b279a188928bd47e4d59c2037/addons/mail/models/mail_activity.py#L305-L309 # Proposed solution Both the client and server side logic were edited fairly recently Server side : https://github.com/odoo/odoo/pull/234899 Client side : https://github.com/odoo/odoo/pull/215880 According to experts, the activity counter should count records, not activities, so we should fix the client side but properly doing so would introduce too much complexity. We instead simply prevent the counter from going below 0. opw-6116821 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#259602
6 changes
Resolved issues and error corrections
This update corrects a problem that prevented demo data from loading correctly in the Russian localization (l10n_in) module. The fix ensures the system properly handles company IDs, resolving an error that occurred when the data was initially received. This ensures demo data loads reliably for users.
Original PR description
Currently, an exception is raised while loading demo data because `companies` is received as an integer id instead of a company recordset. Error: `AttributeError: 'int' object has no attribute 'filtered'` This commit fix the above issue by checking whether `companies` is a `models.BaseModel` instance and, if not, converting it to a recordset using browse(). No Task ID
This update resolves an issue where self-ordering table references were being lost when a self-order was created. The fix ensures that the original table link is maintained, allowing users to correctly validate and pay orders placed via QR codes. This improves the reliability of the self-ordering mobile experience.
Original PR description
Steps to reproduce: --------------- - Enable QR Menu & Ordering in POS - Enable Service at Table - Create a self-order from a table QR - Validate/pay the order from the POS Cause: ----------- The write override unconditionally `table_id` to `self_ordering_table_id`, even when `table_id` was falsy, clearing the original self-order table link. Fix: ---------- Only update `self_ordering_table_id` when `table_id` is explicitly set and truthy. Task-6272642 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#268459
This update corrects a technical error within the l10n_fr_pdp module that was causing incorrect reporting related to French tax flows. The fix prevents a faulty SQL query from being executed when a specific date calculation fails, ensuring accurate financial data processing for French businesses using Odoo.
Original PR description
Fixes _force_update_l10n_fr_f10_moves(). It would create a SQL query that compares a date to a bool when _pdp_get_flow_10_start_date() returned None. Forward-Port-Of: odoo/odoo#273006
This update fixes an issue where customer addresses were excessively long in form view titles and breadcrumbs, making them difficult to read. The change now only displays the customer's name, aligning with how other related fields are displayed, resulting in a cleaner and more user-friendly navigation experience.
Original PR description
- Create a new Invoice; - Assign a Customer with a multiline address; - Click on the internal link (arrow icon) of the Customer field. Before this commit, the form view title and the breadcrumb would contain not only the customer's name but also their full address. This resulted in an excessively large and unreadable breadcrumb. Now, only the name is retained. This commit applies the same behavior already used in many2one fields: the display name is split by line breaks, and only the first line is kept for the title and breadcrumb. task-id 6329662 Forward-Port-Of: odoo/odoo#272550 Forward-Port-Of: odoo/odoo#272059
This update restores essential test cases related to the flow of transactions within the l10n_fr_pdp_pos module. These tests were temporarily removed during a recent integration of e-reporting and e-invoicing features. Ensuring these tests are back in place improves the reliability and stability of the POS functionality.
Original PR description
During the merge of l10n_fr_pdp e-reporting and e-invoicing, some tests had to be removed. Task-6296356 Forward-Port-Of: odoo/odoo#273329 Forward-Port-Of: odoo/odoo#271294
This update fixes an issue where the Intrastat report was truncating bill names, preventing full visibility. The change adjusts a regular expression to allow hyphens in bill names, ensuring all details are correctly displayed. This improves reporting accuracy for Intrastat data.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
2 changes
Resolved issues and error corrections
This update corrects a display issue in the Intrastat report where bill names were being cut off before hyphens. The fix adjusts a regular expression to allow hyphens in bill names, ensuring complete and accurate reporting of Intrastat transactions. This improves the clarity and usability of the Intrastat report for accounting teams.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
This update resolves an issue where the Sale Renting module wasn't properly connected to the necessary Gantt view components. Previously, it was missing a key dependency, causing problems with how Gantt charts were displayed. This fix ensures the module functions correctly with Gantt views, as it does in newer versions of Odoo.
Original PR description
Module was introduced without a dependency on the `web_gantt` module despite using `gantt` views. Already fixed in 19+ runbot error 237883 Forward-Port-Of: odoo/enterprise#122136
7 changes
Resolved issues and error corrections
This update resolves a technical problem that could have caused incorrect updates to French tax reporting data. The fix prevents a query from failing when a specific date field was empty, ensuring accurate tax calculations and reporting for French businesses using the Odoo platform. This improves the reliability of our French tax compliance features.
Original PR description
Fixes _force_update_l10n_fr_f10_moves(). It would create a SQL query that compares a date to a bool when _pdp_get_flow_10_start_date() returned None. Forward-Port-Of: odoo/odoo#273006
This update fixes an issue where URL suggestions in the Notes app overflowed on smaller mobile devices. The fix adjusts the layout of the suggestion container to ensure it adapts to different screen sizes, providing a cleaner and more usable experience for users.
Original PR description
Step to reproduce: - Open Notes - Open the link popover - Type a URL in the URL input field Description of the issue/: - On mobile devices, URL autocomplete suggestions overflow the viewport. Cause: - The autocomplete suggestions container has a max-width of 600px. - On smaller screens, the container does not shrink to fit the available width, causing it to overflow the viewport. Solution: - Add width: 100% to the autocomplete suggestions container so it adapts to the available screen width on smaller devices while still respecting the existing max-width on larger screens. task-6201175 Forward-Port-Of: odoo/odoo#269493
This update fixes an issue where customer addresses were excessively long in form view titles and breadcrumbs, making them difficult to read. The change ensures that only the customer's name is displayed, aligning with how other fields are handled, resulting in a cleaner and more user-friendly navigation experience.
Original PR description
- Create a new Invoice; - Assign a Customer with a multiline address; - Click on the internal link (arrow icon) of the Customer field. Before this commit, the form view title and the breadcrumb would contain not only the customer's name but also their full address. This resulted in an excessively large and unreadable breadcrumb. Now, only the name is retained. This commit applies the same behavior already used in many2one fields: the display name is split by line breaks, and only the first line is kept for the title and breadcrumb. task-id 6329662 Forward-Port-Of: odoo/odoo#272550 Forward-Port-Of: odoo/odoo#272059
This update fixes an issue where the Intrastat report was incorrectly cropping the bill name, preventing full visibility of key information like the hyphenated identifier. The fix adjusts a regex pattern to allow hyphens in bill names, ensuring accurate display of all bill details in the report.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
A technical issue prevented users from previewing the '2Fa New Login' template. This was caused by an assertion error triggered when the preview environment wasn't running with elevated privileges. The fix replaces the assertion with a conditional check that returns placeholder data, allowing the preview to function correctly.
Original PR description
Issue: ---------------------------------------- Clicking "Preview" on the template "2Fa New Login" causes an error. Steps to reproduce: ---------------------------------------- - Search for the mail template "Settings: 2Fa New Login" - Click "Preview" - Error in terminal - From 17.0+ the error shows in UI - From saas-18.3+, a traceback occurs whe resetting the template Cause: ---------------------------------------- There is an assert the method `_get_totp_mail_code()` to ensure it's used during 2FA. But when passing by rendering this template in preview we aren't in sudo and the assert in `_get_totp_mail_code()` raises. Solution: ---------------------------------------- We replace the `assert` by a `if` which will return fake results. opw-6333887 Forward-Port-Of: odoo/odoo#273505 Forward-Port-Of: odoo/odoo#273125
This update resolves a rare technical problem within the Odoo web interface that could occasionally cause a test to fail. The fix ensures that popovers are properly closed, preventing errors that arise when components are destroyed during the testing process. This improves the stability of the web application.
Original PR description
Add an extra step to close the popover and prevent the `Component is destroyed` error[1], which can happen during hoots cleanup, similar to the issue we see when some dialogs perform RPCs as they are being destroyed. [1]: https://runbot.odoo.com/runbot/build/115972540 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#273396 Forward-Port-Of: odoo/odoo#273085
This update fixes an issue where new time off requests were incorrectly showing a duration of 0 days due to an automation rule. The fix ensures the leave duration is accurately calculated from the requested dates, regardless of automation activity creation. This prevents incorrect time off calculations and reporting.
Original PR description
Current behavior: -- With an active automation rule (base_automation) whose action creates an activity (e.g. a "Time Off Approval" activity) on hr.leave creation, every newly created time off request…
Current behavior: -- With an active automation rule (base_automation) whose action creates an activity (e.g. a "Time Off Approval" activity) on hr.leave creation, every newly created time off request has a duration of 0 days / 0 hours, regardless of the requested dates. Expected behavior: -- The leave duration is computed from the requested dates, unaffected by the presence of an activity-creating automation rule. Steps to reproduce: -- - Create an automation rule on hr.leave, trigger "On Creation & Update". - Add an action that creates an activity (type "Time Off Approval"). - Create any time off request for an employee with a working schedule. - The request shows a duration of "0 days" (or "0 hours"). Cause of the issue: -- date_from/date_to and number_of_days/number_of_hours are stored compute fields the duration (number_of_days/number_of_hours) depends on the dates (date_from/date_to). The rule's action creates a mail.activity whose notification renders the leave's display_name. Computing display_name pulls in dashboard_warning_message, which re-enters _compute_date_from_to. Inside that in-progress compute, _compute_duration is evaluated while date_from/date_to are still False in the ORM cache, so _get_durations returns (0, 0). The dates are correct afterwards, but the duration was already computed and stored as 0, and nothing in the create flow re-triggers its compute, so a stale 0 is persisted to the database (it is only recomputed if a dependency such as the request dates or leave type is later modified). Fix: -- Once date_from/date_to are settled at the end of _compute_date_from_to, add the duration fields (number_of_days, number_of_hours, duration_display) back to the compute queue so they are recomputed against the correct dates. opw-6235902 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
2 changes
Resolved issues and error corrections
This update fixes a display issue in the Intrastat report where bill names were being cut off. The fix adjusts a regular expression to allow hyphens in bill names, ensuring complete and accurate reporting of transaction details. This improves the clarity and usability of the Intrastat report.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
This update resolves an issue where the Sale Renting module wasn't properly connected to the Gantt view functionality. The fix ensures that Gantt views function as expected within the Sale Renting module, providing a seamless user experience. This was previously addressed in version 19 and is now consistent across the system.
Original PR description
Module was introduced without a dependency on the `web_gantt` module despite using `gantt` views. Already fixed in 19+ runbot error 237883 Forward-Port-Of: odoo/enterprise#122136
14 changes
Resolved issues and error corrections
This update fixes an internal test setup issue in the Urban Piper point-of-sale integration. It keeps test-only changes properly contained, helping maintain code quality checks without affecting day-to-day users.
Original PR description
Avoid polluting the Odoo model registry and failing `test_lint_override_signature` by using `patch.object` instead of manual assignment. This ensures the injected method is properly torn down after the test block, keeping the registry clean and bypassing static analysis failure as the patched method is only used for tests. runbot-939298 Forward-Port-Of: odoo/enterprise#122446 Forward-Port-Of: odoo/enterprise#122283
This update corrects automated test coverage for Swedish SEPA payment files when related payment modules are installed together. It helps ensure Sweden-specific bank payment exports remain validated without false test failures.
Original PR description
Here https://github.com/odoo/enterprise/pull/114662 we changed the way the CdtrAgt node is used in the SEPA XML file for Sweden. But this change broke a test when both account_iso20022 & l10n_se_bban are installed, leading to a Non-expected child error. This commit skip the failling test if l10n_se_bban is installed, and add a new one to replace it. runbot-938366 runbot-938367 Forward-Port-Of: odoo/enterprise#122599 Forward-Port-Of: odoo/enterprise#121485
A recent update removed a dependency and added a new project field to improve data accuracy. This change resolved a test failure (test_fsm_flow) that indicated missing project information. The update ensures correct project data is fetched within the planning module.
Original PR description
Currently, running test `test_fsm_flow` leads to a Attribute Error: `planning.slot' object has no attribute 'project_id'`. This happens because project_id field removed in this PR: https://github.com/odoo/enterprise/pull/113153 This field is removed to remove `project_timesheet_forecast_sale` module in the dependencies of `planning_field_service_sale_timesheet` module and add a project field in settings of planning when Billing feature of field service is enabled. Related PR: https://github.com/odoo/enterprise/pull/83012 runbot-[941219](https://runbot.odoo.com/odoo/error/941219) Forward-Port-Of: odoo/enterprise#122442
This update ensures that only complete and accurate address data is sent to Fiskaly when creating POS certificates. Previously, placeholder values like 'N/A' were included, which is now corrected to omit fields when data isn't available, streamlining the process and improving data quality. This change enhances integration with Fiskaly and reduces potential errors.
Original PR description
In this commit: ------------------- - Buyer address fields are optional and should only be sent to Fiskaly when they are actually available. - Avoid sending placeholder values like "N/A". If the data is not present, the fields should simply be omitted from the request. task: 6113133 Forward-Port-Of: odoo/enterprise#122188 Forward-Port-Of: odoo/enterprise#113621
This update fixes an issue where the payrun chatter window would disappear unexpectedly during certain actions, disrupting the payroll process. The change ensures the chatter window stays open and functional, improving the user experience when continuing pay runs. The fix was triggered by a bug in how the system refreshed messages related to pay runs.
Original PR description
The payslip run aside chatter was keyed on a revId counter that _updatePayRun bumps on every payrun update (view button actions, the HR_PAYROLL:UPDATE_PAYRUN bus, the step bubble refresh). Changing a t-key makes Owl destroy and recreate the whole chatter, which resets composerType to false. When a refresh landed while the log note composer was open, the composer input disappeared. In the payrun tour this happens right after continuing a pay run, so posting the third note timed out waiting for .o-mail-Composer-input. Remove the t-key and refresh its messages through the MAIL:RELOAD-THREAD bus that the Thread already listens to. The server posted status messages still show up without throwing away the composer. https://runbot.odoo.com/odoo/error/941272 Forward-Port-Of: odoo/enterprise#122518
This update fixes a display issue in the Intrastat report where bill names were being cut off before hyphens. The change adjusts a regular expression to correctly handle hyphen characters in bill names, ensuring complete and accurate reporting. This improves the clarity and usability of Intrastat reports.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
Features or functions removed from Odoo
This update removes a previously deleted file that was causing a 'dead' module in the Odoo Enterprise system. The change ensures the system is cleaner and more stable, addressing a minor technical issue. This improves overall system performance.
Original PR description
The contents of this file were previously deleted, but the file itself was missed, leaving a dead l10n_hk_hsbcnet module in 19.4. This commit removes the file entirely to clean it up. Forward-Port-Of: odoo/enterprise#122573
This update removes outdated code related to 'onWillRender' hooks, a component of the older Owl 3 system. This change is part of a larger migration to Owl 3, ensuring the system continues to function correctly and efficiently. It's a routine maintenance update.
Original PR description
As part of the Owl 3 migration, replace deprecated onWillRender hooks with the appropriate Owl 3 alternatives.
This update removes an outdated feature ('useComponent') from several Odoo modules. This change improves the system's efficiency and stability by aligning with newer development practices. It ensures the continued smooth operation of key functionalities within Odoo.
Original PR description
- Community: https://github.com/odoo/odoo/pull/272185 See commit messages for details.
Code cleanup and technical improvements
This update aligns several Enterprise apps with the latest underlying Odoo web interface changes. It helps keep features such as Gantt views, Studio, Documents, Sign, Social, Planning, and related workflows working reliably after the platform upgrade.
Original PR description
## `t-ref` → Owl 3 signals — enterprise companion Enterprise side of the codebase-wide Owl 2 → Owl 3 ref-semantics migration. Pairs with the consolidated community PR. Single squashed commit (16 files): xpath rewrites for removed `t-custom-ref` attributes, ref reads converted to the signal call form, and patch/subclass reusers adapted across `web_gantt`, `web_studio`, `documents`, `ai`, `sign`, `social`, `l10n_ke_edi_oscu_pos`, `planning`, `hr_holidays_gantt`. ### Notes - Rebased onto current enterprise `master` (2026-06-10). - Community PR: odoo/odoo#269265
This update removes outdated code related to a previous Gantt chart progress bar redesign. The progress bar component is no longer needed in the current layout, so these files have been deleted to streamline the system and improve efficiency. This is a routine maintenance task.
Original PR description
Cleans up residual dead code left over from the progress bar redesign in https://github.com/odoo/enterprise/pull/118045. Since the `GanttRowProgressBar` component is no longer referenced anywhere in the new layout architecture, its corresponding files have been deleted. Forward-Port-Of: odoo/enterprise#122142
This update removes an outdated technique for autofocusing elements within the View Editor component. The change utilizes a more modern, reactive approach to ensure the element correctly focuses when needed, improving the user experience. Comprehensive testing confirms this update resolves a previous issue.
Original PR description
Replaced `useLayoutEffect` with `signal.ref(HTMLDivElement)` + `useEffect` because `useLayoutEffect` is deprecated in OWL3. The effect drove autofocus on the Property component's root element,…
Replaced `useLayoutEffect` with `signal.ref(HTMLDivElement)` + `useEffect` because `useLayoutEffect` is deprecated in OWL3.
The effect drove autofocus on the Property component's root element, triggered both when the DOM element became available and when `env.viewEditorModel.activeNodeXpath` changed. This matches the canonical `signal.ref()` + `useEffect` pattern: converting `useRef('root')` (from `@web/owl2/utils`) to a `signal.ref(HTMLDivElement)` class field makes the element a reactive signal, so `useEffect` auto-subscribes to it and re-runs whenever the element appears. The second dependency is read via `void` inside the callback to force subscription without changing the logic.
The useLayoutEffect refactored in this PR has test coverage — below are some tests that failed when the effect was commented out, and are now passing:
- @web_studio/view_editors/interactive_editor_sidebar/autofocus field label in the sidebar
- @web_studio/view_editors/interactive_editor_sidebar/update sidebar after edition
- WebSuite.test_unit_desktop
see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2602195/build/115250521This update replaces outdated `useLayoutEffect` code with modern, native React event handling (`onMounted` and `onWillUnmount`) across several Odoo modules. This improves stability and performance, aligning with the latest OWL3 compatibility standards. The changes address potential bugs and simplify the codebase for easier maintenance.
Original PR description
## Summary Part of the incremental OWL3 migration removing `useLayoutEffect` from `@web/owl2/utils`, which relies on the OWL2 compatibility shim and is deprecated in OWL3. The pattern replaced is…
## Summary Part of the incremental OWL3 migration removing `useLayoutEffect` from `@web/owl2/utils`, which relies on the OWL2 compatibility shim and is deprecated in OWL3. The pattern replaced is always the same: `useLayoutEffect` with a static or stable-ref dependency was used solely to attach DOM event listeners after mount and clean them up before unmount. In all cases, `onMounted` + `onWillUnmount` from `@odoo/owl` is the correct native replacement — the effect runs once, the ref is stable, and no reactive re-run is needed. ## Commits - **web_gantt**: `useMultiHover` — replaces per-element `pointerenter`/ `pointerleave` listeners (re-queried on every patch) with a single event delegation pair (`pointerover`/`pointerout`) on the container. Simpler and handles dynamic DOM children for free. - **hr_referral**: Bootstrap carousel `slide.bs.carousel` listener — also migrates `carouselRef` from `useRef` to a signal (`t-ref`) and `reachedEnd` from a proxy state to a signal. Fixes a latent bug where `bind(this)` was called twice (once in `addEventListener`, once in `removeEventListener`), making the removal a silent no-op. - **social_facebook/instagram/linkedin**: Click listeners on comment and like buttons queried via `querySelector` — identical structure across the three social kanban patches, straightforward one-to-one swap.
This update replaces an outdated coding technique (`useLayoutEffect`) with a more modern approach (`useListener`) for handling the AI chat feature. This change ensures compatibility with the latest Odoo version (OWL3) and improves the stability of the codebase. The update includes thorough testing to guarantee continued functionality.
Original PR description
Replaced `useLayoutEffect` with `useListener` because `useLayoutEffect` is deprecated in OWL3. The commented-out effect was a pure event-subscription pattern: its body only called…
Replaced `useLayoutEffect` with `useListener` because `useLayoutEffect` is deprecated in OWL3.
The commented-out effect was a pure event-subscription pattern: its body only called `this.env.bus.addEventListener('AI:OPEN_AI_CHAT', openAiChat)` with a cleanup returning `this.env.bus.removeEventListener`, and its dependency function returned an empty array (register once on mount, unregister on destroy). `useListener(this.env.bus, 'AI:OPEN_AI_CHAT', openAiChat)` is an exact 1:1 replacement — it internally wraps `useEffect` with a null-guard and a `removeEventListener` cleanup, preserving the exact add/remove lifecycle without any dep-array bookkeeping.
The `useLayoutEffect` refactored in this PR has test coverage — below are some tests that failed when the effect was commented out, and are now passing:
- TestAIDraftUI.test_ai_draft_chatter_button (Post install test_ai)
- TestAIDraftUI.test_ai_draft_chatter_button (test_discuss_full_enterprise)
- TestAIDraftUI.test_ai_draft_chatter_button (test_mail_enterprise)
see commented-out runbot build: https://runbot.odoo.com/runbot/batch/2604770/build/1153798315 changes
Resolved issues and error corrections
The Sales Commission Achievement report no longer crashes when users apply filters based on relative dates such as the current period. This keeps commission reporting usable and reliable for common date-based searches.
Original PR description
### Issue Applying a filter using relative date expressions (e.g. `today`) on the Sales Commission Achievement report raises a traceback. ### Steps to reproduce 1. Open **Sales > Commissions > Achievements**. 2. Apply the **Current Period** filter. ### Current behavior The report crashes with: ```text ValueError: time data 'today' does not match format '%Y-%m-%d' ``` ### Cause The `_search` implementation extracts `date_to` values from the search domain and assumes they are literal `%Y-%m-%d` strings. However, search domains may contain relative date expressions such as `today`, `today +1d`, `today =1m`, etc., which cannot be parsed using `datetime.strptime()`. ### Fix Convert the incoming search domain to a `Domain` object and resolve it with `optimize_full()` before extracting the `date_to` values. This evaluates relative date expressions into actual `date` objects, preventing the traceback while preserving the existing currency conversion date logic.
The Intrastat report now correctly displays bill names that include hyphens, such as monthly sequence numbers. This prevents truncated bill references in audit reporting and makes it easier for users to identify the correct accounting document.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] *…
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854 Forward-Port-Of: odoo/enterprise#120979
This update resolves an issue where sharing voice transcript summaries via email created duplicate notifications for related records. The fix ensures that each lead receives only one email notification, improving the user experience and reducing unnecessary communications. This change was previously addressed in 19.2 and later versions.
Original PR description
Issue: Voice transcript 'share by email' button would get post the transcript summary to the chatters of all records of a given model. Steps: 1) install crm and ai 2) activate openai and gemini by…
Issue: Voice transcript 'share by email' button would get post the transcript summary to the chatters of all records of a given model. Steps: 1) install crm and ai 2) activate openai and gemini by saving the api keys inside settings. 3) create 2 crm leads in order a) lead 1 and lead 2 4) go into lead 1 and in the description then type in '/voice-transcription'. 5) Go into the 'transcription' section of the voice transcription 6) type something and save 7) then click 'start recording' 8) click 'stop recording' - it doesn't need to actually record 9) wait to process 10) click the 'share by email' button 11) check lead 2 for a message created (there shouldnt be one) 12) go back to lead 1 and click the 'share by email' button 13) check lead 2 again and a second message appears. that is becuase it makes a new mail.compose.message with res_ids of a list of multiple crm.lead.id (e This was fixed in 19.2+ with the pr https://github.com/odoo/enterprise/pull/115978. But it didnt make it in 19.0 and 19.1 Fix: default_res_ids: model?.config.resIds, -> default_res_ids: [model?.config.resId] take the single record id instead of the list res_ids opw-6285883
This update resolves errors in automated tests related to the sign request process when using Odoo's demo data. The changes ensure the tests accurately reflect the current functionality and prevent failures caused by leftover data or user name discrepancies. This improves test reliability and stability.
Original PR description
Version: 19.0 `test_sign_request_notification`, `test_gc_removes_orphan_roles_and_dummy_items` ,`test_sign_tour` and `test_sign_tour_without_sign` fail locally when you run them on a db with demo…
Version: 19.0
`test_sign_request_notification`, `test_gc_removes_orphan_roles_and_dummy_items` ,`test_sign_tour` and `test_sign_tour_without_sign` fail locally when you run them on a db with demo data installed, after doing some manual testing/ operations on it.
- `test_sign_request_notification` builds `completion_mail_to_user` by searching `mail.mail` for any email addressed to the admin's address. If admin had received any other email before this test ran, it got counted too, so the assertion on `len(completion_mail_to_user)` became wrong. We now also filter by subject matching `sign_request.reference`, so it only counts the email this test's own sign request actually generated.
- `test_gc_removes_orphan_roles_and_dummy_items` relies on the helper `_get_signer_and_item_gc_context` to count dummy sign items (page < 0). That helper searched `sign.item` with no domain at all, so any dummy item left behind by a different template got added to `non_active_item_ids` and broke the `len(non_active_item_ids) == 4` check. We now scope that search to `template_id = sign_template.id`, so it only counts items belonging to the template created in the test.
- `sign_tour` had a step targeting `.o-autocomplete--dropdown-item:contains('Administrator')` in the signer autocomplete. After installing demo data the admin user is named `Mitchell Admin`, so the tour failed on databases using that name. Both contain 'Admin', so the trigger now matches on that instead.
taskid- 6329037This update resolves an installation problem with the HR Recruitment Reports module. The issue occurred because the module wasn't correctly specifying a dependency on 'web_cohort,' leading to an error during installation. This change ensures the module installs correctly and functions as intended.
Original PR description
installing hr_recruitment_reports with the --ski-auto-install flag causes an error. The error happens because it does not explicitly depend on web_cohort while displaying a cohort view. task-6352888 runbot_error-237854
6 changes
Resolved issues and error corrections
This update fixes an issue that prevented users from clearing the date field in the WIP Accounting Entry wizard, which was causing errors. The change ensures the wizard functions correctly when temporarily emptying the date field, improving user workflow and data accuracy.
Original PR description
Issue Before This PR: When clearing the Date field in the WIP Accounting Entry wizard, an error was raised during the re-computation of dependent fields. This prevented from temporarily emptying the…
Issue Before This PR: When clearing the Date field in the WIP Accounting Entry wizard, an error was raised during the re-computation of dependent fields. This prevented from temporarily emptying the date field while editing the wizard. Steps to Reproduce: - Open the list view of Manufacturing Orders. - Open the Post WIP Accounting Entry wizard by either: - Selecting one or more Manufacturing Orders and choosing Actions ,click Post WIP Accounting Entry - Or, opening a Manufacturing Order form and selecting Post WIP Accounting Entry from the Actions & Reports menu. - Clear the Date field. - Observe that an error is raised. Cause of the Issue: The compute methods _compute_reversal_date() and _compute_line_ids() assumed that wizard.date was always set. When the Date field was cleared, its value became False, but the compute logic still attempted to compare or use the date, resulting in an error. With This PR: The compute methods now verify that wizard.date is set before performing date-dependent computations. This prevents errors when the Date field is temporarily cleared, allowing the wizard to behave correctly during user input. Issue reference: https://github.com/odoo/odoo/issues/246547
This update fixes an issue where the Intrastat report was incorrectly cropping the bill name, preventing full visibility of key information like the hyphenated identifier. The fix adjusts a regex pattern to now correctly handle hyphen characters in bill names, ensuring accurate reporting and data display. This improves the clarity and usability of the Intrastat report.
Original PR description
**Steps to reproduce:** - Install Accounting - In Accounting settings, activate "Intrastat" - Create a product with Intrastat info - Create a bill: * Product: [the created Intrastat product] * Intrastat Country: [any] * Intrastat Transport Mode: [any] - Confirm the bill - Make sure that the bill name contains a hyphen character (i.e. "-") For example, "BILL/2026-06/0001". Use the "Resequence" action from the bills list view if needed. - Go to "Accounting / Reporting / Audit Reports / Intrastat Report" - Expand the line to display the bill name **Issue:** The bill name is not fully displayed. It is cropped right before the hyphen character (i.e. BILL/2026). **Cause:** A regex is used to retrieve the bill name from the report line name, but it is only allowing "/" character. **Solution:** Just allow "-" character in addition. No other character is allowed to limit the risk of matching something that should not. opw-6299854
This update resolves a bug where recurring events synced from Google Calendar were sometimes duplicated, particularly when Google's 'UNTIL' date was set in UTC. The fix ensures Odoo correctly handles recurrence boundaries, preventing the creation of extra events that don't exist in Google Calendar. This ensures accurate event scheduling for users across different time zones.
Original PR description
When Google sends a recurrence with UNTIL in UTC (UNTIL=...Z), users in timezones behind UTC can get one extra occurrence on the boundary day. Google's UNTIL represents the last allowed start in UTC, but that UTC date fell into the previous local day. Because Odoo was comparing event start times as naive local datetimes against a cutoff derived from the wrong date, the boundary occurrence passed the check and was created. Steps to reproduce: 1. Set the user's timezone to a UTC-negative offset (e.g. America/Argentina/Buenos_Aires, UTC-3). 2. In Google Calendar, create a weekly recurring event (e.g. every Thursday at 12:00 local). 3. Edit the series with "This and following events" so the old series ends with UNTIL set to 02:59:59 UTC of the next day (= 23:59:59 local of the last valid occurrence day). 4. Sync with Odoo -> an extra event is created on the day after the last valid Thursday, which does not exist in Google Calendar. opw-6024835 Forward-Port-Of: odoo/odoo#265297
This update fixes a technical issue preventing the Gantt view from correctly displaying task progress for sales orders. The fix ensures that the system accurately calculates and displays planned hours when grouping tasks by sale order item, resolving a previous migration-related error.
Original PR description
### Steps to reproduce - Install `sale_timesheet_enterprise`. - Go to **Tasks → All Tasks**. - Switch to the **Gantt** view. - Group by **Sale Order Item** (`sale_line_id`). ### Issue A traceback is…
### Steps to reproduce - Install `sale_timesheet_enterprise`. - Go to **Tasks → All Tasks**. - Switch to the **Gantt** view. - Group by **Sale Order Item** (`sale_line_id`). ### Issue A traceback is raised when loading the Gantt view with group by `sale_line_id`: ```text ValueError: Invalid field 'planned_hours' on model 'project.task' for 'planned_hours:sum' ``` ### Root cause The Gantt progress bar computation for the `sale_line_id` grouping performs a `_read_group()` aggregation on the `planned_hours` field of `project.task`. However, `planned_hours` was renamed to `allocated_hours` during the saas-16.5 migration, so the former field no longer exists on `project.task`. As a result, the aggregation raises a `ValueError`. Migration reference: https://github.com/odoo/upgrade/blob/e638c6ce00d9d8936d034ad7130fef51565b9195/migrations/project/saas~16.5.1.2/pre-migrate.py#L10 Issued PR: https://github.com/odoo/enterprise/pull/49685 ### Fix Use `allocated_hours`, the renamed equivalent of `planned_hours`, when computing the Gantt progress bar. This restores the Gantt view when grouping tasks by **Sale Order Item** and prevents the traceback. Forward-Port-Of: odoo/enterprise#122297
This update fixes a visual issue where progress on Gantt chart task pills was appearing very faint. The underlying code change standardized progress calculations, but a key view (Gantt) was missed. The fix ensures the progress bars accurately reflect the allocated time, improving task visualization.
Original PR description
Steps to reproduce: ------------------------------------------- 1. Install the Timesheet module with demo data 2. Go to any FSM task > set allocated hours to 20h 3. Fill the timesheet for the same…
Steps to reproduce: ------------------------------------------- 1. Install the Timesheet module with demo data 2. Go to any FSM task > set allocated hours to 20h 3. Fill the timesheet for the same task for 10h 4. Navigate to FSM > My Tasks > Gantt view Observation: ------------------------------------------- Look at the task on the Gantt chart. The shading is barely visible because it covers only 0.5% of the bar, not 50% Issue: ------------------------------------------- In the commit https://github.com/odoo/odoo/pull/137570/changes/4a93d9aee957dd3feb3db0cb69eb3b8f0f4a4683 The progress field computation was changed from storing percentage values (0-100) to storing decimal values (0-1). Specifically, the `_compute_progress_hours` method was modified. This change was made to standardize the progress field storage format, with the understanding that the UI layer would multiply by 100 when displaying the value. While most views (form, list, kanban, etc.) were updated to multiply the progress by 100 for display purposes, the Gantt view's pill progress bar was missed. Solution: ------------------------------------------- Overrides the `enrichPill` method to multiply the `_progress` value by 100 before it's passed to the template. This ensures the Gantt pill progress bars display correctly without modifying the core web_gantt module. Before --------------------------- <img width="268" height="368" alt="image" src="https://github.com/user-attachments/assets/6d35927f-bd3f-47fc-9101-e2e188d419b8" /> After: -------------------------- <img width="250" height="371" alt="image" src="https://github.com/user-attachments/assets/fe7133e0-26d1-4c5f-b903-48826fda9488" /> opw-6038983
Example of steps: - Install web_studio and `accountant` - Open the corresponding form view in Studio - With debug mode toggle "Show invisible Elements" and edit "Invisible" on the second partner_id field - Traceback `normalize()` compares the combined arch without the studio customization to the one with it, in order to compute the smallest possible set of xpaths. To do so, it calls `apply_inheritance_specs` (the low-level function from `odoo.tools.template_inheritance`) directly on the s
Original PR description
Example of steps: - Install web_studio and `accountant` - Open the corresponding form view in Studio - With debug mode toggle "Show invisible Elements" and edit "Invisible" on the second partner_id…
Example of steps: - Install web_studio and `accountant` - Open the corresponding form view in Studio - With debug mode toggle "Show invisible Elements" and edit "Invisible" on the second partner_id field - Traceback `normalize()` compares the combined arch without the studio customization to the one with it, in order to compute the smallest possible set of xpaths. To do so, it calls `apply_inheritance_specs` (the low-level function from `odoo.tools.template_inheritance`) directly on the statically combined arch. Some models add or duplicate nodes dynamically in `_get_view()` (Python postprocessing, run after the static view combination). A studio operation can target such a node, since it is what the user actually sees and clicks on. But that node has no counterpart in the purely static combined arch used by `normalize()`, so `apply_inheritance_specs` raises a ValueError. `edit_view()` only catches `ValidationError` to fall back to an un-optimized (but valid) studio arch instead of failing the request. Since the low-level function raises a plain `ValueError` here, that fallback never triggers, and the exception is not caught anywhere. To fix this, we will keep the behavior from version 18.0 and catch the ValueError raised by `apply_inheritance_specs` in `normalize_with_keyed_tree` and re-raise it as a ValidationError, like `ir.ui.view.apply_inheritance_specs` already does elsewhere. This lets `edit_view()`'s existing fallback handle the case gracefully instead of crashing. opw-6332911
3 changes
Resolved issues and error corrections
This update corrects a formatting issue in the Hindi language setting within Odoo. It now correctly applies Indian-style number grouping (e.g., 1,54,75) for numerical displays, ensuring accurate representation of financial data for users in India. This improves clarity and consistency for Hindi-speaking users.
Original PR description
Currently the Hindi language used no number grouping at all. This commit sets the number grouping for Hindi to Indian style, like `1,54,75,317.70` e.g. [task-6320391](https://www.odoo.com/odoo/project.task/6320391)
This update corrects a visual issue where the background color of the account type selection dropdown remained in light mode when dark mode was enabled. The change ensures the dropdown background adapts correctly to the overall dark mode theme, providing a consistent and visually correct user experience. This improves the usability of the account module in dark mode.
Original PR description
Steps to reproduce: - Install `account` module - Enable dark mode - Open `view_account_form` to create a record - On the Accounting page, open type dropdown - The dropdown background remains in light mode This commit applies $dropdown-bg on `o_field_account_type_selection` as in odoo/odoo@0cd148eb389078c896aaa719af5733d05377fd1c
This update corrects a minor error in the turnstile template that prevented users from consistently selecting the desired display mode. The fix ensures the ?cf=show path correctly controls the turnstile's appearance, improving the user experience. This is a standard maintenance update for the 17.0 release.
Original PR description
Stable forward-port source patch. Issue - The turnstile template uses a misspelled variable name in data-appearance: appeareance. - JS provides appearance. - Because of this mismatch, data-appearance always falls back to interaction-only and ?cf=show cannot force always mode. Fix - Replace appeareance with appearance in the turnstile template. Why stable-safe - One-line template fix. - No API/model/signature changes. - No behavior change outside the intended appearance selection. This is intended as the 17.0 source fix so forward-porting can propagate to upper versions. Related: odoo/odoo#273306 and odoo/odoo#273652