1、所有功能刀具相关模型添加刀具组字段对象,并且功能刀具名称根据规则自动生成;2、功能刀具组装时按规则自动生成功能刀具编码;

This commit is contained in:
yuxianghui
2024-01-08 17:42:34 +08:00
parent d1c10f56d1
commit 498e1c12af
5 changed files with 179 additions and 43 deletions

View File

@@ -8,6 +8,8 @@ class ToolChangeRequirementInformation(models.TransientModel):
_name = 'sf.tool.change.requirement.information'
_description = '换刀需求信息'
code = fields.Char('编码', readonly=True)
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', readonly=True)
name = fields.Char('名称', related='maintenance_equipment_id.name', store=True, readonly=True)
maintenance_equipment_id = fields.Many2one('maintenance.equipment', string='CNC机床', readonly=True)
production_line_id = fields.Many2one('sf.production.line', string='生产线', readonly=True)
@@ -32,7 +34,7 @@ class ToolChangeRequirementInformation(models.TransientModel):
effective_length = fields.Float(string='有效长(mm)', readonly=True)
# 待换功能刀具信息
replacement_tool_name = fields.Char(string='待换功能刀具名称', required=True)
replacement_tool_name = fields.Char(string='待换功能刀具名称', compute='_compute_name')
replacement_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='待换功能刀具类型')
replacement_diameter = fields.Integer(string='待换刀具直径(mm)')
replacement_knife_tip_r_angle = fields.Float(string='待换刀具刀尖R角(mm)', requride=True)
@@ -52,6 +54,16 @@ class ToolChangeRequirementInformation(models.TransientModel):
applicant = fields.Char(string='申请人', default=lambda self: self.env.user.name, readonly=True)
reason_for_applying = fields.Char(string='申请原因')
@api.depends('replacement_diameter', 'replacement_knife_tip_r_angle', 'tool_groups_id')
def _compute_name(self):
for obj in self:
if obj.tool_groups_id:
obj.replacement_tool_name = '%s-D%sR%s' % (
obj.tool_groups_id.name, obj.replacement_diameter,
obj.replacement_knife_tip_r_angle)
else:
obj.replacement_tool_name = None
@api.constrains('replacement_knife_tip_r_angle', 'replacement_diameter', 'replacement_tool_coarse_middle_thin',
'new_former')
def _check_length_or_diamenter(self):
@@ -90,6 +102,7 @@ class ToolChangeRequirementInformation(models.TransientModel):
# 功能刀具组装创建新任务(new_assembly_task)
sf_functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({
'functional_tool_name': self.replacement_tool_name,
'tool_groups_id': self.tool_groups_id.id,
'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,
@@ -175,7 +188,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
_inherit = ["barcodes.barcode_events_mixin"]
_description = '功能刀具组装单'
assembly_order_code = fields.Char(string='编码', readonly=True)
assembly_order_code = fields.Char(string='组装单编码', readonly=True)
tool_groups_id = fields.Many2one('sf.tool.groups', '刀具组', 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,
@@ -307,7 +321,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
# 组装功能刀具参数信息
barcode_id = fields.Many2one('stock.lot', string='功能刀具序列号')
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', required=True)
tool_code = fields.Char(string='功能刀具编码', readonly=True, compute='_compute_tool_code')
after_assembly_functional_tool_name = fields.Char(string='组装后功能刀具名称', compute='_compute_name')
after_assembly_functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model',
string='组装后功能刀具类型',
compute='_compute_after_assembly_functional_tool_type_id')
@@ -331,6 +346,59 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
hiding_length = fields.Float(string='避空长(mm)')
# functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False)
# res_partner_id = fields.Many2one('res.partner', '智能工厂', domain="[('is_factory', '=', True)]")
@api.depends('after_assembly_functional_tool_type_id', 'integral_specification_id', 'bar_specification_id',
'pad_specification_id', 'handle_specification_id', 'res_partner_id',
'after_assembly_tool_loading_length')
def _compute_tool_code(self):
for obj in self:
str_1 = 'GNDJ-%s' % obj.after_assembly_functional_tool_type_id.code
str_2 = ''
num = None
if obj.handle_specification_id:
if obj.integral_specification_id:
str_2 = '%s-D%sL%sB%sH%s-' % (
str_1, obj.integral_specification_id.blade_diameter, obj.after_assembly_tool_loading_length,
obj.integral_specification_id.blade_length, obj.handle_specification_id.total_length)
num = self._get_code(str_2)
elif obj.bar_specification_id:
str_2 = '%s-D%sL%sB%sH%s-' % (
str_1, obj.bar_specification_id.cutter_arbor_diameter, obj.after_assembly_tool_loading_length,
obj.bar_specification_id.blade_length, obj.handle_specification_id.total_length)
num = self._get_code(str_2)
elif obj.pad_specification_id:
str_2 = '%s-D%sL%sB%sH%s-' % (
str_1, obj.pad_specification_id.cutter_head_diameter, obj.after_assembly_tool_loading_length,
obj.pad_specification_id.cut_depth_max, obj.handle_specification_id.total_length,
)
num = self._get_code(str_2)
obj.tool_code = str_2 + str(num)
else:
obj.tool_code = None
def _get_code(self, str_2):
functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().search(
[('code', 'like', str_2)],
limit=1,
order="id desc"
)
if not functional_tool_assembly:
num = "%03d" % 1
else:
m = int(functional_tool_assembly.code[-3:]) + 1
num = "%03d" % m
return num
@api.depends('after_assembly_functional_tool_diameter', 'after_assembly_knife_tip_r_angle', 'tool_groups_id')
def _compute_name(self):
for obj in self:
if obj.tool_groups_id:
obj.after_assembly_functional_tool_name = '%s-D%sR%s' % (
obj.tool_groups_id.name, obj.after_assembly_functional_tool_diameter,
obj.after_assembly_knife_tip_r_angle)
else:
obj.after_assembly_functional_tool_name = None
@api.onchange('integral_code_id')
def _onchange_after_assembly_functional_tool_diameter(self):
@@ -453,6 +521,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
def get_desc_1(self, stock_lot):
return {
'barcode_id': stock_lot.id,
'code': self.tool_code,
'tool_groups_id': self.tool_groups_id.id,
'integral_code_id': self.integral_code_id.id,
'blade_code_id': self.blade_code_id.id,
'bar_code_id': self.bar_code_id.id,
@@ -487,6 +557,8 @@ class FunctionalToolAssemblyOrder(models.TransientModel):
def get_desc_2(self, stock_lot, functional_tool_assembly_id):
return {
'barcode_id': stock_lot.id,
'code': self.tool_code,
'tool_groups_id': self.tool_groups_id.id,
'functional_tool_name_id': functional_tool_assembly_id.id,
'sf_cutting_tool_type_id': self.after_assembly_functional_tool_type_id.id,
'cutting_tool_integral_model_id': self.integral_code_id.product_id.id,