diff --git a/addons/pos_mrp/models/pos_order.py b/addons/pos_mrp/models/pos_order.py index a1a7744023b..f7ff3d2f152 100644 --- a/addons/pos_mrp/models/pos_order.py +++ b/addons/pos_mrp/models/pos_order.py @@ -10,7 +10,8 @@ class PosOrderLine(models.Model): bom = product.env['mrp.bom']._bom_find(product, company_id=stock_moves.company_id.id, bom_type='phantom')[product] if not bom: return super()._get_stock_moves_to_consider(stock_moves, product) - ml_product_to_consider = (product.bom_ids and bom.bom_line_ids.mapped('product_id').mapped('id')) or [product.id] + _dummy, components = bom.explode(product, self.qty) + ml_product_to_consider = (product.bom_ids and [comp[0].product_id.id for comp in components]) or [product.id] return stock_moves.filtered(lambda ml: ml.product_id.id in ml_product_to_consider and ml.bom_line_id) class PosOrder(models.Model): @@ -21,4 +22,4 @@ class PosOrder(models.Model): if not bom: return super()._get_pos_anglo_saxon_price_unit(product, partner_id, quantity) dummy, components = bom.explode(product, quantity) - return sum(super(PosOrder, self)._get_pos_anglo_saxon_price_unit(comp[1]['product'], partner_id, comp[1]['qty']) for comp in components) + return sum(super(PosOrder, self)._get_pos_anglo_saxon_price_unit(comp[0].product_id, partner_id, comp[1]['qty']) for comp in components) diff --git a/addons/pos_mrp/tests/test_pos_mrp_flow.py b/addons/pos_mrp/tests/test_pos_mrp_flow.py index 82120a21ebb..373530ac156 100644 --- a/addons/pos_mrp/tests/test_pos_mrp_flow.py +++ b/addons/pos_mrp/tests/test_pos_mrp_flow.py @@ -125,7 +125,15 @@ class TestPosMrp(TestPointOfSaleCommon): self.component_b = self.env['product.product'].create({ 'name': 'Comp B', 'available_in_pos': True, - 'standard_price': 10.0, + 'standard_price': 5.0, + 'categ_id': category.id, + 'taxes_id': False, + }) + + self.component_c = self.env['product.product'].create({ + 'name': 'Comp C', + 'available_in_pos': True, + 'standard_price': 5.0, 'categ_id': category.id, 'taxes_id': False, }) @@ -148,6 +156,9 @@ class TestPosMrp(TestPointOfSaleCommon): with bom_product_form.bom_line_ids.new() as bom_line: bom_line.product_id = self.component_b bom_line.product_qty = 1.0 + with bom_product_form.bom_line_ids.new() as bom_line: + bom_line.product_id = self.component_c + bom_line.product_qty = 1.0 self.bom_b = bom_product_form.save() bom_product_form = Form(self.env['mrp.bom']) @@ -198,6 +209,7 @@ class TestPosMrp(TestPointOfSaleCommon): } order = self.env['pos.order'].create_from_ui([order_data]) order = self.env['pos.order'].browse(order[0]['id']) + self.assertEqual(order.lines.total_cost, 15.0) accounts = self.kit.product_tmpl_id.get_product_accounts() debit_interim_account = accounts['stock_output'] credit_expense_account = accounts['expense']