1、机床换刀申请新增确认换刀时,依次检索线边刀库、刀具房是否有满足条件的功能刀具,如果有就返回刀具信息,没有就发起组装申请;2、刀具安全库存模型详情页新增可修改的最低库存量、最高库存量、批次补货量字段;

This commit is contained in:
yuxianghui
2023-12-05 17:37:47 +08:00
parent 29a55f3ff8
commit 0d8d54c05b
3 changed files with 81 additions and 44 deletions

View File

@@ -232,7 +232,13 @@ class RealTimeDistributionOfFunctionalTools(models.Model):
def _compute_tool_stock_total(self):
for record in self:
if record:
self.tool_stock_total = record.tool_stock_num + record.side_shelf_num + record.on_tool_stock_num
record.tool_stock_total = record.tool_stock_num + record.side_shelf_num + record.on_tool_stock_num
# @api.depends('tool_stock_total', 'min_stock_num', 'max_stock_num')
# def _compute_batch_replenishment_num(self):
# for record in self:
# if record.tool_stock_total < record.min_stock_num:
# record.batch_replenishment_num = record.max_stock_num - record.tool_stock_total
def create_or_edit_safety_stock(self, vals, sf_functional_cutting_tool_entity_ids):
"""
@@ -365,7 +371,7 @@ class MachineTableToolChangingApply(models.Model):
'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,
'applicant': '系统自动',
'apply_time': fields.Datetime.now(),
'cutter_spacing_code_id': self.cutter_spacing_code_id.id,
'whether_standard_knife': self.whether_standard_knife,
@@ -687,6 +693,20 @@ class FunctionalToolAssembly(models.Model):
code = False
return code
def get_functional_tool(self, val):
functional_tools = self.env['sf.functional.tool.assembly'].search(
[('after_assembly_functional_tool_name', '=', val.get('after_assembly_functional_tool_name')),
('after_assembly_functional_tool_diameter', '=', val.get('after_assembly_functional_tool_diameter')),
('after_assembly_knife_tip_r_angle', '=', val.get('after_assembly_knife_tip_r_angle')),
('after_assembly_coarse_middle_thin', '=', val.get('after_assembly_coarse_middle_thin'))])
for functional_tool in functional_tools:
if functional_tool.barcode_id.quant_ids[-1].location_id.name == '刀具线边库':
return functional_tool
for functional_tool in functional_tools:
if functional_tool.barcode_id.quant_ids[-1].location_id.name == '刀具房':
return functional_tool
return False
def automated_assembly(self):
"""
todo 自动组装

View File

@@ -301,7 +301,7 @@
<field name="name">功能刀具安全库存</field>
<field name="model">sf.real.time.distribution.of.functional.tools</field>
<field name="arch" type="xml">
<form create="0" edit="0" delete="0">
<form create="0" edit="1" delete="0">
<sheet>
<div class="oe_title">
<h1>
@@ -310,41 +310,44 @@
</div>
<group>
<group>
<field name="sf_cutting_tool_type_id"/>
<field name="diameter"/>
<field name="knife_tip_r_angle"/>
<field name="coarse_middle_thin"/>
<field name="whether_standard_knife"/>
<field name="sf_cutting_tool_type_id" readonly="1"/>
<field name="diameter" readonly="1"/>
<field name="knife_tip_r_angle" readonly="1"/>
<field name="coarse_middle_thin" readonly="1"/>
<field name="whether_standard_knife" readonly="1"/>
<field name="min_stock_num"/>
<field name="max_stock_num"/>
<field name="batch_replenishment_num"/>
</group>
<group>
<field name="image" widget='image'/>
<field name="image" widget='image' readonly="1"/>
</group>
</group>
<group col="1">
<group string="适合加工方式">
<field name="suitable_machining_method_ids" string=""
widget="custom_many2many_checkboxes"
widget="custom_many2many_checkboxes" readonly="1"
domain="[('id','in',suitable_machining_method_ids)]"/>
</group>
<group>
<group string="刀尖特征">
<field name="blade_tip_characteristics_id" string=""
widget="many2one_radio"
widget="many2one_radio" readonly="1"
domain="[('id','in',blade_tip_characteristics_id)]"/>
</group>
<group string="柄部类型">
<field name="handle_type_id" string=""
widget="many2one_radio"
widget="many2one_radio" readonly="1"
domain="[('id','in',handle_type_id)]"/>
</group>
</group>
<group>
<group string="走刀方向">
<field name="cutting_direction_ids" string="" widget="custom_many2many_checkboxes"
<field name="cutting_direction_ids" string="" widget="custom_many2many_checkboxes" readonly="1"
domain="[('id','in',cutting_direction_ids)]"/>
</group>
<group string="适合冷却液">
<field name="suitable_coolant_ids" string="" widget="custom_many2many_checkboxes"
<field name="suitable_coolant_ids" string="" widget="custom_many2many_checkboxes" readonly="1"
domain="[('id','in',suitable_coolant_ids)]"/>
</group>
</group>
@@ -352,7 +355,7 @@
<notebook>
<page string="刀具信息">
<field name="sf_functional_cutting_tool_entity_ids" widget="many2many">
<tree>
<tree edit="0" create="0" delete="0">
<field name="barcode_id"/>
<field name="functional_tool_name_id"/>
<field name="new_former"/>
@@ -468,7 +471,7 @@
<field name="name">机床换刀申请</field>
<field name="model">sf.machine.table.tool.changing.apply</field>
<field name="arch" type="xml">
<tree>
<tree create="0" delete="0">
<field name="name" invisible="1"/>
<field name="production_line_id" invisible="1"/>
<field name="maintenance_equipment_id"/>

