Daily updates from Odoo
Thursday, January 22, 2026
11 changes · 18.0
Resolved issues and error corrections
This update enhances the message list functionality by displaying specific error details when loading messages fails. Previously, users only saw a generic 'Ann error occurred' message. Now, the system provides a more informative error message, helping to diagnose and resolve persistent issues with message retrieval.
Original PR description
Backport of https://github.com/odoo/odoo/pull/244094 Before this commit, when message list failed to load, it just displays a "Ann error occurred" generic message with a retry button. This assumes that error happens rarely and when so this is temporarily. However some errors are persistent and it's frustrating to have no clue on why there's error or what may have caused it. This commit shows the `Error.toString()` from fetch message RPC failure on UI, so that there's a clue on the reason the fetch of messages failed. Before / After <img width="305" height="67" alt="Screenshot 2026-01-20 at 15 10 38" src="https://github.com/user-attachments/assets/34c546df-71e6-4055-9f85-8d85a9c89b35" /> <img width="334" height="100" alt="Screenshot 2026-01-20 at 15 09 07" src="https://github.com/user-attachments/assets/5fadd0b7-7ea0-43ca-8c28-0ac1d33650ff" /> Forward-Port-Of: odoo/odoo#244754
This update fixes an issue where the default pricelist wasn't being applied when creating new partners within the Point of Sale (PoS) module. The fix ensures the configured default pricelist is correctly used, resolving a discrepancy introduced in the 18.0 release. This maintains consistent pricing behavior for PoS transactions.
Original PR description
**Disclaimer:** This is the same fix as fbde024 but it was breaking the PoS, as we tried to get rid of some widgets to bypass the console warnings "missing_widgets". We now make sure that the only…
**Disclaimer:** This is the same fix as fbde024 but it was breaking the PoS, as we tried to get rid of some widgets to bypass the console warnings "missing_widgets". We now make sure that the only warning we get are those "missing_widget" warnings while running the tour. **Problem:** When creating a new partner from PoS, the suggested pricelist is not the default pricelist we defined in the configuration. It worked before 18.0, but now the suggested pricelist is the first one that we defined in the configuration, not the one we set as default. **Steps to reproduce:** - In the configuration, enable flexible pricelists and fill some available pricelists. - Set a default pricelist that is not the first one you defined in the available section. - Open a session, click on the customer and click on create. - Go to the Sales and Purchase tab. - The pricelist is not the default one. **Why the fix:** If we are in PoS, we now put the default pricelist as a default for the new partner. We only do that if it is available, otherwise we fall back to the default flow. This is how it worked before 18.0. opw-4876573
This update fixes an issue where kit valuations were incorrectly calculating cost shares, leading to overvalued inventory. It also addresses a problem where BoM valuations didn't properly account for variant-specific lines, resulting in inaccurate component valuations. These changes ensure accurate inventory valuation, particularly for complex kits and different product variants.
Original PR description
Backport of https://github.com/odoo/odoo/pull/218326 This PR adds the feature of computing `cost_share` for nested kits and to loose the cost_share constraints to respect variant dependent lines. opw-4806023 opw-5085457 opw-5227496 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update removes the outdated 'Por Definir' payment method as the default for invoices, sale orders, and POS orders in the MX EDI module. This change corrects a fiscal inconsistency, particularly when using the 'PUE' payment policy, ensuring accurate reporting and compliance.
Original PR description
### Issue: The payment method `99 – Por Definir` was used as the default value for invoices, sale orders, and POS orders This leads to fiscal inconsistencies, especially when invoices use the `PUE`…
### Issue: The payment method `99 – Por Definir` was used as the default value for invoices, sale orders, and POS orders This leads to fiscal inconsistencies, especially when invoices use the `PUE` payment policy, where this payment method is invalid ### Cause: In the `_compute_l10n_mx_edi_payment_method_id` methods, the default value was always set to `Por Definir` ### Fix: After discussion with the PO (MIAL), the chosen solution is to archive the payment method `99 – Por Definir`and remove it as a default value All valid cases should already be handled explicitly, making it clear to the user that something is missing when the data is blank ### Steps to reproduce: - Install `l10n_mx_edi` and switch to the MX company - Create an invoice with today’s invoice date - The payment policy is set to PUE - Before the fix, the payment method is set to `Por Definir` For Sale Order and POS Order tests, it's the default value as soon as you create an order opw-5406038 Forward-Port-Of: odoo/enterprise#104164
This update optimizes how notifications are processed within Odoo, specifically when the system is under heavy load. By using a faster JSON serialization library, ‘orjson,’ the system responds more quickly and efficiently, preventing delays and bottlenecks. This results in a smoother user experience and improved system performance.
Original PR description
When the gevent server is under high load, the time required to acquire a cursor and fetch notifications increases. This causes notifications to accumulate, leading to larger payloads. Serializing these large payloads using the standard json library becomes a bottleneck. In a gevent environment, this monopolizes the event loop, delaying the processing of other greenlets. This commit introduces optional support for `orjson`. If installed, it is used to significantly speed up JSON encoding, freeing up the event loop. Using `orjson` increases the throughput by ~20% under high load. Forward-Port-Of: odoo/odoo#241601
This update fixes an issue where the Gantt chart controls overlapped the user interface, particularly when using custom date ranges or on smaller screens like iPhones. The change ensures the Gantt chart controls are displayed correctly, improving usability and preventing visual clutter.
Original PR description
Steps to reproduce ================== - Switch to dutch - Emulate an iPhone SE viewport in the browser settings - Open a project - Switch to the gantt view - Use a custom date range -> The gantt controls are displayed on top due to the daterange format being to long | Before | After | |--------|--------| | <img width="736" height="1542" alt="image" src="https://github.com/user-attachments/assets/7c573ab1-fbf8-4f31-83ba-21d66ebc504d" /> | <img width="736" height="1542" alt="image" src="https://github.com/user-attachments/assets/62ab3d47-701e-4e2d-aaef-5c92675236cb" /> | opw-5340869
This update resolves an issue where the quantity delivered on sale orders wasn't accurately updated after a partial refund with 'Ship Later' was processed. Previously, the system incorrectly displayed zero delivered quantities. The fix separates refund logic from standard order processing, ensuring accurate tracking of delivered items.
Original PR description
This commit fixes an issue introduced here : https://github.com/odoo/odoo/pull/240945 If the multi steps delivery was enabled, the flow would give a traceback The qty_delivered on sale.order.line was…
This commit fixes an issue introduced here : https://github.com/odoo/odoo/pull/240945 If the multi steps delivery was enabled, the flow would give a traceback The qty_delivered on sale.order.line was not correctly computed when the original order was refunded with a ship later. Steps to reproduce: ------------------- * Create a sale order for 5 quantities of any product * Confirm the sale order * Settle the order in the PoS * At this point the qty_delivered on the sale order line is 5 * Now go back to the PoS and refund partially the order for 3 quantities and use the "Ship Later" option > Observation: The qty_delivered is 0 instead of 2 Why the fix: ------------ This line would crash because picking would contain more than one record https://github.com/odoo/odoo/blob/2881f049b892b3380bcab62ad5b2b0b71a9ef261/addons/pos_sale/models/sale_order.py#L95 Instead of doing a groupby we just apply the logic separately for the normal lines and the refund lines. opw-5059560
This update fixes an issue where purchase orders generated through the MTO route would incorrectly use expired vendor information. Now, POs will automatically select the active vendor based on availability, ensuring accurate purchase order creation and preventing the use of outdated supplier details. This improves purchasing efficiency and data accuracy.
Original PR description
_______________________________________ ## Short functional explanation of the error Let's say we have a products that has 2 suppliers. In the list of suppliers, the first one set has an expired…
_______________________________________ ## Short functional explanation of the error Let's say we have a products that has 2 suppliers. In the list of suppliers, the first one set has an expired date. If we generate a PO from an SO with the MTO route, the assigned supplier for this product will be the first one set in the list, therefore having an expired date. ## Reproduction Steps 1. Go to Inventory > Configuration > settings. Check the option Multi-Step routes. 2. Click on Configuration > routes and unarchive the Replenish On Order (MTO) route. 3. Create or use an already existing product. Go to the Inventory tab, and under Operations, check the routes Replenish on Order (MTO) and Buy. 4. Click on the Purchase tab. There, set a first vendor for which the end date is earlier than today. For the second one, set an end date for which the date is later than today. 5. Go to Sales and create a new quotation. Set a customer and add a line with the product you just set. Click confirm. A smart button 'Purchase' should appear. Click on it. ### Expected behavior The assigned vendor of the PO should be the second vendor as it isn't expired yet. ### Unexpected behavior The assigned vendor is the first vendor, expired. ## Origin of the issue When generating a PO from an SO, the partner is the person ordering the product, not the vendor. Therefore, when this code is executed: https://github.com/odoo/odoo/blob/6b677319c47baacb5bee829b7e41448dec4136eb/addons/purchase_stock/models/stock_rule.py#L62-L66 no corresponding supplier is found, as ```self._get_partner_id(procurement.values, rule)``` returns the customer and not the vendor. This leads us to the fallback: https://github.com/odoo/odoo/blob/6b677319c47baacb5bee829b7e41448dec4136eb/addons/purchase_stock/models/stock_rule.py#L68-L72 which doesn't take into account the end date of vendors. __ opw-5030849 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
This update corrects a bug in Odoo's warehouse routing system. When using multi-step delivery, the system now correctly pushes products to the intended final location (a sublocation) instead of defaulting to a general location. This ensures accurate product delivery and batching, particularly when using customer locations.
Original PR description
### Issue: Applying a push rule in attempt to reach a precise sublocation will not adapt the destination of the move based on the `final_location_id` but solely base the destination based on the push…
### Issue: Applying a push rule in attempt to reach a precise sublocation will not adapt the destination of the move based on the `final_location_id` but solely base the destination based on the push rule. This is sub-optimal as the existence of an other push rule from this parent location to the sublocation is quite unlikely and validating that new move will therefore not push the product to its `location_final_id`. ### Concrete problematic example: For instance, the `property_stock_customer` (Customer location) provides a precise `final_dest_id` to deliver the customer. While, in one step delivery (not relying on push mechanic), confirming a delivery will generate a delivery with `location_dest` set to the precise Customer location because of pull rules, in two steps, the final delivery ends up targeting the general `Partner/Customer` location. This is particularly impactful in case of automatic batching based on destination location. ### Steps to reproduce: - In the settings enable: Multi-Steps routes - Inventory > Configuration > Warehouse Management > Warehouses - Set your warehouse to delivery in 2 steps - Create a contact say BOB and in the sale & purchase tab of its form set the Customer Location to a sublocation of Partners/Customers say: Partners/Customers/BOB - Create and confirm a sale order for BOB for 1 unit of a any product - Validate the pick #### > The delivery and its move have `Partner/Customer` as `move_dest_id`. ### Cause of the issue: During the `_run_push`, we only adapt the `location_dest_id` to match the `location_final_id` in the case where the new move skip push: https://github.com/odoo/odoo/blob/61d2fb3bb3281f3455490ac6033b95e3c50b4e2b/addons/stock/models/stock_rule.py#L241-L245 However, in the present case where you push to a parent location of `location_final_id` the move does not `skip_push`: https://github.com/odoo/odoo/blob/61d2fb3bb3281f3455490ac6033b95e3c50b4e2b/addons/stock/models/stock_move.py#L2034-L2037 and the `location_dest` is the one of the rule: https://github.com/odoo/odoo/blob/61d2fb3bb3281f3455490ac6033b95e3c50b4e2b/addons/stock/models/stock_rule.py#L241-L242 https://github.com/odoo/odoo/blob/61d2fb3bb3281f3455490ac6033b95e3c50b4e2b/addons/stock/models/stock_rule.py#L266 opw-5070855 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue where invoices sent to ZATCA (Saudi Arabia's tax authority) were incorrectly including a +03:00 timezone offset. The fix ensures the invoice time is accurately reflected in the Asia/Riyadh timezone, aligning with ZATCA's requirements and preventing potential processing delays. This improves invoice accuracy and compliance.
Original PR description
The time information added to the date of the invoice post for ZATCA in iso format which adds +03:00. However ZATCA expects the time to be sent as is in Asia/Riyadh timezone. - Set up a ZATCA company and onboard a journal - To simulate the timezone issue, replace the hour value with 23h in the following line: vals['l10n_sa_confirmation_datetime'] = datetime.combine(move.invoice_date, fields.Datetime.now().time()). (use .replace(hour=23))) - Create, confirm, and send an invoice to ZATCA opw-5373067 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#243961
This update fixes a critical issue where newly added modules to the Odoo Enterprise system were not automatically included in the translation process. This meant these modules were inaccessible for translation, potentially impacting our ability to support multiple languages. The update adds these modules to the `.weblate.json` file, guaranteeing they will be properly translated and available for all users.
Original PR description
Modules added into stable without being properly added to .weblate.json file = never translatable. Forward-Port-Of: odoo/enterprise#104890