Monday, July 14, 2025
9 changes · saas-18.1
Resolved issues and error corrections
When delivery costs are invoiced based on the actual cost after delivery, the checkout page no longer presents the shipping as free. Customers now see a disclaimer explaining that the final delivery charge will be calculated after delivery, reducing confusion and billing surprises.
Original PR description
Issue: If the delivery invoice policy was set to "real" (meaning that we'll invoice the real delivery cost, after delivery), the delivery was shown as being free on eCommerce (since we don't know the cost yet). Fix: Show a disclaimer indicating that the cost will be computed after delivery. opw-4779059 Forward-Port-Of: odoo/odoo#218378
When a purchase order linked to a sales delivery is cancelled, Odoo now lets the delivery use available inventory instead of staying blocked waiting for the cancelled purchase. This helps orders continue smoothly when stock is later added or already available, reducing unnecessary delivery delays.
Original PR description
Steps to reproduce the bug:
- Unarchive the MTO route
- Create a product P1:
- Type: Storable
- Route: MTO
- Supplier: Vendor A
- Create a sales order for 1 unit of P1
- Confirm the SO
→ A purchase order is created for Vendor A with 1 unit of P1
- Cancel the PO
- Update the quantity on hand of P1 to 1
- Go to the delivery picking of the SO
- Check availability
Problem:
The quantity on hand is not taken into account, and the picking remains
in the "Waiting Availability" state.
When the purchase order is cancelled, the stock move should switch to
MTS instead of remaining in MTO.
opw-[4876611](https://www.odoo.com/web#id=4876611&view_type=form&model=project.task)
opw-[4874199](https://www.odoo.com/web#id=4874199&view_type=form&model=project.task)
Forward-Port-Of: odoo/odoo#214785This fix restores an optimized database lookup used when deleting attachments linked through the HTML editor. It reduces delays on very large databases, helping attachment cleanup complete faster and improving overall responsiveness for affected systems.
Original PR description
On a DB with 15M+ attachments, deleting a single attachment takes several seconds. Most of the time is spent on the circular `original_id` foreign key.
We add back the index which was removed in [1]
```
Delete on ir_attachment (cost=0.43..8.45 rows=0 width=0) (actual time=0.274..0.274 rows=0 loops=1)
-> Index Scan using ir_attachment_pkey on ir_attachment (cost=0.43..8.45 rows=1 width=6) (actual time=0.252..0.253 rows=1 loops=1)
Index Cond: (id = 82807)
Planning Time: 0.049 ms
Trigger for constraint ir_attachment_original_id_fkey: time=2330.796 calls=1
```
[1] https://github.com/odoo/odoo/commit/eedf37d6e286b995c47b946be1a6b66817094eff
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#218120This update prevents users from creating or duplicating Italian electronic invoicing document types with the same code. It avoids invoice confirmation errors caused by ambiguous document type matches, improving reliability for Italian invoicing workflows.
Original PR description
**Issue** : The computation of `l10n_it_document_type` fails when multiple `l10n_it.document.type` records share the same code. This can happen if a user duplicates an existing Document Type or…
**Issue** : The computation of `l10n_it_document_type` fails when multiple `l10n_it.document.type` records share the same code. This can happen if a user duplicates an existing Document Type or creates a new one with the same code, causing `get()` on the grouped recordset to return multiple results.
**Traceback :**
```python
File "/home/odoo/odoo/codebase/odoo/17.0/odoo/fields.py", line 3252, in convert_to_cache
raise ValueError("Wrong value for %s: %r" % (self, value))
ValueError: Wrong value for account.move.l10n_it_document_type: l10n_it.document.type(1, 23)
```
**Steps to Reproduce:**
1. Install the `l10n_it_edi_ndd` module.
2. Go to Customer Invoices and create a new invoice.
3. Set a Document Type, then confirm the invoice.
4. Open that Document Type and duplicate it.
5. Create another invoice without setting a Document Type, then confirm it.
observation: you will receive a traceback for wrong value error
**Solution :** This fix adds a check to ensure that the `code` field remains unique across all `l10n_it.document.type` records.
opw - 4902513
related upgrade pr : https://github.com/odoo/upgrade/pull/8032
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#217155The Point of Sale product screen now adjusts product columns on mobile devices instead of forcing a fixed layout. This prevents unwanted vertical scrolling or overflow, making product selection easier for staff using phones or small screens.
Original PR description
- This commit fixes the issue of vertical scrolling on mobile devices, now we responsively display the correct number of product lists by line, instead of forcing the display of 3 per lines. - Also add a test to ensure that the product list does not overflow on mobile devices. task-id: 4922341 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian payroll reporting has been updated to match the DmfA 2025/2 requirements. This helps ensure Belgian payroll declarations use the latest official parameters and reduces the risk of incorrect submissions.
Original PR description
Forward-Port-Of: odoo/enterprise#90016
Bank reconciliation now handles analytic accounting updates in the correct order, preventing repeated update loops. This helps users reconcile bank transactions reliably when analytic distributions are involved.
Original PR description
Since a recent fix[^1], the analytic distribution on journal entries is updated with any update made on analytic items. In order to avoid loops and do things in the right order, a context key was added. However, the reconciliation widget was also manipulating analytic items, so it needed to use the context key as well. opw-4936028 opw-4933629 opw-4935236 opw-4933456 opw-4933652 opw-4935789 opw-4938570 opw-4938388 opw-4935709 opw-4940233 opw-4938849 [^1]: https://github.com/odoo/odoo/commit/8194c6e2bfedc9437964090b1a498c3e8cff225c Forward-Port-Of: odoo/enterprise#90175
Rental combo products now correctly show available booking dates when stock limits are enabled. This prevents customers from seeing every date as unavailable, helping avoid lost rental sales and checkout frustration.
Original PR description
Issue: - Create a rental product (with a rental pricing), - Make it storable and don't allow out-of-stock orders, - Now make it a combo product, - Add a rental combo choice (to be able to save it), - Go to the product's page on eCommerce, - Issue: all dates are unavailable. Cause: The date range picker only relies on `allow_out_of_stock_order` to know whether to compute rental availabilities (but not on `is_storable`). Fix: Also rely on `is_storable` to know whether to compute rental availabilities. opw-4846084 Forward-Port-Of: odoo/enterprise#90084
Fixed an issue where failing part of a quality check on a receipt could incorrectly mark related stock moves as picked. This helps keep receipt processing accurate when some products pass inspection and others are sent to a failure location.
Original PR description
Steps to reproduce the bug:
- Create two storable products: "P1" and "P2"
- create a quality control point:
- operation: receipt
- products: “P1” and “P2”
- Failure location: any one
- Create a receipt for 1 unit of P1 and 2 units of P2
- Pass the quality check for P1
- For P2, pass 1 unit and fail the other
Problem:
A new move for P2 is created to the failure location, but as a result, both moves for P2 are marked as picked, whereas the move for P1 is not. Solution:
We shouldn’t mark any move as picked during the quality check.
Partial backport of: https://github.com/odoo/enterprise/pull/77985/commits/48bfc8a860fa4b5b5e9ea153932f34b47bdcec6c
opw-4902059
Forward-Port-Of: odoo/enterprise#89634