View File

@@ -62,33 +62,47 @@ class ToolChangeRequirementInformation(models.TransientModel):
('cutter_spacing_code_id', '=', self.cutter_spacing_code_id.id)
])
# 功能刀具组装创建新任务(new_assembly_task)
sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({
'functional_tool_name': self.replacement_tool_name,
'functional_tool_type_id': self.replacement_tool_type_id.id,
'functional_tool_diameter': self.replacement_diameter,
'knife_tip_r_angle': self.replacement_knife_tip_r_angle,
'coarse_middle_thin': self.replacement_tool_coarse_middle_thin,
'new_former': self.new_former,
'tool_loading_length': self.replacement_tool_setting_length,
'functional_tool_length': self.replacement_extension_length,
'effective_length': self.replacement_effective_length,
'loading_task_source': '1',
'use_tool_time': self.used_tool_time,
'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': self.reason_for_applying,
'sf_machine_table_tool_changing_apply_id': record.id
})
# 修改机床换刀申请状态
record.write({
'status': '1',
'sf_functional_tool_assembly_id': sf_functional_tool_assembly.id
# 搜索满足需求的功能刀具
functional_tool = self.env['sf.functional.tool.assembly'].get_functional_tool({
'after_assembly_functional_tool_name': self.replacement_tool_name,
'after_assembly_functional_tool_diameter': self.replacement_diameter,
'after_assembly_knife_tip_r_angle': self.replacement_knife_tip_r_angle,
'after_assembly_coarse_middle_thin': self.replacement_tool_coarse_middle_thin
})
# 如果有满足需求的刀具,就返回刀具信息
if functional_tool:
record.write({'status': '3'})
# todo 将功能刀具信息传递到机床
return functional_tool
# 如果没有满足需求的刀具,就创建功能刀具组装单
else:
# 功能刀具组装创建新任务(new_assembly_task)
sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({
'functional_tool_name': self.replacement_tool_name,
'functional_tool_type_id': self.replacement_tool_type_id.id,
'functional_tool_diameter': self.replacement_diameter,
'knife_tip_r_angle': self.replacement_knife_tip_r_angle,
'coarse_middle_thin': self.replacement_tool_coarse_middle_thin,
'new_former': self.new_former,
'tool_loading_length': self.replacement_tool_setting_length,
'functional_tool_length': self.replacement_extension_length,
'effective_length': self.replacement_effective_length,
'loading_task_source': '1',
'use_tool_time': self.used_tool_time,
'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': self.reason_for_applying,
'sf_machine_table_tool_changing_apply_id': record.id
})
# 修改机床换刀申请状态
record.write({
'status': '1',
'sf_functional_tool_assembly_id': sf_functional_tool_assembly.id
})
# 关闭弹出窗口
return {'type': 'ir.actions.act_window_close'}
@@ -323,14 +337,14 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
string='组装后功能刀具类型')
after_assembly_functional_tool_diameter = fields.Integer(string='组装后功能刀具直径(mm)')
after_assembly_knife_tip_r_angle = fields.Float(string='组装后刀尖R角(mm)')
after_assembly_new_former = fields.Selection([('0', ''), ('1', '')], string='组装后新/旧')
after_assembly_new_former = fields.Selection([('0', ''), ('1', '')], string='组装后新/旧', default='0')
cut_time = fields.Integer(string='已切削时间(min)')
cut_length = fields.Float(string='已切削长度(mm)')
cut_number = fields.Integer(string='已切削次数')
after_assembly_whether_standard_knife = fields.Boolean(string='组装后是否标准刀', default=True)
after_assembly_coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')],
string='组装后粗/中/精')
string='组装后粗/中/精', default='3')
after_assembly_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)')
after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)')
after_assembly_used_value = fields.Integer(string='组装后已使用值(min)')