[FIX] mrp_multi_level: when a product is a kit do not check rule

When you procure a kit, it doesn't matter what the route configuration
is on the product itself but on its children, so it is not needed to
check anything else but the BoM to assign the 'phantom' supply
method.

Also do not assign a BoM when the supply method is not phantom or manufacture.
This commit is contained in:
Lois Rilo
2024-11-25 17:35:54 +01:00
committed by JasminSForgeFlow
parent ece3e7f7a1
commit 76d18127cb
2 changed files with 21 additions and 10 deletions

View File

@@ -206,18 +206,19 @@ class ProductMRPArea(models.Model):
boms_by_product = self.env["mrp.bom"]._bom_find(self.mapped("product_id"))
for rec in self:
rule = rec._get_rule()
if not rule:
bom = boms_by_product.get(rec.product_id, self.env["mrp.bom"])
if bom.type == "phantom":
rec.supply_method = "phantom"
rec.supply_bom_id = bom
elif not rule:
rec.supply_method = "none"
rec.supply_bom_id = False
continue
# Determine the supply method based on the final rule.
bom = boms_by_product.get(rec.product_id, self.env["mrp.bom"])
rec.supply_method = (
"phantom"
if rule.action == "manufacture" and bom.type == "phantom"
else rule.action
)
rec.supply_bom_id = bom
elif rule.action == "manufacture":
rec.supply_method = rule.action
rec.supply_bom_id = bom
else:
rec.supply_method = rule.action
rec.supply_bom_id = False
@api.depends(
"mrp_area_id", "supply_method", "product_id.route_ids", "product_id.seller_ids"

View File

@@ -449,6 +449,16 @@ class TestMrpMultiLevel(TestMrpMultiLevelCommon):
]
product_mrp_area._compute_supply_method()
self.assertEqual(product_mrp_area.supply_method, "buy")
kit_bom = self.mrp_bom_obj.create(
{
"product_tmpl_id": self.fp_4.product_tmpl_id.id,
"product_id": self.fp_4.id,
"type": "phantom",
}
)
product_mrp_area._compute_supply_method()
self.assertEqual(product_mrp_area.supply_method, "phantom")
self.assertEqual(product_mrp_area.supply_bom_id, kit_bom)
def test_18_priorize_safety_stock(self):
now = datetime.now()