[IMP] mrp_subcontracting: add a operation type for resupply
Add a operation type (`stock.picking.type`) for the subcontracting resupply in order to distinct easily the a simple delivery and a resupply to a subcontractor. task-2486811 Part-of: odoo/odoo#75041
This commit is contained in:
@@ -22,6 +22,9 @@ class StockWarehouse(models.Model):
|
||||
subcontracting_type_id = fields.Many2one(
|
||||
'stock.picking.type', 'Subcontracting Operation Type',
|
||||
domain=[('code', '=', 'mrp_operation')])
|
||||
subcontracting_resupply_type_id = fields.Many2one(
|
||||
'stock.picking.type', 'Subcontracting Resupply Operation Type',
|
||||
domain=[('code', '=', 'outgoing')])
|
||||
|
||||
def get_rules_dict(self):
|
||||
result = super(StockWarehouse, self).get_rules_dict()
|
||||
@@ -29,7 +32,7 @@ class StockWarehouse(models.Model):
|
||||
for warehouse in self:
|
||||
result[warehouse.id].update({
|
||||
'subcontract': [
|
||||
self.Routing(warehouse.lot_stock_id, subcontract_location_id, warehouse.out_type_id, 'pull'),
|
||||
self.Routing(warehouse.lot_stock_id, subcontract_location_id, warehouse.subcontracting_resupply_type_id, 'pull'),
|
||||
]
|
||||
})
|
||||
return result
|
||||
@@ -74,7 +77,7 @@ class StockWarehouse(models.Model):
|
||||
'name': self._format_rulename(self.lot_stock_id, subcontract_location_id, 'MTO'),
|
||||
'location_id': subcontract_location_id.id,
|
||||
'location_src_id': self.lot_stock_id.id,
|
||||
'picking_type_id': self.out_type_id.id
|
||||
'picking_type_id': self.subcontracting_resupply_type_id.id
|
||||
},
|
||||
'update_values': {
|
||||
'active': self.subcontracting_to_resupply
|
||||
@@ -92,7 +95,7 @@ class StockWarehouse(models.Model):
|
||||
'name': self._format_rulename(self.lot_stock_id, subcontract_location_id, False),
|
||||
'location_id': production_location_id.id,
|
||||
'location_src_id': subcontract_location_id.id,
|
||||
'picking_type_id': self.out_type_id.id
|
||||
'picking_type_id': self.subcontracting_resupply_type_id.id
|
||||
},
|
||||
'update_values': {
|
||||
'active': self.subcontracting_to_resupply
|
||||
@@ -112,13 +115,35 @@ class StockWarehouse(models.Model):
|
||||
'sequence_code': 'SBC',
|
||||
'company_id': self.company_id.id,
|
||||
},
|
||||
'subcontracting_resupply_type_id': {
|
||||
'name': _('Resupply Subcontractor'),
|
||||
'code': 'outgoing',
|
||||
'use_create_lots': False,
|
||||
'use_existing_lots': True,
|
||||
'default_location_dest_id': self._get_subcontracting_location().id,
|
||||
'sequence': next_sequence + 3,
|
||||
'sequence_code': 'RES',
|
||||
'print_label': True,
|
||||
'company_id': self.company_id.id,
|
||||
}
|
||||
})
|
||||
return data, max_sequence + 4
|
||||
|
||||
def _get_sequence_values(self):
|
||||
values = super(StockWarehouse, self)._get_sequence_values()
|
||||
values.update({
|
||||
'subcontracting_type_id': {'name': self.name + ' ' + _('Sequence subcontracting'), 'prefix': self.code + '/SBC/', 'padding': 5, 'company_id': self.company_id.id},
|
||||
'subcontracting_type_id': {
|
||||
'name': self.name + ' ' + _('Sequence subcontracting'),
|
||||
'prefix': self.code + '/SBC/',
|
||||
'padding': 5,
|
||||
'company_id': self.company_id.id
|
||||
},
|
||||
'subcontracting_resupply_type_id': {
|
||||
'name': self.name + ' ' + _('Sequence Resupply Subcontractor'),
|
||||
'prefix': self.code + '/RES/',
|
||||
'padding': 5,
|
||||
'company_id': self.company_id.id
|
||||
},
|
||||
})
|
||||
return values
|
||||
|
||||
@@ -132,6 +157,11 @@ class StockWarehouse(models.Model):
|
||||
'default_location_src_id': subcontract_location_id.id,
|
||||
'default_location_dest_id': production_location_id.id,
|
||||
},
|
||||
'subcontracting_resupply_type_id': {
|
||||
'default_location_src_id': production_location_id.id,
|
||||
'default_location_dest_id': subcontract_location_id.id,
|
||||
'barcode': self.code.replace(" ", "").upper() + "-RESUPPLY",
|
||||
},
|
||||
})
|
||||
return data
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ class TestSubcontractingFlows(TestMrpSubcontractingCommon):
|
||||
self.env['procurement.group'].run_scheduler()
|
||||
picking = self.env['stock.picking'].search([('group_id', '=', pg1.id)])
|
||||
self.assertEqual(len(picking), 1)
|
||||
self.assertEqual(picking.picking_type_id, wh.out_type_id)
|
||||
self.assertEqual(picking.picking_type_id, wh.subcontracting_resupply_type_id)
|
||||
picking_receipt.move_lines.quantity_done = 1
|
||||
picking_receipt.button_validate()
|
||||
self.assertEqual(mo.state, 'done')
|
||||
@@ -139,7 +139,7 @@ class TestSubcontractingFlows(TestMrpSubcontractingCommon):
|
||||
wh = picking.picking_type_id.warehouse_id
|
||||
|
||||
# The picking should be a delivery order
|
||||
self.assertEqual(picking.picking_type_id, wh.out_type_id)
|
||||
self.assertEqual(picking.picking_type_id, wh.subcontracting_resupply_type_id)
|
||||
# The date planned should be correct
|
||||
self.assertEqual(picking_receipt.scheduled_date, picking.scheduled_date + relativedelta(days=self.finished.produce_delay))
|
||||
|
||||
@@ -209,7 +209,7 @@ class TestSubcontractingFlows(TestMrpSubcontractingCommon):
|
||||
|
||||
# The picking should be a delivery order
|
||||
wh = picking_receipt.picking_type_id.warehouse_id
|
||||
self.assertEqual(mo.picking_ids.picking_type_id, wh.out_type_id)
|
||||
self.assertEqual(mo.picking_ids.picking_type_id, wh.subcontracting_resupply_type_id)
|
||||
|
||||
self.assertEqual(mo.picking_type_id, wh.subcontracting_type_id)
|
||||
self.assertFalse(mo.picking_type_id.active)
|
||||
@@ -576,7 +576,7 @@ class TestSubcontractingTracking(TransactionCase):
|
||||
self.env['procurement.group'].run_scheduler()
|
||||
picking = self.env['stock.picking'].search([('group_id', '=', pg1.id)])
|
||||
self.assertEqual(len(picking), 1)
|
||||
self.assertEqual(picking.picking_type_id, wh.out_type_id)
|
||||
self.assertEqual(picking.picking_type_id, wh.subcontracting_resupply_type_id)
|
||||
|
||||
lot_id = self.env['stock.production.lot'].create({
|
||||
'name': 'lot1',
|
||||
|
||||
@@ -114,7 +114,7 @@ class TestSubcontractingDropshippingFlows(TestMrpSubcontractingCommon):
|
||||
origin = picking_delivery.origin
|
||||
self.assertEqual(len(picking_delivery), 1)
|
||||
self.assertEqual(len(picking_delivery.move_ids_without_package), 1)
|
||||
self.assertEqual(picking_delivery.picking_type_id, wh.out_type_id)
|
||||
self.assertEqual(picking_delivery.picking_type_id, wh.subcontracting_resupply_type_id)
|
||||
self.assertEqual(picking_delivery.partner_id, self.subcontractor_partner1)
|
||||
|
||||
# Change the purchased quantity to 2
|
||||
@@ -122,11 +122,11 @@ class TestSubcontractingDropshippingFlows(TestMrpSubcontractingCommon):
|
||||
# Check that two deliveries with 1 component for the subcontractor have been created
|
||||
picking_deliveries = self.env['stock.picking'].search([('origin', '=', origin)])
|
||||
self.assertEqual(len(picking_deliveries), 2)
|
||||
self.assertEqual(picking_deliveries[0].picking_type_id, wh.out_type_id)
|
||||
self.assertEqual(picking_deliveries[0].picking_type_id, wh.subcontracting_resupply_type_id)
|
||||
self.assertEqual(picking_deliveries[0].partner_id, self.subcontractor_partner1)
|
||||
self.assertTrue(picking_deliveries[0].state != 'cancel')
|
||||
move1 = picking_deliveries[0].move_ids_without_package
|
||||
self.assertEqual(picking_deliveries[1].picking_type_id, wh.out_type_id)
|
||||
self.assertEqual(picking_deliveries[1].picking_type_id, wh.subcontracting_resupply_type_id)
|
||||
self.assertEqual(picking_deliveries[1].partner_id, self.subcontractor_partner1)
|
||||
self.assertTrue(picking_deliveries[1].state != 'cancel')
|
||||
move2 = picking_deliveries[1].move_ids_without_package
|
||||
|
||||
Reference in New Issue
Block a user