Daily updates from Odoo
Thursday, October 2, 2025
12 changes · 17.0
Resolved issues and error corrections
The partner ledger now includes reconciled accounting entries that do not have a partner when calculating opening balances. This prevents mismatches between opening balances and totals when reports are viewed for later periods.
Original PR description
### Issue: The partner ledger does consider lines without partners when calculating the initial balance. ### Steps to reproduce: - Create an invoice in 2025 - Create an entry in 2025 without partner…
### Issue: The partner ledger does consider lines without partners when calculating the initial balance. ### Steps to reproduce: - Create an invoice in 2025 - Create an entry in 2025 without partner for the same amount - Reconcile the two - Open the partner ledger for 2025, everything is correct - Change the dates to 2026, the amount of the initial balance ignores the entry but not the totals ### Cause: The method `_get_sums_without_partner` is called for the totals, but not for the initial balance. Its purpose is to add the amounts of the lines without partners that were reconciled with lines with a partner. ### Solution: Call `_get_sums_without_partner()` in `_get_initial_balance_values()` add the results before returning the initial balances. As this is the same logic as `_query_partners()` we create a new method. This method needs to be called with the dates of the initial balance in the options. So we create a duplicate of the options and input the new dates options. opw-5068790
Users now see a notification when they scan a barcode shorter than three characters. This prevents confusion by making it clear that the scan was rejected because the barcode is invalid.
Original PR description
When scanning a barcode shorter than 3 characters, the system previously failed silently, leaving users without feedback and unclear whether the scan was processed. This fix adds a notification to inform the user that barcodes must be at least 3 characters long. Steps to reproduce (17.0+): Scan a barcode shorter than 3 characters. Expected result: A notification is displayed indicating that the scanned barcode is invalid. Actual result: The scan is ignored silently with no feedback to the user opw-5041723 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The helpdesk "Ask the community" button now sends customers to the correct community forum page instead of a missing page. This prevents a 404 error and helps customers reach self-service support as intended.
Original PR description
Scenario:
- create a helpdesk team
- enable community forum on it
- go to the team and click on "Ask the community"
Result: 404 error, this page does not exist
Cause: we are using helpdesk.team ID in route needing a forum.forum ID
Fix: uses /helpdesk/{team ID}/forums route instead of /forum/{team ID}
opw-5027193Fixes an issue that could incorrectly block valid SEPA direct debit payments because dates were compared incorrectly. This helps ensure payments using valid mandates can be processed without unnecessary errors.
Original PR description
A date data type comparison error occurs. In addition the end date of a SEPA has to be greater than the transaction you are trying to perform so when this condition is met the exception is thrown even on valid SEPA.
The Swiss payroll transmission screen now hides the verified source tax statement button when the institution response does not include a correction. This prevents users from opening a report that would not contain useful information, reducing confusion during payroll review.
Original PR description
This button will give a report only in the case where the institution response has a correction, so it should be hidden.
Loyalty discounts and coupons now use a consistent date when validating online orders, preventing valid payments from being blocked or mismatched at checkout. Expired coupons are also removed correctly before payment, reducing order confirmation failures and pricing inconsistencies.
Original PR description
Versions -------- - 17.0+ Steps ----- 1. Have a database with GeoIP enabled; 2. have a promotion program that gives a discount on a specific product; 3. use a VPN to browse /shop from California…
Versions -------- - 17.0+ Steps ----- 1. Have a database with GeoIP enabled; 2. have a promotion program that gives a discount on a specific product; 3. use a VPN to browse /shop from California before 7:00 UTC; 4. add the product to your cart; 5. go to checkout; 6. pay for the order. Issue ----- Order cannot be confirmed due to incomplete payment. Cause ----- The `_frontend_pre_dispatch` method of `website` adds a timezone value to the context based on the request's `geoip`. This context value then gets used to find applicable loyalty programs via `Date.context_today`, and applies them to the order. Then after payment was initiated, the order gets validated again using server time (UTC), which now considers the applied program expired, and removes the reward before confirming the order. Consequently, with the discount removed, the paid amount no longer matches the order total, thus the order remains unconfirmed. Solution -------- If the order has a confirmed transaction, use its `create_date` to verify loyalty expiration dates. For time zone, instead of `Date.context_today`, using whatever `tz` value is in the context, use a helper function which retrieves the current day in the company's timezone. For website orders, if defined, use the eCommerce salesperson's time zone instead. Also fix an issue where expired coupon lines weren't getting removed from the order. opw-4765873 opw-4781346 opw-4939268
This fixes an issue where products created under a parent company could have the default branch tax added back even after a different sales tax was selected. Businesses with branch company setups can now rely on the tax chosen on a product staying unchanged, reducing incorrect tax configuration.
Original PR description
**Issue description:** The logic introduced in #127196 adds default taxes from "other" companies to products created without a specific company. However, because child companies (branches) share…
**Issue description:** The logic introduced in #127196 adds default taxes from "other" companies to products created without a specific company. However, because child companies (branches) share taxes with their parent company, when creating a new product using the parent company and setting a specific tax (different from the default), the default tax was incorrectly added back to the product. This happened because the logic considered the branch an "other company" and applied its default tax. **FIX:** Exclude branch companies from the domain when we set the default tax of other companies on the product. **Steps to reproduce:** 1. Create a branch company. (It will automatically have the same default tax as its parent). 2. With the parent company selected, create a new product, leaving the 'Company' field empty, and change its sales tax to any tax other than the default, and save. 3. Notice that the default tax is set again on the product. opw-5094415 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
DHL delivery estimates and shipment creation now include the configured insurance amount when insurance is enabled. This ensures customers are charged accurately and shipments are actually insured, with a clear error shown if insurance is not available for the route.
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
Publishing and sending planning shifts now keeps the filters users selected in the planning view, such as a specific role, while still applying the chosen date range. This prevents unintended shifts outside the user's filtered selection from being published or sent.
Original PR description
To reproduce: ============= -Reset all planning.slot to draft -Search "Dev" role -In weekly Gantt view, click on publish & send -Change date to match the current month (or any other period) -Publish Problem: ========= We filter only by datetime and ignore domain from context : https://github.com/odoo/enterprise/blob/20b45f6c65c78a572a3f26b78f6ed458accf7c9f/planning/wizard/planning_send.py#L31-L33 Solution: ========= - Get active domain from context and override only it's date_time since it changed. opw-5017014
Inventory moves with nearly identical unit prices can now be merged correctly, avoiding unnecessary duplicate stock movements. This helps keep inventory operations cleaner when tiny rounding differences occur in pricing.
Original PR description
Fix comparing `price_unit` float values as is in `_merge_moves` Remove `price_unit` from `_prepare_merge_moves_distinct_fields` and compare it using `float_compare` as it should. Description of the issue/feature this PR addresses: Current behavior before PR: Could not merge moves with slight different price_unit value. Algorithm will not merge stock.moves with slightly different price_unit eq. `783.55 & 783.5500000000001` Desired behavior after PR is merged: stock.move.price_unit is compared correctly using float_compare --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Fixes an issue in Odoo Studio where removing calendar settings such as the color field could cause an error. Empty values are now handled correctly, allowing users to clear these settings without disrupting their workflow.
Original PR description
On a calendar with studio, try to remove the "color" attribute, or any other that should contain the name of a field. Before this commit there was a crash because the value sent to the server in this case is `undefined` (`null` in JSON or `None` in python), which was stringified and yielding an actual string that was not a field name After this commit, NULL values are not stringified, instead they should represent the emptiness of the attribute. opw-4938351
Manufacturing orders for finished products that include a kit variant now correctly include the relevant kit operations, such as variant-specific painting steps. This prevents missing production steps when a kit component's attributes determine which operations should be performed.
Original PR description
### Steps to reproduct: - Create 2 products: Final Product (FP), Kit Product (KP) - On KP add a Color attribute with 2 values: Blue, Red - Create a KIT bom for KP wtih 2 operations: - OP: paint it…
### Steps to reproduct:
- Create 2 products: Final Product (FP), Kit Product (KP)
- On KP add a Color attribute with 2 values: Blue, Red
- Create a KIT bom for KP wtih 2 operations:
- OP: paint it Blue, apply on Color: Blue
- OP: paint it Red, apply on Color: Red
- Create a bom for FP with only one component line:
- 1 x Red Kit Product
- Create a MO for 1 unit of FP
#### > The operation was not created using the kit bom
### Cause of the issue:
Even if the bom exploded to find the operations to add on the MO: https://github.com/odoo/odoo/blob/2dfcbe53c80d2d8fe5b6d9828eea90a1d214c2e4/addons/mrp/models/mrp_production.py#L579-L599 The `_skip_operation_line`:
https://github.com/odoo/odoo/blob/2dfcbe53c80d2d8fe5b6d9828eea90a1d214c2e4/addons/mrp/models/mrp_routing.py#L164-L174 is checking if the product of the main bom has the attributes of the operation rather than the kit product used as component.
opw-5080856
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr