diff --git a/sf_tool_management/__init__.py b/sf_tool_management/__init__.py
index 2c6c3674..c9ba0265 100644
--- a/sf_tool_management/__init__.py
+++ b/sf_tool_management/__init__.py
@@ -1,5 +1,3 @@
-
-
# -*-coding:utf-8-*-
from . import models
from . import wizard
diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py
index 8d8a5e85..c6ec3191 100644
--- a/sf_tool_management/__manifest__.py
+++ b/sf_tool_management/__manifest__.py
@@ -1,4 +1,3 @@
-
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
{
@@ -13,13 +12,14 @@
'website': 'https://www.sf.jikimo.com',
'depends': ['account', 'sf_base', 'mrp'],
'data': [
- 'security/group_security.xml',
+ #'security/group_security.xml',
'security/ir.model.access.csv',
# 'views/tool_base_views.xml',
# # 'views/menu_view.xml',
'wizard/wizard_view.xml',
'views/tool_base_views.xml',
'views/menu_view.xml',
+ 'views/tool_material_search.xml',
],
'demo': [
],
diff --git a/sf_tool_management/models/__init__.py b/sf_tool_management/models/__init__.py
new file mode 100644
index 00000000..67b36bda
--- /dev/null
+++ b/sf_tool_management/models/__init__.py
@@ -0,0 +1,3 @@
+from . import base
+from . import tool_material_search
+
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index cd47541e..29879b92 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -1,5 +1,5 @@
-
-
+# -*- coding: utf-8 -*-
+from odoo import fields, models, api
class FunctionalCuttingToolEntity(models.Model):
@@ -148,7 +148,7 @@ class MachineTableToolChangingApply(models.Model):
:return:
"""
# 更新数据到机台换刀申请界面
- # todo 换刀申请条件需补充完善
+ # todo 自动换刀申请条件需补充完善
if(self.functional_tool_status == '异常'):
self.env['sf.machine.table.tool.changing.apply'].search([
('CNC_machine_table', '=', self.CNC_machine_table)]).write({
@@ -157,9 +157,9 @@ class MachineTableToolChangingApply(models.Model):
'replacement_tool_type': self.functional_tool_type,
'replacement_tool_coarse_middle_thin': self.coarse_middle_thin,
'new_former': '0',
- 'applicant': None,
+ 'applicant': '自动申请',
'used_tool_time': fields.Datetime.now(),
- 'reason_for_applying': None,
+ 'reason_for_applying': '功能刀具状态异常',
'remark': None,
'status': '1'
})
@@ -171,12 +171,12 @@ class MachineTableToolChangingApply(models.Model):
'functional_tool_type': self.functional_tool_type,
'functional_tool_diameter': self.diameter,
'loading_task_source': '1',
- 'applicant': self.applicant,
- 'reason_for_applying': self.reason_for_applying,
+ 'applicant': '自动申请',
+ 'reason_for_applying': '功能刀具状态异常',
'use_tool_time': self.used_tool_time,
'machine_tool_name': self.CNC_machine_table,
'machine_tool_code': self.machine_tool_code,
- 'cutter_spacing_code': self.cutter_spacing_code
+ 'cutter_spacing_code': self.cutter_spacing_code,
})
@@ -187,12 +187,10 @@ class MachineTableToolChangingApply(models.Model):
:param vals:
:return:
"""
- # todo 增加设置直径的值
- # tool_changing_apply = self.env['sf.machine.table.tool.changing.apply'].search(
- # [('CNC_machine_table', '=', vals.get('CNC_machine_table'))])
- # for i in tool_changing_apply:
- # print(i)
- # vals['functional_tool_diameter'] = self.diameter
+ # 增加设置直径的值
+ tool_changing_apply = self.env['sf.machine.table.tool.changing.apply'].search(
+ [('CNC_machine_table', '=', vals['machine_tool_name'])])
+ vals['functional_tool_diameter'] = tool_changing_apply.diameter
self.env['sf.functional.tool.assembly'].create(vals)
@@ -253,7 +251,7 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
required_cutting_time = fields.Char(string='需要切割时间')
whether_standard_tool = fields.Boolean(string='是否标准刀')
need_knife_time = fields.Datetime(string='需要用刀时间')
- plan_execute_status = fields.Selection([('0', '待下发'), ('1', '执行中'), ('2', '已完成')], string='计划执行状态')
+ plan_execute_status = fields.Selection([('0', '待下发'), ('1', '执行中'), ('2', '已完成')], string='计划执行状态', default='0')
applicant = fields.Char(string='申请人')
reason_for_applying = fields.Char(string='申请原因')
remark = fields.Char(string='备注说明')
@@ -342,7 +340,13 @@ class FunctionalToolAssembly(models.Model):
receive_time = fields.Datetime(string='领用出库时间')
remark = fields.Char(string='备注说明')
- check_box = fields.Boolean(string='复选框', default=False, attrs="{'readonly': [('assemble_status', '!=', '1')]}")
+ check_box_1 = fields.Boolean(string='复选框', default=False)
+
+ @api.onchange('assemble_status')
+ def check_box(self):
+ if self.assemble_status != '1':
+ self.check_box_1 = False
+
def cancel_functional_tool_assembly(self):
"""
@@ -366,7 +370,9 @@ class FunctionalToolAssembly(models.Model):
'cut_time': None,
'cut_length': None,
'cut_number': None,
- 'assemble_status': '0'
+ 'assemble_status': '0',
+ 'tool_loading_person':None,
+ 'tool_loading_time':None
})
@@ -377,7 +383,7 @@ class FunctionalToolAssembly(models.Model):
"""
self.env['sf.delivery.of.cargo.from.storage'].search([]).unlink()
- vals = self.env['sf.functional.tool.assembly'].search([('check_box', '=', True),('assemble_status', '=', '1')])
+ vals = self.env['sf.functional.tool.assembly'].search([('check_box_1', '=', True),('assemble_status', '=', '1')])
if vals:
for val in vals:
diff --git a/sf_tool_management/models/tool_material_search.py b/sf_tool_management/models/tool_material_search.py
new file mode 100644
index 00000000..bd53d8db
--- /dev/null
+++ b/sf_tool_management/models/tool_material_search.py
@@ -0,0 +1,179 @@
+# -*- coding: utf-8 -*-
+from odoo import fields, models, api
+
+
+# 刀具物料搜索
+class SfToolMaterialSearch(models.Model):
+ _name = 'sf.tool.material.search'
+ _description = '刀具物料搜索'
+
+ sequence = fields.Integer('序号')
+ code = fields.Char('编码')
+ name = fields.Char('名称')
+ # 关联刀具类型
+ mrs_cutting_tool_type_id = fields.Many2one(
+ 'sf.cutting.tool.type', '刀具类型',
+ domain="[('mrs_cutting_tool_material_id.name', '=', mrs_cutting_tool_material_name)]")
+ mrs_machine_brand_id = fields.Many2one('sf.machine.brand', '品牌')
+ # 关联刀具型号
+ mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', '刀具型号')
+
+ # 关联刀具物料模型
+ mrs_cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料')
+
+ # 刀片特有字段
+ blade_code = fields.Char('刀片编码')
+ blade_length = fields.Float('长度L(mm)')
+ blade_width = fields.Float('宽度D(mm)')
+ blade_height = fields.Float('高度T(mm)')
+ blade_top_angle = fields.Float('顶角(°)')
+ blade_front_angle = fields.Float('前角(°)')
+ blade_rear_angle = fields.Float('后角(°)')
+ blade_main_included_angle = fields.Float('主偏角(°)')
+ blade_r_angle = fields.Float('R角(°)')
+ blade_hardness = fields.Char('加工硬度')
+ blade_accuracy = fields.Char('精度等级')
+ blade_coating_material_id = fields.Char('涂层材质')
+ blade_radius = fields.Float('刀尖半径(mm)')
+ blade_nut = fields.Float('配对螺母(mm)')
+ mrs_cutting_tool_model_blade_cutter_bar_ids = fields.Many2many(
+ 'sf.cutting.tool.model',
+ relation='sf_tool_material_search_blade_cutter_bar_rel',
+ column1='model_id_1',
+ column2='model_id_2',
+ domain="[('mrs_cutting_tool_material_id.name', '=', '刀杆')]",
+ string='适用刀杆型号',
+ default=lambda self: [], # 使用空列表作为默认值
+ )
+ mrs_cutting_tool_model_blade_cutter_pad_ids = fields.Many2many(
+ 'sf.cutting.tool.model',
+ relation='sf_tool_material_search_blade_cutter_pad_rel',
+ column1='model_id_1',
+ column2='model_id_2',
+ domain="[('mrs_cutting_tool_material_id.name', '=', '刀盘')]",
+ string='适用刀盘型号',
+ default=lambda self: [], # 使用空列表作为默认值
+ )
+
+ # 整体式刀具特有字段
+ integral_code = fields.Char('整体式刀具编码', readonly=True)
+ integral_total_length = fields.Float('总长度(mm)')
+ integral_shank_length = fields.Float('柄部长度(mm)')
+ integral_blade_length = fields.Float('刃部长度(mm)')
+ integral_diameter = fields.Float('直径(mm)')
+ integral_blade_number = fields.Integer('刃数')
+ integral_front_angle = fields.Float('前角(°)')
+ integral_rear_angle = fields.Float('后角(°)')
+ integral_main_included_angle = fields.Float('主偏角(°)')
+ integral_accuracy = fields.Float('精度等级')
+ integral_hardness = fields.Float('加工硬度(HRC)')
+ integral_coating_material = fields.Char('涂层材质')
+ integral_nut = fields.Float('配对螺母(mm)')
+ integral_scope = fields.Char('适用范围')
+
+ # 刀杆特有字段
+ bar_code = fields.Char('刀杆编码', readonly=True)
+ # bar_name = fields.Char('刀杆名称', required=True)
+ bar_c_diameter = fields.Float('C柄径(mm)')
+ bar_total_length = fields.Float('L总长(mm)')
+ bar_blade_number = fields.Integer('刃数')
+ bar_d_diameter = fields.Float('D刃径(mm)')
+ mrs_cutting_tool_model_bar_blade_ids = fields.Many2many(
+ 'sf.cutting.tool.model',
+ relation='sf_tool_material_search_bar_blade_rel',
+ column1='model_id_1',
+ column2='model_id_2',
+ domain="[('mrs_cutting_tool_material_id.name', '=', '刀片')]",
+ string='适用刀片型号'
+ )
+ bar_wrench = fields.Float('配对扳手(mm)')
+ bar_screw = fields.Float('配备螺丝(mm)')
+ bar_radius = fields.Float('刀尖圆角半径')
+ bar_accuracy = fields.Char('精度等级')
+ bar_hardness = fields.Char('硬度(°)')
+ bar_scope = fields.Char('适用范围')
+
+ # 刀盘特有字段
+ pad_code = fields.Char('刀盘编码', readonly=True)
+ # pad_name = fields.Char('刀盘名称', required=True)
+ pad_c_diameter = fields.Float('C柄径(mm)')
+ pad_total_length = fields.Float('L总长(mm)')
+ pad_blade_number = fields.Integer('刃数')
+ pad_d_diameter = fields.Float('D刃径(mm)')
+ mrs_cutting_tool_model_pad_blade_ids = fields.Many2many(
+ 'sf.cutting.tool.model',
+ relation='sf_tool_material_search_pad_blade_rel',
+ column1='model_id_1',
+ column2='model_id_2',
+ domain="[('mrs_cutting_tool_material_id.name', '=', '刀片')]",
+ string='适用刀片型号'
+ )
+ pad_wrench = fields.Float('配对扳手(mm)')
+ pad_screw = fields.Float('配备螺丝(mm)')
+ pad_radius = fields.Float('刀尖圆角半径')
+ pad_accuracy = fields.Char('精度等级')
+ pad_hardness = fields.Char('硬度(°)')
+ pad_scope = fields.Char('适用范围')
+
+ # 刀柄特有字段
+ handle_code = fields.Char('刀柄编码', readonly=True)
+ # 柄长L(mm)、法兰柄长L1(mm)、法兰直径D1(mm)
+ handle_length = fields.Float('柄长L(mm)')
+ handle_diameter = fields.Float('直径D(mm)')
+ handle_flange_length = fields.Float('法兰柄长L1(mm)')
+ handle_flange_diameter = fields.Float('法兰直径D1(mm)')
+ # 夹持直径min、夹持直径max、径跳精度、最大转速n/min、3D模型图
+ handle_clamping_diameter_min = fields.Float('夹持直径min')
+ handle_clamping_diameter_max = fields.Float('夹持直径max')
+ handle_jump_accuracy = fields.Float('径跳精度')
+ handle_max_speed = fields.Float('最大转速n/min')
+ handle_weight = fields.Float('重量(kg)')
+ handle_body_accuracy = fields.Float('本体精度(mm)')
+ handle_nut = fields.Float('配对螺母(mm)')
+ mrs_cutting_tool_model_handle_chuck_model_ids = fields.Many2many(
+ 'sf.cutting.tool.model',
+ relation='sf_tool_material_search_handle_chuck_rel',
+ column1='model_id_1',
+ column2='model_id_2',
+ domain="[('mrs_cutting_tool_material_id.name', '=', '夹头')]",
+ string='适用夹头型号'
+ )
+ handle_clamping_range = fields.Float('夹持范围(mm)')
+ handle_detection_accuracy = fields.Float('检测精度')
+ handle_detection_hardness = fields.Char('检测硬度')
+ handle_standard_speed = fields.Float('标准转速')
+
+ # 夹头特有字段
+ chuck_code = fields.Char('夹头编码', readonly=True)
+ # chuck_name = fields.Char('夹头名称', required=True)
+ chuck_accuracy = fields.Float('精度(mm)')
+ # 夹持直径min、夹持直径max、3D模型图
+ chuck_clamping_diameter_min = fields.Float('夹持直径min')
+ chuck_clamping_diameter_max = fields.Float('夹持直径max')
+ chuck_diameter = fields.Float('外径(mm)')
+ chuck_inner_diameter = fields.Float('内径(mm)')
+ chuck_height = fields.Float('高度(mm)')
+ chuck_nut = fields.Float('配对螺母(mm)')
+ mrs_cutting_tool_model_chuck_handle_model_ids = fields.Many2many(
+ 'sf.cutting.tool.model',
+ relation='sf_tool_material_search_chuck_handle_rel',
+ column1='model_id_1',
+ column2='model_id_2',
+ domain="[('mrs_cutting_tool_material_id.name', '=', '刀柄')]",
+ string='适用刀柄型号'
+ )
+ chuck_clamping_range = fields.Float('夹持范围(mm)')
+ chuck_feature = fields.Char('特性')
+ image = fields.Binary('图片')
+
+ # 数量、采购入库日期、采购批次、供应商、仓库名称、库区、库位、3D模型
+ number = fields.Integer('数量')
+ mrs_materials_model_id = fields.Many2one('sf.materials.model', '材料型号')
+ purchase_date = fields.Date('采购入库日期')
+ purchase_batch = fields.Char('采购批次')
+ supplier = fields.Char('供应商')
+ warehouse_name = fields.Char('仓库名称')
+ warehouse_area = fields.Char('库区')
+ warehouse_location = fields.Char('库位')
+ three_d_model = fields.Many2one('ir.attachment', '3D模型')
+
diff --git a/sf_tool_management/security/group_security.xml b/sf_tool_management/security/group_security.xml
new file mode 100644
index 00000000..b8668782
--- /dev/null
+++ b/sf_tool_management/security/group_security.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/sf_tool_management/security/ir.model.access.csv b/sf_tool_management/security/ir.model.access.csv
index 1792b613..6cb8bc16 100644
--- a/sf_tool_management/security/ir.model.access.csv
+++ b/sf_tool_management/security/ir.model.access.csv
@@ -11,6 +11,7 @@ access_sf_apply_for_tooling,sf.apply.for.tooling,model_sf_apply_for_tooling,base
access_sf_functional_tool_assembly,sf.functional.tool.assembly,model_sf_functional_tool_assembly,base.group_user,1,1,1,1
access_sf_functional_tool_assembly_order,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,base.group_user,1,1,1,1
access_sf_delivery_of_cargo_from_storage,sf.delivery.of.cargo.from.storage,model_sf_delivery_of_cargo_from_storage,base.group_user,1,1,1,1
+access_sf_tool_material_search,sf.tool.material.search,model_sf_tool_material_search,base.group_user,1,1,1,1
diff --git a/sf_tool_management/views/menu_view.xml b/sf_tool_management/views/menu_view.xml
index 1b627867..5196e7b0 100644
--- a/sf_tool_management/views/menu_view.xml
+++ b/sf_tool_management/views/menu_view.xml
@@ -1,3 +1,6 @@
+
+
+
功能刀具预警
diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml
index 328a053d..8d1e61ce 100644
--- a/sf_tool_management/views/tool_base_views.xml
+++ b/sf_tool_management/views/tool_base_views.xml
@@ -427,7 +427,7 @@
-
+
diff --git a/sf_tool_management/views/tool_material_search.xml b/sf_tool_management/views/tool_material_search.xml
new file mode 100644
index 00000000..4865f553
--- /dev/null
+++ b/sf_tool_management/views/tool_material_search.xml
@@ -0,0 +1,148 @@
+
+
+
+
+ sf.tool.material.search.tree
+ sf.tool.material.search
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sf.tool.material.search.search
+ sf.tool.material.search
+
+
+
+
+
+
+
+
+
+
+
+ 刀具物料查询
+ ir.actions.act_window
+ sf.tool.material.search
+ tree,form
+
+
+
+
diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py
index 63381cf3..4bb32b60 100644
--- a/sf_tool_management/wizard/wizard.py
+++ b/sf_tool_management/wizard/wizard.py
@@ -43,6 +43,7 @@ class ToolChangeRequirementInformation(models.TransientModel):
'remark': self.new_former,
'status': '1'
}
+ print('desc:', desc)
# 将数据更新到机台换刀申请界面
self.env['sf.machine.table.tool.changing.apply'].search(
[('CNC_machine_table', '=', desc.get('CNC_machine_table'))]).write(desc)
@@ -92,7 +93,7 @@ class ToolTransferRequestInformation(models.TransientModel):
def tool_transfer_apply(self):
"""
- 刀具转移申请信息确定按钮
+ todo 刀具转移申请信息确定按钮
:return:
"""
self.env['sf.machine.table.tool.changing.apply'].search(
@@ -245,5 +246,20 @@ class DeliveryOfCargoFromStorage(models.TransientModel):
('functional_tool_code', '=', val.functional_tool_code),
('functional_tool_name', '=', val.functional_tool_name)
]).write({
- 'assemble_status': '2'
+ 'assemble_status': '2',
+ 'receive_person': self.env.user.name,
+ 'receive_time': fields.Datetime.now()
})
+
+ tool_assembly = self.env['sf.functional.tool.assembly'].search([
+ ('functional_tool_code', '=', val.functional_tool_code),
+ ('functional_tool_name', '=', val.functional_tool_name)
+ ])
+ # 判断装刀任务来源,如果来源于CAM装刀,则修改CAM装刀的计划执行状态
+ if tool_assembly.loading_task_source == '0':
+ self.env['sf.cam.work.order.program.knife.plan'].search([
+ ('functional_tool_code', '=', val.functional_tool_code),
+ ('functional_tool_name', '=', val.functional_tool_name)
+ ]).write({
+ 'plan_execute_status': '2'
+ })
diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml
index 59f4c6dc..e99f61ed 100644
--- a/sf_tool_management/wizard/wizard_view.xml
+++ b/sf_tool_management/wizard/wizard_view.xml
@@ -281,11 +281,12 @@
+
+
+
+
-
+