test: combine sub assembly items and make Production Plan tests atomic
This commit is contained in:
parent
b8593188f3
commit
292fe370db
@ -20,7 +20,7 @@ from erpnext.tests.utils import ERPNextTestCase
|
|||||||
|
|
||||||
|
|
||||||
class TestProductionPlan(ERPNextTestCase):
|
class TestProductionPlan(ERPNextTestCase):
|
||||||
def setUp(self):
|
def setUp(self) -> None:
|
||||||
for item in ['Test Production Item 1', 'Subassembly Item 1',
|
for item in ['Test Production Item 1', 'Subassembly Item 1',
|
||||||
'Raw Material Item 1', 'Raw Material Item 2']:
|
'Raw Material Item 1', 'Raw Material Item 2']:
|
||||||
create_item(item, valuation_rate=100)
|
create_item(item, valuation_rate=100)
|
||||||
@ -38,6 +38,9 @@ class TestProductionPlan(ERPNextTestCase):
|
|||||||
if not frappe.db.get_value('BOM', {'item': item}):
|
if not frappe.db.get_value('BOM', {'item': item}):
|
||||||
make_bom(item = item, raw_materials = raw_materials)
|
make_bom(item = item, raw_materials = raw_materials)
|
||||||
|
|
||||||
|
def tearDown(self) -> None:
|
||||||
|
frappe.db.rollback()
|
||||||
|
|
||||||
def test_production_plan_mr_creation(self):
|
def test_production_plan_mr_creation(self):
|
||||||
"Test if MRs are created for unavailable raw materials."
|
"Test if MRs are created for unavailable raw materials."
|
||||||
pln = create_production_plan(item_code='Test Production Item 1')
|
pln = create_production_plan(item_code='Test Production Item 1')
|
||||||
@ -258,6 +261,46 @@ class TestProductionPlan(ERPNextTestCase):
|
|||||||
pln.reload()
|
pln.reload()
|
||||||
pln.cancel()
|
pln.cancel()
|
||||||
|
|
||||||
|
def test_production_plan_combine_subassembly(self):
|
||||||
|
"""
|
||||||
|
Test combining Sub assembly items belonging to the same BOM in Prod Plan.
|
||||||
|
1) Red-Car -> Wheel (sub assembly) > BOM-WHEEL-001
|
||||||
|
2) Green-Car -> Wheel (sub assembly) > BOM-WHEEL-001
|
||||||
|
"""
|
||||||
|
from erpnext.manufacturing.doctype.bom.test_bom import create_nested_bom
|
||||||
|
|
||||||
|
bom_tree_1 = {
|
||||||
|
"Red-Car": {"Wheel": {"Rubber": {}}}
|
||||||
|
}
|
||||||
|
bom_tree_2 = {
|
||||||
|
"Green-Car": {"Wheel": {"Rubber": {}}}
|
||||||
|
}
|
||||||
|
|
||||||
|
parent_bom_1 = create_nested_bom(bom_tree_1, prefix="")
|
||||||
|
parent_bom_2 = create_nested_bom(bom_tree_2, prefix="")
|
||||||
|
|
||||||
|
# make sure both boms use same subassembly bom
|
||||||
|
subassembly_bom = parent_bom_1.items[0].bom_no
|
||||||
|
frappe.db.set_value("BOM Item", parent_bom_2.items[0].name, "bom_no", subassembly_bom)
|
||||||
|
|
||||||
|
plan = create_production_plan(item_code="Red-Car", use_multi_level_bom=1, do_not_save=True)
|
||||||
|
plan.append("po_items", { # Add Green-Car to Prod Plan
|
||||||
|
'use_multi_level_bom': 1,
|
||||||
|
'item_code': "Green-Car",
|
||||||
|
'bom_no': frappe.db.get_value('Item', "Green-Car", 'default_bom'),
|
||||||
|
'planned_qty': 1,
|
||||||
|
'planned_start_date': now_datetime()
|
||||||
|
})
|
||||||
|
plan.get_sub_assembly_items()
|
||||||
|
self.assertTrue(len(plan.sub_assembly_items), 2)
|
||||||
|
|
||||||
|
plan.combine_sub_items = 1
|
||||||
|
plan.get_sub_assembly_items()
|
||||||
|
|
||||||
|
self.assertTrue(len(plan.sub_assembly_items), 1) # check if sub-assembly items merged
|
||||||
|
self.assertEqual(plan.sub_assembly_items[0].qty, 2.0)
|
||||||
|
self.assertEqual(plan.sub_assembly_items[0].stock_qty, 2.0)
|
||||||
|
|
||||||
def test_pp_to_mr_customer_provided(self):
|
def test_pp_to_mr_customer_provided(self):
|
||||||
" Test Material Request from Production Plan for Customer Provided Item."
|
" Test Material Request from Production Plan for Customer Provided Item."
|
||||||
create_item('CUST-0987', is_customer_provided_item = 1, customer = '_Test Customer', is_purchase_item = 0)
|
create_item('CUST-0987', is_customer_provided_item = 1, customer = '_Test Customer', is_purchase_item = 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user