[FIX] mrp_multi_level: Check BoM Line Attrs

add a call to mrp.bom.line._skip_bom_line() method
fixes #505
This commit is contained in:
Matt Taylor
2020-06-02 12:41:01 -06:00
committed by JasminSForgeFlow
parent c0116f4b61
commit 2df002c917
7 changed files with 213 additions and 1 deletions

View File

@@ -40,6 +40,59 @@
<field name="sequence">5</field>
<field name="bom_id" ref="mrp_bom_fp_2" />
</record>
<!-- Customizable Desk -->
<record id="mrp_bom_product_4" model="mrp.bom">
<field
name="product_tmpl_id"
ref="product.product_product_4_product_template"
/>
<field name="product_uom_id" ref="uom.product_uom_unit" />
<field name="sequence">5</field>
</record>
<record id="mrp_bom_product_4_line_av_11" model="mrp.bom.line">
<field name="product_id" ref="product_product_av_11" />
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit" />
<field name="sequence">1</field>
<field name="bom_id" ref="mrp_bom_product_4" />
<field
name="bom_product_template_attribute_value_ids"
eval="[(6, 0, [ref('product.product_attribute_value_1')])]"
/>
</record>
<record id="mrp_bom_product_4_line_av_12" model="mrp.bom.line">
<field name="product_id" ref="product_product_av_12" />
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit" />
<field name="sequence">2</field>
<field name="bom_id" ref="mrp_bom_product_4" />
<field
name="bom_product_template_attribute_value_ids"
eval="[(6, 0, [ref('product.product_attribute_value_2')])]"
/>
</record>
<record id="mrp_bom_product_4_line_av_21" model="mrp.bom.line">
<field name="product_id" ref="product_product_av_21" />
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit" />
<field name="sequence">3</field>
<field name="bom_id" ref="mrp_bom_product_4" />
<field
name="bom_product_template_attribute_value_ids"
eval="[(6, 0, [ref('product.product_attribute_value_3')])]"
/>
</record>
<record id="mrp_bom_product_4_line_av_22" model="mrp.bom.line">
<field name="product_id" ref="product_product_av_22" />
<field name="product_qty">1</field>
<field name="product_uom_id" ref="uom.product_uom_unit" />
<field name="sequence">4</field>
<field name="bom_id" ref="mrp_bom_product_4" />
<field
name="bom_product_template_attribute_value_ids"
eval="[(6, 0, [ref('product.product_attribute_value_4')])]"
/>
</record>
<!-- SF-1 -->
<record id="mrp_bom_sf_1" model="mrp.bom">
<field name="product_tmpl_id" ref="product_product_sf_1_product_template" />

View File

@@ -8,6 +8,22 @@
<field name="product_id" ref="product_product_fp_2" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_product_4" model="product.mrp.area">
<field name="product_id" ref="product.product_product_4" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_product_4b" model="product.mrp.area">
<field name="product_id" ref="product.product_product_4b" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_product_4c" model="product.mrp.area">
<field name="product_id" ref="product.product_product_4c" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_product_4d" model="product.mrp.area">
<field name="product_id" ref="product.product_product_4d" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_sf_1" model="product.mrp.area">
<field name="product_id" ref="product_product_sf_1" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
@@ -24,4 +40,20 @@
<field name="product_id" ref="product_product_pp_2" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_av_11" model="product.mrp.area">
<field name="product_id" ref="product_product_av_11" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_av_12" model="product.mrp.area">
<field name="product_id" ref="product_product_av_12" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_av_21" model="product.mrp.area">
<field name="product_id" ref="product_product_av_21" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
<record id="product_mrp_area_av_22" model="product.mrp.area">
<field name="product_id" ref="product_product_av_22" />
<field name="mrp_area_id" ref="mrp_area_stock_wh0" />
</record>
</odoo>

View File

@@ -24,6 +24,13 @@
eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"
/>
</record>
<!-- Customizable Desk -->
<record id="product.product_product_4_product_template" model="product.template">
<field
name="route_ids"
eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"
/>
</record>
<record id="product_product_sf_1" model="product.product">
<field name="name">SF-1</field>
<field name="categ_id" ref="product_category_mrp" />
@@ -70,4 +77,48 @@
eval="[(6, 0, [ref('purchase_stock.route_warehouse0_buy')])]"
/>
</record>
<record id="product_product_av_11" model="product.product">
<field name="name">AV-11 steel</field>
<field name="categ_id" ref="product_category_mrp" />
<field name="type">product</field>
<field name="uom_id" ref="uom.product_uom_unit" />
<field name="uom_po_id" ref="uom.product_uom_unit" />
<field
name="route_ids"
eval="[(6, 0, [ref('purchase_stock.route_warehouse0_buy')])]"
/>
</record>
<record id="product_product_av_12" model="product.product">
<field name="name">AV-12 aluminium</field>
<field name="categ_id" ref="product_category_mrp" />
<field name="type">product</field>
<field name="uom_id" ref="uom.product_uom_unit" />
<field name="uom_po_id" ref="uom.product_uom_unit" />
<field
name="route_ids"
eval="[(6, 0, [ref('purchase_stock.route_warehouse0_buy')])]"
/>
</record>
<record id="product_product_av_21" model="product.product">
<field name="name">AV-21 white</field>
<field name="categ_id" ref="product_category_mrp" />
<field name="type">product</field>
<field name="uom_id" ref="uom.product_uom_unit" />
<field name="uom_po_id" ref="uom.product_uom_unit" />
<field
name="route_ids"
eval="[(6, 0, [ref('purchase_stock.route_warehouse0_buy')])]"
/>
</record>
<record id="product_product_av_22" model="product.product">
<field name="name">AV-22 black</field>
<field name="categ_id" ref="product_category_mrp" />
<field name="type">product</field>
<field name="uom_id" ref="uom.product_uom_unit" />
<field name="uom_po_id" ref="uom.product_uom_unit" />
<field
name="route_ids"
eval="[(6, 0, [ref('purchase_stock.route_warehouse0_buy')])]"
/>
</record>
</odoo>

