diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py
index f262d13c..9fa13895 100644
--- a/sf_manufacturing/models/product_template.py
+++ b/sf_manufacturing/models/product_template.py
@@ -10,8 +10,6 @@ from OCC.Extend.DataExchange import read_step_file
from OCC.Extend.DataExchange import write_stl_file
-
-
class ResProductMo(models.Model):
_inherit = 'product.template'
@@ -290,7 +288,7 @@ class ResProductMo(models.Model):
self.suitable_machining_method_ids = [(6, 0, [])] if not \
self.cutting_tool_model_id.suitable_machining_method_ids \
else [(6, 0, self.cutting_tool_model_id.suitable_machining_method_ids.ids)]
- self.blade_tip_characteristics_id = [(6, 0,[])] if not \
+ self.blade_tip_characteristics_id = [(6, 0, [])] if not \
self.cutting_tool_model_id.blade_tip_characteristics_id \
else [(6, 0, self.cutting_tool_model_id.blade_tip_characteristics_id.ids)]
@@ -874,3 +872,11 @@ class SfMaintenanceEquipmentTool(models.Model):
alarm_value = fields.Char('报警值')
used_value = fields.Char('已使用值')
code = fields.Char('机床刀位号')
+
+ name = fields.Char('', compute='_compute_name')
+
+ @api.depends('code')
+ def _compute_name(self):
+ for record in self:
+ if record.code:
+ record.name = record.code
diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py
index 1fb775c3..14f463a0 100644
--- a/sf_tool_management/models/base.py
+++ b/sf_tool_management/models/base.py
@@ -1,6 +1,9 @@
# -*- coding: utf-8 -*-
+from datetime import timedelta
+
from odoo import fields, models, api
from odoo import SUPERUSER_ID
+from odoo.exceptions import ValidationError
# class FunctionalCuttingToolEntity(models.Model):
@@ -13,12 +16,41 @@ class FunctionalCuttingToolEntity(models.Model):
_description = '功能刀具列表'
# code = fields.Char('序列号')
+ name = fields.Char(related='functional_tool_name_id.name')
+ functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称', readonly=True)
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
- name = fields.Char(related='barcode_id.name')
- functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True)
- mrs_cutting_tool_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀具型号')
- mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型',
- group_expand='_read_group_mrs_cutting_tool_type_id', compute_sudo=True)
+ sf_cutting_tool_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀具型号')
+ sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型',
+ group_expand='_read_group_mrs_cutting_tool_type_id', compute_sudo=True)
+
+ functional_tool_diameter = fields.Integer(string='刀具直径(mm)', readonly=True)
+ knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True)
+ coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True)
+ new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
+ tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True)
+ functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True)
+ effective_length = fields.Float(string='有效长(mm)', readonly=True)
+ tool_room_num = fields.Integer(string='刀具房数量', readonly=True, )
+ line_edge_knife_library_num = fields.Integer(string='线边刀库数量', readonly=True)
+ machine_knife_library_num = fields.Integer(string='机内刀库数量', readonly=True)
+ max_lifetime_value = fields.Integer(string='最大寿命值(min)', readonly=True)
+ alarm_value = fields.Integer(string='报警值(min)', readonly=True)
+ used_value = fields.Integer(string='已使用值(min)', readonly=True)
+ functional_tool_status = fields.Selection([('正常', '正常'), ('报警', '报警'), ('已拆除', '已拆除')],
+ string='状态', store=True, default='正常')
+ current_location_id = fields.Many2one('stock.location', string='当前位置', readonly=True)
+ image = fields.Binary('图片', readonly=True)
+
+ @api.depends('current_location_id')
+ def _compute_location_num(self):
+ """
+ 计算库存位置数量
+ """
+ for obj in self:
+ if obj.current_location_id.name in ('组装后', '刀具房'):
+ obj.tool_room_num = 1
+ obj.line_edge_knife_library_num = 0
+ obj.machine_knife_library_num = 0
@api.model
def _read_group_mrs_cutting_tool_type_id(self, categories, domain, order):
@@ -28,64 +60,44 @@ class FunctionalCuttingToolEntity(models.Model):
# 整体式刀具型号
cutting_tool_integral_model_id = fields.Many2one('product.product', string='整体式刀具型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '整体式刀具')])
-
# 刀片型号
cutting_tool_blade_model_id = fields.Many2one('product.product', string='刀片型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '刀片')])
-
# 刀杆型号
cutting_tool_cutterbar_model_id = fields.Many2one('product.product', string='刀杆型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '刀杆')])
-
# 刀盘型号
cutting_tool_cutterpad_model_id = fields.Many2one('product.product', string='刀盘型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '刀盘')])
-
# 刀柄型号
cutting_tool_cutterhandle_model_id = fields.Many2one('product.product', string='刀柄型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '刀柄')])
-
# 夹头型号
cutting_tool_cutterhead_model_id = fields.Many2one('product.product', string='夹头型号', readonly=True,
domain=[('cutting_tool_material_id', '=', '夹头')])
- diameter = fields.Float('直径(mm)')
- tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
- string='刀具等级')
- machining_accuracy = fields.Float('加工精度(mm)')
- tool_length = fields.Float('装刀长(mm)')
- blade_number = fields.Integer('刃数')
- integral_blade_length = fields.Float('整体刃长(mm)')
- effective_blade_length = fields.Float('有效刃长(mm)')
- max_life = fields.Float('最大寿命值')
- is_standard = fields.Selection([('1', '是'), ('0', '否')], '是否标准刀')
- applicable_range = fields.Char('适用范围')
- image = fields.Binary('图片')
+ whether_standard_knife = fields.Boolean(string='是否标准刀', default=True, readonly=True)
+ L_D_number = fields.Float(string='L/D值(mm)', readonly=True)
+ hiding_length = fields.Float(string='避空长(mm)', readonly=True)
+ cut_time = fields.Integer(string='已切削时间(min)', readonly=True)
+ cut_length = fields.Float(string='已切削长度(mm)', readonly=True)
+ cut_number = fields.Integer(string='已切削次数', readonly=True)
- suitable_machining_method_ids = fields.Many2many('maintenance.equipment.image',
- 'rel_machining_product_template_tool_entity', '适合加工方式',
- domain=[('type', '=', '加工能力')],
- related='cutting_tool_integral_model_id.suitable_machining_method_ids')
-
- blade_tip_characteristics_id = fields.Many2many('maintenance.equipment.image',
- 'rel_blade_tip_product_template_tool_entity', '刀尖特征',
- domain=[('type', '=', '刀尖特征')],
- related='cutting_tool_integral_model_id.blade_tip_characteristics_id')
-
- handle_type_ids = fields.Many2many('maintenance.equipment.image',
- 'rel_handle_product_template_tool_entity', '柄部类型',
- domain=[('type', '=', '柄部类型')],
- related='cutting_tool_integral_model_id.handle_type_ids')
-
- cutting_direction_ids = fields.Many2many('maintenance.equipment.image',
- 'rel_cutting_product_template_tool_entity', '走刀方向',
- domain=[('type', '=', '走刀方向')],
- related='cutting_tool_integral_model_id.cutting_direction_ids')
-
- suitable_coolant_ids = fields.Many2many('maintenance.equipment.image',
- 'rel_coolant_product_template_tool_entity', '适合冷却液',
- domain=[('type', '=', '冷却液')],
- related='cutting_tool_integral_model_id.suitable_coolant_ids')
+ suitable_machining_method_ids = fields.Many2many(
+ 'maintenance.equipment.image', 'rel_machining_product_template_tool_entity', '适合加工方式',
+ domain=[('type', '=', '加工能力')], related='cutting_tool_integral_model_id.suitable_machining_method_ids')
+ blade_tip_characteristics_id = fields.Many2many(
+ 'maintenance.equipment.image', 'rel_blade_tip_product_template_tool_entity', '刀尖特征',
+ domain=[('type', '=', '刀尖特征')], related='cutting_tool_integral_model_id.blade_tip_characteristics_id')
+ handle_type_ids = fields.Many2many(
+ 'maintenance.equipment.image', 'rel_handle_product_template_tool_entity', '柄部类型',
+ domain=[('type', '=', '柄部类型')], related='cutting_tool_integral_model_id.handle_type_ids')
+ cutting_direction_ids = fields.Many2many(
+ 'maintenance.equipment.image', 'rel_cutting_product_template_tool_entity', '走刀方向',
+ domain=[('type', '=', '走刀方向')], related='cutting_tool_integral_model_id.cutting_direction_ids')
+ suitable_coolant_ids = fields.Many2many(
+ 'maintenance.equipment.image', 'rel_coolant_product_template_tool_entity', '适合冷却液',
+ domain=[('type', '=', '冷却液')], related='cutting_tool_integral_model_id.suitable_coolant_ids')
def _get_functional_tool_model_ids(self, functional_tool_model_code):
functional_tool_model_ids = []
@@ -94,110 +106,49 @@ class FunctionalCuttingToolEntity(models.Model):
functional_tool_model_ids.append(functional_tool_model.id)
return [(6, 0, functional_tool_model_ids)]
+ def open_functional_tool_warning(self):
+ action = self.env.ref('sf_tool_management.action_sf_functional_tool_warning')
+ result = action.read()[0]
+ result['domain'] = [('functional_tool_name_id', '=', self.functional_tool_name_id.id)]
+ return result
+
class FunctionalToolWarning(models.Model):
_name = 'sf.functional.tool.warning'
_description = '功能刀具预警'
- functional_cutting_tool_id = fields.Many2one('sf.functional.cutting.tool.entity', '功能刀具', readonly=True)
- functional_tool_assembly_id = fields.Many2one('sf.functional.tool.assembly', '功能刀具组装', readonly=True)
-
- # code = fields.Char('编码', readonly=True, related='functional_cutting_tool_id.code')
- barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True,
- related='functional_cutting_tool_id.barcode_id')
- name = fields.Char('名称', invisible=True, readonly=True, related='functional_cutting_tool_id.name')
- functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True,
- related='functional_cutting_tool_id.functional_tool_name_id')
- mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True,
- related='functional_cutting_tool_id.mrs_cutting_tool_type_id')
-
- # 整体式刀具型号
- cutting_tool_integral_model_id = fields.Many2one('product.product', string='整体式刀具型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '整体式刀具')],
- related='functional_cutting_tool_id.cutting_tool_integral_model_id')
-
- # 刀片型号
- cutting_tool_blade_model_id = fields.Many2one('product.product', string='刀片型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀片')],
- related='functional_cutting_tool_id.cutting_tool_blade_model_id')
-
- # 刀杆型号
- cutting_tool_cutterbar_model_id = fields.Many2one('product.product', string='刀杆型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀杆')],
- related='functional_cutting_tool_id.cutting_tool_cutterbar_model_id')
-
- # 刀盘型号
- cutting_tool_cutterpad_model_id = fields.Many2one('product.product', string='刀盘型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀盘')],
- related='functional_cutting_tool_id.cutting_tool_cutterpad_model_id')
-
- # 刀柄型号
- cutting_tool_cutterhandle_model_id = fields.Many2one('product.product', string='刀柄型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀柄')],
- related='functional_cutting_tool_id.cutting_tool_cutterhandle_model_id')
-
- # 夹头型号
- cutting_tool_cutterhead_model_id = fields.Many2one('product.product', string='夹头型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '夹头')],
- related='functional_cutting_tool_id.cutting_tool_cutterhead_model_id')
-
- diameter = fields.Float('直径(mm)', readonly=True, related='functional_cutting_tool_id.diameter')
- tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
- string='刀具等级', readonly=True, compute='_compute_functional_cutting_tool_id')
- machining_accuracy = fields.Float('加工精度(mm)', readonly=True,
- related='functional_cutting_tool_id.machining_accuracy')
-
- # tool_length = fields.Float('装刀长', readonly=True, related='functional_cutting_tool_id.tool_length')
-
- tool_length = fields.Float('装刀长(mm)', readonly=True, related='functional_cutting_tool_id.tool_length')
- blade_number = fields.Integer('刃数', readonly=True, related='functional_cutting_tool_id.blade_number')
- integral_blade_length = fields.Float('整体刃长(mm)', readonly=True,
- related='functional_cutting_tool_id.integral_blade_length')
- effective_blade_length = fields.Float('有效刃长(mm)', readonly=True,
- related='functional_cutting_tool_id.effective_blade_length')
- max_life = fields.Float('最大寿命值', readonly=True, related='functional_cutting_tool_id.max_life')
- is_standard = fields.Selection([('1', '是'), ('0', '否')], '是否标准刀', readonly=True,
- compute='_compute_functional_cutting_tool_id')
- applicable_range = fields.Char('适用范围', readonly=True, related='functional_cutting_tool_id.applicable_range')
-
- image = fields.Binary('图片', readonly=True, related='functional_cutting_tool_id.image')
- install_tool_time = fields.Datetime("装刀时间", readonly=True,
- related='functional_tool_assembly_id.tool_loading_time')
-
- @api.depends('functional_cutting_tool_id')
- def _compute_functional_cutting_tool_id(self):
- if self.functional_cutting_tool_id:
- self.tool_grade = self.functional_cutting_tool_id.tool_grade
- self.is_standard = self.functional_cutting_tool_id.is_standard
-
- # 功能刀具预警 特有字段
- outbound_time = fields.Datetime('出库时间', readonly=True, related='functional_tool_assembly_id.receive_time')
- on_board_time = fields.Datetime('上机时间', readonly=False)
- machine_table_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=True,
- group_expand='_read_group_machine_table_name_ids')
+ name = fields.Char('名称', invisible=True, readonly=True, related='functional_tool_name_id.name')
+ # 机床信息
+ production_line_id = fields.Many2one('sf.production.line', string='生产线',
+ group_expand='_read_group_machine_table_name_ids')
+ maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='CNC机床')
+ machine_tool_code = fields.Char(string='机台号')
+ machine_table_type_id = fields.Many2one('maintenance.equipment.category', string='机床类型')
+ cutter_spacing_code_id = fields.Many2one('maintenance.equipment.tool', string='刀位号',
+ domain="[('equipment_id', '=', maintenance_equipment_id)]")
+ # 功能刀具信息
+ functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称')
+ barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', related='functional_tool_name_id.barcode_id')
+ mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
+ diameter = fields.Integer(string='刀具直径(mm)')
+ knife_tip_r_angle = fields.Float(string='刀尖R角(mm)')
+ # 其他信息
+ install_tool_time = fields.Datetime("刀具组装时间")
+ on_board_time = fields.Datetime('上机装刀时间')
+ max_lifetime_value = fields.Integer(string='最大寿命值(min)')
+ alarm_value = fields.Integer(string='报警值(min)')
+ used_value = fields.Integer(string='已使用值(min)')
+ functional_tool_status = fields.Selection([('正常', '正常'), ('报警', '报警'), ('已拆除', '已拆除')], string='状态')
+ alarm_time = fields.Char('报警时间')
+ dispose_user = fields.Char('处理人')
+ dispose_time = fields.Char('处理时间')
+ dispose_func = fields.Char('处理方法/措施', readonly=False)
@api.model
def _read_group_machine_table_name_ids(self, categories, domain, order):
machine_table_name_ids = categories._search([], order=order, access_rights_uid=SUPERUSER_ID)
return categories.browse(machine_table_name_ids)
- machine_tool_code = fields.Char('机台号', readonly=True, related='functional_tool_assembly_id.machine_tool_code')
- cutting_tool_code = fields.Char('刀位号', readonly=True, related='functional_tool_assembly_id.cutter_spacing_code')
- # idle_time = fields.Char('闲置时长', readonly=False)
- idle_time = fields.Char('闲置时长(h)', readonly=False)
- alarm_value = fields.Char('报警值', readonly=False)
- used_value = fields.Char('已使用值', readonly=False)
- alarm_type = fields.Char('报警类型', readonly=False)
- dispose_user = fields.Char('处理人', readonly=False)
- alarm_time = fields.Char('报警时间', readonly=False)
- dispose_time = fields.Char('处理时间', readonly=False)
- dispose_func = fields.Char('处理方法/措施', readonly=False)
- remark = fields.Char('备注', readonly=False)
-
- @api.onchange('functional_cutting_tool_id')
- def onchange_functional_cutting_tool_id(self):
- print(self.functional_cutting_tool_id.name)
-
class RealTimeDistributionOfFunctionalTools(models.Model):
_name = 'sf.real.time.distribution.of.functional.tools'
@@ -221,60 +172,61 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
record.mrs_cutting_tool_type_id = record.functional_cutting_tool_id.mrs_cutting_tool_type_id.id
# code = fields.Char('编码', readonly=True, related='functional_cutting_tool_id.code')
- barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True,
- related='functional_cutting_tool_id.barcode_id')
- name = fields.Char('名称', invisible=True, readonly=True, related='functional_cutting_tool_id.name')
- functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True,
- related='functional_cutting_tool_id.functional_tool_name_id')
+ barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
+ name = fields.Char('名称', invisible=True, readonly=True)
+ functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True)
# mrs_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True,
# related='functional_cutting_tool_id.mrs_cutting_tool_type_id')
# 整体式刀具型号
- cutting_tool_integral_model_id = fields.Many2one('product.product', string='整体式刀具型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '整体式刀具')],
- related='functional_cutting_tool_id.cutting_tool_integral_model_id')
+ cutting_tool_integral_model_id = fields.Many2one(
+ 'product.product', string='整体式刀具型号', readonly=True,
+ domain=[('cutting_tool_material_id', '=', '整体式刀具')],
+ related='functional_cutting_tool_id.cutting_tool_integral_model_id')
# 刀片型号
- cutting_tool_blade_model_id = fields.Many2one('product.product', string='刀片型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀片')],
- related='functional_cutting_tool_id.cutting_tool_blade_model_id')
+ cutting_tool_blade_model_id = fields.Many2one(
+ 'product.product', string='刀片型号', readonly=True,
+ domain=[('cutting_tool_material_id', '=', '刀片')],
+ related='functional_cutting_tool_id.cutting_tool_blade_model_id')
# 刀杆型号
- cutting_tool_cutterbar_model_id = fields.Many2one('product.product', string='刀杆型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀杆')],
- related='functional_cutting_tool_id.cutting_tool_cutterbar_model_id')
+ cutting_tool_cutterbar_model_id = fields.Many2one(
+ 'product.product', string='刀杆型号', readonly=True,
+ domain=[('cutting_tool_material_id', '=', '刀杆')],
+ related='functional_cutting_tool_id.cutting_tool_cutterbar_model_id')
# 刀盘型号
- cutting_tool_cutterpad_model_id = fields.Many2one('product.product', string='刀盘型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀盘')],
- related='functional_cutting_tool_id.cutting_tool_cutterpad_model_id')
+ cutting_tool_cutterpad_model_id = fields.Many2one(
+ 'product.product', string='刀盘型号', readonly=True,
+ domain=[('cutting_tool_material_id', '=', '刀盘')],
+ related='functional_cutting_tool_id.cutting_tool_cutterpad_model_id')
# 刀柄型号
- cutting_tool_cutterhandle_model_id = fields.Many2one('product.product', string='刀柄型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀柄')],
- related='functional_cutting_tool_id.cutting_tool_cutterhandle_model_id')
+ cutting_tool_cutterhandle_model_id = fields.Many2one(
+ 'product.product', string='刀柄型号', readonly=True,
+ domain=[('cutting_tool_material_id', '=', '刀柄')],
+ related='functional_cutting_tool_id.cutting_tool_cutterhandle_model_id')
# 夹头型号
- cutting_tool_cutterhead_model_id = fields.Many2one('product.product', string='夹头型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '夹头')],
- related='functional_cutting_tool_id.cutting_tool_cutterhead_model_id')
+ cutting_tool_cutterhead_model_id = fields.Many2one(
+ 'product.product', string='夹头型号', readonly=True,
+ domain=[('cutting_tool_material_id', '=', '夹头')],
+ related='functional_cutting_tool_id.cutting_tool_cutterhead_model_id')
- diameter = fields.Float('直径(mm)', readonly=True, related='functional_cutting_tool_id.diameter')
+ diameter = fields.Float('直径(mm)', readonly=True)
tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
- string='刀具等级', readonly=True, compute='_compute_functional_cutting_tool_id')
- machining_accuracy = fields.Float('加工精度(mm)', readonly=True,
- related='functional_cutting_tool_id.machining_accuracy')
- tool_length = fields.Float('装刀长(mm)', readonly=True, related='functional_cutting_tool_id.tool_length')
- blade_number = fields.Integer('刃数', readonly=True, related='functional_cutting_tool_id.blade_number')
- integral_blade_length = fields.Float('整体刃长(mm)', readonly=True,
- related='functional_cutting_tool_id.integral_blade_length')
- effective_blade_length = fields.Float('有效刃长(mm)', readonly=True,
- related='functional_cutting_tool_id.effective_blade_length')
- max_life = fields.Float('最大寿命值', readonly=True, related='functional_cutting_tool_id.max_life')
+ string='刀具等级', readonly=True)
+ machining_accuracy = fields.Float('加工精度(mm)', readonly=True)
+ tool_length = fields.Float('装刀长(mm)', readonly=True)
+ blade_number = fields.Integer('刃数', readonly=True)
+ integral_blade_length = fields.Float('整体刃长(mm)', readonly=True)
+ effective_blade_length = fields.Float('有效刃长(mm)', readonly=True)
+ max_life = fields.Float('最大寿命值', readonly=True)
is_standard = fields.Selection([('1', '是'), ('0', '否')], '是否标准刀', readonly=True,
compute='_compute_functional_cutting_tool_id')
- applicable_range = fields.Char('适用范围', readonly=True, related='functional_cutting_tool_id.applicable_range')
- image = fields.Binary('图片', readonly=True, related='functional_cutting_tool_id.image')
+ applicable_range = fields.Char('适用范围', readonly=True)
+ image = fields.Binary('图片', readonly=True)
@api.depends('functional_cutting_tool_id')
def _compute_functional_cutting_tool_id(self):
@@ -304,7 +256,8 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
def _compute_return_total(self):
for record in self:
if record:
- self.return_total = record.return_reuse_num_re + record.return_reuse_num_co + record.return_processing_num
+ self.return_total = (record.return_reuse_num_re + record.return_reuse_num_co +
+ record.return_processing_num)
@api.depends('tool_stock_total', 'return_total')
def _compute_total(self):
@@ -335,58 +288,47 @@ class InboundAndOutboundRecordsOfFunctionalTools(models.Model):
record.mrs_cutting_tool_type_id = record.functional_cutting_tool_id.mrs_cutting_tool_type_id.id
# code = fields.Char('编码', readonly=True, related='functional_cutting_tool_id.code')
- barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True,
- related='functional_cutting_tool_id.barcode_id')
- name = fields.Char('名称', invisible=True, readonly=True, related='functional_cutting_tool_id.name')
- functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True,
- related='functional_cutting_tool_id.functional_tool_name_id')
+ barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
+ name = fields.Char('名称', invisible=True, readonly=True)
+ functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True)
# 整体式刀具型号
cutting_tool_integral_model_id = fields.Many2one('product.product', string='整体式刀具型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '整体式刀具')],
- related='functional_cutting_tool_id.cutting_tool_integral_model_id')
+ domain=[('cutting_tool_material_id', '=', '整体式刀具')])
# 刀片型号
cutting_tool_blade_model_id = fields.Many2one('product.product', string='刀片型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀片')],
- related='functional_cutting_tool_id.cutting_tool_blade_model_id')
+ domain=[('cutting_tool_material_id', '=', '刀片')])
# 刀杆型号
cutting_tool_cutterbar_model_id = fields.Many2one('product.product', string='刀杆型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀杆')],
- related='functional_cutting_tool_id.cutting_tool_cutterbar_model_id')
+ domain=[('cutting_tool_material_id', '=', '刀杆')])
# 刀盘型号
cutting_tool_cutterpad_model_id = fields.Many2one('product.product', string='刀盘型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀盘')],
- related='functional_cutting_tool_id.cutting_tool_cutterpad_model_id')
+ domain=[('cutting_tool_material_id', '=', '刀盘')])
# 刀柄型号
cutting_tool_cutterhandle_model_id = fields.Many2one('product.product', string='刀柄型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '刀柄')],
- related='functional_cutting_tool_id.cutting_tool_cutterhandle_model_id')
+ domain=[('cutting_tool_material_id', '=', '刀柄')])
# 夹头型号
cutting_tool_cutterhead_model_id = fields.Many2one('product.product', string='夹头型号', readonly=True,
- domain=[('cutting_tool_material_id', '=', '夹头')],
- related='functional_cutting_tool_id.cutting_tool_cutterhead_model_id')
+ domain=[('cutting_tool_material_id', '=', '夹头')])
- diameter = fields.Float('直径(mm)', readonly=True, related='functional_cutting_tool_id.diameter')
+ diameter = fields.Float('直径(mm)', readonly=True)
tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
string='刀具等级', readonly=True, compute='_compute_functional_cutting_tool_id')
- machining_accuracy = fields.Float('加工精度(mm)', readonly=True,
- related='functional_cutting_tool_id.machining_accuracy')
- tool_length = fields.Float('装刀长(mm)', readonly=True, related='functional_cutting_tool_id.tool_length')
- blade_number = fields.Integer('刃数', readonly=True, related='functional_cutting_tool_id.blade_number')
- integral_blade_length = fields.Float('整体刃长(mm)', readonly=True,
- related='functional_cutting_tool_id.integral_blade_length')
- effective_blade_length = fields.Float('有效刃长(mm)', readonly=True,
- related='functional_cutting_tool_id.effective_blade_length')
- max_life = fields.Float('最大寿命值', readonly=True, related='functional_cutting_tool_id.max_life')
+ machining_accuracy = fields.Float('加工精度(mm)', readonly=True)
+ tool_length = fields.Float('装刀长(mm)', readonly=True)
+ blade_number = fields.Integer('刃数', readonly=True)
+ integral_blade_length = fields.Float('整体刃长(mm)', readonly=True)
+ effective_blade_length = fields.Float('有效刃长(mm)', readonly=True)
+ max_life = fields.Float('最大寿命值', readonly=True)
is_standard = fields.Selection([('1', '是'), ('0', '否')], '是否标准刀', readonly=True,
compute='_compute_functional_cutting_tool_id')
- applicable_range = fields.Char('适用范围', readonly=True, related='functional_cutting_tool_id.applicable_range')
- image = fields.Binary('图片', readonly=True, related='functional_cutting_tool_id.image')
+ applicable_range = fields.Char('适用范围', readonly=True)
+ image = fields.Binary('图片', readonly=True)
@api.depends('functional_cutting_tool_id')
def _compute_functional_cutting_tool_id(self):
@@ -436,110 +378,135 @@ class InboundAndOutboundRecords(models.Model):
class MachineTableToolChangingApply(models.Model):
_name = 'sf.machine.table.tool.changing.apply'
_description = '机床换刀申请'
+ _order = 'cutter_spacing_code_id'
- name = fields.Many2one('maintenance.equipment', string='CNC机床', required=True, readonly=False,
- group_expand='_read_group_names')
+ name = fields.Char('名称', related='maintenance_equipment_id.name', store=True)
+ maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='CNC机床', required=True, readonly=False,
+ domain=[('category_id.equipment_type', '=', '机床')])
+ production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=True,
+ group_expand='_read_group_names')
machine_table_type_id = fields.Many2one('maintenance.equipment.category', string='机床类型', readonly=True,
compute='_compute_machine_table_type_id')
machine_tool_code = fields.Char(string='机台号', store=True, invisible=True, readonly=True)
- cutter_spacing_code = fields.Char(string='刀位号', readonly=False, required=True)
-
- @api.depends('name')
- def _compute_machine_table_type_id(self):
- for record in self:
- if record:
- record.machine_table_type_id = record.name.category_id.id
- record.machine_tool_code = record.name.code
- else:
- record.machine_table_type_id = None
- record.machine_tool_code = None
-
+ cutter_spacing_code_id = fields.Many2one('maintenance.equipment.tool', string='刀位号', readonly=False,
+ required=True, domain="[('equipment_id', '=', maintenance_equipment_id)]")
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号',
domain=[('product_id.name', '=', '功能刀具')])
- functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称',
- domain=[('name', '=', '功能刀具')])
+ functional_tool_name = fields.Char(string='功能刀具名称')
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
+ functional_tool_name_id = fields.Many2one('product.product', string='功能刀具',
+ domain=[('name', '=', '功能刀具')])
+ tool_position_interface_type = fields.Selection(
+ [('BT刀柄式', 'BT刀柄式'), ('SK刀柄式', 'SK刀柄式'), ('HSK刀柄式', 'HSK刀柄式'),
+ ('CAT刀柄式', 'CAT刀柄式'), ('ISO刀盘式', 'ISO刀盘式'), ('DIN刀盘式', 'DIN刀盘式'),
+ ('直装固定式', '直装固定式')], string='刀位接口型号', required=True)
+ diameter = fields.Integer(string='刀具直径(mm)', )
+ knife_tip_r_angle = fields.Float(string='刀尖R角(mm)')
+ max_lifetime_value = fields.Integer(string='最大寿命值(min)')
+ alarm_value = fields.Integer(string='报警值(min)')
+ used_value = fields.Integer(string='已使用值(min)')
+ whether_standard_knife = fields.Boolean(string='是否标准刀', default=True)
+ extension_length = fields.Float(string='伸出长(mm)')
+ effective_length = fields.Float(string='有效长(mm)')
- diameter = fields.Char(string='直径(mm)', readonly=False)
- coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=False)
- hilt_name = fields.Char(string='刀柄名称', readonly=False)
- hilt_code = fields.Char(string='刀柄编号', readonly=False)
- max_lifetime_value = fields.Char(string='最大寿命值', readonly=False)
- alarm_value = fields.Char(string='报警值', readonly=False)
- used_value = fields.Char(string='已使用值', readonly=False)
- functional_tool_status = fields.Selection([('正常', '正常'), ('异常', '异常')], string='功能刀具状态',
- default='正常', readonly=False)
+ functional_tool_status = fields.Selection([('正常', '正常'), ('报警', '报警')], string='功能刀具状态', store=True,
+ default='正常', compute='_compute_functional_tool_status')
- # replacement_tool_code = fields.Char(string='待换功能刀具编码', readonly=True)
assembly_order_code = fields.Char(string='组装单编码', readonly=True)
- replacement_tool_name_id = fields.Many2one('product.product', string='待换功能刀具名称', readonly=True)
- replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型',
- readonly=True)
- replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')],
- string='粗/中/精(待换)', readonly=True)
- new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
applicant = fields.Char(string='申请人', readonly=True)
- used_tool_time = fields.Datetime(string='用刀时间', readonly=True)
reason_for_applying = fields.Char(string='申请原因', readonly=True)
remark = fields.Char(string='备注说明', readonly=False)
- status = fields.Selection([('0', '未操作'), ('1', '已换刀申请'), ('2', '已转移'), ('3', '已组装')], string='操作状态', default='0')
+ status = fields.Selection([('0', '未操作'), ('1', '已换刀申请'), ('2', '已转移'), ('3', '已组装')],
+ string='操作状态', default='0')
- sf_functional_tool_assembly_id = fields.Many2one('sf.functional.tool.assembly', '功能刀具组装', readonly=True)
+ sf_functional_tool_assembly_id = fields.Many2one('sf.functional.tool.assembly', '功能刀具组装单', readonly=True)
+
+ @api.depends('alarm_value', 'used_value')
+ def _compute_functional_tool_status(self):
+ for record in self:
+ if record.alarm_value <= record.used_value:
+ record.functional_tool_status = '报警'
+ else:
+ record.functional_tool_status = '正常'
+
+ @api.depends('maintenance_equipment_id')
+ def _compute_machine_table_type_id(self):
+ for record in self:
+ if record:
+ record.production_line_id = record.maintenance_equipment_id.production_line_id.id
+ record.machine_table_type_id = record.maintenance_equipment_id.category_id.id
+ record.machine_tool_code = record.maintenance_equipment_id.code
+ else:
+ record.production_line_id = None
+ record.machine_table_type_id = None
+ record.machine_tool_code = None
+
+ @api.constrains("cutter_spacing_code_id")
+ def _check_cutter_spacing_code_id(self):
+ for obj in self:
+ records = self.env['sf.machine.table.tool.changing.apply'].search([
+ ('maintenance_equipment_id', '=', obj.maintenance_equipment_id.id),
+ ('cutter_spacing_code_id', '=', obj.cutter_spacing_code_id.id)])
+ if len(records) > 1:
+ raise ValidationError('该刀位号已存在,请重新选择!!!')
@api.model
def _read_group_names(self, categories, domain, order):
names = categories._search([], order=order, access_rights_uid=SUPERUSER_ID)
return categories.browse(names)
- @api.onchange('functional_tool_status')
+ @api.constrains('functional_tool_status')
def automation_apply_for_tool_change(self):
"""
自动申请换刀
:return:
"""
# 更新数据到机台换刀申请界面
- # todo 自动换刀申请条件需补充完善
- if self.functional_tool_status == '异常':
- self.env['sf.machine.table.tool.changing.apply'].search([
- ('name', '=', self.name.id)]).write({
- 'replacement_tool_name_id': self.functional_tool_name_id.id,
- 'replacement_tool_type_id': self.functional_tool_type_id.id,
- 'replacement_tool_coarse_middle_thin': self.coarse_middle_thin,
- 'new_former': '0',
- 'applicant': '自动申请',
- 'used_tool_time': fields.Datetime.now(),
- 'reason_for_applying': '功能刀具状态异常',
- 'remark': None,
- 'status': '1'
- })
+ if self.functional_tool_status == '报警' and self.sf_functional_tool_assembly_id == False:
+ machine_table_tool_changing_apply = self.env['sf.machine.table.tool.changing.apply'].search(
+ [('maintenance_equipment_id', '=', self.maintenance_equipment_id.id),
+ ('cutter_spacing_code_id', '=', self.cutter_spacing_code_id.id)
+ ])
# 新建组装任务
- self.env['sf.functional.tool.assembly'].create({
- 'name': self.functional_tool_name_id,
+ sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].create({
+ 'functional_tool_name': self.functional_tool_name,
'functional_tool_type_id': self.functional_tool_type_id.id,
'functional_tool_diameter': self.diameter,
+ 'knife_tip_r_angle': self.knife_tip_r_angle,
+ 'coarse_middle_thin': '3',
+ 'new_former': '0',
+ 'functional_tool_length': self.extension_length,
+ 'effective_length': self.effective_length,
'loading_task_source': '1',
- '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,
+ 'use_tool_time': fields.Datetime.now() + timedelta(hours=4),
+ 'production_line_name_id': self.production_line_id.id,
+ 'machine_tool_name_id': self.maintenance_equipment_id.id,
+ 'applicant': self.applicant,
+ 'apply_time': fields.Datetime.now(),
+ 'cutter_spacing_code_id': self.cutter_spacing_code_id.id,
+ 'whether_standard_knife': self.whether_standard_knife,
+ 'reason_for_applying': '机台报警自动换刀',
+ 'sf_machine_table_tool_changing_apply_id': self.id
})
- def new_assembly_task(self, vals):
- """
- 新建组装任务
- :param vals:
- :return:
- """
- # 增加设置直径的值
- tool_changing_apply = self.env['sf.machine.table.tool.changing.apply'].search(
- [('name', '=', vals['name'])])
- vals['functional_tool_diameter'] = tool_changing_apply.diameter
+ machine_table_tool_changing_apply.write(
+ {'status': '1',
+ 'sf_functional_tool_assembly_id': sf_functional_tool_assembly})
- self.env['sf.functional.tool.assembly'].create(vals)
+ # def new_assembly_task(self, vals):
+ # """
+ # 新建组装任务
+ # :param vals:
+ # :return:
+ # """
+ # # 增加设置直径的值
+ # tool_changing_apply = self.env['sf.machine.table.tool.changing.apply'].search(
+ # [('name', '=', vals['name'])])
+ # vals['functional_tool_diameter'] = tool_changing_apply.diameter
+ #
+ # self.env['sf.functional.tool.assembly'].create(vals)
def revocation_1(self):
"""
@@ -548,22 +515,16 @@ class MachineTableToolChangingApply(models.Model):
"""
# 撤回功能刀具组装创建的任务
self.env['sf.functional.tool.assembly'].search(
- [('assembly_order_code', '=', self.assembly_order_code),
+ [('id', '=', self.sf_functional_tool_assembly_id.id),
('loading_task_source', '=', '1')]).unlink()
# 撤回数据更新
- self.env['sf.machine.table.tool.changing.apply'].search([('name', '=', self.name.id)]).write({
- 'replacement_tool_name_id': None,
- 'replacement_tool_type_id': None,
- 'replacement_tool_coarse_middle_thin': None,
- 'new_former': None,
- 'applicant': None,
- 'used_tool_time': None,
- 'reason_for_applying': None,
- 'remark': None,
- 'status': '0',
- 'sf_functional_tool_assembly_id': None,
- })
+ self.env['sf.machine.table.tool.changing.apply'].search(
+ [('maintenance_equipment_id', '=', self.maintenance_equipment_id.id),
+ ('cutter_spacing_code_id', '=', self.cutter_spacing_code_id.id)]).write(
+ {'status': '0',
+ 'sf_functional_tool_assembly_id': None
+ })
def revocation_2(self):
"""
@@ -571,9 +532,7 @@ class MachineTableToolChangingApply(models.Model):
:return:
"""
self.env['sf.machine.table.tool.changing.apply'].search(
- [('name', '=', self.name.id)]).write({
- 'status': '0'
- })
+ [('name', '=', self.name.id)]).write({'status': '0'})
class CAMWorkOrderProgramKnifePlan(models.Model):
@@ -643,8 +602,8 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
# 将计划执行状态改为执行中
self.env['sf.cam.work.order.program.knife.plan'].search(
[('barcode_id', '=', self.barcode_id.id)]).write({
- 'plan_execute_status': '1',
- 'applicant': self.env.user.name})
+ 'plan_execute_status': '1',
+ 'applicant': self.env.user.name})
def revocation(self):
"""
@@ -658,10 +617,10 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
# 将计划执行状态改为待执行,同时清除申请人、功能刀具组装字段数据
self.env['sf.cam.work.order.program.knife.plan'].search(
[('barcode_id', '=', self.barcode_id.id)]).write({
- 'plan_execute_status': '0',
- 'applicant': None,
- 'sf_functional_tool_assembly_id': None,
- })
+ 'plan_execute_status': '0',
+ 'applicant': None,
+ 'sf_functional_tool_assembly_id': None,
+ })
class FunctionalToolAssembly(models.Model):
@@ -669,12 +628,41 @@ class FunctionalToolAssembly(models.Model):
_description = '功能刀具组装单'
_order = 'use_tool_time asc'
+ @api.depends('functional_tool_name')
+ def _compute_name(self):
+ for obj in self:
+ obj.name = obj.after_assembly_functional_tool_name
+
+ name = fields.Char(string='名称', readonly=True, compute='_compute_name')
assembly_order_code = fields.Char(string='编码', readonly=True)
- barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
- functional_tool_name_id = fields.Many2one('product.product', string='功能刀具名称', readonly=True)
- name = fields.Char(string='名称', readonly=True)
+
+ functional_tool_name_id = fields.Many2one('product.product', string='功能刀具', readonly=True)
+ functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=True,
group_expand='_read_group_functional_tool_type_ids')
+ functional_tool_diameter = fields.Integer(string='功能刀具直径(mm)', readonly=True)
+ knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=True)
+ coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True)
+ new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
+ tool_loading_length = fields.Float(string='装刀长(mm)', readonly=True)
+ functional_tool_length = fields.Float(string='伸出长(mm)', readonly=True)
+ effective_length = fields.Float(string='有效长(mm)', readonly=True)
+ loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')],
+ string='装刀任务来源', readonly=True)
+ use_tool_time = fields.Datetime(string='用刀时间', readonly=True)
+ production_line_name_id = fields.Many2one('sf.production.line', string='申请产线', readonly=True)
+ machine_tool_name_id = fields.Many2one('maintenance.equipment', string='申请机台', readonly=True)
+ machine_tool_code = fields.Char(string='机台号', readonly=True)
+ applicant = fields.Char(string='申请人', readonly=True)
+ apply_time = fields.Datetime(string='申请时间', default=fields.Datetime.now(), readonly=True)
+ assemble_status = fields.Selection([('0', '待组装'), ('1', '已组装')], string='组装状态', default='0',
+ readonly=True)
+ cutter_spacing_code_id = fields.Many2one('maintenance.equipment.tool', string='刀位号', readonly=True)
+ whether_standard_knife = fields.Boolean(string='是否标准刀', default=True, readonly=True)
+ reason_for_applying = fields.Char(string='申请原因', readonly=True)
+ max_lifetime_value = fields.Integer(string='最大寿命值(min)', readonly=True)
+ alarm_value = fields.Integer(string='报警值(min)', readonly=True)
+ used_value = fields.Integer(string='已使用值(min)', readonly=True)
@api.model
def _read_group_functional_tool_type_ids(self, categories, domain, order):
@@ -682,43 +670,40 @@ class FunctionalToolAssembly(models.Model):
functional_tool_type_ids = categories._search([], order=order, access_rights_uid=SUPERUSER_ID)
return categories.browse(functional_tool_type_ids)
- functional_tool_diameter = fields.Char(string='功能刀具直径(mm)', readonly=True)
- functional_tool_length = fields.Char(string='功能刀具伸出长(mm)', readonly=True)
- functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
-
+ # 刀具物料信息
# 整体式刀具型号
integral_code_id = fields.Many2one('stock.lot', string='整体式刀具序列号', readonly=True)
- cutting_tool_integral_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='整体式刀具型号', readonly=True)
+ cutting_tool_integral_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='整体式刀具型号',
+ readonly=True)
integral_name = fields.Char('整体式刀具名称', readonly=True, compute='_compute_auto_fill')
sf_tool_brand_id_1 = fields.Many2one('sf.machine.brand', string='整体式刀具品牌', readonly=True)
-
# 刀片型号
blade_code_id = fields.Many2one('stock.lot', '刀片序列号', readonly=True)
cutting_tool_blade_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀片型号', readonly=True)
blade_name = fields.Char('刀片名称', readonly=True, compute='_compute_auto_fill')
sf_tool_brand_id_2 = fields.Many2one('sf.machine.brand', '刀片品牌', readonly=True)
-
# 刀杆型号
bar_code_id = fields.Many2one('stock.lot', '刀杆序列号', readonly=True)
- cutting_tool_cutterbar_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀杆型号', readonly=True)
+ cutting_tool_cutterbar_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀杆型号',
+ readonly=True)
bar_name = fields.Char('刀杆名称', readonly=True, compute='_compute_auto_fill')
sf_tool_brand_id_3 = fields.Many2one('sf.machine.brand', '刀杆品牌', readonly=True)
-
# 刀盘型号
pad_code_id = fields.Many2one('stock.lot', '刀盘序列号', readonly=True)
- cutting_tool_cutterpad_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀盘型号', readonly=True)
+ cutting_tool_cutterpad_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀盘型号',
+ readonly=True)
pad_name = fields.Char('刀盘名称', readonly=True, compute='_compute_auto_fill')
sf_tool_brand_id_4 = fields.Many2one('sf.machine.brand', '刀盘品牌', readonly=True)
-
# 刀柄型号
handle_code_id = fields.Many2one('stock.lot', '刀柄序列号', readonly=True)
- cutting_tool_cutterhandle_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀柄型号', readonly=True)
+ cutting_tool_cutterhandle_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀柄型号',
+ readonly=True)
handle_name = fields.Char('刀柄名称', readonly=True, compute='_compute_auto_fill')
sf_tool_brand_id_5 = fields.Many2one('sf.machine.brand', '刀柄品牌', readonly=True)
-
# 夹头型号
chuck_code_id = fields.Many2one('stock.lot', '夹头序列号', readonly=True)
- cutting_tool_cutterhead_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='夹头型号', readonly=True)
+ cutting_tool_cutterhead_model_id = fields.Many2one('sf.cutting_tool.standard.library', string='夹头型号',
+ readonly=True)
chuck_name = fields.Char('夹头名称', readonly=True, compute='_compute_auto_fill')
sf_tool_brand_id_6 = fields.Many2one('sf.machine.brand', '夹头品牌', readonly=True)
@@ -775,35 +760,38 @@ class FunctionalToolAssembly(models.Model):
record.chuck_name = None
record.sf_tool_brand_id_6 = None
- coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True)
- tool_loading_length = fields.Char(string='装刀长(mm)', readonly=True)
- new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧', readonly=True)
- reference_length = fields.Char(string='参考伸出长(mm)', readonly=True)
- cut_time = fields.Char(string='已切削时间', readonly=True)
- cut_length = fields.Char(string='已切削长度(mm)', readonly=True)
- cut_number = fields.Char(string='已切削次数', readonly=True)
+ # 组装功能刀具参数信息
+ barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', readonly=True)
+ after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', readonly=True)
+ after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model',
+ string='组装后功能刀具类型', readonly=True)
+ after_assembly_functional_tool_diameter = fields.Integer(string='组装后功能刀具直径(mm)', readonly=True)
+ after_assembly_knife_tip_r_angle = fields.Float(string='组装后刀尖R角(mm)', readonly=True)
+ after_assembly_new_former = fields.Selection([('0', '新'), ('1', '旧')], string='组装后新/旧', readonly=True)
+ cut_time = fields.Integer(string='已切削时间(min)', readonly=True)
+ cut_length = fields.Float(string='已切削长度(mm)', readonly=True)
+ cut_number = fields.Integer(string='已切削次数', readonly=True)
- loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀'), ('2', '按库存组装')],
- string='装刀任务来源', readonly=True)
- applicant = fields.Char(string='申请人', readonly=True)
- reason_for_applying = fields.Char(string='申请原因', readonly=True)
- apply_time = fields.Datetime(string='申请时间', default=fields.Datetime.now(), readonly=True)
- assemble_status = fields.Selection([('0', '待组装'), ('1', '已组装')], string='组装状态',
- default='0', readonly=True)
- use_tool_time = fields.Datetime(string='用刀时间', readonly=True)
- production_line_name_id = fields.Many2one('sf.production.line', string='产线名称', readonly=False)
- machine_tool_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=True)
- machine_tool_code = fields.Char(string='机台号', readonly=True)
- cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
+ after_assembly_whether_standard_knife = fields.Boolean(string='组装后是否标准刀', default=True, readonly=True)
+ after_assembly_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')],
+ string='组装后粗/中/精', readonly=True)
+ after_assembly_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)', readonly=True)
+ after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)', readonly=True)
+ after_assembly_used_value = fields.Integer(string='组装后已使用值(min)', readonly=True)
+ after_assembly_tool_loading_length = fields.Float(string='组装后装刀长(mm)', readonly=True)
+ after_assembly_functional_tool_length = fields.Float(string='组装后伸出长(mm)', readonly=True)
+ after_assembly_effective_length = fields.Float(string='组装后有效长(mm)', readonly=True)
+ L_D_number = fields.Float(string='L/D值(mm)', readonly=True)
+ hiding_length = fields.Float(string='避空长(mm)', readonly=True)
+ functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
tool_loading_person = fields.Char(string='装刀人', readonly=True)
tool_loading_time = fields.Datetime(string='装刀时间', readonly=True)
- receive_person = fields.Char(string='领用人', readonly=True)
- receive_time = fields.Datetime(string='领用出库时间', readonly=True)
remark = fields.Char(string='备注说明', readonly=True)
check_box_1 = fields.Boolean(string='复选框', default=False, readonly=False)
- sf_machine_table_tool_changing_apply_id = fields.Many2one('sf.machine.table.tool.changing.apply', '机床换刀申请', readonly=True)
+ sf_machine_table_tool_changing_apply_id = fields.Many2one('sf.machine.table.tool.changing.apply', '机床换刀申请',
+ readonly=True)
sf_cam_work_order_program_knife_plan_id = fields.Many2one('sf.cam.work.order.program.knife.plan',
'CAM工单程序用刀计划', readonly=True, )
@@ -855,5 +843,4 @@ class FunctionalToolAssembly(models.Model):
if obj.loading_task_source:
code = self._get_code(obj.loading_task_source)
obj.assembly_order_code = code
- obj.name = code
- return obj
\ No newline at end of file
+ return obj
diff --git a/sf_tool_management/views/menu_view.xml b/sf_tool_management/views/menu_view.xml
index 301233c4..efa4feee 100644
--- a/sf_tool_management/views/menu_view.xml
+++ b/sf_tool_management/views/menu_view.xml
@@ -13,7 +13,7 @@
name="功能刀具列表"
sequence="4"
action="sf_function_tool_entry_list_view_act"
- />
+ />
+ />
+ />
+ />
+ />
+ />
+ />
-
+ />
-
\ No newline at end of file
+
diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml
index a63e650f..1cac4820 100644
--- a/sf_tool_management/views/tool_base_views.xml
+++ b/sf_tool_management/views/tool_base_views.xml
@@ -1,22 +1,32 @@
-
+
sf.functional.cutting.tool.entity.list.tree
sf.functional.cutting.tool.entity
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -25,8 +35,25 @@
sf.functional.cutting.tool.entity.list.form
sf.functional.cutting.tool.entity
-