1、优化CAM工单程序用刀计划模型,新增大量字段,优化tree视图及form视图字段及其布局;2、添加CAM换刀申请功能和撤销功能及其按钮;3、添加根据刀具类型和刀具名称检索现有功能刀具是否满足需求,如果不满足则创建CAM工单程序用刀计划记录的功能接口(进行中)。

This commit is contained in:
yuxianghui
2024-01-17 17:30:16 +08:00
parent 7520d71adb
commit d9115333bf
2 changed files with 125 additions and 72 deletions

View File

@@ -594,16 +594,16 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
_name = 'sf.cam.work.order.program.knife.plan' _name = 'sf.cam.work.order.program.knife.plan'
_description = 'CAM工单程序用刀计划' _description = 'CAM工单程序用刀计划'
name = fields.Char(string='工单任务编号', readonly=False) name = fields.Char('工单任务编号')
cam_procedure_code = fields.Char(string='CAM程序编号', readonly=False) cam_procedure_code = fields.Char('程序名')
cam_cutter_spacing_code = fields.Char(string='CAM刀位号', readonly=False) filename = fields.Char('文件')
cam_cutter_spacing_code = fields.Char('刀号')
tool_position_interface_type = fields.Selection( tool_position_interface_type = fields.Selection(
[('BT刀柄式', 'BT刀柄式'), ('SK刀柄式', 'SK刀柄式'), ('HSK刀柄式', 'HSK刀柄式'), [('BT刀柄式', 'BT刀柄式'), ('SK刀柄式', 'SK刀柄式'), ('HSK刀柄式', 'HSK刀柄式'),
('CAT刀柄式', 'CAT刀柄式'), ('ISO刀盘式', 'ISO刀盘式'), ('DIN刀盘式', 'DIN刀盘式'), ('CAT刀柄式', 'CAT刀柄式'), ('ISO刀盘式', 'ISO刀盘式'), ('DIN刀盘式', 'DIN刀盘式'),
('直装固定式', '直装固定式')], string='刀位接口型号') ('直装固定式', '直装固定式')], string='刀位接口型号')
production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=False, production_line_id = fields.Many2one('sf.production.line', string='生产线', group_expand='_read_group_names')
group_expand='_read_group_names') machine_table_name_id = fields.Many2one('maintenance.equipment', string='机床名称',
machine_table_name_id = fields.Many2one('maintenance.equipment', string='机床名称', readonly=False,
domain="[('production_line_id', '=', production_line_id)]") domain="[('production_line_id', '=', production_line_id)]")
machine_table_name = fields.Char(string='机台号', readonly=True, related='machine_table_name_id.name') machine_table_name = fields.Char(string='机台号', readonly=True, related='machine_table_name_id.name')
cutter_spacing_code_id = fields.Many2one('maintenance.equipment.tool', string='刀位号', required=True, cutter_spacing_code_id = fields.Many2one('maintenance.equipment.tool', string='刀位号', required=True,
@@ -616,8 +616,9 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号', barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号',
domain=[('product_id.name', '=', '功能刀具')]) domain=[('product_id.name', '=', '功能刀具')])
functional_tool_name = fields.Char(string='功能刀具名称', required=True) functional_tool_name = fields.Char(string='功能刀具名称', compute='_compute_functional_tool_name')
functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False) functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False)
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组')
diameter = fields.Integer(string='刀具直径(mm)', readonly=False) diameter = fields.Integer(string='刀具直径(mm)', readonly=False)
tool_included_angle = fields.Float(string='刀尖R角(mm)', readonly=False) tool_included_angle = fields.Float(string='刀尖R角(mm)', readonly=False)
tool_loading_length = fields.Float(string='总长度(mm)', readonly=False) tool_loading_length = fields.Float(string='总长度(mm)', readonly=False)
@@ -629,12 +630,28 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
L_D = fields.Float(string='L/D值', readonly=False) L_D = fields.Float(string='L/D值', readonly=False)
clearance_length = fields.Float(string='避空长(mm)', readonly=False) clearance_length = fields.Float(string='避空长(mm)', readonly=False)
required_cutting_time = fields.Integer(string='需切削时长', readonly=False) required_cutting_time = fields.Integer(string='需切削时长', readonly=False)
process_type = fields.Char('加工类型')
margin_x_y = fields.Float('余量_X/Y')
margin_z = fields.Float('余量_Z')
finish_depth = fields.Float('加工深度')
shank_model = fields.Char('刀柄型号')
estimated_processing_time = fields.Char('预计加工时间')
plan_execute_status = fields.Selection([('0', '待下发'), ('1', '执行中'), ('2', '已完成')], plan_execute_status = fields.Selection([('0', '待下发'), ('1', '执行中'), ('2', '已完成')],
string='计划执行状态', default='0', readonly=False) string='计划执行状态', default='0', readonly=False)
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('diameter', 'tool_included_angle', 'tool_groups_id')
def _compute_functional_tool_name(self):
for obj in self:
if obj.tool_groups_id:
obj.functional_tool_name = '%s-D%sR%s' % (
obj.tool_groups_id.name, obj.diameter,
obj.tool_included_angle)
else:
obj.functional_tool_name = None
@api.model @api.model
def _read_group_names(self, categories, domain, order): def _read_group_names(self, categories, domain, order):
names = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) names = categories._search([], order=order, access_rights_uid=SUPERUSER_ID)
@@ -646,27 +663,34 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
:return: :return:
""" """
record = self.env['sf.functional.tool.assembly'].create({ record = self.env['sf.functional.tool.assembly'].create({
'barcode_id': self.barcode_id.id, 'functional_tool_name': self.functional_tool_name,
'functional_tool_name_id': self.functional_tool_name_id.id,
'functional_tool_type_id': self.functional_tool_type_id.id, 'functional_tool_type_id': self.functional_tool_type_id.id,
'tool_groups_id': self.tool_groups_id.id,
'functional_tool_diameter': self.diameter, 'functional_tool_diameter': self.diameter,
'functional_tool_length': self.tool_loading_length, 'knife_tip_r_angle': self.tool_included_angle,
'loading_task_source': '0', 'tool_loading_length': self.tool_loading_length,
'coarse_middle_thin': None, 'functional_tool_length': self.extension_length,
'tool_loading_length': None, 'effective_length': self.effective_length,
'applicant': self.env.user.name, 'whether_standard_knife': self.whether_standard_knife,
'reason_for_applying': self.reason_for_applying, 'coarse_middle_thin': self.coarse_middle_thin,
'use_tool_time': self.need_knife_time, 'new_former': self.new_former,
'production_line_name_id': self.production_line_id.id,
'machine_tool_name_id': self.machine_table_name_id.id, 'machine_tool_name_id': self.machine_table_name_id.id,
'machine_tool_code': self.cam_procedure_code, 'cutter_spacing_code_id': self.env['maintenance.equipment.tool'].sudo().search(
'cutter_spacing_code': self.cam_cutter_spacing_code, [('code', '=', self.cam_cutter_spacing_code), ('equipment_id', '=', self.machine_table_name_id.id)]).id,
'loading_task_source': '0',
'applicant': self.env.user.name,
'use_tool_time': self.need_knife_time,
'reason_for_applying': '工单用刀',
'sf_cam_work_order_program_knife_plan_id': self.id 'sf_cam_work_order_program_knife_plan_id': self.id
}) })
self.sf_functional_tool_assembly_id = record.id self.sf_functional_tool_assembly_id = record.id
# 将计划执行状态改为执行中 # 将计划执行状态改为执行中
self.env['sf.cam.work.order.program.knife.plan'].search( self.env['sf.cam.work.order.program.knife.plan'].search(
[('barcode_id', '=', self.barcode_id.id)]).write( [('name', '=', self.name), ('functional_tool_name', '=', self.functional_tool_name)]).write(
{'plan_execute_status': '1', {'plan_execute_status': '1',
'applicant': self.env.user.name}) 'applicant': self.env.user.name})
@@ -676,16 +700,19 @@ class CAMWorkOrderProgramKnifePlan(models.Model):
:return: :return:
""" """
self.env['sf.functional.tool.assembly'].search( self.env['sf.functional.tool.assembly'].search(
[('barcode_id', '=', self.barcode_id.id), [('assembly_order_code', '=', self.sf_functional_tool_assembly_id.assembly_order_code),
('loading_task_source', '=', '0')]).unlink() ('loading_task_source', '=', '0')]).unlink()
# 将计划执行状态改为待执行,同时清除申请人、功能刀具组装字段数据 # 将计划执行状态改为待执行,同时清除申请人、功能刀具组装字段数据
self.env['sf.cam.work.order.program.knife.plan'].search( self.env['sf.cam.work.order.program.knife.plan'].search(
[('barcode_id', '=', self.barcode_id.id)]).write( [('name', '=', self.name), ('functional_tool_name', '=', self.functional_tool_name)]).write(
{'plan_execute_status': '0', {'plan_execute_status': '0',
'applicant': None, 'applicant': None,
'sf_functional_tool_assembly_id': None}) 'sf_functional_tool_assembly_id': None})
def create_cam_work_plan(self, **kw):
pass
class FunctionalToolAssembly(models.Model): class FunctionalToolAssembly(models.Model):
_name = 'sf.functional.tool.assembly' _name = 'sf.functional.tool.assembly'

