From 8daffdd16ae40ecab006c505eed2bebe841a2eef Mon Sep 17 00:00:00 2001 From: "Touati Djamel (otd)" Date: Thu, 3 Nov 2022 16:15:49 +0000 Subject: [PATCH] [FIX] mrp, sale_mrp: always use BOM UoM on Replenishment MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Steps to reproduce the bug: - Create a storable product “P1”: - route: MTO + manufacture - uom: unit - BOM: - qty: 1 dozen - component: 12 units of “C1” - Create a SO: - Product: 12 unit of “p1” - uom: unit - Confirm the SO Problem: The UOM set on the product is used instead of the BOM UoM on the created manufacturing order. wrong MO: - 12 unit of "P1" expcted MO: - 1 dozen of "P1" opw-3048190 closes odoo/odoo#106351 X-original-commit: 8c5fb8b71538462422c8f166b772b5e316ecd6b5 Signed-off-by: Arnold Moyaux (arm) Signed-off-by: Djamel Touati (otd) --- addons/mrp/models/stock_rule.py | 4 ++-- addons/mrp/tests/test_procurement.py | 4 ++-- addons/sale_mrp/tests/test_sale_mrp_flow.py | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/addons/mrp/models/stock_rule.py b/addons/mrp/models/stock_rule.py index 1bb6bc2f820..df9dae68342 100644 --- a/addons/mrp/models/stock_rule.py +++ b/addons/mrp/models/stock_rule.py @@ -119,8 +119,8 @@ class StockRule(models.Model): 'origin': origin, 'product_id': product_id.id, 'product_description_variants': values.get('product_description_variants'), - 'product_qty': product_qty, - 'product_uom_id': product_uom.id, + 'product_qty': product_uom._compute_quantity(product_qty, bom.product_uom_id), + 'product_uom_id': bom.product_uom_id.id, 'location_src_id': self.location_src_id.id or self.picking_type_id.default_location_src_id.id or location_dest_id.id, 'location_dest_id': location_dest_id.id, 'bom_id': bom.id, diff --git a/addons/mrp/tests/test_procurement.py b/addons/mrp/tests/test_procurement.py index 98449ac845a..24350dca7ca 100644 --- a/addons/mrp/tests/test_procurement.py +++ b/addons/mrp/tests/test_procurement.py @@ -62,8 +62,8 @@ class TestProcurement(TestMrpCommon): 'location_id': self.warehouse.lot_stock_id.id, }).action_apply_inventory() produce_product_4.action_assign() - self.assertEqual(produce_product_4.product_qty, 8, "Wrong quantity of finish product.") - self.assertEqual(produce_product_4.product_uom_id, self.uom_dozen, "Wrong quantity of finish product.") + self.assertEqual(produce_product_4.product_qty, 96, "Wrong quantity of finish product.") + self.assertEqual(produce_product_4.product_uom_id, self.uom_unit, "Wrong quantity of finish product.") self.assertEqual(produce_product_4.reservation_state, 'assigned', "Consume material not available") # produce product4 diff --git a/addons/sale_mrp/tests/test_sale_mrp_flow.py b/addons/sale_mrp/tests/test_sale_mrp_flow.py index 36885f57834..24399b7c7db 100644 --- a/addons/sale_mrp/tests/test_sale_mrp_flow.py +++ b/addons/sale_mrp/tests/test_sale_mrp_flow.py @@ -344,8 +344,8 @@ class TestSaleMrpFlow(ValuationReconciliationTestCommon): mnf_product_a = self.env['mrp.production'].search([('product_id', '=', product_a.id)]) self.assertTrue(mnf_product_a, 'Manufacturing order not created.') - self.assertEqual(mnf_product_a.product_qty, 120, 'Wrong product quantity in manufacturing order.') - self.assertEqual(mnf_product_a.product_uom_id, self.uom_unit, 'Wrong unit of measure in manufacturing order.') + self.assertEqual(mnf_product_a.product_qty, 10, 'Wrong product quantity in manufacturing order.') + self.assertEqual(mnf_product_a.product_uom_id, self.uom_dozen, 'Wrong unit of measure in manufacturing order.') self.assertEqual(mnf_product_a.state, 'confirmed', 'Manufacturing order should be confirmed.') # ------------------------------------------------------------------------------------------