View File

@@ -1,5 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<record id="product_supplierinfo_av_11" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_av_11_product_template" />
<field name="name" ref="res_partner_lazer_tech" />
<field name="delay">4</field>
<field name="min_qty">0</field>
<field name="price">100</field>
</record>
<record id="product_supplierinfo_av_12" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_av_12_product_template" />
<field name="name" ref="res_partner_lazer_tech" />
<field name="delay">4</field>
<field name="min_qty">0</field>
<field name="price">100</field>
</record>
<record id="product_supplierinfo_av_21" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_av_21_product_template" />
<field name="name" ref="res_partner_lazer_tech" />
<field name="delay">4</field>
<field name="min_qty">0</field>
<field name="price">100</field>
</record>
<record id="product_supplierinfo_av_22" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_av_22_product_template" />
<field name="name" ref="res_partner_lazer_tech" />
<field name="delay">4</field>
<field name="min_qty">0</field>
<field name="price">100</field>
</record>
<record id="product_supplierinfo_pp_1" model="product.supplierinfo">
<field name="product_tmpl_id" ref="product_product_pp_1_product_template" />
<field name="name" ref="res_partner_lazer_tech" />

View File

@@ -32,6 +32,11 @@ class TestMrpMultiLevelCommon(SavepointCase):
cls.sf_2 = cls.env.ref("mrp_multi_level.product_product_sf_2")
cls.pp_1 = cls.env.ref("mrp_multi_level.product_product_pp_1")
cls.pp_2 = cls.env.ref("mrp_multi_level.product_product_pp_2")
cls.product_4b = cls.env.ref("product.product_product_4b")
cls.av_11 = cls.env.ref("mrp_multi_level.product_product_av_11")
cls.av_12 = cls.env.ref("mrp_multi_level.product_product_av_12")
cls.av_21 = cls.env.ref("mrp_multi_level.product_product_av_21")
cls.av_22 = cls.env.ref("mrp_multi_level.product_product_av_22")
cls.company = cls.env.ref("base.main_company")
cls.mrp_area = cls.env.ref("mrp_multi_level.mrp_area_stock_wh0")
cls.vendor = cls.env.ref("mrp_multi_level.res_partner_lazer_tech")
@@ -201,7 +206,7 @@ class TestMrpMultiLevelCommon(SavepointCase):
cls.product_scenario_1, 18, dt_next_group, location=cls.cases_loc
)
# Create test picking for FP-1 and FP-2:
# Create test picking for FP-1, FP-2 and Desk(steel, black):
res = cls.calendar.plan_days(7 + 1, datetime.today().replace(hour=0))
date_move = res.date()
cls.picking_1 = cls.stock_picking_obj.create(
@@ -239,6 +244,20 @@ class TestMrpMultiLevelCommon(SavepointCase):
"location_dest_id": cls.customer_location.id,
},
),
(
0,
0,
{
"name": "Test move product-4b",
"product_id": cls.product_4b.id,
"date_expected": date_move,
"date": date_move,
"product_uom": cls.product_4b.uom_id.id,
"product_uom_qty": 150,
"location_id": cls.stock_location.id,
"location_dest_id": cls.customer_location.id,
},
),
],
}
)

View File

@@ -309,3 +309,30 @@ class TestMrpMultiLevel(TestMrpMultiLevelCommon):
self.assertEqual(mrp_invs[0].to_procure, 130)
# Net needs = 18, available on-hand = 3 -> 15
self.assertEqual(mrp_invs[1].to_procure, 15)
def test_12_bom_line_attribute_value_skip(self):
"""Check for the correct demand on components of a product with
multiple variants"""
product_4b_demand = self.mrp_inventory_obj.search(
[("product_mrp_area_id.product_id", "=", self.product_4b.id)]
)
self.assertTrue(product_4b_demand)
self.assertTrue(product_4b_demand.to_procure)
# No demand or supply for AV-12 or AV-21
av_12_supply = self.mrp_inventory_obj.search(
[("product_mrp_area_id.product_id", "=", self.av_12.id)]
)
self.assertFalse(av_12_supply)
av_21_supply = self.mrp_inventory_obj.search(
[("product_mrp_area_id.product_id", "=", self.av_21.id)]
)
self.assertFalse(av_21_supply)
# Supply for AV-11 and AV-22
av_11_supply = self.mrp_inventory_obj.search(
[("product_mrp_area_id.product_id", "=", self.av_11.id)]
)
self.assertTrue(av_11_supply)
av_22_supply = self.mrp_inventory_obj.search(
[("product_mrp_area_id.product_id", "=", self.av_22.id)]
)
self.assertTrue(av_22_supply)

View File

@@ -189,6 +189,8 @@ class MultiLevelMrp(models.TransientModel):
):
# Stop explosion.
continue
if bomline._skip_bom_line(product_mrp_area_id.product_id):
continue
# TODO: review: mrp_transit_delay, mrp_inspection_delay
mrp_date_demand_2 = mrp_date_demand - timedelta(
days=(