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): def _compute_tool_stock_total(self):
for record in self: for record in self:
if record: 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): 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), 'use_tool_time': fields.Datetime.now() + timedelta(hours=4),
'production_line_name_id': self.production_line_id.id, 'production_line_name_id': self.production_line_id.id,
'machine_tool_name_id': self.maintenance_equipment_id.id, 'machine_tool_name_id': self.maintenance_equipment_id.id,
'applicant': self.applicant, 'applicant': '系统自动',
'apply_time': fields.Datetime.now(), 'apply_time': fields.Datetime.now(),
'cutter_spacing_code_id': self.cutter_spacing_code_id.id, 'cutter_spacing_code_id': self.cutter_spacing_code_id.id,
'whether_standard_knife': self.whether_standard_knife, 'whether_standard_knife': self.whether_standard_knife,
@@ -687,6 +693,20 @@ class FunctionalToolAssembly(models.Model):
code = False code = False
return code 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): def automated_assembly(self):
""" """
todo 自动组装 todo 自动组装

View File

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

View File

@@ -62,6 +62,20 @@ class ToolChangeRequirementInformation(models.TransientModel):
('cutter_spacing_code_id', '=', self.cutter_spacing_code_id.id) ('cutter_spacing_code_id', '=', self.cutter_spacing_code_id.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) # 功能刀具组装创建新任务(new_assembly_task)
sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({ sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({
'functional_tool_name': self.replacement_tool_name, 'functional_tool_name': self.replacement_tool_name,
@@ -323,14 +337,14 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
string='组装后功能刀具类型') string='组装后功能刀具类型')
after_assembly_functional_tool_diameter = fields.Integer(string='组装后功能刀具直径(mm)') after_assembly_functional_tool_diameter = fields.Integer(string='组装后功能刀具直径(mm)')
after_assembly_knife_tip_r_angle = fields.Float(string='组装后刀尖R角(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_time = fields.Integer(string='已切削时间(min)')
cut_length = fields.Float(string='已切削长度(mm)') cut_length = fields.Float(string='已切削长度(mm)')
cut_number = fields.Integer(string='已切削次数') cut_number = fields.Integer(string='已切削次数')
after_assembly_whether_standard_knife = fields.Boolean(string='组装后是否标准刀', default=True) after_assembly_whether_standard_knife = fields.Boolean(string='组装后是否标准刀', default=True)
after_assembly_coarse_middle_thin = fields.Selection([("1", ""), ('2', ''), ('3', '')], 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_max_lifetime_value = fields.Integer(string='组装后最大寿命值(min)')
after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)') after_assembly_alarm_value = fields.Integer(string='组装后报警值(min)')
after_assembly_used_value = fields.Integer(string='组装后已使用值(min)') after_assembly_used_value = fields.Integer(string='组装后已使用值(min)')