[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
parent b423d5be07
commit 01f3e9287c
2 changed files with 21 additions and 10 deletions

View File

@@ -213,18 +213,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

@@ -451,6 +451,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()