Files
test/mrp_workorder/tests/test_consume_tracked_component.py
2023-04-14 17:42:23 +08:00

173 lines
7.7 KiB
Python

from odoo.tests import tagged
from odoo.addons.mrp.tests.common_consume_tracked_component import TestConsumeTrackedComponentCommon
@tagged('post_install', '-at_install')
class TestConsumeTrackedComponent(TestConsumeTrackedComponentCommon):
@classmethod
def setUpClass(cls):
super(TestConsumeTrackedComponent, cls).setUpClass()
cls.consume_quality_point = cls.env.ref('mrp_workorder.test_type_register_consumed_materials')
cls.routing_workcenter_serial = cls.env['mrp.routing.workcenter'].create({
'bom_id' : cls.bom_serial.id,
'workcenter_id' : cls.workcenter.id,
'time_cycle' : 120,
'sequence' : 1,
'name' : 'Assembly'
})
cls.bom_serial_line_serial = list(filter(lambda boml: boml.tracking == 'serial', cls.bom_serial.bom_line_ids))[0]
cls.bom_serial_line_serial.operation_id = cls.routing_workcenter_serial
cls.quality_point = cls.env['quality.point'].create({
'product_ids' : [(4, cls.produced_serial.id)],
'operation_id' : cls.routing_workcenter_serial.id,
'test_type_id' : cls.consume_quality_point.id,
'component_id' : cls.raw_serial.id,
'sequence' : 1,
'note' : 'Please enter the Raw Serial serial number',
'title' : 'Component Registration : Raw Serial',
'picking_type_ids' : [(4, cls.picking_type.id)],
})
def test_option_enabled_and_operation_id_and_quality_point(self):
"""
Auto-consume is enabled
There's a BoM.operation_id and a quality_point on the 'serial' component
-> Consumption step already exist
-> No auto-consumption of the 'serial' component
-> Auto-consumption of other components
"""
self.assertTrue(self.picking_type.use_auto_consume_components_lots)
#Create manufacturing order
mo_serial = self.create_mo(self.mo_serial_tmpl, 1)
mo_serial.action_confirm()
self.assertTrue(self.raw_serial in mo_serial.workorder_ids.quality_point_ids.component_id)
self.assertTrue(self.routing_workcenter_serial in mo_serial.move_raw_ids.operation_id)
quant = self.create_quant(self.raw_none, 3)
quant |= self.create_quant(self.raw_lot, 2)
quant |= self.create_quant(self.raw_serial, 1)
quant.action_apply_inventory()
#Quantities are fully reserved (stock.move state is available)
mo_serial.action_assign()
for mov in mo_serial.move_raw_ids:
self.assertEqual(mov.product_qty, mov.reserved_availability, "Reserved quantity shall be equal to To Consume quantity.")
mo_serial.action_generate_serial()
for mov in mo_serial.move_raw_ids:
if mov.has_tracking != 'serial':
self.assertEqual(mov.product_qty, mov.quantity_done, "Done quantity shall be equal to To Consume quantity.")
else:
self.assertEqual(0, mov.quantity_done, "Done quantity shall be equal to 0.")
def test_option_enabled_and_operation_id(self):
"""
Auto-consume is enabled
There's a BoM.operation_id on the 'serial' component
-> Consumption step is created
-> No auto-consumption of the 'serial' component
-> Auto-consumption of other components
"""
self.assertTrue(self.picking_type.use_auto_consume_components_lots)
self.quality_point.active = False
#Create manufacturing order
mo_serial = self.create_mo(self.mo_serial_tmpl, 1)
mo_serial.action_confirm()
self.assertFalse(self.raw_serial in mo_serial.workorder_ids.quality_point_ids.component_id)
self.assertTrue(self.routing_workcenter_serial in mo_serial.move_raw_ids.operation_id)
quant = self.create_quant(self.raw_none, 3)
quant |= self.create_quant(self.raw_lot, 2)
quant |= self.create_quant(self.raw_serial, 1)
quant.action_apply_inventory()
#Quantities are fully reserved (stock.move state is available)
mo_serial.action_assign()
for mov in mo_serial.move_raw_ids:
self.assertEqual(mov.product_qty, mov.reserved_availability, "Reserved quantity shall be equal to To Consume quantity.")
mo_serial.action_generate_serial()
for mov in mo_serial.move_raw_ids:
if mov.has_tracking != 'serial':
self.assertEqual(mov.product_qty, mov.quantity_done, "Done quantity shall be equal to To Consume quantity.")
else:
self.assertEqual(0, mov.quantity_done, "Done quantity shall be equal to 0.")
def test_option_enabled_and_quality_point(self):
"""
Auto-consume is enabled
There's a quality_point on the 'serial' component
-> Consumption step already exist
-> No auto-consumption of the 'serial' component
-> Auto-consumption of other components
"""
self.assertTrue(self.picking_type.use_auto_consume_components_lots)
self.quality_point.active = True
self.bom_serial_line_serial.operation_id = self.env['mrp.routing.workcenter']
#Create manufacturing order
mo_serial = self.create_mo(self.mo_serial_tmpl, 1)
mo_serial.action_confirm()
self.assertTrue(self.raw_serial in mo_serial.workorder_ids.quality_point_ids.component_id)
self.assertFalse(self.routing_workcenter_serial in mo_serial.move_raw_ids.operation_id)
quant = self.create_quant(self.raw_none, 3)
quant |= self.create_quant(self.raw_lot, 2)
quant |= self.create_quant(self.raw_serial, 1)
quant.action_apply_inventory()
#Quantities are fully reserved (stock.move state is available)
mo_serial.action_assign()
for mov in mo_serial.move_raw_ids:
self.assertEqual(mov.product_qty, mov.reserved_availability, "Reserved quantity shall be equal to To Consume quantity.")
mo_serial.action_generate_serial()
for mov in mo_serial.move_raw_ids:
if mov.has_tracking != 'serial':
self.assertEqual(mov.product_qty, mov.quantity_done, "Done quantity shall be equal to To Consume quantity.")
else:
self.assertEqual(0, mov.quantity_done, "Done quantity shall be equal to 0.")
def test_option_enabled_only(self):
"""
Auto-consume is enabled
There's neither a BoM.operation_id nor a quality_point on the 'serial' component
-> No Consumption step
-> Auto-consumption of all components
"""
self.assertTrue(self.picking_type.use_auto_consume_components_lots)
self.quality_point.active = False
self.bom_serial_line_serial.operation_id = self.env['mrp.routing.workcenter']
#Create manufacturing order
mo_serial = self.create_mo(self.mo_serial_tmpl, 1)
mo_serial.action_confirm()
self.assertFalse(self.raw_serial in mo_serial.workorder_ids.quality_point_ids.component_id)
self.assertFalse(self.routing_workcenter_serial in mo_serial.move_raw_ids.operation_id)
quant = self.create_quant(self.raw_none, 3)
quant |= self.create_quant(self.raw_lot, 2)
quant |= self.create_quant(self.raw_serial, 1)
quant.action_apply_inventory()
#Quantities are fully reserved (stock.move state is available)
mo_serial.action_assign()
for mov in mo_serial.move_raw_ids:
self.assertEqual(mov.product_qty, mov.reserved_availability, "Reserved quantity shall be equal to To Consume quantity.")
mo_serial.action_generate_serial()
for mov in mo_serial.move_raw_ids:
self.assertEqual(mov.product_qty, mov.quantity_done, "Done quantity shall be equal to To Consume quantity.")