From 7cab8cd287c6f14d43a05dcea4a61ab74a633625 Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Fri, 9 Aug 2024 10:42:59 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E8=B0=83=E6=8B=A8=E5=8D=95=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=A1=A8=E9=9D=A2=E5=B7=A5=E8=89=BA=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/stock.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 4bf7cc72..d902997f 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -468,8 +468,7 @@ class ProductionLot(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') + surface_technics_parameters_id = fields.Many2one('sf.production.process.parameter', string="表面工艺可选参数") # 设置外协出入单的名称 def _get_name_Res(self, rescode): From 34e858ffe49ca5ac9a477ff7b58728b2be178adb Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Fri, 9 Aug 2024 11:31:30 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=A1=A8=E9=9D=A2?= =?UTF-8?q?=E5=B7=A5=E8=89=BA=E6=9C=8D=E5=8A=A1=E4=BA=A7=E5=93=81=E9=AA=8C?= =?UTF-8?q?=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 10 +++++++--- sf_manufacturing/models/product_template.py | 4 +++- sf_manufacturing/models/stock.py | 1 + 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index ed4786cd..6568fba2 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -137,9 +137,13 @@ class ResMrpWorkOrder(models.Model): @api.depends('name', 'production_id.name') def _compute_surface_technics_picking_ids(self): - for order in self: - picking_ids = self.env['stock.picking'].search([('id', 'in', order.picking_ids.ids)]) - order.surface_technics_picking_count = len(picking_ids) + for workorder in self: + if workorder.routing_type == '表面工艺': + picking_ids = self.env['stock.picking'].search( + [('surface_technics_parameters_id', '=', workorder.surface_technics_parameters_id)], order='id asc') + workorder.surface_technics_picking_count = len(picking_ids) + else: + workorder.surface_technics_picking_count = 0 def action_view_surface_technics_picking(self): self.ensure_one() diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 41392409..f8afb0be 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -755,7 +755,9 @@ class ResProductMo(models.Model): # 产品名称唯一性校验 for item in templates: if len(self.search([('name', '=', item.name)])) > 1: - raise ValidationError('产品名称【%s】已存在' % item.name) + raise UserError('产品名称【%s】已存在' % item.name) + if len(self.search([('server_product_process_parameters_id', '=', item.server_product_process_parameters_id)])) > 1: + raise UserErro('表面工艺参数为【%s】的产品已存在' % item.server_product_process_parameters_id.name) if "create_product_product" not in self._context: templates._create_variant_ids() diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 76248171..55f9428d 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -661,6 +661,7 @@ class ReStockMove(models.Model): return { 'name': self.env['stock.picking']._get_name_Res(rescode), 'origin': item.name, + 'surface_technics_parameters_id': sorted_workorders.surface_technics_parameters_id.id, 'company_id': self.mapped('company_id').id, 'user_id': False, 'move_type': self.mapped('group_id').move_type or 'direct', From a9b7f99944cb8605d456695209f864e8a8fba77e Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Fri, 9 Aug 2024 15:39:58 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=A1=A8=E9=9D=A2?= =?UTF-8?q?=E5=B7=A5=E8=89=BA=E5=A4=96=E5=8D=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 16 +++++++++++++--- sf_manufacturing/models/product_template.py | 8 +++++--- sf_manufacturing/models/stock.py | 10 +++++----- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 6568fba2..ccdfd8d1 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -139,9 +139,19 @@ class ResMrpWorkOrder(models.Model): def _compute_surface_technics_picking_ids(self): for workorder in self: if workorder.routing_type == '表面工艺': - picking_ids = self.env['stock.picking'].search( - [('surface_technics_parameters_id', '=', workorder.surface_technics_parameters_id)], order='id asc') + domain = [('origin', '=', workorder.production_id.name)] + previous_workorder = self.env['mrp.workorder'].search( + [('sequence', '=', workorder.sequence - 1), ('routing_type', '=', '表面工艺'), + ('production_id', '=', workorder.production_id.id)]) + if previous_workorder: + process_product = self.env['product.template']._get_process_parameters_product( + previous_workorder.surface_technics_parameters_id) + domain += [('partner_id', '=', process_product.partner_id.id)] + else: + domain += [('surface_technics_parameters_id', '=', workorder.surface_technics_parameters_id.id)] + picking_ids = self.env['stock.picking'].search(domain, order='id asc') workorder.surface_technics_picking_count = len(picking_ids) + workorder.picking_ids = picking_ids.ids else: workorder.surface_technics_picking_count = 0 @@ -1065,7 +1075,7 @@ class ResMrpWorkOrder(models.Model): ('location_dest_id', '=', self.env['stock.location'].search( [('barcode', 'ilike', 'VL-SPOC')]).id), ('origin', '=', self.production_id.name)]) - if move_out: + if move_out.state != 'done': move_out.write({'state': 'assigned'}) self.env['stock.move.line'].create(move_out.get_move_line(self.production_id, self)) diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index f8afb0be..071f1167 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -658,7 +658,7 @@ class ResProductMo(models.Model): tax_id = self.env['account.tax'].sudo().search( [('type_tax_use', '=', 'sale'), ('amount', '=', item.get('tax')), ('price_include', '=', 'True')]) if tax_id: - vals.update({'taxes_id':[(6,0,[int(tax_id)])]}) + vals.update({'taxes_id': [(6, 0, [int(tax_id)])]}) copy_product_id.sudo().write(vals) product_id.product_tmpl_id.active = False return copy_product_id @@ -756,8 +756,10 @@ class ResProductMo(models.Model): for item in templates: if len(self.search([('name', '=', item.name)])) > 1: raise UserError('产品名称【%s】已存在' % item.name) - if len(self.search([('server_product_process_parameters_id', '=', item.server_product_process_parameters_id)])) > 1: - raise UserErro('表面工艺参数为【%s】的产品已存在' % item.server_product_process_parameters_id.name) + if item.categ_type == '表面工艺': + if len(self.search([('server_product_process_parameters_id', '=', + item.server_product_process_parameters_id.id)])) > 1: + raise UserError('表面工艺参数为【%s】的产品已存在' % item.server_product_process_parameters_id.name) if "create_product_product" not in self._context: templates._create_variant_ids() diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 55f9428d..ca080f11 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -587,7 +587,7 @@ class StockPicking(models.Model): [('barcode', 'ilike', 'VL-SPOC')]).id), ('origin', '=', self.origin)]) production = self.env['mrp.production'].search([('name', '=', self.origin)]) - if move_in: + if move_in.state != 'done': move_in.write({'state': 'assigned'}) self.env['stock.move.line'].create(move_in.get_move_line(production, None)) @@ -597,7 +597,7 @@ class StockPicking(models.Model): def create_outcontract_picking(self, sorted_workorders_arr, item): m = 0 for sorted_workorders in sorted_workorders_arr: - pick_ids = [] + # pick_ids = [] if m == 0: outcontract_stock_move = self.env['stock.move'].search( [('workorder_id', '=', sorted_workorders.id), ('production_id', '=', item.id)]) @@ -616,7 +616,7 @@ class StockPicking(models.Model): outcontract_picking_type_out)) picking_out = self.create( moves_out._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCOUT/')) - pick_ids.append(picking_out.id) + # pick_ids.append(picking_out.id) moves_out.write( {'picking_id': picking_out.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id}) moves_out._assign_picking_post_process(new=new_picking) @@ -625,12 +625,12 @@ class StockPicking(models.Model): outcontract_picking_type_in)) picking_in = self.create( moves_in._get_new_picking_values_Res(item, sorted_workorders, 'WH/OCIN/')) - pick_ids.append(picking_in.id) + # pick_ids.append(picking_in.id) moves_in.write( {'picking_id': picking_in.id, 'state': 'waiting', 'workorder_id': sorted_workorders.id}) moves_in._assign_picking_post_process(new=new_picking) m += 1 - sorted_workorders.write({'picking_ids': [(6, 0, pick_ids)]}) + # sorted_workorders.write({'picking_ids': [(6, 0, pick_ids)]}) class ReStockMove(models.Model):