From 2a5a9de3e3e7caefc8797551a9d1580cd989d7b1 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Mon, 22 Jan 2024 15:54:30 +0800
Subject: [PATCH 1/3] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0=E6=9C=BA?=
=?UTF-8?q?=E5=BA=8A=E5=88=80=E4=BD=8D=E5=AD=97=E6=AE=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_manufacturing/models/product_template.py | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index 90395d18..b9209d57 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -874,6 +874,20 @@ class SfMaintenanceEquipmentTool(models.Model):
code = fields.Char('机床刀位号')
name = fields.Char('刀位号', compute='_compute_name')
+ # 待删除字段
+ product_template_id = fields.Many2one('product.template', string='功能刀具名称',
+ domain="[('categ_type', '=', '刀具')]")
+ image_1920 = fields.Binary('图片', related='product_template_id.image_1920')
+ categ_type = fields.Char(string='功能刀具类型')
+ diameter = fields.Char('直径')
+ precision = fields.Char('粗\中\精')
+ tool_code = fields.Char('功能刀具编码')
+ hilt_name = fields.Char('刀柄名称')
+ hilt_code = fields.Char('刀柄编码')
+ life_value_max = fields.Char('最大寿命值')
+ alarm_value = fields.Char('报警值')
+ used_value = fields.Char('已使用值')
+
@api.depends('code')
def _compute_name(self):
for record in self:
From f5c555ec86036b0709d693a26c429959a25d886f Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Mon, 22 Jan 2024 17:11:45 +0800
Subject: [PATCH 2/3] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=96=B0=E5=A2=9E?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E7=9A=84=E8=B0=83=E7=94=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_base/models/tool_base_new.py | 20 ++++++++++----------
sf_quality/models/quality.py | 8 ++++----
sf_tool_management/models/base.py | 14 +++++++-------
3 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py
index 7988dc7a..8f3eb86f 100644
--- a/sf_base/models/tool_base_new.py
+++ b/sf_base/models/tool_base_new.py
@@ -277,13 +277,13 @@ class ToolGroups(models.Model):
else:
raise ValidationError("机床刀具组发送失败")
- def write(self, vals):
- obj = super().write(vals)
- self._register_tool_groups(obj)
- return obj
-
- @api.model_create_multi
- def create(self, vals_list):
- records = super(ToolGroups, self).create(vals_list)
- self._register_tool_groups(records)
- return records
+ # def write(self, vals):
+ # obj = super().write(vals)
+ # self._register_tool_groups(obj)
+ # return obj
+ #
+ # @api.model_create_multi
+ # def create(self, vals_list):
+ # records = super(ToolGroups, self).create(vals_list)
+ # self._register_tool_groups(records)
+ # return records
diff --git a/sf_quality/models/quality.py b/sf_quality/models/quality.py
index 7382f6be..ace40ff9 100644
--- a/sf_quality/models/quality.py
+++ b/sf_quality/models/quality.py
@@ -28,7 +28,7 @@ class QualityCheck(models.Model):
else:
raise ValidationError("零件特采发送失败")
- @api.onchange('quality_state')
- def _onchange_quality_state(self):
- if self.quality_state in ['pass', 'fail']:
- self._register_tool_groups()
+ # @api.onchange('quality_state')
+ # def _onchange_quality_state(self):
+ # if self.quality_state in ['pass', 'fail']:
+ # self._register_tool_groups()
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index fba035f6..ae06d91b 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -198,12 +198,12 @@ class FunctionalCuttingToolEntity(models.Model):
else:
raise ValidationError("刀具组发送失败")
- @api.model_create_multi
- def create(self, vals):
- obj = super(FunctionalCuttingToolEntity, self).create(vals)
- # 调用刀具组接口
- self._register_functional_tool_groups(obj)
- return obj
+ # @api.model_create_multi
+ # def create(self, vals):
+ # obj = super(FunctionalCuttingToolEntity, self).create(vals)
+ # # 调用刀具组接口
+ # self._register_functional_tool_groups(obj)
+ # return obj
class FunctionalToolWarning(models.Model):
@@ -753,7 +753,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
if functional_tools:
for functional_tool in functional_tools:
if functional_tool.on_tool_stock_num == 0:
- self.env['sf.cnc.processing'].register_cnc_processing(cnc_processing)
+ # self.env['sf.cnc.processing'].register_cnc_processing(cnc_processing)
if functional_tool.tool_stock_num == 0 and functional_tool.side_shelf_num == 0:
status = True
else:
From 136d0f51561b72d98d6c3e546031db4bbf1ba6b8 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Tue, 23 Jan 2024 15:29:07 +0800
Subject: [PATCH 3/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=B7=A5=E4=BB=B6?=
=?UTF-8?q?=E9=85=8D=E9=80=81=E6=A8=A1=E5=9E=8B=E5=8F=8A=E5=85=B6tree?=
=?UTF-8?q?=E8=A7=86=E5=9B=BE=EF=BC=8Csearch=E8=A7=86=E5=9B=BE=EF=BC=8C?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=8A=A8=E8=AE=A1=E7=AE=97=E9=85=8D?=
=?UTF-8?q?=E9=80=81=E6=97=B6=E9=95=BF=E5=8A=9F=E8=83=BD=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_manufacturing/models/mrp_workorder.py | 31 ++++++
sf_manufacturing/security/ir.model.access.csv | 4 +
sf_manufacturing/views/mrp_workorder_view.xml | 96 ++++++++++++++-----
sf_plan/views/view.xml | 8 ++
4 files changed, 117 insertions(+), 22 deletions(-)
diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py
index eabdff95..19476b8a 100644
--- a/sf_manufacturing/models/mrp_workorder.py
+++ b/sf_manufacturing/models/mrp_workorder.py
@@ -772,3 +772,34 @@ class SfWorkOrderBarcodes(models.Model):
#
# else:
# self.pro_code_ok = workorder.pro_code_is_ok(barcode)
+
+
+class WorkpieceDelivery(models.Model):
+ _name = 'sf.workpiece.delivery'
+ _description = '工件配送单列表'
+
+ name = fields.Char('工件编码/任务编码')
+ mrp_workorder_id = fields.Many2one('mrp.workorder', string='工件编码/任务编码',
+ domain=[('name', 'in', ('装夹', '解除装夹'))])
+ workpiece_code = fields.Char('同运工件编码')
+ feeder_station_start = fields.Char('起点接驳站')
+ feeder_station_destination = fields.Char('目的接驳站')
+ production_line_id = fields.Many2one('sf.production.line', string='目标生产线')
+ task_delivery_time = fields.Datetime('任务下发时间')
+ task_completion_time = fields.Datetime('任务完成时间')
+ delivery_time = fields.Char('配送时长', compute='_compute_delivery_time')
+ status = fields.Selection([('待下发', '待下发'), ('待配送', '待配送'), ('已配送', '已配送')], string='状态',
+ default='待下发')
+
+ @api.depends('task_delivery_time', 'task_completion_time')
+ def _compute_delivery_time(self):
+ for obj in self:
+ if obj.task_delivery_time and obj.task_completion_time:
+ delivery_duration = obj.task_completion_time - obj.task_delivery_time
+ hours, seconds = divmod(delivery_duration.total_seconds(), 3600)
+ minutes, _ = divmod(seconds, 60)
+ delivery_time_str = "{:.0f}时 {:.0f}分".format(hours, minutes)
+
+ obj.delivery_time = delivery_time_str
+ else:
+ obj.delivery_time = ''
diff --git a/sf_manufacturing/security/ir.model.access.csv b/sf_manufacturing/security/ir.model.access.csv
index 7711e4fe..52545bcf 100644
--- a/sf_manufacturing/security/ir.model.access.csv
+++ b/sf_manufacturing/security/ir.model.access.csv
@@ -23,6 +23,9 @@ access_mrp_workcenter_manager,mrp_workcenter,model_mrp_workcenter,sf_base.group_
access_mrp_workcenter_productivity,mrp_workcenter_productivity,model_mrp_workcenter_productivity,sf_base.group_sf_mrp_user,1,0,0,0
access_mrp_workcenter_productivity_manager,mrp_workcenter_productivity,model_mrp_workcenter_productivity,sf_base.group_sf_mrp_manager,1,1,1,0
+access_sf_workpiece_delivery,sf_workpiece_delivery,model_sf_workpiece_delivery,sf_base.group_sf_mrp_user,1,0,0,0
+access_sf_workpiece_delivery_manager,sf_workpiece_delivery,model_sf_workpiece_delivery,sf_base.group_sf_mrp_manager,1,1,1,0
+
access_mrp_workcenter_productivity_loss_manager,mrp.workcenter.productivity.loss,mrp.model_mrp_workcenter_productivity_loss,sf_base.group_sf_mrp_user,1,1,1,0
access_mrp_workcenter_productivity_loss,mrp.workcenter.productivity.loss,mrp.model_mrp_workcenter_productivity_loss,sf_base.group_sf_mrp_user,1,0,0,0
access_mrp_workcenter_productivity_loss_type,mrp.workcenter.productivity.loss.type,mrp.model_mrp_workcenter_productivity_loss_type,sf_base.group_sf_mrp_user,1,0,0,0
@@ -87,6 +90,7 @@ access_mrp_production_split,access.mrp.production.split,mrp.model_mrp_production
access_mrp_production_split_line,access.mrp.production.split.line,mrp.model_mrp_production_split_line,sf_base.group_sf_mrp_user,1,1,1,0
access_mrp_workcenter_capacity_manager,mrp.workcenter.capacity.manager,mrp.model_mrp_workcenter_capacity,sf_base.group_sf_mrp_user,1,1,1,0
+
access_mrp_production_group_plan_dispatch,mrp_production,model_mrp_production,sf_base.group_plan_dispatch,1,0,0,0
access_mrp_workorder,mrp_workorder,model_mrp_workorder,sf_base.group_plan_dispatch,1,1,1,0
access_sf_production_line_group_plan_dispatch,sf.production.line,model_sf_production_line,sf_base.group_plan_dispatch,1,0,0,0
diff --git a/sf_manufacturing/views/mrp_workorder_view.xml b/sf_manufacturing/views/mrp_workorder_view.xml
index d9e53599..757922e8 100644
--- a/sf_manufacturing/views/mrp_workorder_view.xml
+++ b/sf_manufacturing/views/mrp_workorder_view.xml
@@ -107,19 +107,24 @@
-
+
-
-
+
@@ -398,7 +403,6 @@
-
@@ -440,16 +444,16 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -479,14 +483,62 @@
[('schedule_state', '=', '已排')]
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+ 工件配送单列表
+ sf.workpiece.delivery
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 工件配送单列表
+ sf.workpiece.delivery
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 工件配送单列表
+ sf.workpiece.delivery
+ tree,search
+
diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml
index 7f5a1969..869c3082 100644
--- a/sf_plan/views/view.xml
+++ b/sf_plan/views/view.xml
@@ -327,6 +327,14 @@
action="mrp_custom_action"
parent="sf_production_plan_menu"
/>
+
+