From 32ead7fa07bf842929b86ae01e0fcccac6127804 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Thu, 13 Feb 2025 13:29:54 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E5=8E=BB=E6=8E=89=E8=AE=BE=E7=BD=AEtree?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=B8=BA=E9=9A=90=E8=97=8F=E7=9A=84=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_quality/views/quality_check_view.xml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/sf_quality/views/quality_check_view.xml b/sf_quality/views/quality_check_view.xml index f69f2b65..00b139de 100644 --- a/sf_quality/views/quality_check_view.xml +++ b/sf_quality/views/quality_check_view.xml @@ -77,15 +77,6 @@ - - hide - - - hide - - - hide - From 3130ef4983589f897fab129c52f9da7b8e1f6ee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Thu, 13 Feb 2025 15:48:41 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E7=9A=84=E5=BC=80=E5=A7=8B=E6=97=B6=E9=97=B4=E5=B7=B2=E7=BB=8F?= =?UTF-8?q?leave=5Fid=E5=AD=97=E6=AE=B5=E7=9A=84=E7=9B=91=E6=8E=A7?= =?UTF-8?q?=EF=BC=8C=E5=BC=82=E5=B8=B8=E5=88=99=E5=8F=91=E9=80=81=E4=BC=81?= =?UTF-8?q?=E4=B8=9A=E5=BE=AE=E4=BF=A1=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/mrp_workorder.py | 1 + sf_message/data/bussiness_node.xml | 8 ++++++++ sf_message/data/template_data.xml | 15 +++++++++++++++ sf_message/models/sf_message_workorder.py | 7 +++++++ 4 files changed, 31 insertions(+) diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index ef121e1b..83f5210f 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -69,6 +69,7 @@ class ResMrpWorkOrder(models.Model): delivery_warning = fields.Selection([('normal', '正常'), ('warning', '告警'), ('overdue', '逾期')], string='时效', tracking=True) + date_planned_start = fields.Datetime(tracking=True) @api.depends('processing_panel') def _compute_processing_panel_selection(self): diff --git a/sf_message/data/bussiness_node.xml b/sf_message/data/bussiness_node.xml index b429d766..4003df45 100644 --- a/sf_message/data/bussiness_node.xml +++ b/sf_message/data/bussiness_node.xml @@ -156,4 +156,12 @@ product.product + + + + 计划数据异常跟踪 + mrp.workorder + + + \ No newline at end of file diff --git a/sf_message/data/template_data.xml b/sf_message/data/template_data.xml index 11f05a3c..c0e96d99 100644 --- a/sf_message/data/template_data.xml +++ b/sf_message/data/template_data.xml @@ -402,4 +402,19 @@ 事项:有{{num}}个质检单需要处理。 + + + + 计划数据异常跟踪 + + mrp.workorder + + markdown + normal + ### 工单计划数据异常删除: +工单号:{{name}} +异动时间:{{write_date}} + + + \ No newline at end of file diff --git a/sf_message/models/sf_message_workorder.py b/sf_message/models/sf_message_workorder.py index 653562e1..42b03139 100644 --- a/sf_message/models/sf_message_workorder.py +++ b/sf_message/models/sf_message_workorder.py @@ -188,3 +188,10 @@ class SFMessageWork(models.Model): ]) if message_queue_ids: message_queue_ids.write({'message_status': 'cancel'}) + + def write(self, vals): + res = super(SFMessageWork, self).write(vals) + if ('leave_id' in vals and vals['leave_id'] is False or 'date_planned_start' in vals and vals['date_planned_start'] is False) \ + and self.schedule_state != '未排': + self.add_queue('计划数据异常跟踪') + return res From 8095a8a9727b27eaae54e221f0e282fa3cf307a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=83=A1=E5=B0=A7?= Date: Mon, 17 Feb 2025 13:23:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=85=8D=E9=80=81?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E7=9A=84=E5=AD=97=E6=AE=B5=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=BD=A2=E5=BC=8F=EF=BC=8C=E4=BF=AE=E6=94=B9=E5=B7=A5=E4=BB=B6?= =?UTF-8?q?=E9=85=8D=E9=80=81=E5=88=97=E8=A1=A8=E9=A1=B5=E7=9A=84=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E7=AD=9B=E9=80=89=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_manufacturing/models/agv_scheduling.py | 6 +----- sf_manufacturing/models/mrp_workorder.py | 6 +----- sf_manufacturing/views/mrp_workorder_view.xml | 6 +++++- sf_manufacturing/wizard/workpiece_delivery_wizard.py | 5 +---- 4 files changed, 8 insertions(+), 15 deletions(-) diff --git a/sf_manufacturing/models/agv_scheduling.py b/sf_manufacturing/models/agv_scheduling.py index f39c07e7..95813e1b 100644 --- a/sf_manufacturing/models/agv_scheduling.py +++ b/sf_manufacturing/models/agv_scheduling.py @@ -19,12 +19,8 @@ class AgvScheduling(models.Model): _order = 'id desc' name = fields.Char('任务单号', index=True, copy=False) - - def _get_agv_route_type_selection(self): - return self.env['sf.agv.task.route'].fields_get(['route_type'])['route_type']['selection'] - - agv_route_type = fields.Selection(selection=_get_agv_route_type_selection, string='任务类型', required=True) agv_route_id = fields.Many2one('sf.agv.task.route', '任务路线') + agv_route_type = fields.Selection(related='agv_route_id.route_type', string='任务类型', required=True) start_site_id = fields.Many2one('sf.agv.site', '起点接驳站', required=True) end_site_id = fields.Many2one('sf.agv.site', '终点接驳站', tracking=True) site_state = fields.Selection([ diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index 83f5210f..3717cebe 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -1859,11 +1859,7 @@ class WorkPieceDelivery(models.Model): feeder_station_destination_id = fields.Many2one('sf.agv.site', '目的接驳站') task_delivery_time = fields.Datetime('任务下发时间') task_completion_time = fields.Datetime('任务完成时间') - - def _get_agv_route_type_selection(self): - return self.env['sf.agv.task.route'].fields_get(['route_type'])['route_type']['selection'] - - type = fields.Selection(selection=_get_agv_route_type_selection, string='类型') + type = fields.Selection(related='route_id.route_type', string='类型') delivery_duration = fields.Float('配送时长', compute='_compute_delivery_duration') status = fields.Selection( [('待下发', '待下发'), ('已下发', '待配送'), ('已配送', '已配送'), ('已取消', '已取消')], string='状态', diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml index b1d59405..419eec50 100644 --- a/sf_manufacturing/views/mrp_workorder_view.xml +++ b/sf_manufacturing/views/mrp_workorder_view.xml @@ -785,6 +785,10 @@ + + + + @@ -807,7 +811,7 @@ sf.workpiece.delivery {'search_default_filter_to_be_issued': 1, - 'search_default_filter_issued': 1} + 'search_default_filter_type_to_production_line': 1} tree,form diff --git a/sf_manufacturing/wizard/workpiece_delivery_wizard.py b/sf_manufacturing/wizard/workpiece_delivery_wizard.py index 6a13fc08..bc4b8210 100644 --- a/sf_manufacturing/wizard/workpiece_delivery_wizard.py +++ b/sf_manufacturing/wizard/workpiece_delivery_wizard.py @@ -54,10 +54,7 @@ class WorkpieceDeliveryWizard(models.TransientModel): } } - def _get_agv_route_type_selection(self): - return self.env['sf.agv.task.route'].fields_get(['route_type'])['route_type']['selection'] - - delivery_type = fields.Selection(selection=_get_agv_route_type_selection, string='类型') + delivery_type = fields.Selection(related='route_id.route_type', string='类型') def dispatch_confirm(self): if len(self.workorder_ids) < 4: