From 788579432201b03bc9de6b8b480fc11ac2aa419c Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Fri, 12 Jul 2024 17:32:53 +0800 Subject: [PATCH] =?UTF-8?q?1.=E4=BC=98=E5=8C=96=E5=88=B6=E9=80=A0=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C:?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=84=E7=90=86=E7=BB=93=E6=9E=9C=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=202.=E4=BC=98=E5=8C=96=E5=88=B6=E9=80=A0=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E7=9A=84=E8=BF=94=E5=B7=A5=E5=90=91=E5=AF=BC=EF=BC=9A?= =?UTF-8?q?=E5=8A=A0=E5=B7=A5=E9=9D=A2=E5=AD=97=E6=AE=B5=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=A4=9A=E5=AF=B9=E5=A4=9A=EF=BC=8C=E4=B8=94?= =?UTF-8?q?=E8=AF=A5=E5=AD=97=E6=AE=B5=E9=9C=80=E6=A0=B9=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E7=BB=93=E6=9E=9C=E4=B8=BA=E5=BE=85=E5=A4=84=E7=90=86?= =?UTF-8?q?=E7=9A=84=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C=E7=9A=84=E5=8A=A0?= =?UTF-8?q?=E5=B7=A5=E9=9D=A2=E8=BF=9B=E8=A1=8C=E8=BF=87=E6=BB=A4=203.?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B7=A5=E5=8D=95=E5=B7=A5=E4=BB=B6=E4=B8=8B?= =?UTF-8?q?=E4=BA=A7=E7=BA=BF=E6=8E=A5=E5=8F=A3=EF=BC=9A=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=BA=E5=BE=85=E6=A3=80=E6=B5=8B=204,.?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=B7=A5=E5=8D=95=E7=8A=B6=E6=80=81=E6=96=B9?= =?UTF-8?q?=E6=B3=95(=5Fcompute=5Fstate)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/__manifest__.py | 2 +- sf_manufacturing/controllers/controllers.py | 1 + sf_manufacturing/models/mrp_production.py | 16 +++-- sf_manufacturing/models/mrp_workorder.py | 68 +++++++++++------- .../views/mrp_production_addional_change.xml | 28 +++++--- sf_manufacturing/views/mrp_workorder_view.xml | 13 ++-- sf_manufacturing/wizard/rework_wizard.py | 72 +++++++++++-------- .../wizard/rework_wizard_views.xml | 13 ++-- .../views/change_stock_move_views.xml | 10 +-- 9 files changed, 130 insertions(+), 93 deletions(-) diff --git a/sf_manufacturing/__manifest__.py b/sf_manufacturing/__manifest__.py index 803c5020..985b87a4 100644 --- a/sf_manufacturing/__manifest__.py +++ b/sf_manufacturing/__manifest__.py @@ -24,7 +24,7 @@ 'views/mrp_production_addional_change.xml', 'views/mrp_routing_workcenter_view.xml', 'views/production_line_view.xml', - # 'views/mrp_workcenter_views.xml', + 'views/mrp_workcenter_views.xml', 'views/mrp_workorder_view.xml', 'views/model_type_view.xml', 'views/agv_setting_views.xml', diff --git a/sf_manufacturing/controllers/controllers.py b/sf_manufacturing/controllers/controllers.py index ed3514b7..6624e709 100644 --- a/sf_manufacturing/controllers/controllers.py +++ b/sf_manufacturing/controllers/controllers.py @@ -541,6 +541,7 @@ class Manufacturing_Connect(http.Controller): ('processing_panel', '=', order.processing_panel)]) if panel_workorder: panel_workorder.write({'production_line_state': '已下产线'}) + workorder.write({'state': 'to be detected'}) workpiece_delivery = request.env['sf.workpiece.delivery'].sudo().search( [ ('rfid_code', '=', rfid_code), ('type', '=', '下产线'), diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py index 79542016..cad73ff8 100644 --- a/sf_manufacturing/models/mrp_production.py +++ b/sf_manufacturing/models/mrp_production.py @@ -107,7 +107,8 @@ class MrpProduction(models.Model): precision_rounding=production.product_uom_id.rounding) >= 0: production.state = 'to_close' elif any( - (wo.test_results == '返工' and wo.state == 'done') or wo.state == 'rework' for wo in + (wo.test_results == '返工' and wo.state == 'done') or wo.state == 'rework' or ( + wo.is_rework is True and wo.state == 'done') for wo in production.workorder_ids): production.state = 'rework' elif any(wo_state in ('progress', 'done') for wo_state in production.workorder_ids.mapped('state')): @@ -757,7 +758,8 @@ class MrpProduction(models.Model): # 返工 def button_rework(self): - self._cron_get_programming_state() + if self.programming_state != '已编程': + self._cron_get_programming_state() return { 'name': _('返工'), 'type': 'ir.actions.act_window', @@ -767,7 +769,8 @@ class MrpProduction(models.Model): 'context': { 'default_production_id': self.id, 'default_product_id': self.product_id.id, - 'default_programming_state': self.programming_state + 'default_programming_state': self.programming_state, + 'default_is_reprogramming': True if self.programming_state in ['已编程'] else False } } @@ -870,12 +873,15 @@ class sf_detection_result(models.Model): ('CNC加工', 'CNC加工')], string="工序类型") rework_reason = fields.Selection( - [("programming", "编程"), ("cutter", "刀具"), ("operate computer", "操机"), + [("programming", "编程"), ("cutter", "刀具"), ("clamping", "装夹"), + ("operate computer", "操机"), ("technology", "工艺"), ("customer redrawing", "客户改图")], string="原因", tracking=True) detailed_reason = fields.Text('详细原因') - test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], default='合格', + test_results = fields.Selection([("合格", "合格"), ("返工", "返工"), ("报废", "报废")], string="检测结果", tracking=True) test_report = fields.Binary('检测报告', readonly=True) + handle_result = fields.Selection([("待处理", "待处理"), ("已处理", "已处理")], default='', string="处理结果", + tracking=True) # 查看检测报告 def button_look_test_report(self): diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 0e10af72..95bdb593 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -47,7 +47,7 @@ class ResMrpWorkOrder(models.Model): ('切割', '切割'), ('表面工艺', '表面工艺') ], string="工序类型") results = fields.Char('结果') - state = fields.Selection(selection_add=[('to be detected', "待检测"), ('rework', '返工')]) + state = fields.Selection(selection_add=[('to be detected', "待检测"), ('rework', '返工')], tracking=True) manual_quotation = fields.Boolean('人工编程', default=False, readonly=True) @@ -433,6 +433,7 @@ class ResMrpWorkOrder(models.Model): work.compensation_value_y = eval(self.material_center_point)[1] # work.process_state = '待加工' # self.sudo().production_id.process_state = '待加工' + # self.sudo().production_id.process_state = '待加工' self.date_finished = datetime.now() workorder.button_finish() @@ -464,7 +465,6 @@ class ResMrpWorkOrder(models.Model): raise UserError(_("该工单暂未完成,无法进行工件配送")) def button_rework_pre(self): - # production_ids |= self.production_id return { 'name': _('返工'), 'type': 'ir.actions.act_window', @@ -473,7 +473,8 @@ class ResMrpWorkOrder(models.Model): 'target': 'new', 'context': { 'default_workorder_id': self.id, - 'default_production_ids': [(6, 0, [self.production_id.id])], + 'default_production_id': self.production_id.id, + 'default_routing_type': self.routing_type }} # 拼接工单对象属性值 @@ -819,28 +820,45 @@ class ResMrpWorkOrder(models.Model): }] return workorders_values_str - # @api.depends('production_availability', 'blocked_by_workorder_ids', 'blocked_by_workorder_ids.state') - # def _compute_state(self): - # for workorder in self: - # if any( - # (wo.test_results == '返工' and wo.state == 'done') or wo.state == 'rework' for wo in - # production.workorder_ids): - # production.state = 'rework' - # if workorder.state == 'pending': - # if all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]): - # workorder.state = 'ready' if workorder.production_id.reservation_state == 'assigned' else 'waiting' - # continue - # if workorder.state not in ('waiting', 'ready'): - # continue - # if not all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]): - # workorder.state = 'pending' - # continue - # if workorder.production_id.reservation_state not in ('waiting', 'confirmed', 'assigned'): - # continue - # if workorder.production_id.reservation_state == 'assigned' and workorder.state == 'waiting': - # workorder.state = 'ready' - # elif workorder.production_id.reservation_state != 'assigned' and workorder.state == 'ready': - # workorder.state = 'waiting' + @api.depends('production_availability', 'blocked_by_workorder_ids', 'blocked_by_workorder_ids.state') + def _compute_state(self): + super()._compute_state() + for workorder in self: + if workorder.routing_type == '装夹预调' and workorder.state not in ['done', 'cancel', 'progress', 'rework']: + re_work = self.env['mrp.workorder'].search( + [('routing_type', '=', '装夹预调'), ('production_id', '=', workorder.production_id.id), + ('processing_panel', '=', workorder.processing_panel), ('state', '=', 'rework')]) + if re_work: + workorder.state = 'waiting' + elif workorder.routing_type == 'CNC加工' and workorder.state not in ['done', 'cancel', 'progress', + 'rework']: + per_work = self.env['mrp.workorder'].search( + [('routing_type', '=', '装夹预调'), ('production_id', '=', workorder.production_id.id), + ('processing_panel', '=', workorder.processing_panel), ('is_rework', '=', True)]) + if per_work: + workorder.state = 'waiting' + # if workorder.routing_type == 'CNC加工' and workorder.state == 'progress': + # workorder.state = 'to be detected' + # for workorder in self: + # if workorder.is_rework is True and workorder.state == 'done': + # cnc_work = self.env['mrp.workorder'].search([('routing_type','=','CNC加工'),('production_id','=',workorder.production_id.id)]) + # if cnc_work: + # cnc_work.state = 'waiting' + # if workorder.state == 'pending': + # if all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]): + # workorder.state = 'ready' if workorder.production_id.reservation_state == 'assigned' else 'waiting' + # continue + # if workorder.state not in ('waiting', 'ready'): + # continue + # if not all([wo.state in ('done', 'cancel') for wo in workorder.blocked_by_workorder_ids]): + # workorder.state = 'pending' + # continue + # if workorder.production_id.reservation_state not in ('waiting', 'confirmed', 'assigned'): + # continue + # if workorder.production_id.reservation_state == 'assigned' and workorder.state == 'waiting': + # workorder.state = 'ready' + # elif workorder.production_id.reservation_state != 'assigned' and workorder.state == 'ready': + # workorder.state = 'waiting' # 重写工单开始按钮方法 def button_start(self): diff --git a/sf_manufacturing/views/mrp_production_addional_change.xml b/sf_manufacturing/views/mrp_production_addional_change.xml index 407aca34..87ed368d 100644 --- a/sf_manufacturing/views/mrp_production_addional_change.xml +++ b/sf_manufacturing/views/mrp_production_addional_change.xml @@ -7,9 +7,9 @@ mrp.production - - - + + + @@ -117,8 +117,13 @@