From 3c3f37512028ce4dce3251a8a133e78181b94306 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Thu, 23 May 2024 15:19:41 +0800
Subject: [PATCH 1/6] =?UTF-8?q?1=E3=80=81=E6=89=93=E5=BC=80=E7=BB=84?=
=?UTF-8?q?=E8=A3=85=E5=BC=B9=E7=AA=97=E6=96=B9=E6=B3=95=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E6=B8=85=E9=99=A4=E6=97=A7=E6=95=B0=E6=8D=AE=E5=8A=9F=E8=83=BD?=
=?UTF-8?q?=EF=BC=9B2=E3=80=81=E7=BB=84=E8=A3=85=E5=BC=B9=E7=AA=97?=
=?UTF-8?q?=E7=95=8C=E9=9D=A2=EF=BC=8C=E5=88=B7=E6=96=B0=E6=8C=89=E9=94=AE?=
=?UTF-8?q?=E5=90=8D=E7=A7=B0=E6=94=B9=E4=B8=BA=E8=8E=B7=E5=8F=96=E6=B5=8B?=
=?UTF-8?q?=E9=87=8F=E5=80=BC=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=98=AF=E5=90=A6?=
=?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=B5=8B=E9=87=8F=E5=80=BC=E5=AD=97=E6=AE=B5?=
=?UTF-8?q?=E7=AD=89=EF=BC=8C=E8=B0=83=E6=95=B4=E5=AD=97=E6=AE=B5=E5=8F=AA?=
=?UTF-8?q?=E8=AF=BB=E5=92=8C=E7=95=8C=E9=9D=A2=E5=B8=83=E5=B1=80=EF=BC=9B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_tool_management/models/base.py | 7 ++++++-
sf_tool_management/wizard/wizard.py | 15 +++++++++++----
sf_tool_management/wizard/wizard_view.xml | 21 ++++++++++++---------
3 files changed, 29 insertions(+), 14 deletions(-)
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index 5291d4d7..e840224f 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -578,7 +578,12 @@ class FunctionalToolAssembly(models.Model):
def put_start_preset(self):
self.search([('start_preset_bool', '=', True)]).write({'start_preset_bool': False})
- self.write({'start_preset_bool': True})
+ self.write({
+ 'after_assembly_tool_loading_length': 0,
+ 'after_assembly_functional_tool_diameter': 0,
+ 'after_assembly_knife_tip_r_angle': 0,
+ 'start_preset_bool': True
+ })
return {
'type': 'ir.actions.act_window',
'res_model': 'sf.functional.tool.assembly.order',
diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py
index 131b9e43..a6f156d7 100644
--- a/sf_tool_management/wizard/wizard.py
+++ b/sf_tool_management/wizard/wizard.py
@@ -486,6 +486,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
hiding_length = fields.Float(string='避空长(mm)')
after_tool_groups_id = fields.Many2one('sf.tool.groups', string='组装后刀具组')
+ obtain_measurement_status = fields.Boolean('是否获取测量值', default=False)
+
@api.depends('after_assembly_tool_loading_length', 'after_assembly_handle_length')
def _compute_after_assembly_functional_tool_length(self):
for item in self:
@@ -502,11 +504,16 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
获取刀具预调仪数据
"""
tool = self.env['sf.functional.tool.assembly'].search([('assembly_order_code', '=', self.assembly_order_code)])
-
+ tool_loading_length = tool.after_assembly_tool_loading_length
+ diameter = tool.after_assembly_functional_tool_diameter
+ r_angle = tool.after_assembly_knife_tip_r_angle
+ if tool_loading_length == 0 and diameter == 0 and r_angle == 0:
+ raise ValidationError('没有获取到测量数据!')
self.write({
- 'after_assembly_tool_loading_length': tool.after_assembly_tool_loading_length, # 总长度
- 'after_assembly_functional_tool_diameter': tool.after_assembly_functional_tool_diameter, # 直径
- 'after_assembly_knife_tip_r_angle': tool.after_assembly_knife_tip_r_angle # R角
+ 'after_assembly_tool_loading_length': tool_loading_length, # 总长度
+ 'after_assembly_functional_tool_diameter': diameter, # 直径
+ 'after_assembly_knife_tip_r_angle': r_angle, # R角
+ 'obtain_measurement_status': True # 是否获取测量值
})
return {
diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml
index 85613f56..955bb998 100644
--- a/sf_tool_management/wizard/wizard_view.xml
+++ b/sf_tool_management/wizard/wizard_view.xml
@@ -341,18 +341,20 @@
-
+
+
-
-
-
@@ -366,19 +368,19 @@
+ class="custom_required" readonly="1"/>
+ class="custom_required" readonly="1"/>
+ class="custom_required" readonly="1"/>
+ class="custom_required"/>
+ class="custom_required"/>
@@ -390,6 +392,7 @@
From 2ca67eb8ad1266c5c712cccf6990626bacd3efbe Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Thu, 23 May 2024 15:43:32 +0800
Subject: [PATCH 2/6] =?UTF-8?q?1=E3=80=81=E5=B0=86=E5=88=80=E5=85=B7?=
=?UTF-8?q?=E5=90=8D=E7=A7=B0=E5=AD=97=E6=AE=B5=E8=8E=B7=E5=8F=96=E7=94=B1?=
=?UTF-8?q?onchange=E6=94=B9=E4=B8=BAdepends?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_tool_management/wizard/wizard.py | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py
index a6f156d7..3ff8b5db 100644
--- a/sf_tool_management/wizard/wizard.py
+++ b/sf_tool_management/wizard/wizard.py
@@ -223,8 +223,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
image = fields.Binary('图片')
- @api.onchange('functional_tool_name')
- def _onchange_functional_tool_name(self):
+ @api.depends('functional_tool_name')
+ def _compute_functional_tool_name(self):
for item in self:
if item.functional_tool_name:
inventory = self.env['sf.tool.inventory'].sudo().search([('name', '=', item.functional_tool_name)])
@@ -456,13 +456,15 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
item.handle_freight_rfid = None
# 组装功能刀具参数信息
- after_name_id = fields.Many2one('sf.tool.inventory', string='功能刀具名称', required=True)
+ after_name_id = fields.Many2one('sf.tool.inventory', string='功能刀具名称', compute='_compute_functional_tool_name',
+ store=True)
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号')
rfid = fields.Char('Rfid', compute='_compute_rfid')
code = fields.Char(string='功能刀具编码', compute='_compute_code')
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', compute='_compute_name', store=True)
after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model',
- string='组装后功能刀具类型')
+ string='组装后功能刀具类型', store=True,
+ compute='_compute_after_assembly_max_lifetime_value')
after_assembly_functional_tool_diameter = fields.Float(string='组装后功能刀具直径(mm)', digits=(10, 3))
after_assembly_knife_tip_r_angle = fields.Float(string='组装后刀尖R角(mm)', digits=(10, 3))
after_assembly_new_former = fields.Selection([('0', '新'), ('1', '旧')], string='组装后新/旧', default='0')
@@ -484,7 +486,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
after_assembly_effective_length = fields.Float(string='组装后有效长(mm)')
L_D_number = fields.Float(string='L/D值(mm)', compute='_compute_l_d_number')
hiding_length = fields.Float(string='避空长(mm)')
- after_tool_groups_id = fields.Many2one('sf.tool.groups', string='组装后刀具组')
+ after_tool_groups_id = fields.Many2one('sf.tool.groups', string='组装后刀具组', store=True,
+ compute='_compute_after_assembly_max_lifetime_value')
obtain_measurement_status = fields.Boolean('是否获取测量值', default=False)
@@ -530,6 +533,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
for item in self:
if item.after_name_id:
item.after_assembly_max_lifetime_value = item.after_name_id.life_span
+ item.after_assembly_functional_tool_type_id = item.after_name_id.functional_cutting_tool_model_id.id
+ item.after_tool_groups_id = item.after_name_id.tool_groups_id.id
@api.onchange('after_name_id')
def _onchange_number(self):
@@ -540,8 +545,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
item.after_assembly_tool_loading_length = item.after_name_id.tool_length
item.after_assembly_functional_tool_length = item.after_name_id.extension
item.hiding_length = item.after_name_id.blade_length
- item.after_assembly_functional_tool_type_id = item.after_name_id.functional_cutting_tool_model_id.id
- item.after_tool_groups_id = item.after_name_id.tool_groups_id.id
+
else:
item.after_assembly_functional_tool_type_id = item.functional_tool_type_id.id
item.after_tool_groups_id = item.tool_groups_id.id
From e935b2fa11ce300631eb909b94a7ff9fa81b041c Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Thu, 23 May 2024 16:18:48 +0800
Subject: [PATCH 3/6] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=AE=9A=E6=97=B6=E5=90=8C=E6=AD=A5?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=88=80=E6=9F=84?=
=?UTF-8?q?=E9=95=BF=E5=BA=A6=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_tool_management/models/functional_tool_enroll.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/sf_tool_management/models/functional_tool_enroll.py b/sf_tool_management/models/functional_tool_enroll.py
index e69ebdd8..8891b287 100644
--- a/sf_tool_management/models/functional_tool_enroll.py
+++ b/sf_tool_management/models/functional_tool_enroll.py
@@ -216,6 +216,7 @@ class FunctionalCuttingToolEntity(models.Model):
'coarse_middle_thin': item.coarse_middle_thin,
'new_former': item.new_former,
'tool_loading_length': item.tool_loading_length,
+ 'handle_length': item.handle_length,
'functional_tool_length': item.functional_tool_length,
'effective_length': item.effective_length,
'max_lifetime_value': item.max_lifetime_value,
From c7df18ace68f1f7a6e07c9fffdef9125fccad2b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=BB=84=E7=84=B1?=
Date: Fri, 24 May 2024 14:35:22 +0800
Subject: [PATCH 4/6] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E8=A1=A8=E6=A0=BC?=
=?UTF-8?q?=E6=A8=AA=E5=90=91=E6=BB=9A=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
jikimo_frontend/static/src/scss/custom_style.scss | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss
index 59ffdd58..e199a938 100644
--- a/jikimo_frontend/static/src/scss/custom_style.scss
+++ b/jikimo_frontend/static/src/scss/custom_style.scss
@@ -515,4 +515,10 @@ div:has(.o_required_modifier) > label::before {
input {
border-bottom: 1px solid;
}
+}
+
+// 设置表格横向滚动
+.o_list_renderer.o_renderer {
+ max-width: 100%;
+ overflow-x: auto;
}
\ No newline at end of file
From 9055e7ed8be985f563d4f8beb8989274bb62e486 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Tue, 28 May 2024 16:35:06 +0800
Subject: [PATCH 5/6] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96=E7=94=9F?=
=?UTF-8?q?=E6=88=90=E5=B7=A5=E5=8D=95=E5=B7=A5=E5=BA=8F=E7=9A=84=E6=96=B9?=
=?UTF-8?q?=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
sf_manufacturing/models/mrp_production.py | 58 +++++++++++++++++++++--
1 file changed, 53 insertions(+), 5 deletions(-)
diff --git a/sf_manufacturing/models/mrp_production.py b/sf_manufacturing/models/mrp_production.py
index fc4ccbeb..3dd9cadd 100644
--- a/sf_manufacturing/models/mrp_production.py
+++ b/sf_manufacturing/models/mrp_production.py
@@ -5,7 +5,7 @@ import re
import requests
from itertools import groupby
from odoo import api, fields, models, _
-from odoo.exceptions import UserError
+from odoo.exceptions import UserError, ValidationError
from odoo.addons.sf_base.commons.common import Common
from odoo.tools import float_compare, float_round, float_is_zero, format_datetime
@@ -483,10 +483,58 @@ class MrpProduction(models.Model):
def _reset_work_order_sequence(self):
for rec in self:
- current_sequence = 1
- for work in rec.workorder_ids:
- work.sequence = current_sequence
- current_sequence += 1
+ product_routing_sequence_list = {} # 成品
+ embryo_routing_sequence_list = {} # 坯料
+ model_type_id = rec.product_id.product_model_type_id
+ if model_type_id:
+ tmpl_num = 1
+ # 成品工序
+ product_routing_tmpl_ids = model_type_id.product_routing_tmpl_ids
+ if product_routing_tmpl_ids:
+ for tmpl_id in product_routing_tmpl_ids:
+ product_routing_sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num})
+ tmpl_num += 1
+ # 表面工艺工序
+ # 模型类型的表面工艺工序模版
+ surface_tmpl_ids = model_type_id.surface_technics_routing_tmpl_ids
+ # 产品选择的表面工艺
+ model_process_parameters_ids = rec.product_id.model_process_parameters_ids
+ process_dict = {}
+ if model_process_parameters_ids:
+ for process_parameters_id in model_process_parameters_ids:
+ process_id = process_parameters_id.process_id
+ surface_tmpl_name = ''
+ for surface_tmpl_id in surface_tmpl_ids:
+ if process_id == surface_tmpl_id.route_workcenter_id.surface_technics_id:
+ surface_tmpl_name = surface_tmpl_id.route_workcenter_id.name
+ process_dict.update({int(process_id.category_id.code): '%s-%s' % (
+ surface_tmpl_name, process_parameters_id.name)})
+ process_list = sorted(process_dict.keys())
+ for process_num in process_list:
+ product_routing_sequence_list.update({process_dict.get(process_num): tmpl_num})
+ tmpl_num += 1
+ # 坯料工序
+ tmpl_num = 1
+ embryo_routing_tmpl_ids = model_type_id.embryo_routing_tmpl_ids
+ if embryo_routing_tmpl_ids:
+ for tmpl_id in embryo_routing_tmpl_ids:
+ embryo_routing_sequence_list.update({tmpl_id.route_workcenter_id.name: tmpl_num})
+ tmpl_num += 1
+ else:
+ raise ValidationError('该产品没有选择【模版类型】!')
+
+ if rec.product_id.categ_id.name == '成品':
+ for work in rec.workorder_ids:
+ if product_routing_sequence_list.get(work.name):
+ work.sequence = product_routing_sequence_list[work.name]
+ else:
+ raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name)
+ elif rec.product_id.categ_id.name == '坯料':
+ for work in rec.workorder_ids:
+ if embryo_routing_sequence_list.get(work.name):
+ work.sequence = embryo_routing_sequence_list[work.name]
+ else:
+ raise ValidationError('工序【%s】在产品选择的模版类型中不存在!' % work.name)
# if work.name == '获取CNC加工程序':
# work.button_start()
# #work.fetchCNC()
From dc210f7263deb50e33073d8988ad515057e486d4 Mon Sep 17 00:00:00 2001
From: yuxianghui <3437689193@qq.com>
Date: Tue, 28 May 2024 16:36:49 +0800
Subject: [PATCH 6/6] 1
---
sf_tool_management/views/tool_base_views.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml
index 0b00be26..b3e93238 100644
--- a/sf_tool_management/views/tool_base_views.xml
+++ b/sf_tool_management/views/tool_base_views.xml
@@ -464,8 +464,8 @@