Daily updates from Odoo
Friday, January 16, 2026
33 changes · 19.0
Enhancements to existing features
This update streamlines the preparation display by merging multiple orderlines for combo products that share the same base product. Previously, the POS system handled different pricing, but for preparation displays, we're standardizing the presentation to avoid confusion and improve efficiency. This change ensures a clearer view of ingredients when preparing items from a combo.
Original PR description
When ordering a combo product, the POS will split the included products from the extra products in different orderlines. This is done because of the extra products have a different price/unit than the extra items. But for the preparation display we don't care about different prices, so this PR will make the different orderlines of the same combo be merged in the preparation display if they target the same product. Task-[5473387](https://www.odoo.com/odoo/project/1737/tasks/5473387) Enterprise PR-[#104188](https://github.com/odoo/enterprise/pull/104188) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update simplifies the preparation display by merging identical products from combo orders. Previously, the POS system split combo items from additional items due to price differences. Now, the preparation display consolidates these items into a single line, streamlining the order review process and reducing manual effort.
Original PR description
When ordering a combo product, the POS will split the included products from the extra products in different orderlines. This is done because of the extra products have a different price/unit than the extra items. But for the preparation display we don't care about different prices, so this PR will make the different orderlines of the same combo be merged in the preparation display if they target the same product. Task-[5473387](https://www.odoo.com/odoo/project/1737/tasks/5473387)
This update simplifies the preparation display by merging identical products within combo orders. Previously, the system treated combo items separately from add-ons due to price differences. Now, the preparation display shows all items within a combo orderline, streamlining the order preparation process and improving clarity for staff.
Original PR description
When ordering a combo product, the POS will split the included products from the extra products in different orderlines. This is done because of the extra products have a different price/unit than the extra items. But for the preparation display we don't care about different prices, so this PR will make the different orderlines of the same combo be merged in the preparation display if they target the same product. Task-[5473387](https://www.odoo.com/odoo/project/1737/tasks/5473387)
This update simplifies the preparation display by combining multiple instances of the same combo product into a single orderline. Previously, the POS split combo products from additional items based on price differences. This change ensures a cleaner, more streamlined preparation display for users, improving clarity and efficiency.
Original PR description
When ordering a combo product, the POS will split the included products from the extra products in different orderlines. This is done because of the extra products have a different price/unit than the extra items. But for the preparation display we don't care about different prices, so this PR will make the different orderlines of the same combo be merged in the preparation display if they target the same product. Task-[5473387](https://www.odoo.com/odoo/project/1737/tasks/5473387) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update enhances the command-line interface to allow users to update *all* installed Odoo modules with the latest versions. Previously, updating only the base module was possible, which could lead to unintended consequences. This change provides a safer and more comprehensive way to manage module updates.
Original PR description
Before this commit: Using the CLI, there is no practical way to update any modules with an updated version. Running: `$ odoo-bin module upgrade base --outdated` would not work as intended as it would…
Before this commit: Using the CLI, there is no practical way to update any modules with an updated version. Running: `$ odoo-bin module upgrade base --outdated` would not work as intended as it would check version change only on the `base` module. Even if it worked, this would update every module. This is not the point here as it could cause side effects if not used properly After this commit: Enhanced module update logic to support updating all installed modules when `all` is passed in the argument. Running: `$ odoo-bin module upgrade all --outdated` will update all modules for which the version has been updated Note: `all` keyword as been used to be coherent with `--update all` CLI command, see: https://www.odoo.com/documentation/19.0/developer/reference/cli.html#cmdoption-odoo-bin-u Documentation PR: odoo/documentation#15513 Extension from: https://github.com/odoo/odoo/pull/202571 Feature proposed on: https://github.com/odoo/odoo/pull/202571#discussion_r2128993414 Task [link](https://www.odoo.com/odoo/project.task/4585261) task-4585261
This update adjusts Odoo's payroll processing for Mexican employees earning at or below the minimum wage. It automatically exempts these employees from IMSS social security contributions, shifting the responsibility to the employer to cover those contributions. The update also ensures correct ISR (tax) calculations, especially when considering bonuses and commissions.
Original PR description
According to the Mexican Social Security Law, when an employee earns equal to or less than the monthly minimum wage (parameter: l10n_mx_daily_min_wage * 30.4), the employee is exempt from social security contributions (Rule: IMSS_EMPLOYEE_TOTAL). In such case: - It is the employer’s responsibility to cover the corresponding social security amount - It doesn't appear on the XML - The ISR it's also "0" - we need to consider bonuses and commissions. target: 19.0 task-5226971
This update adds a 'Reload Data' button to error dialogs in the Point of Sale system, providing users with a quick way to resolve common issues. Previously, users only had an 'Ok' button, making it difficult to recover from errors. This change reduces downtime and improves the overall user experience, particularly for Restaurant POS orders which will now attempt to sync before data reloading.
Original PR description
Purpose: ------------ - On Error dialogs, users only had "Ok" or could close the dialog, with no guidance on what to do next. - Many blocking issues are resolved simply by reloading POS data. Before this commit: ----------- - Error dialogs only had an "Ok" button. After this commit: ------------------ - Added a "Reload Data" button for quick recovery of common blocking issues. - Added a warning message in the reload data popup - For POS Restaurant, orders will attempt to sync before reloading data, reducing the risk of data loss. Task-5353590 Forward-Port-Of: odoo/odoo#238112
This update simplifies the process of setting up Peppol integration within Odoo. The outdated wizard has been replaced with a more user-friendly interface, including a radio selection for registration type and a centralized location for the Peppol contact email. This change streamlines the setup and improves the overall user experience.
Original PR description
In this commit: - Deprecate the Peppol configuration wizard. - Move the Peppol contact email field to Settings. - Replace the wizard button with a radio selection for the Peppol registration type. - Simplify the overall Peppol settings user experience. Task-5438539 Co-authored: [Soham Zadafiya (soza)](soza@odoo.com)
Resolved issues and error corrections
This update fixes an issue where cash rounding (UP or DOWN methods) didn't accurately calculate change when customers paid more than the order total. The change ensures correct change calculations during transactions, improving the reliability of the Point of Sale system. This resolves a previous error impacting payment accuracy.
Original PR description
When using cash rounding with UP or DOWN methods, the change was not being calculated correctly when paying more than the total amount due. opw-5476693 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where the weigh scale displayed incorrect prices due to a lack of consideration for pricelists and fiscal positions. Now, the weigh scale accurately reflects the price, including any adjustments defined in a customer's pricelist or fiscal position, leading to clearer and more reliable sales transactions.
Original PR description
Before this commit, the pricelist and fiscal position where not taken into account when displaying the price on the weigh scale. This caused confusion when selling products with pricelists or fiscal positions that modified the price. opw-5456144 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes a previous issue where the product configurator displayed inaccurate prices. Now, the configurator correctly reflects the selected product attributes, the current order's pricelist, and fiscal position, leading to a more reliable and user-friendly experience for customers.
Original PR description
Before this commit, product configurator popup did not consider selected attributes, and pricelist or fiscal position of the current order when displaying the price of the product being configured. This could lead to confusion for the user. opw-5472946 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an error in how price differences are calculated for subcontracted products. Previously, the system incorrectly compared costs in different currencies, leading to inaccurate price difference invoices. Now, the system automatically converts component costs to the invoice currency, ensuring correct price difference calculations and accurate financial reporting.
Original PR description
Problem: When computing the price difference on a vendor bill for a subcontracted product, the component cost is considered in the company's currency regardless of the currency of the invoice. This…
Problem: When computing the price difference on a vendor bill for a subcontracted product, the component cost is considered in the company's currency regardless of the currency of the invoice. This means the price difference calculation directly compares two different currencies without converting them, resulting in some incorrect values for the price difference invoice lines. Solution: We will convert the component cost to the invoice currency when computing price difference. Steps to reproduce (runbot 18): - Product with - Standard price auto - BoM: sbc, one component with nonzero value (e.g. $1) - Nonzero value (e.g. $5) - Another currency 1. Create a PO for the subcontracted product 2. Set the Invoice currency to something other than the company default 3. Confirm the PO and validate the sbc and receipt 4. Create the vendor bill, and bill for the correct value (Whatever $4 is in the invoice currency) A price difference line will be erroneously generated for some nonsense value, when we expect 0 price difference. opw-5232917 Forward-Port-Of: odoo/odoo#243801 Forward-Port-Of: odoo/odoo#238428
This update resolves an issue where the payment gateway was incorrectly sending callback URLs, causing verification problems. The fix ensures the callback URL only triggers when a redirect is expected, aligning with Razorpay's documentation and improving payment reliability. This prevents errors during payment processing.
Original PR description
Steps: - Install Razorpay and sales app. - Create a SO and try to pay with UPI pm in IOS mobile. Issue: - After payment compilation it is trying to redirect to `callback_url` which should only…
Steps: - Install Razorpay and sales app. - Create a SO and try to pay with UPI pm in IOS mobile. Issue: - After payment compilation it is trying to redirect to `callback_url` which should only trigger when `redirect` is `True`. Cause: - In Razorpay documentation it's not clearly mention it will only trigger `callback_url` when `redirect` is `True`, so in some cases it redirect to `callback_url` even `redirect` is `False` which is cause issue during signature verification as it try to verify signature according to `is_redirect` with `razorpay_secret` but in oAuth `razorpay_secret` is not set. Razorpay doc link: https://razorpay.com/docs/payments/payment-gateway/web-integration/standard/integration-steps/#123-checkout-options <img width="670" height="537" alt="image" src="https://github.com/user-attachments/assets/81c855c0-aaca-4953-bcff-942bc11a32d2" /> Fix: - Only set `callback_url` for `REDIRECT_PAYMENT_METHOD_CODES` PMs where we expect it to redirect to `return_url` and not in the oAuth flow, Instead relying on the `redirect` option of the Razorpay. opw-5389499 Forward-Port-Of: odoo/odoo#243054
The website's ability to retrieve pickup locations from OpenStreetMap was failing due to a 403 error. This PR resolves this by adjusting the request headers to comply with OpenStreetMap's usage policy, allowing the system to correctly obtain and display pickup locations.
Original PR description
**Steps to reproduce:**
* Install website_sale_collect module
* Setup Geo localization with OpenStreetMap
* When customer chooses pick up location, a 403 error is sent back from
OSM
* No pickup location is returned on the map
* The message from OSM is
Code : 403... You have been blocked because you have violated the\n<a href="https://operations.osmfoundation.org/policies/nominatim/">usage policy</a>\nof
**Observed behavior:**
* No pickup location is seen on the map
**Cause:**
* we don't know what's the real cause of reject
**Fix:**
* We improve the header to have a more standard request and let OSM
respond
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update streamlines the product search within our Point of Sale system, making it faster and more responsive, especially when dealing with a large number of products. By optimizing the search process, we've reduced delays and improved the overall user experience. This change focuses on internal performance improvements.
Original PR description
Previously, the product search performed normalization inside the filter and sort loops. Because sort algorithms perform O(n log n) comparisons, the `normalize` function was called redundantly thousands of times for the same product, leading to UI lag when handling large products. This commit optimizes the search by: - Moving normalization to the model getters - Flattening the template search string to include all variants, removing the need for nested `.some()` loops during filtering. - Replacing `localeCompare` with primitive string comparison for faster sorting. opw-5448113 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update provides users with more detailed error messages when sending documents to HMRC, including the specific error code and message returned by HMRC. This change simplifies troubleshooting and reduces the need for support, leading to faster issue resolution.
Original PR description
Currently, when an error occurs while sending a document to HMRC, the user only receives a generic error message. This change enhances the error feedback by including the error code and message returned by HMRC, giving the user clearer insight into the cause of the failure. This helps users identify issues more easily and reduces unnecessary support requests. Forward-Port-Of: odoo/enterprise#104407
This release includes several fixes and improvements across various modules, including USPS delivery integration, multi-step manufacturing, Mexican VAT invoice handling, and Partena payroll export. Specifically, the USPS integration now correctly uses sudo() for user access, and a fix allows for proper handling of by-products in manufacturing. Additionally, the Mexican VAT invoice processing and Partena payroll export have been improved for accuracy.
This update resolves an issue where a user could be incorrectly assigned as a time off manager even without the necessary permissions. The fix prevents automatic assignment based on employee manager roles, ensuring accurate time off approvals. This improves data integrity and reduces potential errors in time off management workflows.
Original PR description
--- ## Short functional explanation of the error When setting the manager of an employee, this manager will automatically become the time off manager, even if they have no access rights to time off management. ## Reproduction Steps 1. Create a User. Under roles, set every access right to 'no', except Employees under Human Resources. 2. Create a corresponding Employee (let's call it E). 3. Go to another employee's page. In the Work tab, set the manager as E and hit save. 4. Click on Settings tab. ### Expected behavior Under Approvers, the Time off field shouldn't be set at E. ### Unexpected behavior The Time Off field is set at E. ## Origin of the issue When setting a time off manager, we simply use the employee manager values, which have different access rights than the ones corresponding to time off managers: https://github.com/odoo/odoo/blob/92486bab9b73f4370629452c454c25371d5063ac/addons/hr_holidays/models/hr_employee.py#L162-L164 opw-5470249
This update fixes a bug that prevented users from posting journal entries when duplicate entries with the same number were created. The change adds a check to ensure unique journal entry numbers, preventing data inconsistencies and errors during posting. This improves data integrity and reliability.
Original PR description
Currently, an error occurs when user tries to run Confirm Entries server action on records with same name/number. Steps to replicate: - Install `accountant` without the demo and open Journal Entries.…
Currently, an error occurs when user tries to run Confirm Entries server action on records with same name/number.
Steps to replicate:
- Install `accountant` without the demo and open Journal Entries.
- Create a new Journal Entry, add a move line, and duplicate the entry.
- From the list view, select both entries and type `test` in the Number field.
- Confirm the prompt to apply the same value to all selected entries.
- Finally, select both entries and click `Confirm Entries` from the cog menu.
Error:
`ValueError: UniqueViolation('duplicate key value violates unique constraint "account_move_unique_name"\nDETAIL: Key (name, journal_id)=(BILL20250808, 9) already exists.\n') while evaluating 'action = records.action_validate_moves_with_confirmation()'`
Cause:
- The error occurs after a recent addition of a [feature] that allows direct posting of a journal entry if the entry doesnt need to be hashed.
- The normal function call was changed to be a server action that either directly posts the entries or opens a wizard depending on whether the entries need hashing or not.
- Journal Entries with the same number when getting posted leads to the `UniqueViolation` error.
Solution:
- Added a check based on the fields `name` and `journal_id`, which raises a Validation error if a user attempts to post an entry when another entry with the same number already exists or user tries to post two entries with the same number.
[feature]: https://github.com/odoo/odoo/pull/224008
sentry-6998832419
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThis update resolves an issue where canceled orders and their items persisted in the user interface, leading to incorrect order displays. The fix ensures that canceled orders and line items are fully removed from the system, guaranteeing accurate product quantities and totals are shown when creating new orders. This improves the user experience and data integrity for self-order functionality.
Original PR description
`point_of_sale`, `pos_self_order` ### step to reproduce: - Configure self order with online payment. - Open POS Self Order. - Add some products to the cart. - Cancel the order. - Create a new order and pay it via an "online payment" method. - Click on "Order Now". ### issue: - Previously cancelled products reappear as selected in the new order. ### reason: - Cancelled orders and orderlines were not removed from IndexedDB. - With Pay after Meal, a second order on the same table reused the existing one, causing the product card, order widget, and cart to show quantity and total from the old order instead of the new changes. ### fix: - Ensure both the order and its orderlines are removed from indexeddb when cancelling an order. - Product/cart page must show changed quantity and amount. task: 5005174 Forward-Port-Of: odoo/odoo#243048 Forward-Port-Of: odoo/odoo#224918
This update fixes an issue where country-based filtering on payslips and payslip runs wasn't functioning properly, leading to errors. The fix ensures accurate country filtering, preventing module loading problems and improving the reliability of payroll reporting.
Original PR description
Issue: The country_id related field on payslip and payslip run was not stored, causing domain filters and search on this field to fail and triggering client-side errors. Fix: Use search parameter to write function so field can be used safely in search domains and filters. Impact: Country-based filtering now works correctly without triggering module loader errors. Task: 5406904 Forward-Port-Of: odoo/enterprise#104081 Forward-Port-Of: odoo/enterprise#103318
This update resolves a crash that occurred when adding new products to confirmed Sale Orders. The fix ensures that all previous Sale Order references are properly removed, preventing conflicts and allowing users to add products without errors. This improves the stability and usability of the Sales and Stock module.
Original PR description
The system crashes with an error when a user tries to add a new product to a Sale Order that is already confirmed. **Steps to produce:** - Install `Sales and stock` module without demo data. - Make…
The system crashes with an error when a user tries to add a new product to a Sale Order that is already confirmed. **Steps to produce:** - Install `Sales and stock` module without demo data. - Make SO with customer and product and confirm the SO. - Duplicate the SO and confirm it also. - Now go to first SO > delivery > Additional info > change the sale order to second one. - Then go to second SO > delivery > open the delivery where source document as second order > Additional info > change the sale order to first one. (Basically, we manually swap the pickings.) - Go to the first SO and add new product and click on save. **Error:** `ValueError: Wrong value for stock.picking.sale_id: sale.order(3784, 3727)` **Cause:** - At [1], The domain used in the search returns two pickings, but because `limit=1` is applied, only the first picking is returned. which is not the one we want. - The domain conditions match both pickings, which causes the wrong picking to be selected. - At [2], When updating the `reference_ids`, the new sale order reference is added, but the previous sale order references are not removed. **Solution:** - This PR ensures that all previous sale order references are removed from `reference_ids` before adding the new one. - This prevents multiple sale orders from being linked at once and ensures the correct picking is selected. [1]https://github.com/odoo/odoo/blob/0313a5e47cfa3f338bd80ac25becd09862f0e11c/addons/stock/models/stock_move.py#L1389-L1390 [2]https://github.com/odoo/odoo/blob/0313a5e47cfa3f338bd80ac25becd09862f0e11c/addons/sale_stock/models/stock.py#L194-L195 **sentry-7013716337** I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an error that occurred when the HR Employee: Update Current Version cron job attempted to compute payslip issues. The issue stemmed from a datetime object being incorrectly serialized within the cron job's environment context, causing a JSON serialization error. This fix ensures the cron job functions correctly without generating this error.
Original PR description
Currently, an error occurs during payslip issue computation when running the cron job `HR Employee: Update Current Version`. **Steps to replicate:** * Install `l10n_mx_hr_payroll_account_edi` with…
Currently, an error occurs during payslip issue computation when running the cron job `HR Employee: Update Current Version`. **Steps to replicate:** * Install `l10n_mx_hr_payroll_account_edi` with demo data and switch to `MX company` * Employees > Create a new Employee > Payroll > Set `Contract` and save * Payslips > Create a new Payslip with that Employee * Run the scheduled action `HR Employee: Update Current Version` **Error:** `TypeError: Object of type datetime is not JSON serializable` **Root cause:** - The scheduled action `HR Employee: Update Current Version` tries to change the employee `current_version_id` at code line [1] from the CRON (the CRON will adds the `cron_end_time` key with the `datetime` object in environment context (see [2])). - Since the field `version_id.contract_type_id.code` (see [3]) is set depending on the computation of the compute Json field `issues`, it triggers the `compute_issue` method to compute the issue from CRON. - The method `_get_warnings_by_slip` called from the compute method `_compute_issues` which calls `_get_records_action` (see [4]) to get the action data, and inside this method we stored the current environment context (from cron) as a context of action (see [5]) - Now when the code line [6] tries to save the `issues` record with the action and the action contain the context key with an `datetime` object value, it will generate an error while `json.dumps` is calledat code line [7] while `convert_to_cache` inside Json Field. Solution: - This commit will fix the above issues by passing empty context if the `_compute_issues` called from the CRON - This commit also prevents reassigning `employee.current_version_id` if it is the same as the version in `_compute_current_version_id` [1]: https://github.com/odoo/odoo/blob/29dd50d78f413503360de2af52d2f7818b04f2f9/addons/hr/models/hr_employee.py#L522 [2]: https://github.com/odoo/odoo/blob/29dd50d78f413503360de2af52d2f7818b04f2f9/odoo/addons/base/models/ir_cron.py#L440 [3]: https://github.com/odoo/enterprise/blob/1072a10171226c225739b0deedc95f6c0980dfee/l10n_mx_hr_payroll_account_edi/models/hr_payslip.py#L114 [4]: https://github.com/odoo/enterprise/blob/1072a10171226c225739b0deedc95f6c0980dfee/hr_payroll/models/hr_payslip.py#L1360 [5]: https://github.com/odoo/odoo/blob/29dd50d78f413503360de2af52d2f7818b04f2f9/odoo/addons/base/models/ir_ui_view.py#L3252 [6]: https://github.com/odoo/enterprise/blob/1072a10171226c225739b0deedc95f6c0980dfee/hr_payroll/models/hr_payslip.py#L1380 [7]: https://github.com/odoo/odoo/blob/29dd50d78f413503360de2af52d2f7818b04f2f9/odoo/orm/fields_misc.py#L74 [1]: https://github.com/odoo/enterprise/blob/9af78f3178aa9c58b09c3b5288029ef12e8ecce6/l10n_mx_hr_payroll_account_edi/models/hr_payslip.py#L115 [2]: https://github.com/odoo/enterprise/blob/3a32b235c9446e21ff158784316dc50ddc6a1c37/hr_payroll/models/hr_payslip.py#L1368 [3]: https://github.com/odoo/enterprise/blob/769201e22618b6683863f0839d7ad80bea0927cf/hr_payroll/models/hr_payslip.py#L1300 [4]: https://drive.google.com/file/d/1WDyyrdnGGvkXj__wbe8gjE_hhcksMmc4/view?usp=sharing [5]: https://github.com/odoo/odoo/blob/385d8473952eeaa9dcc7740bacfc2c9cbdc2d1e2/odoo/orm/fields_misc.py#L74 sentry-6953498212
This update resolves an error that prevented users from adjusting the quantity of combo products in sales orders. Starting with version 19.0, users can now directly modify the quantity of combo products, addressing a previous issue where quantity changes would cause errors. This ensures accurate order processing and avoids disruptions for users managing combo product sales.
Original PR description
Currently, an error occurs when a user changes the quantity of a combo product. Steps to Reproduce: - Install the `sale_management` module. - Go to `Combo Choices` and create `two combo choices`,…
Currently, an error occurs when a user changes the quantity of a combo product. Steps to Reproduce: - Install the `sale_management` module. - Go to `Combo Choices` and create `two combo choices`, each with at least one product. - Go to `Products` and create a product with type `Combo`, then add both `combo choices` to it. - Go to `Quotations` and create a new `quotation`. Add the newly created `combo product` in the order line. - Now, go back to the `combo product` and remove one of the combo choices from it. - Return to the `quotation` and change the `quantity` of the combo product in the sale order line. `KeyError: product.combo(6,)` After [this commit], when a user adds a combo product in a sale order line, the dialog for selecting single-choice options in the combo no longer opens. Starting from version 19.0, if a user wants to increase the quantity, they can do it directly from the order line. However, if a user deletes one of the combo choices from the combo product and then tries to increase the quantity of the combo product order line, the compute method runs to update the sale order line price — including the removed combo choice product. In the combo_prices[1], it contains a record of the current combo choices, and when it tries to access the removed combo choice from it, it raises an error[2]. This commit ensures that if a user removes a combo choice from a combo product and then updates the quantity of the combo product line, the removed combo choice product order line is also deleted as like in the previous version. [this commit]: https://github.com/odoo/odoo/pull/194496/commits/4a96d35655edd2ea94833dad0a335d26fa8e7c89 [1]- https://github.com/odoo/odoo/blob/257537584bedc1ab7db1bdc700f89145a3bb6095/addons/sale/models/sale_order_line.py#L736 [2]- https://github.com/odoo/odoo/blob/257537584bedc1ab7db1bdc700f89145a3bb6095/addons/sale/models/sale_order_line.py#L757 sentry-6952615636 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update fixes an issue where product costs were incorrectly calculated when importing vendor bills, particularly when the bill's unit of measure differed from the product's default. The change ensures quantities from bills are properly converted, leading to accurate cost assignments for purchases using AVCO or FIFO costing methods. This improves the reliability of inventory valuation.
Original PR description
## Issue: When purchasing a product using AVCO (Average Cost) of FIFO, the product's cost is computed incorrectly after importing a vendor bill if the purchase is in a different Unit of Measure than…
## Issue: When purchasing a product using AVCO (Average Cost) of FIFO, the product's cost is computed incorrectly after importing a vendor bill if the purchase is in a different Unit of Measure than the product's default Specifically, quantities from the bill are not properly converted to the product's UoM, which leads to incorrect cost assignment ## Cause: When you use AVCO or FIFO on a product and you buy it in another UoM, the quantity get from the bill isn't converted in `_get_value_from_account_move()` The method `_get_value_data()` first checks the Invoices/Bills and then the SO/PO lines for any remaining quantities Because the bill quantity isn't converted, part of the cost is incorrectly attributed to the Purchase Order as well: https://github.com/odoo/odoo/blob/6a901395b9bb7e037bd4dfa71d298ae5a9fbf7d0/addons/stock_account/models/stock_move.py#L276-L290 This leads to quantity and cost being partially assigned incorrectly ## Steps to reproduce: - Enable Unit of Measure in Settings - Create an AVCO (or FIFO) product with tracked quantities - On the product form, go to Purchase Tab and add a vendor line (Vendor: Vendor, Unit: Pack of 6, Unit Price: 10) - Create a Purchase Order and receive the product - On the product page, the cost changed accordingly - Upload a Bill for the PO and confirm - The cost of the product is wrong and the move analysis too opw-5091629
This update combines member and live chat information automatically when creating helpdesk tickets, particularly for website and WhatsApp channels. Previously, this data was displayed separately, now it's presented in a more unified and convenient way for support agents. This streamlines the support process and provides a more complete customer view.
Original PR description
*: website_helpdesk_livechat, whatsapp Task-5496830 https://github.com/odoo/odoo/pull/243864
This update ensures that live chat and member information panels automatically open when navigating between conversations. Previously, opening one panel would disable the other. Now, the live chat panel will always open by default, and member lists will automatically open for non-live chat conversations, improving user experience and efficiency.
Original PR description
*: crm_livechat, im_livechat Before this commit, auto-open of member panel and livechat info panel did not combine from [1]. This means that when livechat info was auto-open in livechat, this…
*: crm_livechat, im_livechat Before this commit, auto-open of member panel and livechat info panel did not combine from [1]. This means that when livechat info was auto-open in livechat, this necessarily meant the auto-open of member list was disabled, and vice-versa. This is a problem because when navigating between livechat and non-livechat would necessarily imply the dismiss of either panel, which is not good because the best default is having livechat panel open by default, and for non-livechat conversations it should auto-open the member list panel. This commit fixes the issue as follow: - auto-close of panel are aware of whether action are active, as removal of auto-open from auto-close makes sense only when another panel is made active when the older panel was visible - closing of member panel by opening the livechat info panel should preserve auto-open of member list for other conversations Task-5496830 [1]: https://github.com/odoo/odoo/pull/238472 https://github.com/odoo/enterprise/pull/104435
This update fixes an issue where receiving products with negative quantities (e.g., due to returns) incorrectly calculated the standard cost, leading to negative values. The change ensures the standard cost now uses the last receipt's unit cost when stock quantities are negative, preventing inaccurate cost reporting.
Original PR description
## Issue When doing a receipt with a different Unit Cost than the current one in negative quantity, the average cost would become aberrant. ## Steps to Reproduce - Create product P, Average Costing method, cost at 0 - Create & Validate a delivery for 10 unit of P - Create & Confirm a Purchase Order for 5 Units of 0 at *10 / Unit - Receive the 5 Units ==>> The product standard cost becomes $-10 ! This is because the system sees -5 Units on hand for a total of $50, and do the average. In Odoo 18, the Delivery would have been reevaluated to the receipt value, so the total value after the receipt would have been $0 for -5 Units. ## Solution When the product quantity is negative, we use the cost from the last receipt as the new average cost. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update resolves an issue that prevented users from editing event organizers or addresses within the website editor. The problem stemmed from an incorrectly formatted domain being passed to the system, causing a validation error. This fix ensures the website editor functions correctly when editing event details.
Original PR description
Currently, editing the address or organizer on an event page in website editor triggers an error due to an invalid, unevaluated domain being passed. **Steps to reproduce:** 1. Install `website_event`…
Currently, editing the address or organizer on an event page in website editor triggers an error due to an invalid, unevaluated domain being passed.
**Steps to reproduce:**
1. Install `website_event` module with demo data.
2. Open any event page and activate the website editor.
3. Click on My Company under **Organizers** (also works with **Location**).
4. On the right sidebar click on "**Contact**" drop-down.
**Error:**
`ValueError: Domain() invalid item in domain: ')'`
**Cause:**
The fields `event.event.address_id` and `event.event.organizer_id` have `check_company=True`, which generates in a domain expression like this at [1]:
```
(company_id and ['|', ('company_id', '=', False), ('company_id', 'parent_of', [company_id])] or ['|',
('company_id', '=', False), ('company_id', 'parent_of', '')]) + []
```
This domain is not evaluated on the back-end; instead serialized as JSON string. When the website editor opens the many2one dropdown, the JS code (ref 2) incorrectly splits this string into a list of individual characters, for example:
```
['(', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '_', 'i', 'd', ' ', 'a', 'n', 'd', ' ', '[', "'", '|', "'", ',', ' ', '(', "'", 'c', 'o', 'm', 'p', 'a', 'n', 'y', '_', 'i', 'd',
"'", ',', ' ', "'", '=', "'", ',', ' ', 'F', 'a', 'l', 's', 'e', ')', ',', ' ', '(', "'", 'c', 'o', 'm', 'p', 'a', 'n', 'y', '_', 'i', 'd', "'", ',', ' ', "'", 'p', 'a', 'r',
'e', 'n', 't', '_', 'o', 'f', "'", ',', ' ', '[', 'c', 'o', 'm', 'p', 'a', 'n', 'y', '_', 'i', 'd', ']', ')', ']', ' ', 'o', 'r', ' ', '[', "'", '|', "'", ',', ' ', '(', "'",
'c', 'o', 'm', 'p', 'a', 'n', 'y', '_', 'i', 'd', "'", ',', ' ', "'", '=', "'", ',', ' ', 'F', 'a', 'l', 's', 'e', ')', ',', ' ', '(', "'", 'c', 'o', 'm', 'p', 'a', 'n',
'y', '_', 'i', 'd', "'", ',', ' ', "'", 'p', 'a', 'r', 'e', 'n', 't', '_', 'o', 'f', "'", ',', ' ', "'", "'", ')', ']', ')', ' ', '+', ' ', '(', '[', ']', ')', ['id', 'not in', [1]]]
```
Such a malformed domain passed directly to `name_search()` method, where **Domain()** fails to validate it, raising the error.
**Fix:**
This commit checks for unevaluated domains (returned as strings) and ignores them when rendering many2one fields in the website editor.
[1] - https://github.com/odoo/odoo/blob/9bf7a6511711cbd4866bec03dce5cd08d7580065/addons/html_editor/models/ir_qweb_fields.py#L255
[2] - https://github.com/odoo/odoo/blob/9bf7a6511711cbd4866bec03dce5cd08d7580065/addons/html_builder/static/src/core/building_blocks/select_many2x.js#L102-L109
sentry-6916986959This update resolves a problem where scanning barcodes on picking orders with kit product variants would cause an error. The fix ensures that packaging information is correctly captured during barcode scans, allowing for accurate tracking of kit components.
Original PR description
In the barcode application, scanning a picking order containing a kit product variant with packaging will raise a Traceback. ### Steps to reproduce: 1. Enable packagings on inventory configuration.…
In the barcode application, scanning a picking order containing a kit product variant with packaging will raise a Traceback. ### Steps to reproduce: 1. Enable packagings on inventory configuration. 2. Create a product, that as a least 2 variants. 3. Add a packaging to one of the variants. 4. Create a BoM for created product (kit type). 5. Create a picking order for the variant with packaging. 6. Print the picking operation to scan the code through barcode. 7. Go to barcode and try to scan it, this will trigger the traceback. ### Cause of the issue: Scaning a barcode will call get_barcode_data during this call it will retrieve the information about the picking order and call _get_stock_barcode_data: https://github.com/odoo/enterprise/blob/f2dd6326c2084ed467c3e4c3e9d931f41309ad79/stock_barcode/controllers/stock_barcode.py#L91 _get_stock_barcode_data will obtain the packaging methode for the products. https://github.com/odoo/enterprise/blob/f2dd6326c2084ed467c3e4c3e9d931f41309ad79/stock_barcode_mrp/models/stock_picking.py#L13-L16 since in our use case the product has variant the packaging information is not inside product_tmpl_id.packaging_ids and thereof it will not retrieve the packaging information. ### Fix: We don't need to use product_tmpl_id.packaging_ids because of its compute and set methods (and the fact that the product_variant_ids field is required), the product_tmpl_id.packaging_ids will always be included in the product_tmpl_id.product_variant_ids.packaging_ids: https://github.com/odoo/odoo/blob/eb88370e2fc1887e8c88dfd8dbeadce23bb7abe5/addons/product/models/product_template.py#L430-L441 our fix will allow for packaging in the variant to be considered when there is more than only one variant. opw-4852875 Forward-Port-Of: odoo/enterprise#103256 Forward-Port-Of: odoo/enterprise#87867
This update resolves a problem that prevented the tax module from correctly loading during Odoo upgrades. The fix disables tracking computations during the module's loading process, preventing errors that caused the upgrade to fail. This ensures smoother and more reliable Odoo upgrades.
Original PR description
During database upgrades to v19, the overridden `_load` method in l10n_br_avatax writes `l10n_br_avatax_code` on `account.tax` records. ```py…
During database upgrades to v19, the overridden `_load` method in l10n_br_avatax writes `l10n_br_avatax_code` on `account.tax` records.
```py
/home/odoo/src/odoo/19.0/addons/l10n_br/migrations/1.1/end-migrate-update_taxes.py(8)migrate()
-> env['account.chart.template'].try_loading('br', company)
/home/odoo/src/odoo/19.0/addons/account/models/chart_template.py(170)try_loading()
-> return self._load(template_code, company, install_demo, force_create)
/home/odoo/src/enterprise/19.0/l10n_br_avatax/models/account_chart_template.py(12)_load()
-> self._l10n_br_init_avatax_code(company)
/home/odoo/src/enterprise/19.0/l10n_br_avatax/models/account_chart_template.py(324)_l10n_br_init_avatax_code()
-> tax.l10n_br_avatax_code = tax_data['l10n_br_avatax_code']
```
Because tracking was not disabled, this write triggered `mail.thread` tracking computation during module loading, leading to failures while finalizing tracking messages.
```py
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 576, in _track_finalize
tracking = records.with_context(context)._message_track(fnames, initial_values)
File "/home/odoo/src/odoo/19.0/addons/mail/models/mail_thread.py", line 697, in _message_track
record._message_log(
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 477, in _message_log
self._message_log_repartition_lines(tracked_value_id[2]['old_value_char'], tracked_value_id[2]['new_value_char'])
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in _message_log_repartition_lines
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
File "/home/odoo/src/odoo/19.0/addons/account/models/account_tax.py", line 423, in <listcomp>
diff_keys = [key for key in old_value if old_value[key] != new_value[key]]
KeyError: 'Porcentagem fatorial'
```
This occurs due to the interaction between:
- the `_load` override introduced in odoo/enterprise@eeaea338c1c6b9540a89be8003dadbe651de881e
- the new `try_loading` flow added in odoo/odoo@9d965abb992d558ea4235ef5f87a7654c6f1ceae
The resulting tracking computation crashes with a KeyError when processing repartition line diffs.
Fix: ensure `_load` runs with `tracking_disable=True`, as expected by the standard `_load` execution context, preventing tracking logic from running during module loading.
opw-5467986
upg-3753990
tbg-2380
Forward-Port-Of: odoo/enterprise#103931This update resolves a problem where imported sales orders containing kit products were incorrectly splitting the order into multiple lots during the POS process. The change prevents this splitting behavior, ensuring accurate sales tracking for kit products. This improves the reliability of our POS system.
Original PR description
When a kit product with tracked components is sold, and if the kit is tracked by lots, the imported sale order lines were being split by lots causing issues in the POS session. Although kits are not supposed to be tracked by lots, this commit prevents the splitting of sale order lines by lots when the product is a kit. opw-5423833 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#242785
This update fixes an issue where sale warnings weren't showing for customers linked to a company contact. The change ensures that warnings set on a company are correctly displayed when a customer from that company places an order. This improves the accuracy of sales alerts and prevents missed opportunities.
Original PR description
### Issue: Due to this issue, the sale warning message is only shown when the warning message is set on partner itself, not partner's company. #### Steps to reproduce (with demo data): 1- Enable `Sale warnings` from setting. 2- On `Contacts` app, open `Azure Interior`, and add a sale warning from `Notes` tab. 3- Create a SO with `Brandon Freeman` from `Azure Interior` as the customer. 4- No sale warning is shown. ### Cause: The IMP #192211 replaces warning popup with a message. However, it doesn't check for the warning from `partner_id.parent_id`, which was the case before that PR. This is the case with purchase as well. opw-5404983 Forward-Port-Of: odoo/odoo#242050