Monday, March 9, 2026
19 changes · saas-19.2
Resolved issues and error corrections
This update resolves an issue where demo livechat sessions incorrectly displayed as active in the info panel, even after receiving feedback. By adding a marker for the end of the conversation, the panel now accurately reflects the session's outcome, ensuring consistent and reliable demo data. This improves the clarity and accuracy of demo information.
Original PR description
**Description of the issue this PR addresses:** ---------------------------------------------- Some livechat demo sessions included feedback/ratings but were still displayed as active conversations…
**Description of the issue this PR addresses:** ---------------------------------------------- Some livechat demo sessions included feedback/ratings but were still displayed as active conversations in the info side panel. This created inconsistent demo data where closed conversations appeared with options meant for ongoing chats (e.g., status shown instead of outcome). **Current behavior before PR:** ---------------------------------------------- - Certain demo livechat sessions had ratings applied but no explicit livechat_end_dt set. - As a result, the info side panel treated them as ongoing conversations. - This caused mismatched UI information for demo data. **Desired behavior after PR is merged:** ---------------------------------------------- - Demo livechat sessions that received feedback are explicitly marked as ended using livechat_end_dt. - The info side panel correctly reflects closed conversations with coherent outcome information. Task-5412081 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250001
This update resolves a JavaScript error that occurred when reloading the shopfloor app, specifically during MO process runs. The fix disables the automatic focus of the search bar, preventing a 'null' element error and ensuring consistent functionality. This improves the user experience and stability of the shopfloor application.
Original PR description
Steps to reproduce:
- Open the shopfloor app
- Reload or duplicate the page where the MO process is running
Issue:
A JavaScript error occur during reload:
UncaughtClientError > TypeError
Uncaught Javascript Error > Cannot read properties of null (reading 'blur')
Occured on 101125414-19-0-all.runbot180.odoo.com on 2026-02-16 04:59:28 GMT
TypeError: Cannot read properties of null (reading 'blur')
at https://101125414-19-0-all.runbot180.odoo.com/web/assets
/9d8abcf/web.assets_web.min.js:36280:459
Cause:
This happens when the search bar component attempts to call `blur()` on `inputRef.el` while the element is not yet available or has already been destroyed during the component lifecycle.
Fix:
Disable the search bar autofocus in the shopfloor
`env.config.disableSearchBarAutofocus = true`.
opw-5902675
upg-3894728
Forward-Port-Of: odoo/enterprise#109803
Forward-Port-Of: odoo/enterprise#107491This update removes a temporary workaround in the API documentation that was created when some fields in Odoo were renamed. This change ensures the API documentation accurately reflects the current field names, providing developers with the correct information. It's a minor fix to maintain the consistency and reliability of our API.
Original PR description
Reference-to: ec2b2edda9d4a2e4fb45d0 ([FIX] base: rename inherited custom field) 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#249161 Forward-Port-Of: odoo/odoo#249072
This update resolves a bug that caused the Odoo Enterprise application to crash when users switched between the text and HTML composer in AI chat. The fix ensures focus handling correctly works for both composer types, preventing errors and improving stability.
Original PR description
*=ai_app In AI chat, focusing the composer used to call ev.target.select(). That works for the text composer (textarea), but not for the HTML composer (contenteditable), where select() doesn’t exist and causes a TypeError. This update makes focus handling respect the active composer mode: - text mode keeps the existing select behavior - html mode uses the editor focus path instead task-5981018 Forward-Port-Of: odoo/enterprise#109634 Forward-Port-Of: odoo/enterprise#109163
This update resolves an unexpected behavior in the HTML editor within Safari, where pressing the spacebar would incorrectly move the text selection. The fix addresses a discrepancy in how Safari handles text node normalization, ensuring consistent and accurate selection behavior across browsers.
Original PR description
Problem: In Safari, pressing space sometimes can move the selection unexpectedly. Cause: `node.normalize()` in Safari doesn't work in the same way as in Chrome or Firefox. When the selection is on a…
Problem: In Safari, pressing space sometimes can move the selection unexpectedly. Cause: `node.normalize()` in Safari doesn't work in the same way as in Chrome or Firefox. When the selection is on a text node adjacent to another and we normalize, the two text nodes will be merged but the selection will move to the parent element instead of the correct position inside the new merged text node. Example: before normalize: `<span>"ab""c[]d"</span>` after normalize: `<span>"ab[]cd"</span>` (expected) vs `<span[]>"abcd"</span>` (Safari) Solution: Instead of using `normalize`, we manually merge adjacent text nodes and properly restore the selection by computing the absolute offset before the merge and restoring it to the correct position in the merged text node. Steps to reproduce: - Have two adjacent text nodes inside a `span`. - Put the selection on the second text node in the middle. - Press space. - The selection will move to the end of the text. opw-5956709 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#252485 Forward-Port-Of: odoo/odoo#251918
This update fixes an issue where employee status information wasn't being retrieved correctly, leading to potential maintenance challenges. By reading `im_status` directly, the system now accurately captures necessary data for out-of-office calculations and internal user access, ensuring consistent employee status representation.
Original PR description
Just reading `im_status` instead of the dedicated method makes the maintenance harder and it is potentially problematic as it doesn't return the `im_status_access_token` nor the necessary extra information from employee records to compute out of office. In the 2 flows that are fixed here, the token is not mandatory as employee data is typically returned to internal users which have the right to read partners regardless. Leave status is also sent as part of `_store_avatar_card_fields` so that is also fine, but homeworking status appears to not be sent. `_store_avatar_card_fields` does return `work_location_id` and its type but `_store_im_status_fields` returns `work_location_type` and that is what is used in `hr-homeworking-office` of `imStatusDataRegistry`.
This update adjusts the spacing in the live chat sidebar to create a cleaner and more visually appealing design. Specifically, the spacing between the language code and the conversation badge counter has been reduced, and the language code is now displayed with a muted style for better readability. This improves the overall user experience.
Original PR description
Before this commit, discuss app sidebar items that had both the language and the important badge counter had too much spacing. This commit adapts spacing to preserve visually the same except reducing the language and counter spacing. The language code was also too visible compared to conversation name, so this PR improves by putting a `.text-muted` on it. Before / After <img width="297" height="945" alt="Screenshot 2026-03-06 at 14 44 59" src="https://github.com/user-attachments/assets/b75fc8ae-7c56-4918-8adb-5a347b740d7e" /> <img width="298" height="949" alt="Screenshot 2026-03-06 at 14 44 45" src="https://github.com/user-attachments/assets/6f3b98ec-4f54-438c-8e8b-bdac9a842a5d" />
This update improves the Knowledge app by automatically moving related articles to the trash when an audit report is deleted. Previously, linked articles remained visible, leading to cluttered workspaces and confusion. This change ensures a cleaner and more organized Knowledge experience for users.
Original PR description
When a user deletes an audit report, the articles linked to that report currently remain visible in the Knowledge app. This can lead to cluttered workspaces and confusion about which articles are still relevant. To keep workspaces clean, these linked articles will now be automatically moved to the trash when the audit report is deleted. Task-5902448 Forward-Port-Of: odoo/enterprise#101234
This update resolves an issue where multi-page invoices generated as PDFs would display an empty first page. The fix adjusts how the PDF rendering engine handles table formatting, ensuring all invoice lines are correctly placed across multiple pages. This improves the user experience when printing invoices.
Original PR description
Steps to reproduce: 1. Create an invoice with enough lines to span at least two pages. 2. Print the Invoice PDF. Observation: The first page appears empty (except for the header), and the entire invoice lines table is pushed to the second page. Cause: The introduction of the 'table-responsive-sm' wrapper in saas-19.1 includes 'overflow-x: auto'. The wkhtmltopdf rendering engine treats elements with overflow properties as unbreakable atomic blocks. If the block's height exceeds the remaining space on the current page, the engine moves the entire container to the next page rather than splitting it. Solution: Apply 'overflow: visible !important' to the 'table-responsive-sm' div. This overrides the Bootstrap default for the reporting engine, allowing the internal table rows to break naturally across pages while retaining the responsive wrapper for web/portal views." opw-5937043 Forward-Port-Of: odoo/odoo#251221
This update ensures that the 'Outstanding Account' field is automatically populated when a new 'Card' payment method is created in Point of Sale. Previously, the system lacked this configuration, causing inconsistencies between automated setup and manual setup, which has now been resolved to improve data accuracy and streamline the POS configuration process.
Original PR description
Steps to reproduce: 1. Initialize a new database with 'point_of_sale' and 'accountant' modules. 2. Go to Configuration > Payment Methods and open the 'Card' payment method. 3. Observe that the 'Outstanding Account' field is empty, despite being required in the view for bank journals. The issue occurred because the '_create_journal_and_payment_methods' method created the default 'Card' payment method without specifying an 'outstanding_account_id'. While the ORM allows this (as the field is only required in the view), it creates an inconsistency between automated setup and manual configuration. Solution: Modify '_create_journal_and_payment_methods' to automatically assign the 'outstanding_account_id' during creation. It follows the pattern used in the payment method's onchange logic by fetching the default debit account from the chart template or falling back to the company's transfer account. opw-5914536 Forward-Port-Of: odoo/odoo#249439
This update resolves a warning message users encountered when adding Google Shared Drive links to course content. The fix allows the system to properly access files within Shared Drives by explicitly requesting broader access through the Google Drive API. This ensures a smoother experience for users adding content from Shared Drives.
Original PR description
Step to reproduce: 1. Install `website_slides` 2. Go to eLearning > Courses > select a course > Add Content 3. Paste a public link that belongs to a file located in a Google `Shared Drive` Issue: - The system shows a warning `Your file could not be found on Google Drive, please check the link and/or privacy settings` even if the link is accessible via a browser in incognito mode. Cause: - The Google Drive API restricts the search scope to the user's personal `My Drive` by default It filters out items located in Shared Drives unless the client explicitly signals Solution: - Add `params['supportsAllDrives'] = 'true'` to the API request opw-5424413 Forward-Port-Of: odoo/odoo#241037
This update resolves an issue where the Timesheet Assistant form wasn't clearing after deselecting multiple suggestions. Now, when you remove all suggestions, the form automatically resets and disappears, preventing confusion and ensuring accurate timesheet data. This improves the user experience and data integrity.
Original PR description
# Steps to reproduce - Open Timesheet Assistant - Select multiple suggestions - Click on the cross to deselect all suggestions # Current behaviour The created timesheet from is not cleared and remains opened. # Expected behaviour Instead, the form should be cleared and disappear. task-6003551 Forward-Port-Of: odoo/enterprise#109819
This update ensures that all float time fields, including those in list views, are formatted consistently using the same options. Previously, the list view footer wasn't correctly applying the formatting rules, leading to discrepancies. This change guarantees a uniform and accurate display of float time values across all views.
Original PR description
Before this commit, the float_time formatter didn't extract the options "unit" and the field widget was. So, the list view footer, that was using the formatter and not the field widget, wasn't formatted in the same way that the column. Now, the formatter and the field widget float_time time behaviour with the options are the same. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where setting the inventory quantity to zero on a product without a defined location would cause an error. The fix ensures that the system handles this scenario gracefully, preventing disruptions to inventory management. This improves data accuracy and reliability.
Original PR description
When a user sets the inventory quantity to 0 on a quant while the product’s Inventory Location is unset, a traceback is raised. Steps to reproduce the error: - Install ``stock`` module with demo data…
When a user sets the inventory quantity to 0 on a quant while
the product’s Inventory Location is unset, a traceback is raised.
Steps to reproduce the error:
- Install ``stock`` module with demo data
- Open ``Cabinet with Doors`` product
- In Inventory tab, unset Inventory Location > Open forecast report > click the On Hand quantity
- Select the quant > Actions > Set to 0
Traceback:
```py
ValueError: NotNullViolation('null value in column "location_dest_id"
of relation "stock_move" violates not-null constraint
```
https://github.com/odoo/odoo/blob/bc790e13ddf3ceacead40cc6ff8d27f1a5f5364d/addons/stock/models/stock_quant.py#L1005-L1016
When property_stock_inventory is unset,
the ``_get_inventory_move_values`` method assigns a NULL value to ``location_dest_id`` in ``move_vals``.
As a result, creating the stock move with a NULL ``location_dest_id`` leads to the above traceback.
sentry-7117991902
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#245245This update resolves an issue where the 'stats' button on a Purchase Order (PO) would disappear after the PO was canceled when it was originally created from a Stock Movement (MO). The fix ensures the PO remains linked to the MO, maintaining accurate tracking and reporting. This prevents confusion and ensures data integrity.
Original PR description
* Currently when a PO generated from MO, after that we cancel that PO, the MO statsbutton disappear, * Reason: because we remove move_dest_ids out of po line so the link is missing 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#250042
This update fixes a display issue in the payroll module where 'Confirm' buttons were incorrectly visible when payslips existed. The system now correctly hides these buttons when payslips are present, streamlining the user experience. This ensures users only see confirmation options when appropriate.
Original PR description
The 'empty_payslips' field is an Integer, but the view was treating it as a pure Boolean. This commit: - Updates 'Confirm' buttons to be invisible when payslips exist (> 0). Task: 5916154 Forward-Port-Of: odoo/enterprise#106957
This update removes unnecessary overrides related to Swiss payroll calculations within the payrun process. The core logic has been corrected, making these overrides no longer required. This streamlines the payroll process and ensures accurate calculations.
Original PR description
Not necessary anymore, standard logic has been fixed Forward-Port-Of: odoo/enterprise#108121
This update fixes an issue where long preset names in Point of Sale (PoS) were causing the preset button to take up too much space and obscure other buttons on the screen. The change ensures the PoS interface remains usable, even with lengthy preset names, improving the overall user experience. This was a minor visual adjustment.
Original PR description
# How to reproduce - Enable Take out / Delivery / Members in PoS Configuration - Create a preset with a very long name and set it as default - Open the register # The problem The preset button takes too much space and hide the other buttons opw-5938578 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#250671
This update ensures that employees only receive timesheets for public holidays that are relevant to their company. Previously, timesheets were incorrectly generated for employees in companies without the holiday, leading to inaccurate time tracking. This change improves data accuracy and reporting.
Original PR description
**Steps to reproduce** - Have 2 companies A and B - Use a single working schedule (needs to have no company on it) for both companies and their employees - Create a public holiday with company A, while having company B in the selected companies - There's a timesheet for the public holiday created for employees of company B, even though the public holiday will not apply for them. **Change** Only generate the timesheets for employees belonging to the companies of the public holidays. opw-5498462 Forward-Port-Of: odoo/odoo#245743