Wednesday, March 25, 2026
32 changes · master
Resolved issues and error corrections
This fixes an error that occurred when users typed @ in the mail composer and selected a suggested mention. The composer now uses the updated internal reference, allowing users to add mentions without interruption.
Original PR description
Problem: Opening the composer, typing "@" and selecting any item causes a traceback. Cause: After 8c99b17fcc3a612fd897da9ee29e2f53254d5933, the attribute `channel` was renamed to `thread`. Some code still referenced the old `channel` attribute, leading to errors when selecting mentions. Steps to reproduce: - Open the composer. - Type "@" to trigger mentions. - Select any item from the suggestions. - Observe a traceback. opw-6030307 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255158 Forward-Port-Of: odoo/odoo#254127
This update refreshes small parts of the import and selection menu experience to keep the interface consistent after the forward-port. The attempted cherry-pick was already effectively applied, so the business impact is limited to preserving expected behavior across versions.
Original PR description
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#254998 Forward-Port-Of: odoo/odoo#251992
This fixes how two-factor authentication setup recognizes when no TOTP secret exists. Empty values now consistently mean TOTP is not enabled, avoiding confusion from treating the text value 'false' as a special case.
Original PR description
Empty strings in secret mean that totp is not enabled. Remove support for the totp_secret = 'false'. If we don't have a secret, it should be empty (null or ''). --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255536
Users who do not have livechat access rights can now open the livechat invite panel without encountering an access error. This helps invited users access the intended chat flow smoothly while keeping permissions intact.
Original PR description
When opening the livechat invite panel, users without livechat access rights encounter an access error. This commit fixes the issue by ensuring active live chat partners can be retrieved for invited users. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255301 Forward-Port-Of: odoo/odoo#254565
The survey form now avoids showing the required-answer warning the first time a respondent sees a conditional question. This makes the survey experience clearer by showing the alert only after a question was actually skipped or during the proper follow-up flow.
Original PR description
Purpose ======= Fix the "This question requires an answer" alert which is displayed under the question even if it's the first time the user sees it. Specification ============= Following…
Purpose ======= Fix the "This question requires an answer" alert which is displayed under the question even if it's the first time the user sees it. Specification ============= Following odoo/odoo#215237 conditional questions can now be displayed in the post-submit flow. The purpose was to give the user the chance to see and answer the conditional questions that are triggered by a mandatory question that was skipped. However the condition to display this error alert was only relying on the fact that the question was considered post-submit or not. But now that the post-submit questions also includes the conditional questions that are waiting for answer, this condition is not enough anymore. Making the condition more precise to be sure that the error is displayed only if the questions is considered post-submit AND it's already the post-submit flow or it's the pre-submit flow and the question was effectively skipped by the user. Task-6048598 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#254848
The U.S. accounting settings now point users to the correct direct deposit documentation. This makes it easier for businesses to find guidance when setting up or learning about direct deposit.
Original PR description
When the Direct Deposit module was merged, there was no documentation created yet. Now that it has been merged we will add the link to the right documentation. task-none Forward-Port-Of: odoo/odoo#255655
This fixes an issue in Odoo's web testing framework where certain hierarchy checks could freeze the system during tests. The change prevents repeated processing of the same records, making automated testing more stable and reliable.
Original PR description
Problem: Triggering the `child_of` operator in the testing framework caused an infinite loop that froze Odoo. This occurred because the framework attempted to fetch all children of the root operand without accounting for already visited nodes, resulting in children being added indefinitely. Solution: Switched from using an `array` to `set` to prevent duplicate traversal. Task-6023290 Forward-Port-Of: odoo/odoo#255419 Forward-Port-Of: odoo/odoo#254857
This fixes an issue where names shown next to user avatars in Mail could be squeezed to zero width and become hidden. Users should now see avatar display names properly, improving readability in affected mail views.
Original PR description
This commit fix the width of the displayName option of the Avatar component which was fixed to zero (bootstrap class 'w-0') --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This fixes a testing issue in the live chat area where checks could fail depending on whether the rating feature was installed. The tests now adapt to the installed setup, helping keep automated validation stable without changing customer-facing behavior.
Original PR description
…ation Before this commit, tests could fail depending on whether the rating module was installed or not. Now, the values we check are dynamically added depending on what is installed. fixes-runbot-242084 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixed an issue that could cause Odoo to crash when users quickly interacted with an editable product list while using the keyboard. This improves reliability during sales order entry and similar workflows that use embedded lists.
Original PR description
When a record is in edit mode in an x2many list and the user presses a key while clicking "Add a product", onCellKeydownEditMode is called with record=null while editedRecord is set, causing a TypeError on record.dirty. Steps to reproduce: 1. Create a Sales Order 2. Click "Add a product" 3. While pressing the right arrow key, click "Add a product" again opw-6032870 Forward-Port-Of: odoo/odoo#255324 Forward-Port-Of: odoo/odoo#254881
A faulty internal test setup in the Website module was corrected so it no longer depends on coincidental record numbering. This helps keep automated validation reliable and reduces false failures during development.
Original PR description
After the merge of [1], the test `TestUi.test_29_website_backend_menus_redirect` started consistently failing. **Problem** The test contained an incorrect line that used the ID of an `ir.ui.menu`…
After the merge of [1], the test `TestUi.test_29_website_backend_menus_redirect` started consistently failing. **Problem** The test contained an incorrect line that used the ID of an `ir.ui.menu` record as if it were the ID of an `ir.actions.actions` record. Before [1], this did not raise any error because, by coincidence, an `ir.actions.actions` record with the same ID already existed, so the issue went unnoticed. After [1], the way `ir.ui.menu` IDs are assigned changed, causing the test to fail. The failure only occurs when the test is executed together with other tests that consume `ir.actions.actions` IDs in such a way that, when test_29 is executed, the `ir.ui.menu` ID does not correspond to any `ir.actions.actions` ID because such ID has already been consumed during testing. For example, the test does not fail locally if executed alone, but if fails if executed with the test tag `:TestServerActions,.test_29_website_backend_menus_redirect` (only the `website` module is required to reproduce). **Fix** The incorrect assignment between `ir.actions.action` and `ir.ui.menu` is replaced with a correct one that maintains the original purpose of the test. [1]:https://github.com/odoo/odoo/pull/248661 runbot-242044
The system now detects asset bundles that are loaded only when needed and prepares them before tests run. This prevents delays or unexpected generation during testing, making test runs more stable and predictable.
Original PR description
tl;dr: look for lazy loaded bundles and add them to the bundles' list to pregenerate before running tests to avoid generation on the fly. Forward-Port-Of: odoo/odoo#248256
This fixes a visual issue in the online shop where the product grid could lose its left border on smaller screens when the sidebar is hidden. The correction keeps the storefront layout looking consistent and polished for mobile and narrow-screen shoppers.
Original PR description
On smaller viewports the sidebar is hidden and the grid misses a left border. It's because of a selector typo. task-6059942 <img width="845" height="925" alt="image" src="https://github.com/user-attachments/assets/9ebb8a04-c3ce-40fd-acfa-8a17fbc31e3a" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255318
This update enhances the testing process for WhatsApp features within Odoo Enterprise. Specifically, it improves how the system verifies notifications sent through the bus, ensuring more reliable test results. This change contributes to overall product stability and quality.
Original PR description
Enterprise counter-part. task-4715511 https://github.com/odoo/odoo/pull/253083/
This update resolves a small, technical issue with a message displayed within the documents generated for employee payroll. The fix ensures consistent and accurate document formatting, improving the overall user experience. This change does not impact business processes or functionality.
Original PR description
Task#5980045 Forward-Port-Of: odoo/enterprise#109063
This update updates how Odoo retrieves configuration settings within the currency rate module. The change replaces an older method with the recommended approach, ensuring greater stability and compatibility with future Odoo versions. This improves the reliability of the currency rate calculations.
Original PR description
https://github.com/odoo/odoo/pull/223180 removes the `get_param` method from `res.config_parameter`, which was used in the `currency_rate_live` module. This commit replaces it with the `get_str` method, which is the recommended way to retrieve configuration parameters in Odoo. No task ID Forward-Port-Of: odoo/enterprise#110975
This update fixes an issue where subscription quotations weren't displaying correctly in the customer portal. Recent changes caused orders to be incorrectly directed to a general subscription page. Now, draft and sent subscription orders will correctly redirect users to their specific order details page, ensuring a smoother user experience.
Original PR description
Version: - saas~19.2 Steps to reproduce: - Create a subscription quotation. - Open it from the portal. Issue: - The portal view of the subscription quotation is not displayed correctly. Cause: - After recent changes, subscription orders were always redirected to `/my/subscriptions/` route. - This route renders the `subscription_portal_template`, which is not suitable when the order is still in draft or sent state. Solution: - If the subscription order is in draft or sent state, redirect the user to `/my/orders/<order_id>` instead. task-5966871 Forward-Port-Of: odoo/enterprise#108509
This update resolves a bug where the 'documents' button on employee records incorrectly redirected users to the wrong domain, preventing them from accessing their documents. The fix ensures users are directed to the correct domain based on their login location, improving document access for all users.
Original PR description
Steps to reproduce:
- Have two domains for your database (".odoo.com" and ".example.com")
- set the ".example.com" domain as your web base url
- login on the ".odoo.com" domain, go on an employee and click the documents smart button
-> you cannot see any documents because you are redirected on the ".example.com" domain on which you are not connected
opw-5857914
Forward-Port-Of: odoo/enterprise#110390
Forward-Port-Of: odoo/enterprise#107384This update resolves an issue where documents uploaded to the 'All' folder in the Documents app were not viewable through the bridge interface. The fix ensures that uploads to 'All' now default to the standard bridge folder, restoring full accessibility for users.
Original PR description
Problem: When a user uploads a document through a bridge to the Documents app, if the destination is set to the `All` folder, the file becomes unviewable from the bridge. It can only be accessed directly via the Documents app. Cause: This occurs because `All` is not an actual folder. Uploads directed to it default to the `My Drive` folder instead. Because `My Drive` is restricted and inaccessible via the bridge, the uploaded documents remain hidden. Solution: To solve this problem, this PR ensures that uploads directed to the `All` folder default to the default bridge folder rather than to `My Drive`. task-6023290 Forward-Port-Of: odoo/enterprise#111715 Forward-Port-Of: odoo/enterprise#111290
This update fixes an issue where currency rates for Bulgaria were incorrectly calculated after the country switched to the Euro. The system was using reversed rates from the XML data, leading to inaccurate unit conversions. This change ensures correct currency calculations are used for Bulgarian transactions.
Original PR description
Issue: after Bulgaria switched to EUR, currency rate fetching from BNB was incorrectly set to still use reversed currency rates from the fetched XML, resulting in unit-to-EUR and EUR-to-unit rates being flipped in the database. Solution: adjusting the parser to get rate from 'RATE' rather than 'REVERSERATE', as the XML provides both. task-6050519 Forward-Port-Of: odoo/enterprise#111753 Forward-Port-Of: odoo/enterprise#111275
This update resolves a technical error that prevented users from completing the checkout process within the Enterprise module. The issue stemmed from an outdated reference to a property name, which has now been corrected. This ensures a smoother and more reliable user experience.
Original PR description
Steps to reproduce: - In the home menu of a database, click on the ActivityMenu at top of page (red dot) - Click check in - Click ActivityMenu (green dot) again and click check out Current behavior: - Traceback saying this.displayAllowBillable is not a function Expected behavior: - No error Note: displayAllowBillable was renamed to displayIsBillable in this commit https://github.com/odoo/enterprise/pull/110708 opw-6061392 Forward-Port-Of: odoo/enterprise#111850
This update resolves a warning appearing in the Time Off popup within the Odoo Enterprise demo payroll module. The change removes unnecessary data dependencies, allowing the system to automatically calculate time off balances correctly. This ensures accurate reporting and a smoother user experience for payroll administrators.
Original PR description
. Remove payslip_state for hr.leave(178) to be automatically computed . Add corresponding tests task-6044925
This update resolves a technical issue that was preventing updates to the AI module. The fix ensures the system correctly verifies changes to the AI model, preventing crashes and allowing updates to proceed smoothly. This improves the stability and reliability of the AI functionality.
Original PR description
Prior to this commit one could not run the update of `ai` module because of a constraint on the write method which would cause it to crash. The constraint checked for modification to the `llm_model` without checking that the model was actually different from the original model assigned to the image generation agent. With this commit, we add a condition to check that the `llm_model` in the values is different form the one currently assigned to the image generation agent.
This update removes a specific exception (JC 999) from minimum wage checks within the Odoo Enterprise Belgian payroll module. This change ensures more accurate compliance with Belgian labor laws and avoids potential warnings for employees classified as JC 999. Associated tests have been added to verify the updated functionality.
Original PR description
. Exclude JC 999 from minimum wage checks in both versions and offer versions . Add corresponding tests task-6055486
A recent update to Odoo Enterprise prevented the deletion of automatically created approval rules within the Studio module. This issue arose during an upgrade from version 18.0 to 19.0 and resulted in data inconsistencies. The fix ensures these rules are created with a safeguard to prevent accidental deletion.
Original PR description
Server and automated actions created by the ORM for the purpose of revoking approval rights are created without `noupdate=True` which leads to said records being removed by the ORM becuase of not being found in the source. Such records created on the fly should have `noupdate=True` to prevent that from happening. This bug can be reproduced by going to Settings > Technical > User Interface > Studio Approval Rules and creating a new record from there and updating `web_studio`. The update will drop the record from the database. Issue originally detected in the upgrade process from 18.0 to 19.0. This fix will be complemented by an upgrade script that fixes erronous records. Forward-Port-Of: odoo/enterprise#110065
This update fixes an issue where linked records were lost when importing spreadsheets from CSV or XLSX files. The change ensures that newly created spreadsheet documents automatically link to the same source document, maintaining data relationships. This improves data integrity and simplifies spreadsheet workflows.
Original PR description
When importing an XLSX or CSV document into a spreadsheet, the linked record is lost on the newly created spreadsheet document. This happens because the conversion creates a new document through `copy()`, while `res_model` and `res_id` are computed fields and are not copied by default. This commit explicitly forwards the linked record values during the conversion so the created spreadsheet keeps the same linked record as the source document. Task: [6008920](https://www.odoo.com/odoo/project/2328/tasks/6008920) Forward-Port-Of: odoo/enterprise#111569 Forward-Port-Of: odoo/enterprise#110047
This update corrects a rounding error in the US payslip PDF that was causing incorrect overtime rates, particularly for very small overtime durations. The fix changes how the rate is calculated directly on the work entry, ensuring accurate overtime pay is displayed. This improves the reliability of payroll reports.
Original PR description
The Rate column on the US payslip PDF is computed as amount / hours, but amount is a Monetary field rounded to 2 decimals. For small hour values (e.g. seconds from the attendance app), the rounding error causes us to compute the wrong rate. For example, working 6 seconds of overtime at an hourly rate of $26 with a 1.5x overtime multiplier results in this calculation: $26/hour * 1.5 * 0.00166667 hour = $0.065 ≈ $0.06 We then attempted to calculate the rate in reverse for the PDF: $0.06 / 0.00166667 hour = $35.9999 ≈ $36.00 Because of the rounding that happened, it doesn't show the expected $39/hour rate ($26 * 1.5). We now compute the rate directly from hourly_wage * multiplier on the work entry type instead. This is a manual forward-port of the work in Odoo 18 [1], to instead use the new amount_rate field on hr.work.entry.type instead. task-6052711 [1] https://github.com/odoo/enterprise/pull/111540 Forward-Port-Of: odoo/enterprise#111733
This update resolves an issue where equity transactions couldn't be created in currencies other than the company's default (USD). Now, users can set the equity currency for the first transaction, ensuring flexibility in recording equity values. Subsequent transactions automatically use this chosen currency.
Original PR description
### Issue: When a company is set in USD, it was not possible to create equity transactions in another currency (e.g., EUR) ### Cause: The equity_currency_id is initialized with the company currency at partner creation (or module installation) However, there was no way to override this value when creating transactions ### Fix: It is now possible to set the equity currency on the first transaction Subsequent transactions reuse this currency and the field becomes read-only ### Steps to reproduce: - Install `equity` with demo data (currency and equity_currency default to USD) - Enable the EUR currency - Create an equity transaction for a company - You can now choose EUR on this transaction - Create another transaction for the same company, the selector is hidden and the currency remains EUR opw-5382255 Forward-Port-Of: odoo/enterprise#108248
This update resolves a technical issue where reports were failing to load correctly on some migrated databases. The change adds a backup system to automatically identify and use account codes when the standard XMLIDs are missing, ensuring reports run smoothly without warnings. This improves the reliability of our financial reporting.
Original PR description
Description of the issue this commit addresses: On some migrated BE databases, account template refs a4121/a4521 are missing as XMLIDs. l10n_be_reports then fails to recover partner/reconcile account refs and logs warnings during post-init load. --- Desired behavior after this commit is merged: This commit adds a fallback in BE report chart template data to resolve a4121/a4521 by account code when XMLIDs are missing, preventing recovery warnings while keeping normal XMLID behavior unchanged. --- runbot-[233845](https://runbot.odoo.com/odoo/runbot.build.error/233845) Forward-Port-Of: odoo/enterprise#111325
This update fixes a potential issue where a user could indirectly change an employee's work email through contract settings. Previously, linking an employee to a user allowed for unintended email updates. Now, the system ensures the work_email remains consistent when an employee is associated with a user, improving data integrity.
Original PR description
Due to https://github.com/odoo/enterprise/pull/106974,the employee's work_email may be reset to False when creating or updating an offer. This behavior is acceptable if the employee does not have a linked user. However, if the employee is linked to a user, resetting work_email can allow a user to indirectly modify their own work_email through salary confi. To prevent this, we now ensure that work_email never changes if employee has a user linked to it. Steps to reproduce: - Hire an applicant from Recruitment (the employee has no work_email). - Set a random work_email and create a user for the employee. - Open the hired applicant and create a new offer to update the contract. - work_email should not be modified, even after new contract. task: 6033382 Forward-Port-Of: odoo/enterprise#111815 Forward-Port-Of: odoo/enterprise#110810
This update resolves a problem where reports with annotations were failing to export correctly. The previous filtering process was redundant, and the unnecessary date filters have been removed. This ensures reports with annotations now export reliably.
Original PR description
[FIX] account_report: Unable to export Report with Annotations Following changes to the date filter in https://github.com/odoo/enterprise/pull/98695, the date options can be missing a date_from (For example, when using period type: "today"). The date were used to filter on the annotations to display during the period of the report. However, we already filter on those date when generating the annotations so this was redondant and can be safely removed. To reproduce: - Open the Balance sheet - Open the chatter of any account and post a message - Click on the "PDF" button to export the report Forward-Port-Of: odoo/enterprise#109984
This update resolves an issue preventing superuser administrators from deleting work entry types within the Odoo payroll module. This change allows for greater flexibility in managing payroll configurations and correcting errors. It's a technical fix to improve administrative control.
Original PR description
Forward-Port-Of: odoo/enterprise#111967