From 7d9a9574ce72bbf148fa9b48296417d5c0b43836 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20Voet=20=28ryv=29?= Date: Wed, 4 Aug 2021 10:01:31 +0000 Subject: [PATCH] [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 --- .../models/stock_warehouse.py | 38 +++++++++++++++++-- .../tests/test_subcontracting.py | 8 ++-- .../tests/test_purchase_subcontracting.py | 6 +-- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/addons/mrp_subcontracting/models/stock_warehouse.py b/addons/mrp_subcontracting/models/stock_warehouse.py index ef1a605608e..a895307de17 100644 --- a/addons/mrp_subcontracting/models/stock_warehouse.py +++ b/addons/mrp_subcontracting/models/stock_warehouse.py @@ -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 diff --git a/addons/mrp_subcontracting/tests/test_subcontracting.py b/addons/mrp_subcontracting/tests/test_subcontracting.py index 51adeb485c8..3b0f5d2e4d9 100644 --- a/addons/mrp_subcontracting/tests/test_subcontracting.py +++ b/addons/mrp_subcontracting/tests/test_subcontracting.py @@ -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', diff --git a/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py b/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py index 9c335593dfa..594ae1be712 100644 --- a/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py +++ b/addons/mrp_subcontracting_dropshipping/tests/test_purchase_subcontracting.py @@ -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