Monday, February 16, 2026
41 changes · saas-19.1
Resolved issues and error corrections
This update ensures that pickings are automatically created when validating POS orders linked to sale orders. Previously, stock levels weren't updated correctly if pickings were scheduled for the end of a POS session. This fix provides more accurate stock management for point-of-sale transactions.
Original PR description
Before this commit, when validating a POS order linked to a sale order, if the Inventory Management was configured to create pickings at the end of the session, no picking was created for the order, and the sale order stock was not updated. This commit fixes this issue by ensuring that the picking is created for the imported sale orders in real time. opw-5423113 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248424 Forward-Port-Of: odoo/odoo#244739
This update fixes an issue where the record count wasn't correctly displayed alongside group labels in list views. Previously, the count was appearing in unrelated columns, creating a confusing user experience. This change ensures the grouped record count is now consistently shown next to the group label, improving clarity and usability.
Original PR description
Currently, when applying a `Group By` filter in `list views`, the record count is displayed far from the group label. **Steps to reproduce:** - Open `Apps` and switch to the list view. - Apply a…
Currently, when applying a `Group By` filter in `list views`, the record count is displayed far from the group label. **Steps to reproduce:** - Open `Apps` and switch to the list view. - Apply a `Group By` filter (e.g., Author). - Observe where the grouped record count is displayed. **Observation:** The total number of records is rendered under unrelated columns rather than being displayed next to the group label. **Root Cause:** After commit [1], the `ms-auto` class at [2] causes the `group count` to be moved away from the group label. **Fix:** This commit ensures that the grouped record count is displayed next to the group label, consistent with previous versions. **Before:** <img width="1909" height="466" alt="5438766_before" src="https://github.com/user-attachments/assets/3ac44b19-2dad-4f01-ab78-8f456405e4d5" /> **After:** <img width="1905" height="453" alt="5438766_after" src="https://github.com/user-attachments/assets/ce0143e5-feeb-49ee-8d42-5235add669e4" /> [1]: https://github.com/odoo/odoo/pull/235250/commits/963696f4839b3043226ac118bf6a4ae8e8e92823 [2]: https://github.com/odoo/odoo/blob/25c372b254cec8635bb73b04c7729530f8a08e72/addons/web/static/src/views/list/list_renderer.xml#L247 opw-5438766
This update resolves a minor issue that prevented the application from functioning correctly when using the Ukrainian language. The fix addresses a problem with how the system retrieves language patterns, ensuring a more reliable experience for users in Ukrainian. This change improves overall application stability.
Original PR description
**Steps to Reproduce:** 1. Install `stock_fleet` module (with demo data). 2. Set the **Ukrainian** language for the user. 3. Open Fleet > Vehicle > Click Category Error: `KeyError: '2'` **Cause:** Babel's CLDR list patterns for some locales (e.g., Ukrainian 'unit-short') do not include the two-item pattern key, so when babel's `format_list` attempts to access patterns, it will raise an error. **Fix:** This commit wraps the call in a try/except that handles KeyError and retries formatting with the 'standard' style to avoid the crash. Forward-Port-Of: odoo/odoo#248519 Forward-Port-Of: odoo/odoo#248228
This update fixes a potential crash in the Italian EDI invoicing process when invoices are created with zero amounts in a foreign currency (like USD). The issue stemmed from a division-by-zero error during currency conversion. The fix ensures the system handles zero amounts gracefully, preventing errors and ensuring invoices can be generated correctly.
Original PR description
**Steps to reproduce:** 1. Install the `l10n_it_edi` and switch to IT company 2. Go to Accounting → Invoice. 3. Create an invoice add partner and change the currency to USD 4. Add a product and apply tax and discount of 100% and confirm 3. Click on Send **Issue:** A ZeroDivisionError is raised during the Italian EDI XML generation. `ZeroDivisionError: float division by zero` **Cause:** The conversion rate is computed by dividing `amount_total` by `amount_total_signed` without handling the case where `amount_total_signed` is `0.0`. **Solution:** Skip the conversion rate computation when the signed total amount is zero, preventing the division by zero **opw-5481821** Forward-Port-Of: odoo/odoo#245087 Forward-Port-Of: odoo/odoo#244423
This update corrects a previous issue where taxes related to GST, TDS, and TCS registration remained active even after the registration settings were disabled. Now, when a user removes these registrations, the associated taxes are automatically deactivated, ensuring accurate tax calculations and compliance. This simplifies tax management for users.
Original PR description
Before this PR: - When enabling TDS, TCS, or GST registration from settings, related taxes are activated, but when disabling these settings, the taxes remain active. After this PR: - When disabling TDS, TCS, or GST registration, all related taxes are deactivated. task-5456351 Forward-Port-Of: odoo/odoo#242030
This update corrects a flaw in the forecasting system that previously didn't account for materials used in production. Now, daily demand calculations accurately reflect the consumption of components within manufacturing orders, leading to more reliable inventory predictions. This ensures better production planning and reduces potential stockouts.
Original PR description
The daily demand in forecasting does not take into consideration the product that are used for production. Steps to reproduce: ------------------- * Install stock and mrp * Create a tracked Product…
The daily demand in forecasting does not take into consideration the product that are used for production. Steps to reproduce: ------------------- * Install stock and mrp * Create a tracked Product "Component" with RR * Add some "on hand quantity" * Create Product "Product" with a BOM that use "Component" * Create a manufacturing order for "Product" and confirm it * Go back on the RR of "Component" and use "resplenishment information" button (small i) -> Daily demand does not reflect the "Component" used for manufacturing. Observation: ------------- When Opening the resplenishment information, the daily_demand is calculated: https://github.com/odoo/odoo/blob/c38346ccc3e44670b76bfb010795bdfa7004b532/addons/stock/wizard/stock_replenishment_info.py#L177 For that calculation quantity_out is used, obtained just before: https://github.com/odoo/odoo/blob/c38346ccc3e44670b76bfb010795bdfa7004b532/addons/stock/wizard/stock_replenishment_info.py#L164-L167 Since it only consider moves that goes directly to the client, it will not take into consideration products that are used for production. opw-5497584 Forward-Port-Of: odoo/odoo#246125
This update fixes an issue where the total amount for invoice sections was incorrectly positioned in the PDF reports for the l10n_in tax module in Russia. The change adds the necessary column to align with product HSN/SAC reporting, ensuring accurate invoice summaries. This improves the clarity and accuracy of invoices generated for Russian businesses.
Original PR description
How to reproduce : - With l10n_in company - Create Invoice - Add section - Add product under section - Confirm invoice - Print to pdf The problem : The value for the total amount of the section is in the wrong column (the one to the left) Why : The l10n_in module adds a column in the report for the HSN/SAC of the products. It correctly did for the products and the table title but not for the sections. opw-5879828 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#246768
This update fixes an issue where the HTML editor toolbar remained visible on mobile devices when the side menu or a popover was open. Now, the toolbar disappears automatically when these elements are active, providing a cleaner and more user-friendly mobile experience. This enhancement ensures a better workflow for users editing content on their phones.
Original PR description
In mobile, when the side menu or a popover is opened, the toolbar remains displayed above the keyboard. This commit hides the mobile toolbar while such elements are opened. Steps to reproduce: - In mobile, go to a "To do" note - Put cursor inside text to display the toolbar - Open the hamburger menu => The toolbar remained displayed on top of the side menu - Open the gear menu => The toolbar remained displayed while the menu was opened task-5222582 Forward-Port-Of: odoo/odoo#247389 Forward-Port-Of: odoo/odoo#241611
This update resolves an issue where users could incorrectly modify attendance records. The change now prevents unauthorized updates to attendance data, ensuring data integrity and accuracy. Added test coverage to confirm the fix.
Original PR description
Closes [odoo/odoo#226007](https://github.com/odoo/odoo/issues/226007). Description of the issue/feature this PR addresses: Prevents a user from updating their attendance record by changing the employee to the one whose attendance is not managed by the current user. Current behavior before PR: - Assign the Officer Group of Attendance group to a user. - Assign the user as the attendance manager of itself. - Login with that user. - Create an attendance record for the employee and save it. - Try to change the employee and save; an error will be thrown as expected. - Go to the Attendance menu; the record will still be saved. Desired behavior after PR is merged: This commit ensures that un-allowed write does not take place + test coverage added. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#243719 Forward-Port-Of: odoo/odoo#226335
This pull request fixes a problem where invoice descriptions were not consistently displayed when printing invoices, particularly with factur-x e-invoices. The update ensures that both the custom description and product names are correctly printed, improving invoice accuracy and compliance. This resolves issues reported by users importing factur-x invoices.
Original PR description
**Issue 1** Steps to reproduce: - Create a new invoice - Add an invoice line, with just a description - Save - On the same line, add any product - Print Issue: Only the custom description will be visible on the line opw-5471809 --- **Issue 2** Steps to reproduce: - Import factur-x e-invoice - Print pdf Issue: Only product name will be printed, even if the invoice record include the complete description opw-5471809 Forward-Port-Of: odoo/odoo#248010
This update resolves a memory issue that occurred when Odoo processed large amounts of email data. The fix optimizes how recordsets are handled, preventing excessive memory allocation and ensuring stable performance, particularly when dealing with many records. This improves the overall reliability of Odoo's email functionality.
Original PR description
**Issue Description :** In _mail_group_by_operation_for_mail_message_operation [function](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/addons/mail/models/models.py#L77).…
**Issue Description :**
In _mail_group_by_operation_for_mail_message_operation [function](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/addons/mail/models/models.py#L77).
The memory error occurred due to recordset concatenation triggered by: [operation_documents[record_operation] += record](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/addons/mail/models/models.py#L83)
This resulted in repeated recordset concatenations inside a loop. Since recordsets are immutable, each concatenation [creates a new recordset](https://github.com/odoo/odoo/blob/a1f4c98ec025cb36b218072f5557c93d5f329929/odoo/orm/models.py#L5874) and reallocates the underlying tuple of IDs. When processing a large number of records this caused memory growth.
**Solution:**
Replace iterative recordset concatenation.
- Collect record IDs using Python sets (O(1) insertion).
- Build recordsets once per operation after the loop.
- Apply with_prefetch() only once per operation.
**Traceback:**
```
File "/home/odoo/src/odoo/saas-19.1/addons/mail/models/mail_message.py",
line 397, in _search
allowed_ids.update(self._find_allowed_doc_ids(model_ids))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.1/addons/mail/models/mail_message.py",
line 428, in _find_allowed_doc_ids
operation_res_ids =
records_all._mail_group_by_operation_for_mail_message_operation('read')
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.1/addons/mail/models/models.py", line 83,
in _mail_group_by_operation_for_mail_message_operation
operation_documents[record_operation] += record
File "/home/odoo/src/odoo/saas-19.1/odoo/orm/models.py", line 5851, in
__add__
return self.concat(other)
^^^^^^^^^^^^^^^^^^
File "/home/odoo/src/odoo/saas-19.1/odoo/orm/models.py", line 5864, in concat
ids.extend(arg._ids)
MemoryError
```
opw-[5915534]
upg-[3878714]
tgb - 2445
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-prThis update resolves a visual bug where product arrows within snippets were incorrectly positioned, particularly when the snippet was set to full width. The fix ensures arrows appear correctly regardless of snippet size or scrolling mode, improving the overall presentation of product listings on the website. This enhances the user experience and consistency of product displays.
Original PR description
*: website_sale Since commit [1], the position of the arrows in the product snippet was broken when they were set to appear at the bottom. It also fixes the arrow positioning when the snippet is set…
*: website_sale Since commit [1], the position of the arrows in the product snippet was broken when they were set to appear at the bottom. It also fixes the arrow positioning when the snippet is set to full width, with the title displayed on the side and "Scrolling Mode" set to "All." This commit correctly adjusts the arrow positioning. [1]: https://github.com/odoo/odoo/commit/54fde5da6c229a7173c5b4c042b3330598db3904 task-5935743 | Before | After | |--------|--------| | <img width="1617" height="635" alt="Capture d’écran 2026-02-13 à 09 40 36" src="https://github.com/user-attachments/assets/21e3545c-e243-4ee7-9fd5-51ca06b8c496" /> | <img width="1620" height="664" alt="Capture d’écran 2026-02-13 à 09 39 14" src="https://github.com/user-attachments/assets/6dcdfc0f-6dc8-4293-9d23-ea36d19fc2b4" /> | | <img width="1921" height="719" alt="Capture d’écran 2026-02-13 à 11 12 22" src="https://github.com/user-attachments/assets/8916438c-8108-43ec-a70a-aba8c83ba881" /> | <img width="1918" height="654" alt="Capture d’écran 2026-02-13 à 11 17 21" src="https://github.com/user-attachments/assets/df872f4a-5674-4fff-a0de-b6c99f30acb2" /> | --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue preventing users from correctly updating map addresses within the website. The fix eliminates an infinite loop that occurred when changing map locations, ensuring accurate map displays after address modifications. This improves the user experience when using the Google Maps integration.
Original PR description
When we add the google map block and try to change the address, we're unable to do so because of the infinite loop. The issue is due to the onPlaceChanged call inside the onPlaceChanged. We'll use commitPlace instead to commit place's coordinates, then re-render the map to reflect it. Steps to reproduce: 1. Add a google map block. 2. Try to change the address. It doesn't work due to the maximum call size exceeded due to infinite loop. opw-5386094 Forward-Port-Of: odoo/odoo#243679
This update fixes an issue where resetting dynamic colors in SVG illustrations would cause the images to disappear. Now, resetting the color palette restores the correct theme colors, ensuring SVG images remain visible and functional after color adjustments. This improves the user experience when customizing website visuals.
Original PR description
Steps to reproduce: - Insert a media library SVG illustration. - Change one of its Dynamic Colors. - Click the reset button in the colorpicker. => The SVG disappears. Before this commit, resetting a dynamic SVG color could send an empty color value and the image failed to render. After this commit, resetting restores the theme palette colors so the SVG stays visible. task-5868584 Forward-Port-Of: odoo/odoo#248092 Forward-Port-Of: odoo/odoo#245778
This update fixes an issue where the split screen in the restaurant POS module incorrectly showed discount information. The fix ensures that the correct discount value (as a percentage) is displayed, resolving a confusing user experience. This improves accuracy and clarity when splitting bills.
Original PR description
Steps: --- - Configure Restaurant with a global discount. - Open a session and add products. - Apply a global discount. - Open the control buttons and click Split. Issue: --- - The split screen displays the text `With [Object Object]% discount`. Cause: --- - The discount object was rendered directly instead of its value. Fix: --- - Display the correct discount value based on its type. task-5905885 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
A recent update prevented the accidental removal of content within HTML editor sections. Previously, pressing 'Delete' after selecting all content could unexpectedly clear the entire section, even when it was designed to be non-editable. This fix ensures that only intended content is removed, improving stability and user experience.
Original PR description
**Steps to reproduce:** - Drop a dynamic snippet, for example Recent Blogs → “Latest Stories”. - Click on the section title. - Press Ctrl + A. - Press Delete. **Description of the issue:** - The content part is removed even though it is inside a contenteditable false container. doing discard after it crash the page. **Cause:** - In `removeNode`, there is no check to prevent removal of children of a contenteditable false element. - As a result, if a contenteditable false element itself is unremovable, the parent node is preserved, but its children are still removed. **Solution:** - In `removeNode`, add a check to return false if node is not `isNodeEditable`. task-5858259 Forward-Port-Of: odoo/odoo#245463
This update fixes an issue where the code editor lost focus after changing the syntax highlighting language. Now, users can seamlessly switch languages without needing to manually re-enter the code. This improves the user experience and efficiency when working with code snippets.
Original PR description
**Description of the issue:** - When a user changes the language of a syntax-highlighted code block, the editor loses focus from the code input. As a result, the user must manually click back into…
**Description of the issue:** - When a user changes the language of a syntax-highlighted code block, the editor loses focus from the code input. As a result, the user must manually click back into the code block to continue typing **Steps to reproduce:** - Insert a syntax-highlighted code block. - Click the language dropdown to change the syntax highlighting language. - Select a different language from the dropdown. The language dropdown closes correctly after selection. Focus does not return to the code block input. Instead, focus remains on the dropdown button. **Cause:** - Although focus is explicitly set back to the code block input after selecting a language, closing the dropdown restores focus to the element that was active when the dropdown was opened . As a result, the input does not receive focus. **Solution:** - For the language selector dropdown, set focusToggleOnClosed = false so that closing the dropdown does not restore focus to the dropdown button. - For the copy button, prevent focus on pointerdown. task-5785595 Forward-Port-Of: odoo/odoo#245161
This update corrects a technical issue where website controllers could incorrectly link to irrelevant model types, leading to potential errors. By restricting controller bindings to concrete models, we’ve enhanced the stability and performance of the Odoo website. This change ensures data integrity and a smoother user experience.
Original PR description
Before this commit, a website_controller_page could be bound to any sort of model. For some of them this was irrelevant or plain wrong: - transient models: they are not pointing to anything relevant business wise - abstract: they cannot even have records, and most of them are mixin - _auto = False: Those are models with a table which is a custom one. The heuristics here is to say that records are not "real" ones. Also, most of these tables are sqlViews or something similar Business wise there were errors because of this, so this commit introduces a constraint that forbids the above use cases. sentry-6842596566 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#246115
This update significantly speeds up the inventory valuation report by optimizing how it calculates inventory values. Previously, the system was performing redundant calculations, leading to slow performance. This change eliminates unnecessary steps and batching processes, resulting in a faster and more efficient report generation.
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#247625
This update adds a system setting to automatically delete old device logs, helping to manage database storage and improve performance. Administrators can now define how long session data is retained, ensuring efficient log management. Careful consideration of database backups is required when setting this retention period.
Original PR description
The res.device.log table contains a huge amount of data. It makes sense to provide a way for administrators to garbage collect these logs according to their retention policy. The `ir.config_parameter` to determine the retention policy is `base.res_device_log_retention_days`. With the hard GC configured, a log will be deleted if its last activity has exceeded the number of days specified in the system parameter. This can remove all traces of a session identifier. The parameter must be chosen judiciously according to the database backups. Note: Put more information in the logs, as this data may be deleted. Task-5928301
This update resolves an issue where Point of Sale would crash when a user created an order containing a combo with an archived product. The fix prevents the system from attempting to access data from the archived product, ensuring a stable Point of Sale experience. This improves reliability for users managing product inventories.
Original PR description
Steps to reproduce: - Archive a product used in a combo. - Open Point of Sale. - Create a new order. - A blank screen appears (error in console) Cause: - The system attempts to access fields of an archived product included in a combo choice. Fix: - Skip loading the combo choice whose product is archived. Task-5936290
This update addresses a recent failure in the automated testing for the Employee Holiday Report. The fix involves ensuring a necessary table is always initialized, resolving an issue identified in a previous Odoo bug report. This ensures the report functionality continues to operate correctly.
Original PR description
Since odoo/odoo#215798 , Click All test has been failing, this commit aims to fix it by introducing a proper _init function to ensure the table exists at any time task-5907217 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where changes made to website translations weren't consistently saved. Now, when editing a translation in one language and switching to another, all delayed translation versions are properly saved, ensuring accurate display across languages. This improves the user experience and data consistency for multilingual websites.
Original PR description
Scenario: - have two languages on website - drop a snippet on a page in main language - go to secondary language => you see the previous page version, and a notification with `Click on…
Scenario: - have two languages on website - drop a snippet on a page in main language - go to secondary language => you see the previous page version, and a notification with `Click on "Edit/Translate" to apply changes made on default language.` is shown - click on Edit: Translate => you see the version with the change from main language applied - save without doing a change Result: nothing is saved Expectation: delayed translations that we are seeing when editing translation should be saved. Cause: Delayed translation (draft version from change of main language) on website were added or disabled with: - 2d08f97c0778469b409fca23f2be5f5a98ce3df8 (October 2023) in 17.0 added the delay translation feature - 0e0a74f8c5fc9f45311e629a76608c6c986d635d (December 2023) in 17.0 disabled the feature - 03a85b13b2c46ef7174123d902e95d5103031c6c (September 2025) in 19.0 enabled the feature again Currently delayed translations are only updated if there is a part of that translation that has been edited and is dirty. Fix: when we save translations, we should also save o_delay_translation that are not dirty. These translations if there is a delayed translation will publish the delayed translation. opw-5187670 opw-5240423 opw-5250497 opw-5254832 opw-5344412 opw-5347408 opw-5419427 opw-5424761 opw-5892371 Forward-Port-Of: odoo/odoo#238696
This update resolves a minor issue in the HTML editor that could occasionally cause errors. The fix uses a technique called 'optional chaining' to safely access the previous sibling element, preventing the error when the element is missing. This improves the overall stability and reliability of the HTML editor.
Original PR description
Before this commit: in rectifySelection, the focusTarget can be null and causing an error when calling the previousSibling After this commit: now we do an optional chaining(?.) on previousSibling task-5481248 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#248595
This update resolves a problem where font family settings in the mass mailing editor weren't consistently applied. The fix ensures that changes made through the Design Tab correctly override font styles, providing users with greater control over the appearance of their emails. This improves the overall user experience and design flexibility.
Original PR description
There is an issue where some editor descendants have a rule overriding their `font-family` which has more precedence than the inherited `font-family` from the Design Tab. How to reproduce: - create a new mass_mailing - add a text snippet - select all text and change e.g. the `font-size` - open the Design Tab and change the `font-family` of paragraphs Issue: - the text `font-family` does not change Resolution: Fix a css rule applying on every element that is not a `fa` element so that it only applies on the `o_layout` element to let the Design Tab override the `font-family` for specific elements (e.g. `<p>`, `<a>`, ...). task-5869568 Forward-Port-Of: odoo/odoo#245304