View File

@@ -756,21 +756,29 @@
<tree> <tree>
<field name="name" string="工单编码"/> <field name="name" string="工单编码"/>
<field name="cam_procedure_code"/> <field name="cam_procedure_code"/>
<field name="filename"/>
<field name="functional_tool_name" string="刀具名称"/>
<field name="cam_cutter_spacing_code"/> <field name="cam_cutter_spacing_code"/>
<field name="diameter" optional="hide"/>
<field name="tool_included_angle" optional="hide"/>
<field name="process_type"/>
<field name="margin_x_y"/>
<field name="margin_z"/>
<field name="finish_depth"/>
<field name="extension_length" string="刀具伸出长度(mm)"/>
<field name="shank_model"/>
<field name="estimated_processing_time"/>
<field name="need_knife_time"/>
<field name="applicant_time"/>
<field name="plan_execute_status"/>
<field name="production_line_id" invisible="1"/> <field name="production_line_id" invisible="1"/>
<field name="machine_table_name_id" invisible="1"/> <field name="machine_table_name_id" invisible="1"/>
<field name="machine_table_name"/> <field name="machine_table_name" invisible="1"/>
<field name="functional_tool_name"/> <button string="申请装刀" name="apply_for_tooling" type="object" class="btn-primary"
<field name="diameter"/> attrs="{'invisible': [('plan_execute_status', '!=', '0')]}" confirm="是否确认申请装刀"/>
<field name="tool_included_angle"/> <button string="撤回" name="revocation" type="object" class="btn-primary"
<field name="need_knife_time"/> attrs="{'invisible': [('plan_execute_status', '!=', '1')]}" confirm="是否确认撤回装刀"/>
<field name="applicant"/>
<field name="applicant_time"/>
<field name="plan_execute_status" invisible="0"/>
<!-- <button string="申请装刀" name="apply_for_tooling" type="object" class="btn-primary"-->
<!-- attrs="{'invisible': [('plan_execute_status', '!=', '0')]}" confirm="是否确认申请装刀"/>-->
<!-- <button string="撤回" name="revocation" type="object" class="btn-primary"-->
<!-- attrs="{'invisible': [('plan_execute_status', '!=', '1')]}" confirm="是否确认撤回装刀"/>-->
</tree> </tree>
</field> </field>
</record> </record>
@@ -780,13 +788,13 @@
<field name="model">sf.cam.work.order.program.knife.plan</field> <field name="model">sf.cam.work.order.program.knife.plan</field>
<field name="arch" type="xml"> <field name="arch" type="xml">
<form> <form>
<!-- <header>--> <header>
<!-- <button string="申请装刀" name="apply_for_tooling" type="object" class="btn-primary"--> <button string="申请装刀" name="apply_for_tooling" type="object" class="btn-primary"
<!-- attrs="{'invisible': [('plan_execute_status', '!=', '0')]}" confirm="是否确认申请装刀"/>--> attrs="{'invisible': [('plan_execute_status', '!=', '0')]}" confirm="是否确认申请装刀"/>
<!-- <button string="撤回" name="revocation" type="object" class="btn-primary"--> <button string="撤回" name="revocation" type="object" class="btn-primary"
<!-- attrs="{'invisible': [('plan_execute_status', '!=', '1')]}" confirm="是否确认撤回装刀"/>--> attrs="{'invisible': [('plan_execute_status', '!=', '1')]}" confirm="是否确认撤回装刀"/>
<!-- <field name="plan_execute_status" widget="statusbar" statusbar_visible="0,1,2"/>--> <field name="plan_execute_status" widget="statusbar" statusbar_visible="0,1,2"/>
<!-- </header>--> </header>
<sheet> <sheet>
<div class="oe_title"> <div class="oe_title">
@@ -797,35 +805,48 @@
<group> <group>
<group> <group>
<field name="cam_procedure_code"/> <field name="cam_procedure_code"/>
<field name="filename"/>
<field name="production_line_id"/>
<field name="machine_table_name_id" string="机台号"/>
<field name="cam_cutter_spacing_code"/> <field name="cam_cutter_spacing_code"/>
<field name="tool_position_interface_type" placeholder="请选择"/> <field name="tool_position_interface_type"/>
<field name="production_line_id" placeholder="请选择"/>
<field name="machine_table_name_id" placeholder="请选择"/>
<field name="machine_table_name"/>
<field name="cutter_spacing_code_id" placeholder="请选择"/>
<field name="whether_standard_knife"/>
<field name="need_knife_time"/>
<field name="applicant"/>
<field name="applicant_time"/>
<field name="reason_for_applying"/>
<field name="sf_functional_tool_assembly_id" string="组装单"/> <field name="sf_functional_tool_assembly_id" string="组装单"/>
</group> </group>
<group> <group>
<field name="barcode_id" invisible="1"/> <field name="process_type"/>
<field name="margin_x_y"/>
<field name="margin_z"/>
<field name="finish_depth"/>
<field name="estimated_processing_time"/>
<field name="need_knife_time"/>
<field name="applicant_time"/>
</group>
</group>
<notebook>
<page string="刀具信息">
<group>
<group>
<field name="functional_tool_name"/> <field name="functional_tool_name"/>
<field name="functional_tool_type_id" placeholder="请选择"/> <field name="functional_tool_type_id"/>
<field name="tool_groups_id"/>
<field name="diameter"/> <field name="diameter"/>
<field name="tool_included_angle"/> <field name="tool_included_angle"/>
<field name="new_former"/>
<field name="coarse_middle_thin"/>
<field name="whether_standard_knife"/>
</group>
<group>
<field name="shank_model"/>
<field name="tool_loading_length"/> <field name="tool_loading_length"/>
<field name="extension_length"/> <field name="extension_length"/>
<field name="effective_length"/> <field name="effective_length"/>
<field name="new_former"/> <field name="required_cutting_time"/>
<field name="coarse_middle_thin"/>
<field name="L_D"/> <field name="L_D"/>
<field name="clearance_length"/> <field name="clearance_length"/>
<field name="required_cutting_time"/>
</group> </group>
</group> </group>
</page>
</notebook>
</sheet> </sheet>
</form> </form>
</field> </field>
@@ -837,20 +858,25 @@
<search> <search>
<field name="name" string="工单编码"/> <field name="name" string="工单编码"/>
<field name="cam_procedure_code"/> <field name="cam_procedure_code"/>
<field name="filename"/>
<field name="functional_tool_name" string="刀具名称"/>
<field name="cam_cutter_spacing_code"/> <field name="cam_cutter_spacing_code"/>
<field name="machine_table_name_id" invisible="1"/> <field name="diameter" optional="hide"/>
<field name="production_line_id" invisible="1"/> <field name="tool_included_angle" optional="hide"/>
<field name="machine_table_name"/> <field name="process_type"/>
<field name="functional_tool_name"/> <field name="margin_x_y"/>
<field name="diameter"/> <field name="margin_z"/>
<field name="tool_included_angle"/> <field name="finish_depth"/>
<field name="extension_length" string="刀具伸出长度(mm)"/>
<field name="shank_model"/>
<field name="estimated_processing_time"/>
<field name="need_knife_time"/> <field name="need_knife_time"/>
<field name="applicant"/>
<field name="applicant_time"/> <field name="applicant_time"/>
<field name="plan_execute_status" invisible="0"/> <field name="plan_execute_status"/>
<searchpanel> <searchpanel>
<field name="production_line_id" string="生产线" enable_counters="1" icon="fa-filter"/> <field name="production_line_id" string="生产线" enable_counters="1" icon="fa-filter"/>
<field name="machine_table_name_id" string="CNC机床" enable_counters="1" icon="fa-filter"/> <field name="functional_tool_type_id" string="功能刀具类型" enable_counters="1"
icon="fa-filter"/>
</searchpanel> </searchpanel>
</search> </search>
</field> </field>