Daily updates from Odoo
Friday, October 3, 2025
13 changes · master
Resolved issues and error corrections
When warehouse staff split a reserved package into multiple destination packages in the Barcode app, the new split line now retains the original source package. This prevents package information from being lost during partial deliveries, reducing picking errors and improving traceability.
Original PR description
### Before this PR: - Put a package in WH/Stock with quantity 100 - Create delivery for partial quantity for example 50 - Go to app barcode - Try to split the package into two different packages scanning another destination Package - The splitted line will be created with empty package instead of the package already reserved before ### After this PR: Scanning another destination package , the new line created splitting the old one will have the package_id Forward-Port-Of: odoo/enterprise#96071 Forward-Port-Of: odoo/enterprise#81170
The ESG app now retrieves the correct IPCC database table information before downloading data, preventing intermittent empty downloads. It also handles measurement units correctly, avoiding server errors during the download process.
Original PR description
## [FIX] esg: fetch ipcc database Before this commit, sometimes the download button for IPCC database does not work because the request made to IPCC database to fetch data, does not return any data. The reason is because the table name used in parameter changed after a certain time. This commit gathers the table_name when we do extra rpc to fetch all parameters to use to correctly export the data. ## [FIX] esg: check unit fetched to correctly process data gathered Before this commit, when the user downloads the IPCC database, an error is raised in server log because an uom recordset is compared to a string instead of checking the unit gathered with the expected string. This commit alters the check to correctly check the right things. Forward-Port-Of: odoo/enterprise#95879
The Turkish localization reports had a bug that could produce blank General Ledger CSV exports after a recent report change. This fix restores the missing data retrieval so exported files contain the expected accounting lines.
Original PR description
## Before this commit: After the refactor of the General Ledger in the referenced commit, `l10n_tr_reports` no longer able to fetch the `aml_ids`. This caused the CSV export of the General Ledger to be generated as blank. Ref commit: https://github.com/odoo/enterprise/commit/235a5160d13296328b79e4092a8b88a733628268 ## After this commit: Ensured that `aml_ids` are properly retrieved, so that the General Ledger CSV export contains the expected data. Forward-Port-Of: odoo/enterprise#95577
This fix prevents crashes in the Belgian POS certification flow when several employees are clocked in on the same point of sale. Sales and session closing can now proceed reliably in that scenario, reducing disruption for store staff.
Original PR description
- Fix traceback when trying to sell a product with multiple employees clocked in on the same POS. - Fix traceback when trying to close a session with multiple employees clocked in. task-id: 4902090 Forward-Port-Of: odoo/enterprise#95966 Forward-Port-Of: odoo/enterprise#93273
Report exports now retrieve account annotations in the correct date order, reducing extra processing and improving consistency. Audit balance views also now show the latest message only when it belongs to the audit period, preventing out-of-period notes from appearing in the wrong audit context.
Original PR description
Previously when exporting a report, we would sort the annotation based on their create_date or to get the last annotation we would need to use max to find the latest one. Now, when exporting the report we order them directly so we dont need to bother with it. It's not needed to sort them when simply viewing the report as they are displayed in the chatter already in the right order Also fix a bug where the last_message displayed on the balance view of the audits isn't filtered on the period of the audit. To replicate: - Create an Audit for any year. - Post an annotation on an account on a period outside of the period of the audit. - Go to the balance view and check the account, it now has the new message even though it's outside the audit period. Forward-Port-Of: odoo/enterprise#95307
Payslip correction guidance now appears in the payslip issues area instead of as a banner at the top of the form. This keeps the form cleaner while still helping payroll users review corrections and choose to keep a payslip unchanged from the correction wizard.
Original PR description
Move the correction banner from the top of the payslip form view to issues. Add a `keep as it is` button inside the wizard to keep a single button. task-5074163
Customers can no longer accidentally combine one-time purchases with subscription products in the same cart. The checkout flow now warns shoppers and blocks the conflicting item, helping avoid confusion about whether an order is recurring or one-off.
Original PR description
**Version:** - saas-18.4 **Steps to reproduce:** - Create a one-time product. - Add the one-time product to the cart. - Add a subscription (recurring) product. - The one-time product is incorrectly shown as a subscription. **Issue:** - When a customer adds a one-time product to the cart and then adds a subscription product, the one-time product incorrectly gets treated as a subscription. **Solution:** - If the cart already contains a one-time product, the system will show a warning and block adding subscription products (and vice versa). **Impact:** - Customers can clearly understand whether they are buying a one-time product or a recurring subscription, without mixing them by mistake. Task-5046146 Forward-Port-Of: odoo/enterprise#93282
Barcode scanning now correctly converts quantities when a package uses a different unit of measure than the delivery line. This prevents warehouse users from seeing incorrect picked quantities, such as 10 g instead of 10,000 g, and helps ensure deliveries are processed accurately.
Original PR description
Manual forward port of https://github.com/odoo/enterprise/pull/90878 **Problem:** When scanning a package with a different UoM than the barcode line, the conversion is not made. **Steps to…
Manual forward port of https://github.com/odoo/enterprise/pull/90878 **Problem:** When scanning a package with a different UoM than the barcode line, the conversion is not made. **Steps to reproduce:** - Enable the "Packages" setting; - Create a new storable product and set kg as its UoM; - In the inventory tab, add "g" in the packagings - Click on the on hand smart button and select update quantity - Add a new line; - In the package column create a new package; - Set a quantity of 10 kg; - Create a delivery and select your product; - Set a demand on 10000 and select g as the UoM; - Mark as todo; - Open the delivery in the Barcode app; - Scan the package. **Current behavior:** The quantity on the line is now 10 / 10000 g **Expected behavior:** It should be 10000 / 10000 g **Cause of the issue:** https://github.com/odoo/enterprise/blob/4c9fa9dc010958710d848fbcb3241b17ea7205ca/stock_barcode/static/src/models/barcode_picking_model.js#L1500-L1505 remaining_qty is expressed in the uom of the quant so it will be 10 but qty_needed is expressed in the uom of the line is it will be 10000. qty_used beeing the minimum of those two it will be 10. **Fix:** To define how much quantity to take from the package, we convert the line's quantity by using the package's UoM. Then, when we add this quantity to the line's quantity, we re-convert it by using the line's UoM. opw-4860064 Forward-Port-Of: odoo/enterprise#95892 Forward-Port-Of: odoo/enterprise#93693
This update prevents completed signature requests from being deleted after they have been signed. It helps preserve important signed records and reduces the risk of losing legally or operationally significant documents.
Original PR description
backport of https://github.com/odoo/enterprise/commit/b2d32811877cdf1649095435ce16274ae96421f3 opw-5111568 Forward-Port-Of: odoo/enterprise#96081 Forward-Port-Of: odoo/enterprise#95922
Fixes an issue where closing or reopening a rental subscription for a kit product could incorrectly reset delivered quantities to zero. This prevents false return errors and helps rental subscriptions with bundled products close reliably after delivery.
Original PR description
Versions -------- - 18.0+ Steps ----- 1. Enable rental transfers; 2. have a rental product with a kit BoM; 3. create a subscription order in the Rental app; 4. add the rental product; 5. confirm…
Versions -------- - 18.0+ Steps ----- 1. Enable rental transfers; 2. have a rental product with a kit BoM; 3. create a subscription order in the Rental app; 4. add the rental product; 5. confirm order; 6. validate deliveries; 7. close the subscription. Issue ----- Invalid SQL command, cannot return more than was delivered. Cause ----- When closing or reopening a subscription, the `_compute_qty_delivered` method gets triggered. By default, these methods required the relevant moves to have the same `product_id` as the sale order line. For products with kit BoMs, the move's `product_id` is tied to the BoM instead of the final product, leading to `qty_delivered` getting reset reset to 0 on recompute. This causes an error, as `qty_returned` is non-zero. Solution -------- The `qty_delivered` for these lines was set in the `_action_done` method of `stock.move`. By instead moving this logic into a `_compute_qty_delivered` override, any recompute should have the same result, instead of getting reset to 0. opw-4833280 Forward-Port-Of: odoo/enterprise#96179 Forward-Port-Of: odoo/enterprise#88691
Consolidated billing for Mexican Point of Sale orders now checks that required localization invoice fields match before creating an invoice. If orders are incompatible, users receive a clear validation error instead of an unexpected system error, helping avoid incorrect consolidated invoices.
Original PR description
Issue: Currently when we consolidate billing for PoS orders we receive an error because some l10n fields expect a single record and not a recordset. This can be solved by looping over the PoS orders instead and preparing the invoice values per order (this is how the sale orders handles consolidated billing) however, we run into an issue if not all PoS orders have the same l10n fields. Ideally PoS orders with different l10n fields should not be consolidated. Purpose of this PR: check to make sure that the three l10n_mx_edi fields are the same among PoS orders before creating consolidated invoice. raise a validation error if the fields are not the same. Steps to reproduce on Runbot: install pos and l10n_mx* create pos orders for same contact try to create invoices with consolidated billing enabled singleton error is raised Note: main discussion about consolidated billing with l10n_mx localization: #86255 opw-4802180 Forward-Port-Of: odoo/enterprise#86579
Discarding a quality worksheet wizard no longer creates a worksheet record or makes the quality check appear completed. This prevents incorrect completion status when users open a worksheet and cancel without entering results.
Original PR description
**Problem:** Opening the worksheet wizard and discarding it makes the worksheet "completed" **Steps to reproduce:** - create a quality check - set a product - in type select worksheet - select the "quality issues" template - select a team - click on the worksheet smart button - discard **Current behavior:** the worksheet is marked has completed **Cause of the issue:** when discarding, this line causes the creation of an instance of worksheet.template linked to the quality.check via its worksheet_template_id https://github.com/odoo/enterprise/blob/a1dd58f2b59ecd2d22efd29eb0aace7bdca64f66/quality_control_worksheet/static/src/views/quality_worksheet_fromview.js#L35 which will make the worksheet_count field of the quality check worth 1 after discarding https://github.com/odoo/enterprise/blob/1c5e547b59a57c840ef72b2e76c6a6a627f1f18e/quality_control_worksheet/models/quality.py#L37-L39 opw-4980945 Forward-Port-Of: odoo/enterprise#95219
DHL delivery quotes and shipments now include insurance when an insurance percentage is configured. This helps businesses charge accurate shipping rates and ensures eligible DHL shipments are actually insured.
Original PR description
**PROBLEM** Insuring a delivery using the dhl carrier don't work. It doesn't affect the estimated rate of the delivery, and the shipment created when validating the delivery order isn't insured.…
**PROBLEM** Insuring a delivery using the dhl carrier don't work. It doesn't affect the estimated rate of the delivery, and the shipment created when validating the delivery order isn't insured. **STEP TO REPRODUCE** 1. Install the `delivery_dhl_rest` and the `l10n_be` modules (we will use the be demo company). 2. Set the insurance percentage of the dhl be delivery method to 100%, and set the region to Europe (the demo data is incorrect), and activate the debug (click the "No Debug" smart button to activate the log of requests). 3. Switch to the be company. 5. Create a sale order, with a customer located in Belgium, and add shipping using the dhl method. 6. Go to the delivery order, and validate it. 7. Go to settings/Technical/Logging and look at the rating_request and shipment_request, notice there is no information about insurance. **CAUSE** We don't send any info about insurance in the api requests. **FIX** Computing and sending the insured amount, only if the insurance percentage is not null. If the package can't be insured between the origin and the destination, a error message will be displayed when updating the delivery price. **TESTS PROBLEM/FIX** The localization of `your_company` was not recognized by DHL, leading to the DHL api returning a 0 delivery price. Switching the localization to Eghezee, Rue du Laid Burniat 5 fixes this. Assertion regarding the delivery price were restored. The picking date could sometimes be refused by DHL (stop working after arround 4/5 PM). Changing the picking date to, two day after, at noon works. `test_01_dhl_basic_be_domestic_flow` was modified to also test domestic shipment insurance in addition of the basic flow. Some code in it was refactor into inner function to avoid boilerplate. Adding `INSURED_RATE_MOCK_RESPONSE` to mock response in test_01. opw-4989281 Forward-Port-Of: odoo/enterprise#93105