Daily updates from Odoo
Wednesday, November 12, 2025
6 changes · saas-18.2
Resolved issues and error corrections
This change fixes a failing test in the app creation experience used by Studio. It helps keep the product stable by preventing an error in automated validation, reducing the risk of regressions reaching users.
This fix makes it possible to drag and drop documents on touch devices, where the previous browser behavior could lose the data needed to complete the drop. It improves the experience for mobile users by restoring a feature that was failing in some browsers.
Original PR description
For now, touch devices do not work with native drag and drop in browsers. When a datatransfer is set on a dragstart event, it is lost before reaching the drop event, but only when using a touch device. Unfortunately, I still haven't found any sources that clearly explain whether this is a known bug or a limitation. The fact that on mobile (really mobile, not devtools, you need a touch device) drag fails on Chrome but succeeds on Firefox. To fix this issue, this commit manages datatransfers in an external variable, without using the method in the Event. I keep the original behavior as default, I just add a fallback to my global datatransfer variable. opw-5139435 Forward-Port-Of: odoo/enterprise#97091
This update corrects a test in the barcode batch workflow so it runs reliably on newer Python versions. It prevents false test failures caused by changes in how record ordering is handled, helping maintain stable quality checks.
Original PR description
*: stock_barcode_picking_batch Steps to reproduce ================== Use python > 3.10 Run the test test_pack_batch_in_multiple_packages It fails on assertRecordValues, the records are not in the same order Cause of the issue ================== Recordsets ordering is not stable across python versions. It is implemented as `return set(self._ids) < set(other._ids)` https://github.com/odoo/odoo/blob/8a026b875a9b70f12689cdbd71d7e54b987d0612/odoo/models.py#L6636 Since this is a subset check, it always returns false when called with different ids Solution ======== Compare using the id directly opw-231140 Forward-Port-Of: odoo/enterprise#99118
This change simplifies a styling rule used in spreadsheet side panels. It keeps the same visual result while making the code easier to maintain and reducing the risk of future styling issues.
Original PR description
Because of a really strong rule in o_spreadsheet lib that forced the box-sizing property pretty much everywhere, we came up with a super dense rule to counteract it inside odoo and specifically inside the side panels. This commits aims to simplify it at best with the common denominator of those rules. Task-4878174 Forward-Port-Of: odoo/enterprise#98876
This change fixes how subscription quantities are updated when an invoice is only partially credited. After the fix, the remaining invoiced quantity stays accurate instead of dropping to zero, which helps keep subscription billing records correct.
Original PR description
**Issue** When creating a partial credit note (i.e., for a quantity less than originally invoiced) for a subscription invoice, the `qty_invoiced` on the corresponding subscription order line is…
**Issue** When creating a partial credit note (i.e., for a quantity less than originally invoiced) for a subscription invoice, the `qty_invoiced` on the corresponding subscription order line is incorrectly set to zero, instead of reflecting the remaining quantity. **Steps to Reproduce** 1. Create a subscription with a quantity of 50. 2. Confirm the subscription and generate an invoice. 3. Create a credit note (reversal) for the invoice. 4. Change the credited quantity to 30. 5. Post the credit note. 6. The subscription order line shows qty_invoiced = 0 instead of the expected 20. **Root Cause** The method `_get_max_invoiced_date()` is used to determine the latest invoiced period for a subscription. In its original implementation, it removes refunded periods from the list of invoice dates regardless of whether the refund is partial or full. This causes the system to consider the period as not invoiced at all, which leads to incorrect recomputation of `qty_invoiced` **Fix** Adjust `_get_max_invoiced_date()` to track the net invoiced quantity per period. A period is only removed from the list of invoice dates if it has been fully refunded (i.e., net quantity is zero). This ensures that partially refunded periods are still considered invoiced, and the `qty_invoiced` is correctly updated to reflect the remaining quantity Opw-4908760 Forward-Port-Of: odoo/enterprise#91344
This change prevents an access error that could appear when using the same unrestricted analytic account across multiple companies. It ensures purchase orders only check budget information the current user is allowed to read, avoiding interruptions for users working in company-specific budgets.
Original PR description
Steps to reproduce: - Create an analytic account [ACCOUNT] not restricted to any company - Create an analytical distribution model applying [ACCOUNT] to [PRODUCT] not restricted to any company - Create a budget in company [COMP A] using analytic account [ACCOUNT] - Create a budget in company [COMP B] using analytic account [ACCOUNT] - In company [COMP B], create a purchase order, add [PRODUCT] to a line Issue: Access Error is raised Analysis: Because we search with sudo company rules are bypassed and the system assign both budget lines to the order line (budget_line_ids). When we access the field, the system try to access the budget line of the other company, causing the error. As solution we revert https://github.com/odoo-dev/enterprise/commit/4941c1928c9a2bcb38af3cadf023f904c9fd9be0 removing the `sudo` on the search and we explicitly check if the user has read access on the budget analytic model opw-5056712 Forward-Port-Of: odoo/enterprise#98573