From 95cb5251dcb4863dfb992e29bd6c55538b4fae04 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 5 Jun 2025 16:59:33 +0800 Subject: [PATCH 1/2] =?UTF-8?q?1=E3=80=81=E9=94=80=E5=94=AE=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E6=B7=BB=E5=8A=A0=E5=90=88=E5=90=8C=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=8Cbfm=E4=B8=8B=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E6=B7=BB=E5=8A=A0=E5=90=88=E5=90=8C=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=EF=BC=9B2=E3=80=81=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=A7=A3=E9=99=A4=E8=A3=85=E5=A4=B9=E5=B7=A5=E5=8D=95=E5=AE=8C?= =?UTF-8?q?=E5=B7=A5=E6=97=B6=E8=A7=A3=E7=BB=91rfid=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E4=BC=98=E5=8C=96=E5=B7=A5=E5=8D=95=E8=BF=94=E5=B7=A5?= =?UTF-8?q?=E6=97=B6=E6=96=B0=E5=B7=A5=E5=8D=95=E7=BB=91=E5=AE=9Arfid?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/controllers/main.py | 3 ++- sf_manufacturing/models/mrp_workorder.py | 28 +++++++------------- sf_manufacturing/wizard/production_wizard.py | 4 +-- sf_manufacturing/wizard/rework_wizard.py | 8 ++++-- sf_sale/models/sale_order.py | 1 + 5 files changed, 21 insertions(+), 23 deletions(-) diff --git a/sf_manufacturing/controllers/main.py b/sf_manufacturing/controllers/main.py index 8a289e75..d3e700a0 100644 --- a/sf_manufacturing/controllers/main.py +++ b/sf_manufacturing/controllers/main.py @@ -45,8 +45,9 @@ class JikimoSaleRoutePicking(Sf_Bf_Connect): product.product_tmpl_id.is_customer_provided = True if item['embryo_redundancy_id'] else False order_id.with_user(request.env.ref("base.user_admin")).sale_order_create_line(product, item) i += 1 - if kw.get('contract_file_name') and kw.get('contract_file'): + if kw.get('contract_file_name') and kw.get('contract_file') and kw.get('contract_code'): order_id.create_sale_documents(kw.get('contract_file_name'), kw.get('contract_file')) + order_id.write({'contract_code': kw.get('contract_code')}) res['factory_order_no'] = order_id.name order_id.confirm_to_supply_method() except Exception as e: diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 2d5a42be..f2060d83 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1592,25 +1592,17 @@ class ResMrpWorkOrder(models.Model): len(done_workorder) == len( record.production_id.workorder_ids.filtered(lambda wo: wo.state != 'cancel'))): is_production_id = True - if record.routing_type in ['解除装夹'] or ( - record.is_rework is True and record.routing_type in ['装夹预调']): - for workorder in record.production_id.workorder_ids: - if workorder.processing_panel == record.processing_panel: - rfid_code = workorder.rfid_code - if record.is_rework is not True: - workorder.write({'rfid_code_old': rfid_code, 'rfid_code': False}) - elif workorder.routing_type != '装夹预调' and workorder.state != 'rework': - workorder.write({'rfid_code_old': False, 'rfid_code': False}) - elif workorder.routing_type == '装夹预调' and workorder.state != 'rework': - workorder.write({'rfid_code_old': rfid_code, 'rfid_code': False}) - self.env['stock.lot'].sudo().search([('rfid', '=', rfid_code)]).write( - {'tool_material_status': '可用'}) - if workorder.rfid_code: - raise ValidationError(f'【{workorder.name}】工单解绑失败,请重新点击完成按钮!!!') - # workorder.rfid_code_old = rfid_code - # workorder.rfid_code = False - logging.info('workorder.rfid_code:%s' % workorder.rfid_code) + if record.routing_type in ['解除装夹'] or (record.is_rework is True and record.routing_type in ['装夹预调']): + rfid_code = record.rfid_code + work_ids = record.production_id.workorder_ids.filtered( + lambda wo: wo.processing_panel == record.processing_panel and wo.state != 'rework') + work_ids.write({'rfid_code_old': rfid_code, 'rfid_code': False}) + self.env['stock.lot'].sudo().search([('rfid', '=', rfid_code)]).write( + {'tool_material_status': '可用'}) + if any(wo.rfid_code for wo in work_ids): + raise ValidationError(f'【{record.name}】工单解绑失败,请重新点击完成按钮!!!') + logging.info('work_ids.rfid_code:%s' % [wo.rfid_code for wo in work_ids]) if is_production_id is True: logging.info('product_qty:%s' % record.production_id.product_qty) for move_raw_id in record.production_id.move_raw_ids: diff --git a/sf_manufacturing/wizard/production_wizard.py b/sf_manufacturing/wizard/production_wizard.py index abd8b6cc..904cda09 100644 --- a/sf_manufacturing/wizard/production_wizard.py +++ b/sf_manufacturing/wizard/production_wizard.py @@ -46,10 +46,10 @@ class ProductionWizard(models.TransientModel): mrp_workorder_list = self.mrp_production_id.workorder_ids.filtered(lambda kw: kw.rfid_code) for workorder in mrp_workorder_list: rfid_code = workorder.rfid_code - workorder.filtered(lambda wo: wo.routing_type == '装夹预调' and wo.rfid_code is not False).write( + workorder.filtered(lambda wo: wo.routing_type == '装夹预调' and wo.rfid_code and wo.state != 'rework').write( {'rfid_code_old': rfid_code, 'rfid_code': False}) workorder.filtered(lambda wo: (wo.routing_type != '装夹预调' and - (wo.rfid_code_old is not False or wo.rfid_code is not False))).write( + (wo.rfid_code_old or wo.rfid_code) and wo.state != 'rework')).write( {'rfid_code_old': False, 'rfid_code': False}) if self.is_remanufacture is True: diff --git a/sf_manufacturing/wizard/rework_wizard.py b/sf_manufacturing/wizard/rework_wizard.py index 25ac2b36..662e2d57 100644 --- a/sf_manufacturing/wizard/rework_wizard.py +++ b/sf_manufacturing/wizard/rework_wizard.py @@ -173,8 +173,12 @@ class ReworkWizard(models.TransientModel): # ====新工单绑定rfid=== for new_work_id in new_work_ids: if new_work_id.routing_type in ['CNC加工', '解除装夹']: - new_work_id.write({'rfid_code': self.production_id.workorder_ids.filtered( - lambda wk: wk.sequence == new_work_id.sequence - 1).rfid_code}) + # 获取new_work_id同一个加工面已经绑定rfid的非返工的装夹预调工单 + work_id = self.production_id.workorder_ids.filtered( + lambda wk: (wk.processing_panel == new_work_id.processing_panel and wk.rfid_code + and wk.routing_type == '装夹预调' and wk.state != 'rework')) + if work_id: + new_work_id.write({'rfid_code': work_id.rfid_code}) self.production_id.detection_result_ids.filtered( lambda ap1: ap1.handle_result == '待处理').write({'handle_result': '已处理'}) panels = [] # 返工的加工面 diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 4a436fe0..7fce28ee 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -63,6 +63,7 @@ class ReSaleOrder(models.Model): model_display_version = fields.Char('模型展示版本', default="v1") + contract_code = fields.Char('合同编号') contract_document_id = fields.Many2one('documents.document', string='合同文件') contract_file = fields.Binary(related='contract_document_id.datas', string='合同文件内容') contract_file_name = fields.Char(related='contract_document_id.attachment_id.name', string='文件名') From 5d0f094da7fe77ef9a7a526c847d4a340cc48d53 Mon Sep 17 00:00:00 2001 From: yuxianghui <3437689193@qq.com> Date: Thu, 5 Jun 2025 17:03:06 +0800 Subject: [PATCH 2/2] 1 --- sf_manufacturing/models/mrp_workorder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index f2060d83..9bfc09ec 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1593,7 +1593,7 @@ class ResMrpWorkOrder(models.Model): record.production_id.workorder_ids.filtered(lambda wo: wo.state != 'cancel'))): is_production_id = True - if record.routing_type in ['解除装夹'] or (record.is_rework is True and record.routing_type in ['装夹预调']): + if record.routing_type in ['解除装夹']: rfid_code = record.rfid_code work_ids = record.production_id.workorder_ids.filtered( lambda wo: wo.processing_panel == record.processing_panel and wo.state != 'rework')