Wednesday, April 15, 2026
19 changes · saas-19.2
New functionality added to Odoo
This update adds a basic accounting package specifically tailored for businesses in Uzbekistan. It includes essential features like charts of accounts, tax management, and demo data, along with Uzbek language support and Uzbekistan state information. This expands Odoo's capabilities to meet the unique accounting needs of companies operating in Uzbekistan.
Original PR description
This **PR** introduces basic accounting package including Demo Data, Chart of Accounts, Account Groups, Taxes and Tax Groups for Uzbekistan. Additionally, it also introduces Uzbek language and Uzbekistan states to support `l10n_uz`. task-3927927 Enterprise PR - https://github.com/odoo/enterprise/pull/103136 Forward-Port-Of: odoo/odoo#258855 Forward-Port-Of: odoo/odoo#241811
Enhancements to existing features
This update ensures Odoo's Singapore tax calculations align with the latest GST rates and InvoiceNow requirements. Key changes include updated tax rates, fiscal positions, and report formulas to accurately reflect Singapore's tax regulations.
Original PR description
Improves tax data and report to comply with the changes in Singapore GST rates. The improvement is also in compliance to GST InvoiceNow requirements. Key changes: - Taxes: drop outdated GST rates; add 0% NA and 0% TXNA; add fiscal positions; misc. updates - Tax Groups: drop some of tax groups - Fiscal Position: new data - Tax Report: modification to box 1's and box 14's formulas; drop unnecessary aggregate formulas (total amount) for the line sections [Task-6025634](https://www.odoo.com/odoo/my-tasks/6025634) Forward-Port-Of: odoo/odoo#258277
Resolved issues and error corrections
A recent update caused a type error during sign request processing, preventing users from accessing the sign functionality. This fix reorders the checks to ensure the existence of the sign item is verified before type comparisons, resolving the error and restoring normal operation.
Original PR description
This issue occurs because, in the recent [commit], `sign_request` was changed to `sign_item`, but the `sign_item.exists()` check is performed after the type comparison, resulting in a `TypeError`.…
This issue occurs because, in the recent [commit], `sign_request` was changed to `sign_item`, but the `sign_item.exists()` check is performed after the type comparison, resulting in a `TypeError`.
Traceback:
```py
File "/home/odoo/src/odoo/saas-19.2/odoo/addons/base/models/ir_http.py", line 415, in _dispatch
result = endpoint(**request.params)
File "/home/odoo/src/odoo/saas-19.2/odoo/http/routing_map.py", line 207, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "/home/odoo/src/enterprise/saas-19.2/sign/controllers/main.py", line 708, in get_sign_request_items
if not sign_request.exists() or not consteq(sign_item.access_token, token) or not sign_item.exists() or not sign_item.signer_email:
TypeError: unsupported operand types(s) or combination of types: 'bool' and 'str'
```
Solution:
We first perform the existence check and then compare the types.
[commit]: https://github.com/odoo/enterprise/pull/111786/changes/f40082f4e6f50dccbfa639edbef08428868cb31d
sentry-7376866293
Forward-Port-Of: odoo/enterprise#112659This update fixes a calculation error in the employment bonus payments for Belgian businesses. The change ensures that bonus calculations now precisely align with the requirements outlined by the Belgian Social Security authorities, as detailed in their official documentation. This correction improves accuracy and compliance for payroll processing.
Original PR description
The employment bonus computation was missing two roundings steps that are explicitely asked for in the following documentation: https://www.socialsecurity.be/employer/instructions/dmfa/fr/latest/instructions/deductions/workers_reductions/workbonus.html Forward-Port-Of: odoo/enterprise#113776
This update fixes an issue where global invoices generated from customer invoices weren't correctly using the issued address's zip code in the XML file. The fix ensures that the 'LugarExpedicion' field accurately reflects the shipping address, improving compliance with Mexican tax regulations. This impacts invoicing accuracy for Mexican customers.
Original PR description
**STEP TO REPRODUCE** 1. install l10n_mx_edi_extended. 2. Add an issued address on the customer invoice journal, with a zip code. 3. Create invoices, and create a global invoice with them. 4. download the xml, and notice the field LugarExpedicion is not using the zip from the issued address while it should. opw-5956837 Forward-Port-Of: odoo/enterprise#112523 Forward-Port-Of: odoo/enterprise#108732
This update fixes an issue where kit products were incorrectly included in stock valuation calculations, leading to inflated inventory values. The change ensures that only the individual components of a kit are accounted for, providing accurate inventory reporting. This resolves a discrepancy between the reported inventory value and the actual cost of the kit.
Original PR description
Currently, when a user creates a kit, the price of the kit itself is included in stock valuation. ## Steps to produce: * Install `mrp_account` without demo data. * Create a product with inventory…
Currently, when a user creates a kit, the price of the kit itself is included in stock valuation. ## Steps to produce: * Install `mrp_account` without demo data. * Create a product with inventory tracking enabled. * Create a BoM of type kit for that product. * Add component products with a defined cost and on-hand quantity greater than 0 to the BoM. * Recompute the kit product’s cost from its BoM on the product page. * Go to Inventory > Reporting > Stock. ## Observed Behavior: The cost of the kit is currently being included in the stock valuation. For example, consider a kit product called **“Computer”** that is composed of the following components: | Product | Quantity | Cost | |--------|--------|--------| | CPU | 1 | $300 | | Motherboard | 1 | $300 | The total cost of the Computer kit is therefore $600. Since the Computer is made up of the CPU and Motherboard, the total inventory value should be $600. However, the system is currently calculating the total inventory value as $1,200 , which is incorrect because it is counting both the kit and its components. ## Root cause: This behavior started after the refactor in [1], where the `_compute_value_svl` function was replaced by the `compute_value` function to calculate both average and total value for inventory valuation. With this change, the new compute function in [2] now also includes kit products when calculating inventory valuation based on their costing method. In earlier versions, this did not occur because `_compute_value_svl` depended on valuation layer groups. Kit products were excluded at [3] through the `_get_valuation_layer_groups()` call, as illustrated in image [4]. [2]- https://github.com/odoo/odoo/blob/1b9937a702fbeb47cd6d42d8119cead5828fd3fe/addons/stock_account/models/product.py#L139-L169 [3]- https://github.com/odoo/odoo/blob/a9d2e54201173d1d2d5ab97de0904d63a4b6b82b/addons/stock_account/models/product.py#L284 ## Solution: To ensure correct total inventory valuation, kit products should be excluded from valuation and only their individual components should be calculated. This can be achieved by modifying the domains used in 'action_product_stock_view` and `_get_accounts_by_product` to exclude the kits so that the kit products get filtered out, allowing the report to consider only its components. **Before:** <img width="1857" height="938" alt="image" src="https://github.com/user-attachments/assets/bbd4eb94-ba1a-429a-a61c-afbe33729ac0" /> **After:** <img width="1915" height="883" alt="image" src="https://github.com/user-attachments/assets/c93d55c8-8197-4e57-9f87-b2159fe67d87" /> [1]: https://github.com/odoo/odoo/pull/222169/commits/6e694b79b8892d693117f6c79df1a2d3a4759f4f [4]: https://drive.google.com/file/d/1g4BzGscCW2K0rf5iDKrq-psYRlKhYkDP/view?usp=sharing opw-5462515 Forward-Port-Of: odoo/odoo#244030
This update resolves a bug in Odoo's accounting module that caused users to receive validation errors when attempting to reconcile payments across different companies. The fix ensures the 'Outstanding Credits/Debits' widget only displays relevant payments for the current invoice's company, improving usability and preventing errors.
Original PR description
The invoice outstanding credits/debits widget currently displays all reconcilable items for a partner across the same account, regardless of the company they belong to. In multi-company environments,…
The invoice outstanding credits/debits widget currently displays all reconcilable items for a partner across the same account, regardless of the company they belong to. In multi-company environments, specifically when accounts have been merged, this allows users to see and try to reconcile payments from Company A into an invoice from Company B. This action eventually triggers a validation error stating that entries must belong to the same company. This commit adds a company filter to the widget's logic to ensure only relevant outstanding payments are suggested, preventing cross-company reconciliation errors and improving UX. **Description of the issue/feature this PR addresses:** This PR fixes a validation error in multi-company environments where the invoice_outstanding_credits_debits_widget suggests payments or credit notes belonging to a different company than the current invoice. The issue typically arises when a partner has outstanding transactions in multiple companies and the accounts (e.g., Account Receivable) have been merged, allowing the widget to query lines that are not valid for the current record's company context. **Current behavior before PR:** When viewing an invoice for Company A, the "Outstanding Credits/Debits" widget displays all reconcilable account.move.line records for that partner that match the account type, regardless of their company_id. If a user clicks "Add" on a payment that belongs to Company B, Odoo attempts to reconcile them, resulting in a traceback or a validation error: "Invalid Operation: All tracebacks/entries must belong to the same company." This creates confusion for the end-user, as they are presented with "ghost" credits that cannot actually be applied. **Desired behavior after PR is merged:** The invoice_outstanding_credits_debits_widget (and the underlying logic in account.move) will strictly filter the suggested outstanding items by self.company_id. Users will only see and be able to reconcile payments, credit notes, or debits that belong to the same company as the invoice they are currently processing. This ensures data integrity and a seamless UX in multi-company setups. **Steps to reproduce:** 1) Enable Multi-Company: Ensure you have at least two companies (e.g., Company A and Company B) active in your database. 2) Chart of Accounts Setup: In both companies, use the same account for Receivables (or merge them so they share the same ID/Code if testing a migrated environment). 3) Ensure the account is marked as Allow Reconciliation. 4) Create a Payment in Company B: 5) Post the payment so it remains as an "Outstanding Receipt". 6) Create an Invoice in Company A 7) Confirm/Post the invoice. 8) Check the Widget: Scroll down to the bottom of the Invoice form in Company A. 9) Observe the "Outstanding Credits" widget. The Error: The payment from Company B will appear as an available credit for the invoice in Company A. 10) Click on "Add". A validation error (UserError) will pop up: "All entries must belong to the same company." **video** https://drive.google.com/file/d/1PfBxupP8t-t21wsP2FIgNXFnTP0Zq140/view --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255875
This update fixes a problem where self-order kiosks using payment terminals would display errors despite successful payments. The fix allows payment data in kiosk mode, validates the order type to prevent fraud, and updates a Viva.com integration for improved functionality. This ensures seamless transactions for kiosk-based self-order payments.
Original PR description
Since odoo/odoo#249455 the order payload from the self order frontend is being checked to ensure the data is valid. However, these checks did not account for the situation where payment data is…
Since odoo/odoo#249455 the order payload from the self order frontend is being checked to ensure the data is valid. However, these checks did not account for the situation where payment data is included, as is the case when using a self order kiosk with a payment terminal connected. The result was that using the kiosk with a payment terminal would result in an error even though the payment was successful on the terminal. Steps to reproduce: - Configure a self order kiosk POS - Connect a payment terminal (Adyen, Stripe, Viva etc.) - Try to pay for an order from the kiosk EXPECTED: - The order is made successfully. ACTUAL: - A generic error message is shown and the order fails. The payment goes through successfully on the payment terminal. The fix is to allow a payment to be included in the self order data, but only in Kiosk mode and only if the payment amount is valid. We also now validate that the self ordering type is correct, this ensures that a kiosk payment cannot be spoofed for a mobile self order POS. Finally, there is also a small change for Viva.com to use the PoS config name instead of UUID, since UUID is no longer loaded in self order. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#256042
This update fixes an issue where increasing the quantity of a purchase order after cancellation would create a new order instead of updating the existing one. The change ensures that when a purchase order is cancelled and the associated sales order demand is increased, the system correctly updates the existing purchase order to reflect the new quantity needed. This prevents duplicate purchase orders and streamlines inventory management.
Original PR description
### Steps to reproduce: - In the settings enable: Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Routes - Unarchive MTO - Create a storable product with a vendor using the…
### Steps to reproduce: - In the settings enable: Multi-Steps Routes - Inventory > Configuration > Warehouse Management > Routes - Unarchive MTO - Create a storable product with a vendor using the MTO route - Create and confirm an SO for 1 unit of that product - Cancel and reset to draft the associated draft PO - Update the SO demand from 1 to 2 units #### > A new draft PO is created rather than updating the existing one. ### Cause of the issue: Both the confirmation and the demand updates of the SO call the `_action_launch_stock_rule` to generate the related PO. The procurement and PO generated in both cases including the `stock_reference_ids` of the SO: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/sale_stock/models/sale_order_line.py#L277-L289 However, cancelling the PO will remove its assocaited stock reference: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/purchase_stock/models/purchase_order.py#L201-L202 As such, when the second procurement is run, the `_run_buy` will not consider the existing PO without reference as a valid candidate to update: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/purchase_stock/models/stock_rule.py#L370-L372 An it will therefore create a new one: https://github.com/odoo/odoo/blob/3891dd471d64629634644c0b022a171bbaa65b49/addons/purchase_stock/models/stock_rule.py#L101-L115 opw-5940590 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258696
This update ensures that negative discount values are consistently displayed in both the Sale Order preview (portal view) and the generated PDF reports. Previously, the PDF displayed negative discounts while the portal preview did not, due to a discrepancy in how discounts were filtered. This change aligns the reporting output with the user interface for a more accurate representation of sales data.
Original PR description
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view…
Steps to produce: --- - Install the `Sales` module. - Enable discounts from settings. - Create a Sale Order with a negative discount on an order line. - Preview the Sale Order and click on the view details button. Issue: --- - Negative discount values are not shown in the preview (portal view), but they are displayed in the generated PDF. Root cause: --- - At [1], the portal template includes a condition to display discounts only when they are greater than 0, while the report templates lack this check, leading to inconsistent behavior. Solution: --- - Applied the same condition in the report templates to align the PDF output with the portal preview behavior. Before: --- <img width="787" height="136" alt="image" src="https://github.com/user-attachments/assets/d32311be-4aec-4d6f-b905-d5e52f712ba4" /> After: --- <img width="775" height="139" alt="image" src="https://github.com/user-attachments/assets/2614a8ad-dca6-49ca-b720-5c234aa91cf6" /> [1]https://github.com/odoo/odoo/blob/0f463fd247d2f5da79d6ec2b6bec18774f6f600b/addons/sale/views/sale_portal_templates.xml#L539 Enterprise PR: https://github.com/odoo/enterprise/pull/111916 opw-6061568 Forward-Port-Of: odoo/odoo#258981 Forward-Port-Of: odoo/odoo#255735
This update corrects a reporting issue where employee leave balances didn't correctly reflect current department assignments. Previously, allocations were tied to the department at creation, leading to duplicate entries in reports. The fix ensures leave balances always align with the employee's current department, improving report accuracy.
Original PR description
Steps to reproduce: ------------------------- 1. Install the Time Off module. 2. Go to Time Off > Management > Allocations, create an allocation for an employee, and approve it. 3. Go to Reporting >…
Steps to reproduce: ------------------------- 1. Install the Time Off module. 2. Go to Time Off > Management > Allocations, create an allocation for an employee, and approve it. 3. Go to Reporting > Balance and apply the filter Department > Employee. 4. Change the employee’s department. 5. Create an allocation for the same employee and approve. 6. Apply the Department > Employee filter again. Observed behaviour: ---------------------------- After a department change: * Existing allocations keep the old department * New allocations use the new department As a result, duplicate employee entries appear in the report Cause: ---------- It is using allocation.department_id. Allocations store the department at creation time, which may differ from the employee’s current department, causing an incorrect report filtering. Solution: ------------ Fetch department_id from hr_version instead of hr_leave_allocation in the hr_leave_employee_type_report. This ensures: * Leave balances always follow the employee’s current department * Correct aggregation when grouping by Department → Employee opw-5220577 Before: <img width="1238" height="857" alt="image" src="https://github.com/user-attachments/assets/15e1293b-dc50-4067-a12f-079c046c2074" /> After: <img width="1247" height="824" alt="image" src="https://github.com/user-attachments/assets/feea32de-0d9c-4eef-9ae5-639f4658560c" /> --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258562
This update fixes a bug where accrual calculations weren't automatically calculating allocation duration when using allocation modes other than 'By Employee'. The fix ensures that accrual plans correctly determine the number of days allocated for employees, regardless of the chosen allocation mode, improving the accuracy of holiday tracking.
Original PR description
### Steps to reproduce: - Create an accrual plan of one level to give 20 days at the start of the year - Create an allocation with different mode than 'By Employee' - Set the accrual plan for the…
### Steps to reproduce: - Create an accrual plan of one level to give 20 days at the start of the year - Create an allocation with different mode than 'By Employee' - Set the accrual plan for the allocation and date from 1st Jan - Notice the Allocation number of days doesn't get automatically calculated ### Cause: This is happening because when trying to process the accrual plan we won't have any records in the field employee_id https://github.com/odoo/odoo/blob/bcdd12d13d73915e565fd2c8478b936a16efb9f4/addons/hr_holidays/models/hr_leave_allocation.py#L892-L893 And since employee_id is computed field when computing it we don't handle the case of any other mode other than 'By Employee'. https://github.com/odoo/odoo/blob/bcdd12d13d73915e565fd2c8478b936a16efb9f4/addons/hr_holidays/models/hr_leave_allocation.py#L259-L270 ### Fix: If we have different mode in the allocation we fetch the employees in this mode (Department, Company, Employee Tag) and set them as the allocation employee_ids so when computing the employee_id we will have a record in the field and it won't be null P.S. In the forward port we will have to introduce another fix for the multi allocation wizard opw-5888023 Forward-Port-Of: odoo/odoo#258520 Forward-Port-Of: odoo/odoo#247091
This update removes a distracting blur from message highlights, making them easier to see. The change also corrects issues with scrolling behavior that occurred during highlights, ensuring a smoother user experience. Previously, the system incorrectly displayed a 'Welcome to conversation' message during highlights, causing scroll issues.
Original PR description
Before this commit, the message highlight was too distracting. This was improved [1] so that highlighted message doesn't have the vertical translation during the highlight duration. To make the…
Before this commit, the message highlight was too distracting. This was improved [1] so that highlighted message doesn't have the vertical translation during the highlight duration. To make the message more visible than the other messages, other messages have their opacity reduced. While reduced opacity is good, there was an extra blur, which is more distracting. This commit fixes it by removing it. Also at the end of message highlight, the scroll position of message list was changing when this shouldn't. This happens for 2 reasons: 1. The "Welcome to conversation" message was mistakenly displayed during the message highlighting, thus when message highlight ended its removal would substract some scrollTop and move scroll up. 2. The "Load More" was temporarily not shown during the message highlight. This is a problem because when message highlight ended, this was adding slightly more scollTop and move scroll down. The "Welcome to conversation" should not be shown when there's logically a "Load more", which this commit fixes. The hiding of "Load More" was intended to avoid their triggering when opening conversation [2], but the logic around these triggers had been improved [3] therefore this is no longer necessary. This commit relaxes the showing of "Load more" to display them even during a message highlighting. Task-6121035 [1]: https://github.com/odoo/odoo/pull/246989 [2]: https://github.com/odoo/odoo/pull/181392 [3]: https://github.com/odoo/odoo/pull/216776 Before / After _(before visual artifacts come from GIF recorder that doesn't like blur)_  
This update resolves an issue where the live chat composer would intermittently disable after a page reload. The fix ensures the system correctly identifies available agents by using 'sudo' to access the chatbot data, preventing the frontend from incorrectly determining that no operator was assigned.
Original PR description
When a livechat visitor reloads the page, `/mail/data` serializes the chatbot state again from the discuss channel / message store data. In that flow, the visitor cannot read `livechat_agent_partner_ids` directly, so `operatorFound` was computed as false even when an agent had already been assigned. This made the frontend think no operator was available which led to UI bugs like disabled composer. Use sudo when checking whether a livechat agent exists so the store data keeps returning the correct chatbot forwarding state for visitors. task-[6102389](https://www.odoo.com/odoo/project/1519/tasks/6102389)
This update fixes a bug that prevented Peppol invoices from importing correctly. Previously, changing the Peppol journal type to non-purchase would cause import failures. This change ensures that Peppol invoices are always processed as purchase documents, improving invoice import reliability.
Original PR description
Prevent changing a Peppol journal to a non-purchase type, to avoid import errors when receiving Peppol invoices. Step to reproduce: - Setup a company with Peppol - Change the Peppol reception journal type to non-purchase - Try to run Peppol cron to import invoice, it fails with "Cannot create a purchase document in a non purchase journal" opw-6071992 opw-6064502 Forward-Port-Of: odoo/odoo#258673 Forward-Port-Of: odoo/odoo#256823
This update fixes an issue where alternative purchase orders were calculating prices incorrectly. When using 'Purchase Alternatives,' the system was misinterpreting tax settings, resulting in an inflated total price. This change ensures accurate price calculations for alternative purchase orders, improving financial reporting.
Original PR description
[FIX] purchase: set the correct price in alternative PO Steps to reproduce the bug: - Enable "Purchase Alternatives" in settings - Go to Accounting > Configuration > Taxes: - Configure a 15% purchase…
[FIX] purchase: set the correct price in alternative PO
Steps to reproduce the bug:
- Enable "Purchase Alternatives" in settings
- Go to Accounting > Configuration > Taxes:
- Configure a 15% purchase tax:
- Advanced Options tab:
- Included in Price: enabled
- Create a storable product "P1":
- Tax: 15%
- In the Purchase tab, add vendors:
- "Azure Interior": price = $10, min qty = 1
- "Deco Addict": price = $15, min qty = 1
- Create a purchase order for "Azure Interior":
- Order 100 units → total price is automatically computed as $1000
- Create an alternative purchase order:
- Vendor: "Deco Addict"
- Copy products: enabled
Problem:
The price is $1360, instead of $1500
When the alternative purchase order is created and the product is set
on the purchase order line, the required onchange methods are not
triggered:
https://github.com/odoo/odoo/blob/ad253ef4c2cb06536b99bb919a3e01ed980d2e96/addons/purchase/models/purchase.py#L1169
As a result, both the unit price and the taxes are missing on the
purchase order line. When `_compute_price_unit_and_date_planned_and_name`
is triggered, it attempts to compute the `price_unit`.
https://github.com/odoo/odoo/blob/fb24ad03fc47a303fa8719c0795e1afa9a7eb821/addons/purchase/models/purchase_order_line.py#L345-L346
At this point, it checks whether the purchase order has a vendor.
Since "Deco Addict" is set, it calls `_fix_tax_included_price_company`
using:
- the supplier price ($15)
- the supplier tax (15%)
However, since no taxes are yet set on the purchase order line,
`_fix_tax_included_price_company` incorrectly assumes the price is
tax-included and converts it to a tax-excluded price
(~13.04 instead of 15).
https://github.com/odoo/odoo/blob/7076b4f4d0d933d93b24e8e4c7cf21ef0b0008e5/addons/account/models/account_tax.py#L571-L573
Then, a 15% tax is applied on top of this incorrect base price, leading
to the wrong total.
opw-6047004
Forward-Port-Of: odoo/odoo#258154This update ensures that the price of a combo order is accurately applied to any additional items added as extras. Previously, when all sub-combos had zero free quantities, the extra items were incorrectly priced at the base price, leading to lost revenue. This fix mirrors the existing logic to correctly distribute the parent combo's list price to these extra lines.
Original PR description
When all sub-combos have qty_free=0, no child lines were classified as free, leaving remaining_total (= parent list price) undistributed. Extra lines were priced at base_price only, silently dropping the parent combo price. Fix by mirroring the JS computeComboItems logic: before processing extra lines, compute their proportional denominator and allocate remaining_total to each extra line as a share of parent_lst_price, with a per-unit rounding correction on the last line. opw-6045562 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#255867 Forward-Port-Of: odoo/odoo#254665
This update fixes an issue where kit costs were incorrectly calculated when components used within a kit had different unit of measure (UoM) settings than the base component. The fix ensures accurate cost calculations for kits sold through POS, preventing discrepancies in order totals. This improves the reliability of pricing and inventory management.
Original PR description
When selling a kit that use component with different UoM than the base component UoM, no conversion was done to compute the correct qty of component used in the kit, which lead to a wrong total cost on the pos order. Steps to reproduce: ------------------- * Create a component A with a cost of 12000€ * Set the UoM for the component A to "dozen" * Create a kit product K with a BoM the use 1 "unit" of A * At this point the cost of the kit K should be 1000€ * Now make a PoS order for 1 K and validate it > Observation: The total cost of the kit is not correctly computed, it should be 1000€ Why the fix: ------------ When computing the qty_per_kit, we were not doing the conversion between the product UoM and the BoM line UoM. opw-6039809 Forward-Port-Of: odoo/odoo#258774 Forward-Port-Of: odoo/odoo#257068
This update resolves an issue where the system wasn't properly assigning filenames to imported SDI E-invoices. By adding a field to store the filename alongside the XML file, the system now correctly exports invoice documents and avoids errors. This ensures seamless invoice processing and data accuracy.
Original PR description
PR #212726 removed a Many2One field and replaced it with an existing binary field (`l10n_it_edi_attachment_file`) and a new Char field (`l10n_it_edi_attachment_name`) to store E-invoice files as…
PR #212726 removed a Many2One field and replaced it with an existing binary field (`l10n_it_edi_attachment_file`) and a new Char field (`l10n_it_edi_attachment_name`) to store E-invoice files as XMLs. This change was made for security reasons. This pre-existing binary field was already used for importing SDI documents, which caused errors resolved in PR #252806. The new char field was not set during the SDI import process in PR #212726. This can cause errors when exporting invoice documents, as our code sees content in the binary field and expects the name to also be present. See [`_get_invoice_legal_documents()`](https://github.com/odoo/odoo/blob/f48f221c91b8d123bcaf1c4d8ed6c7dfba763ae6/addons/l10n_it_edi/models/account_move.py#L411). This commit ensures that the name of an imported SDI document is set in the move's `l10n_it_edi_attachment_name` field. opw-6023263 [link](https://www.odoo.com/odoo/my-tasks/6023263) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#258882 Forward-Port-Of: odoo/odoo#257586