From 2d5ef0aae4888a3e999659958ab461ab9f7ebe12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Fri, 6 Sep 2024 15:34:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E9=99=A4=E8=A3=85=E5=A4=B9=E8=B5=B7?= =?UTF-8?q?=E7=82=B9=E4=BB=8E=E4=B8=8B=E4=BA=A7=E7=BA=BFagv=E8=B0=83?= =?UTF-8?q?=E5=BA=A6=E4=BB=BB=E5=8A=A1=E5=85=B3=E8=81=94=E5=B8=A6=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/agv_scheduling.py | 14 ++++++++++++++ sf_manufacturing/models/mrp_workorder.py | 10 ++++++++-- .../wizard/workpiece_delivery_wizard.py | 7 +++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/sf_manufacturing/models/agv_scheduling.py b/sf_manufacturing/models/agv_scheduling.py index d232c643..488fa0a0 100644 --- a/sf_manufacturing/models/agv_scheduling.py +++ b/sf_manufacturing/models/agv_scheduling.py @@ -265,3 +265,17 @@ class ResMrpWorkOrder(models.Model): 'sf_agv_scheduling_mrp_workorder_ref', string='AGV调度', domain=[('state', '!=', '已取消')]) + + def get_down_product_agv_scheduling(self): + """ + 获取关联的制造订单下产线的agv任务 + """ + workorder_ids = self.production_id.workorder_ids + cnc_workorder = workorder_ids.filtered( + lambda w: w.routing_type == 'CNC加工' and w.state == 'done' and w.processing_panel == self.processing_panel + ) + if cnc_workorder: + agv_schedulingss = cnc_workorder.agv_scheduling_ids + return agv_schedulingss.filtered(lambda a: a.state == '已配送' and a.agv_route_type == '下产线') + else: + return None diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index c3842d30..976097e3 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1340,7 +1340,7 @@ class ResMrpWorkOrder(models.Model): 'name': 'button_delivery', 'type': 'object', 'string': '解除装夹', - 'class': 'btn-primary', + 'class': 'btn-primary jikimo_button_confirm', # 'className': 'btn-primary', 'modifiers': '{"force_show": 1}' }) @@ -1355,6 +1355,7 @@ class ResMrpWorkOrder(models.Model): workorder_ids = [] delivery_type = '运送空料架' max_num = 4 # 最大配送数量 + feeder_station_start_id = False if len(self) > max_num: raise UserError('仅限于拆卸1-4个制造订单,请重新选择') for item in self: @@ -1363,6 +1364,10 @@ class ResMrpWorkOrder(models.Model): production_ids.append(item.production_id.id) workorder_ids.append(item.id) + if not feeder_station_start_id: + down_product_agv_scheduling = self.get_down_product_agv_scheduling() + if down_product_agv_scheduling: + feeder_station_start_id = down_product_agv_scheduling.end_site_id.id return { 'name': _('确认'), 'type': 'ir.actions.act_window', @@ -1375,7 +1380,8 @@ class ResMrpWorkOrder(models.Model): 'default_delivery_type': delivery_type, 'default_workorder_ids': [(6, 0, workorder_ids)], 'default_workcenter_id': self.env.context.get('default_workcenter_id'), - 'default_confirm_button': '确认解除' + 'default_confirm_button': '确认解除', + 'default_feeder_station_start_id': feeder_station_start_id, }} diff --git a/sf_manufacturing/wizard/workpiece_delivery_wizard.py b/sf_manufacturing/wizard/workpiece_delivery_wizard.py index 67fb6035..f00ac499 100644 --- a/sf_manufacturing/wizard/workpiece_delivery_wizard.py +++ b/sf_manufacturing/wizard/workpiece_delivery_wizard.py @@ -210,6 +210,13 @@ class WorkpieceDeliveryWizard(models.TransientModel): # 将对象添加到对应的同模型且是多对多类型里 self.production_ids |= workorder.production_id self.workorder_ids |= workorder + + if not self.feeder_station_start_id: + down_product_agv_scheduling = self.get_down_product_agv_scheduling() + if down_product_agv_scheduling: + self.feeder_station_start_id = down_product_agv_scheduling.end_site_id.id else: raise UserError('该rfid码对应的工单不存在') return + +