diff --git a/addons/mrp/models/stock_warehouse.py b/addons/mrp/models/stock_warehouse.py
index 4178fdb1b49..40d6b6bb4b9 100644
--- a/addons/mrp/models/stock_warehouse.py
+++ b/addons/mrp/models/stock_warehouse.py
@@ -205,7 +205,8 @@ class StockWarehouse(models.Model):
'use_existing_lots': True,
'default_location_src_id': self.lot_stock_id.id,
'default_location_dest_id': self.pbm_loc_id.id,
- 'sequence': next_sequence + 1
+ 'sequence': next_sequence + 1,
+ 'sequence_code': 'PC',
},
'sam_type_id': {
'name': _('Store Finished Product'),
@@ -214,14 +215,16 @@ class StockWarehouse(models.Model):
'use_existing_lots': True,
'default_location_src_id': self.sam_loc_id.id,
'default_location_dest_id': self.lot_stock_id.id,
- 'sequence': next_sequence + 3
+ 'sequence': next_sequence + 3,
+ 'sequence_code': 'SFP',
},
'manu_type_id': {
'name': _('Manufacturing'),
'code': 'mrp_operation',
'use_create_lots': True,
'use_existing_lots': True,
- 'sequence': next_sequence + 2
+ 'sequence': next_sequence + 2,
+ 'sequence_code': 'MO',
},
})
return data, max_sequence + 4
diff --git a/addons/mrp/tests/test_bom.py b/addons/mrp/tests/test_bom.py
index 12cd389666f..5ed74a184cc 100644
--- a/addons/mrp/tests/test_bom.py
+++ b/addons/mrp/tests/test_bom.py
@@ -68,6 +68,7 @@ class TestBoM(TestMrpCommon):
tmp_picking_type = self.env['stock.picking.type'].create({
'name': 'Manufacturing',
'code': 'mrp_operation',
+ 'sequence_code': 'TMP',
'sequence_id': self.env['ir.sequence'].create({
'code': 'mrp.production',
'name': 'tmp_production_sequence',
diff --git a/addons/mrp_subcontracting/models/stock_warehouse.py b/addons/mrp_subcontracting/models/stock_warehouse.py
index a9d0cd1713b..a6c1dc6983b 100644
--- a/addons/mrp_subcontracting/models/stock_warehouse.py
+++ b/addons/mrp_subcontracting/models/stock_warehouse.py
@@ -109,7 +109,8 @@ class StockWarehouse(models.Model):
'code': 'mrp_operation',
'use_create_lots': True,
'use_existing_lots': True,
- 'sequence': next_sequence + 2
+ 'sequence': next_sequence + 2,
+ 'sequence_code': 'SBC',
},
})
return data, max_sequence + 4
diff --git a/addons/point_of_sale/models/stock_warehouse.py b/addons/point_of_sale/models/stock_warehouse.py
index c4ba29203eb..35cb167d96f 100644
--- a/addons/point_of_sale/models/stock_warehouse.py
+++ b/addons/point_of_sale/models/stock_warehouse.py
@@ -36,6 +36,7 @@ class Warehouse(models.Model):
'default_location_src_id': self.lot_stock_id.id,
'default_location_dest_id': self.env.ref('stock.stock_location_customers').id,
'sequence': max_sequence + 1,
+ 'sequence_code': 'POS',
}
})
return picking_type_create_values, max_sequence + 2
diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py
index 83044b3d053..a8d9dbfd330 100644
--- a/addons/stock/models/stock_picking.py
+++ b/addons/stock/models/stock_picking.py
@@ -28,7 +28,8 @@ class PickingType(models.Model):
name = fields.Char('Operation Type', required=True, translate=True)
color = fields.Integer('Color')
sequence = fields.Integer('Sequence', help="Used to order the 'All Operations' kanban view")
- sequence_id = fields.Many2one('ir.sequence', 'Reference Sequence', required=True)
+ sequence_id = fields.Many2one('ir.sequence', 'Reference Sequence')
+ sequence_code = fields.Char('Code', required=True)
default_location_src_id = fields.Many2one(
'stock.location', 'Default Source Location',
help="This is the default source location when you create a picking manually with this operation type. It is possible however to change it or that the routes put another location. If it is empty, it will check for the supplier location on the partner. ")
@@ -68,6 +69,34 @@ class PickingType(models.Model):
barcode = fields.Char('Barcode', copy=False)
company_id = fields.Many2one('res.company', 'Company', related='warehouse_id.company_id', store=True)
+ @api.model
+ def create(self, vals):
+ if 'sequence_id' not in vals or not vals['sequence_id']:
+ if vals['warehouse_id']:
+ wh = self.env['stock.warehouse'].browse(vals['warehouse_id'])
+ vals['sequence_id'] = self.env['ir.sequence'].create({
+ 'name': wh.name + ' ' + _('Sequence') + ' ' + vals['sequence_code'],
+ 'prefix': wh.code + '/' + vals['sequence_code'] + '/', 'padding': 5,
+ 'company_id': wh.company_id.id,
+ }).id
+ else:
+ vals['sequence_id'] = self.env['ir.sequence'].create({
+ 'name': _('Sequence') + ' ' + vals['sequence_code'],
+ 'prefix': vals['sequence_code'], 'padding': 5,
+ 'company_id': self.env.company.id,
+ }).id
+
+ picking_type = super(PickingType, self).create(vals)
+ return picking_type
+
+ @api.onchange('sequence_code')
+ def _onchange_sequence_code(self):
+ if self.sequence_id:
+ if self.warehouse_id:
+ self.sequence_id.prefix = self.warehouse_id.code + '/' + self.sequence_code
+ else:
+ self.sequence_id.prefix = self.sequence_code
+
def _compute_picking_count(self):
# TDE TODO count picking can be done using previous two
domains = {
diff --git a/addons/stock/models/stock_warehouse.py b/addons/stock/models/stock_warehouse.py
index 9e48fbb97d5..04b338770ad 100644
--- a/addons/stock/models/stock_warehouse.py
+++ b/addons/stock/models/stock_warehouse.py
@@ -824,6 +824,7 @@ class Warehouse(models.Model):
'sequence': max_sequence + 1,
'barcode': self.code.replace(" ", "").upper() + "-RECEIPTS",
'show_reserved': False,
+ 'sequence_code': 'IN',
}, 'out_type_id': {
'name': _('Delivery Orders'),
'code': 'outgoing',
@@ -832,6 +833,7 @@ class Warehouse(models.Model):
'default_location_dest_id': False,
'sequence': max_sequence + 5,
'barcode': self.code.replace(" ", "").upper() + "-DELIVERY",
+ 'sequence_code': 'OUT',
}, 'pack_type_id': {
'name': _('Pack'),
'code': 'internal',
@@ -841,6 +843,7 @@ class Warehouse(models.Model):
'default_location_dest_id': output_loc.id,
'sequence': max_sequence + 4,
'barcode': self.code.replace(" ", "").upper() + "-PACK",
+ 'sequence_code': 'PACK',
}, 'pick_type_id': {
'name': _('Pick'),
'code': 'internal',
@@ -849,6 +852,7 @@ class Warehouse(models.Model):
'default_location_src_id': self.lot_stock_id.id,
'sequence': max_sequence + 3,
'barcode': self.code.replace(" ", "").upper() + "-PICK",
+ 'sequence_code': 'PICK',
}, 'int_type_id': {
'name': _('Internal Transfers'),
'code': 'internal',
@@ -859,6 +863,7 @@ class Warehouse(models.Model):
'active': self.reception_steps != 'one_step' or self.delivery_steps != 'ship_only' or self.user_has_groups('stock.group_stock_multi_locations'),
'sequence': max_sequence + 2,
'barcode': self.code.replace(" ", "").upper() + "-INTERNAL",
+ 'sequence_code': 'INT',
},
}, max_sequence + 6
diff --git a/addons/stock/views/stock_picking_views.xml b/addons/stock/views/stock_picking_views.xml
index cb623895036..2e2ded3291d 100644
--- a/addons/stock/views/stock_picking_views.xml
+++ b/addons/stock/views/stock_picking_views.xml
@@ -40,7 +40,8 @@
-
+
+
@@ -58,6 +59,9 @@
+
diff --git a/addons/stock_dropshipping/data/stock_data.xml b/addons/stock_dropshipping/data/stock_data.xml
index b3630e0ffff..1b49842d8b5 100644
--- a/addons/stock_dropshipping/data/stock_data.xml
+++ b/addons/stock_dropshipping/data/stock_data.xml
@@ -10,6 +10,7 @@
Dropship
+ DS
incoming