173 lines
7.7 KiB
Python
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.")
|