From 32d53df8ec3f86322de07d8b9d2e5b1e2419504c Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Fri, 21 Apr 2023 15:32:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A8=E9=9D=A2=E5=B7=A5=E8=89=BA=E5=A4=96?= =?UTF-8?q?=E5=8D=8F=E9=9C=80=E6=B1=82=EF=BC=8C=E4=B8=8D=E5=8C=85=E5=90=AB?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E5=B1=95=E7=A4=BA=E5=A4=96=E5=8D=8F=E5=87=BA?= =?UTF-8?q?=E5=85=A5=E5=BA=93=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/data/stock_data.xml | 17 +++++++++ sf_manufacturing/models/mrp_production.py | 23 ++++++------ sf_manufacturing/models/mrp_workorder.py | 2 +- sf_manufacturing/models/stock.py | 46 ++++++++++++++++++++--- 4 files changed, 70 insertions(+), 18 deletions(-) diff --git a/sf_manufacturing/data/stock_data.xml b/sf_manufacturing/data/stock_data.xml index 5253db20..a50a948d 100644 --- a/sf_manufacturing/data/stock_data.xml +++ b/sf_manufacturing/data/stock_data.xml @@ -1,6 +1,19 @@ + + + YourCompany Sequence ocin + WH/OCIN/ + 5 + + + + YourCompany Sequence ocout + WH/OCOUT/ + 5 + + 外协 @@ -14,6 +27,7 @@ 外协入库 internal true + OCIN @@ -24,6 +38,7 @@ 外协出库 internal + true OCOUT @@ -31,5 +46,7 @@ search="[('barcode','=','WH-PREPRODUCTION')]"/> + + diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index ad4dab6b..0b41c6d2 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -142,7 +142,7 @@ class MrpProduction(models.Model): [('production_process_ids.id', 'in', surface_technics_arr)], order='sequence asc' ) - #用filter刷选表面工艺id'是否存在工艺类别对象里 + # 用filter刷选表面工艺id'是否存在工艺类别对象里 if production_process_category: for p in production_process_category: production_process = p.production_process_ids.filtered( @@ -176,7 +176,8 @@ class MrpProduction(models.Model): self.env['mrp.workorder'].json_workorder_str('', production, route)) production.workorder_ids = workorders_values process_parameter_workorder = self.env['mrp.workorder'].search( - [('surface_technics_parameters_id', '!=', False), ('production_id', '=', production.id)]) + [('surface_technics_parameters_id', '!=', False), ('production_id', '=', production.id), + ('is_subcontract', '=', True)]) if process_parameter_workorder: is_pick = False consecutive_workorders = [] @@ -185,10 +186,8 @@ class MrpProduction(models.Model): for i in range(len(sorted_workorders) - 1): if m == 0: is_pick = False - # if sorted_workorders[i].id in consecutive_workorders: - # consecutive_workorders = [x for x in consecutive_workorders if x not in sorted_workorders[i].id] - # continue - if sorted_workorders[i].supplier_id == sorted_workorders[i + 1].supplier_id and \ + if sorted_workorders[i].supplier_id.id == sorted_workorders[i + 1].supplier_id.id and \ + sorted_workorders[i].is_subcontract == sorted_workorders[i + 1].is_subcontract and \ sorted_workorders[i].id == sorted_workorders[i + 1].id - 1: if sorted_workorders[i] not in consecutive_workorders: consecutive_workorders.append(sorted_workorders[i]) @@ -196,16 +195,16 @@ class MrpProduction(models.Model): m += 1 continue else: - if m == len(consecutive_workorders)-1 and m != 0: + if m == len(consecutive_workorders) - 1 and m != 0: self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production) if sorted_workorders[i] in consecutive_workorders: - is_pick = True + is_pick = True consecutive_workorders = [] m = 0 # 当前面的连续工序生成对应的外协出入库单再生成当前工序的外协出入库单 if is_pick is False: self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production) - if m == len(consecutive_workorders)-1 and m != 0: + if m == len(consecutive_workorders) - 1 and m != 0: self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production) if sorted_workorders[i] in consecutive_workorders: is_pick = True @@ -213,7 +212,7 @@ class MrpProduction(models.Model): m = 0 if m == len(consecutive_workorders) - 1 and m != 0: self.env['stock.picking'].create_outcontract_picking(consecutive_workorders, production) - if is_pick is False: + if is_pick is False and m == 0: self.env['stock.picking'].create_outcontract_picking(sorted_workorders[i], production) for workorder in production.workorder_ids: workorder.duration_expected = workorder._get_duration_expected() @@ -240,7 +239,7 @@ class MrpProduction(models.Model): 'user_id': production.user_id.id} return production_values_str - def _get_stock_move_values_Res(self,item,location_src_id,location_dest_id): + def _get_stock_move_values_Res(self, item, location_src_id, location_dest_id, picking_type_id): move_values = { 'name': item.name if item.name else '/', 'company_id': item.company_id.id, @@ -250,7 +249,7 @@ class MrpProduction(models.Model): 'location_id': location_src_id, 'location_dest_id': location_dest_id, 'origin': item.origin, - 'picking_type_id': self.picking_type_id.id, + 'picking_type_id': picking_type_id, } return move_values diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 389fd9a7..48f7b2f0 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -95,7 +95,7 @@ class ResMrpWorkOrder(models.Model): surface_technics_parameters_id = fields.Many2one('sf.production.process.parameter', string="表面工艺可选参数") picking_in_id = fields.Many2one('stock.picking', string='外协入库单') picking_out_id = fields.Many2one('stock.picking', string='外协出库单') - supplier_id = fields.Integer('供应商Id') + supplier_id = fields.Many2one('res.partner', string='外协供应商') def get_no_data(self, production_id): process_parameter_workorder = self.search( diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index e7772fe3..dcfcf754 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -230,12 +230,23 @@ class ProductionLot(models.Model): return "%s-%03d" % (product.name, 1) -class ResStockPicking(models.Model): +class StockPicking(models.Model): _inherit = 'stock.picking' workorder_in_id = fields.One2many('mrp.workorder', 'picking_in_id') workorder_out_id = fields.One2many('mrp.workorder', 'picking_out_id') + # 设置外协出入单的名称 + def _get_name_Res(self, rescode): + count = self.env['ir.sequence'].search_count([('prefix', 'like', rescode)]) + if not count: + num = "%04d" % 1 + else: + m = int(count) + 1 + num = "%04d" % m + return '%s%s' % (rescode, num) + + # 创建 外协出库入单 def create_outcontract_picking(self, sorted_workorders_arr, item): m = 0 for sorted_workorders in sorted_workorders_arr: @@ -247,13 +258,21 @@ class ResStockPicking(models.Model): 'sf_manufacturing.stock_location_locations_virtual_outcontract').id, location_dest_id = self.env['stock.location'].search( [('barcode', '=', 'WH-PREPRODUCTION')]).id, + outcontract_picking_type_in = self.env.ref( + 'sf_manufacturing.outcontract_picking_in').id, + outcontract_picking_type_out = self.env.ref( + 'sf_manufacturing.outcontract_picking_out').id, moves_in = self.env['stock.move'].sudo().create( - item._get_stock_move_values_Res(item, location_id, location_dest_id)) + item._get_stock_move_values_Res(item, location_id, location_dest_id, + outcontract_picking_type_in)) moves_out = self.env['stock.move'].sudo().create( - item._get_stock_move_values_Res(item, location_dest_id, location_id)) + item._get_stock_move_values_Res(item, location_dest_id, location_id, + outcontract_picking_type_out)) new_picking = True - picking_in = self.env['stock.picking'].create(moves_in._get_new_picking_values()) - picking_out = self.env['stock.picking'].create(moves_out._get_new_picking_values()) + picking_in = self.env['stock.picking'].create( + moves_in._get_new_picking_values_Res(item, sorted_workorders,'WH/OCIN/')) + picking_out = self.env['stock.picking'].create( + moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/')) moves_in.write({'picking_id': picking_in.id}) moves_out.write({'picking_id': picking_out.id}) moves_in._assign_picking_post_process(new=new_picking) @@ -261,3 +280,20 @@ class ResStockPicking(models.Model): m += 1 sorted_workorders.write({'picking_in_id': picking_in.id, 'picking_out_id': picking_out.id}) + +class ReStockMove(models.Model): + _inherit = 'stock.move' + + def _get_new_picking_values_Res(self, item, sorted_workorders, rescode): + return { + 'name': self.env['stock.picking']._get_name_Res(rescode), + 'origin': item.name, + 'company_id': self.mapped('company_id').id, + 'user_id': False, + 'move_type': self.mapped('group_id').move_type or 'direct', + 'partner_id': sorted_workorders.supplier_id.id, + 'picking_type_id': self.mapped('picking_type_id').id, + 'location_id': self.mapped('location_id').id, + 'location_dest_id': self.mapped('location_dest_id').id, + 'state': 'draft', + }