mirror of
https://github.com/OCA/manufacture.git
synced 2025-01-28 16:37:15 +02:00
[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:
committed by
JasminSForgeFlow
parent
c0116f4b61
commit
2df002c917
@@ -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" />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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,
|
||||
},
|
||||
),
|
||||
],
|
||||
}
|
||||
)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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=(
|
||||
|
||||
Reference in New Issue
Block a user