新增刀具及刀具型号联动展示相关字段并显示对应信息,不同刀具的页面布局

This commit is contained in:
jinling.yang
2023-06-14 19:22:52 +08:00
11 changed files with 1732 additions and 103 deletions

View File

@@ -50,55 +50,75 @@ class ResProductTemplate(models.Model):
model_code = fields.Char('模型编码')
is_bfm = fields.Boolean('业务平台是否自动创建', default=False)
cutting_tool = fields.Selection([
('整体式刀具', '整体式刀具'),
('刀片', '刀片'),
('刀杆', '刀杆'),
('刀盘', '刀盘'),
('刀柄', '刀柄'),
('夹头', '夹头')], string='刀具')
# 关联整体式刀具型号
integral_cutting_tool_type_id = fields.Many2one('sf.integral.cutting.tool', '整体式刀具型号')
# 关联刀片型号
blade_type_id = fields.Many2one('sf.blade', '刀片型号')
# 关联刀杆型号
cutter_bar_type_id = fields.Many2one('sf.cutter.bar', '刀杆型号')
# 关联刀盘型号
cutter_pad_type_id = fields.Many2one('sf.cutter.pad', '刀盘型号')
# 关联刀柄型号
handle_type_id = fields.Many2one('sf.handle', '刀柄型号')
# 关联夹头型号
chuck_type_id = fields.Many2one('sf.chuck', '夹头型号')
cutting_tool_parameter_brand = fields.Many2one('sf.machine.brand', '品牌')
# 整体式刀具参数
cutting_tool_parameter_total_length = fields.Float('总长度(mm)')
cutting_tool_parameter_shank_length = fields.Float('柄部长度(mm)')
cutting_tool_parameter_blade_length = fields.Float('刃部长度(mm)')
cutting_tool_parameter_diameter = fields.Float('直径(mm)')
cutting_tool_parameter_total_length = fields.Float('总长度[mm]')
cutting_tool_parameter_shank_length = fields.Float('柄部长度[mm]')
cutting_tool_parameter_blade_length = fields.Float('刃部长度[mm]')
cutting_tool_parameter_diameter = fields.Float('直径[mm]')
cutting_tool_parameter_blade_number = fields.Integer('刃数')
cutting_tool_parameter_front_angle = fields.Float('前角(°)')
cutting_tool_parameter_rear_angle = fields.Float('后角(°)')
cutting_tool_parameter_main_included_angle = fields.Float('主偏角(°)')
cutting_tool_parameter_material_model = fields.Many2one('sf.materials.model', '材料型号')
cutting_tool_parameter_nut = fields.Float('配对螺母(mm)')
cutting_tool_parameter_nut = fields.Float('配对螺母[mm]')
# 适用夹头型号可以多选
cutting_tool_parameter_chuck_model = fields.Many2many('sf.chuck', string='适用夹头型号')
cutting_tool_parameter_scope = fields.Char('适用范围')
cutting_tool_parameter_image = fields.Binary('图片')
# 刀片参数
cutting_tool_parameter_length = fields.Float('长度L(mm)')
cutting_tool_parameter_width = fields.Float('宽度D(mm)')
cutting_tool_parameter_height = fields.Float('高度T(mm)')
cutting_tool_parameter_length = fields.Float('长度L[mm]')
cutting_tool_parameter_width = fields.Float('宽度D[mm])')
cutting_tool_parameter_height = fields.Float('高度T[mm]')
cutting_tool_parameter_top_angle = fields.Float('顶角(°)')
cutting_tool_parameter_top_angle = fields.Float('R角(°)')
cutting_tool_parameter_hardness = fields.Char('加工硬度')
cutting_tool_parameter_r_angle = fields.Float('R角(°)')
cutting_tool_parameter_working_hardness = fields.Char('加工硬度')
cutting_tool_parameter_cutter_bar = fields.Many2many('sf.cutter.bar', string='适用刀杆型号')
cutting_tool_parameter_cutter_pad = fields.Many2many('sf.cutter.pad', string='适用刀盘型号')
cutting_tool_parameter_radius = fields.Float('刀尖半径(mm)')
cutting_tool_parameter_radius = fields.Float('刀尖半径[mm]')
# 刀杆/刀盘参数
cutting_tool_parameter_c_diameter = fields.Float('C柄径(mm)')
cutting_tool_parameter_total_length = fields.Float('L总长(mm)')
cutting_tool_parameter_d_diameter = fields.Float('D刃径(mm)')
cutting_tool_parameter_c_diameter = fields.Float('C柄径[mm]')
cutting_tool_parameter_l_total_length = fields.Float('L总长[mm]')
cutting_tool_parameter_d_diameter = fields.Float('D刃径[mm]')
cutting_tool_parameter_blade = fields.Many2many('sf.blade', string='适用刀片型号')
cutting_tool_parameter_wrench = fields.Float('配对扳手(mm)')
cutting_tool_parameter_screw = fields.Float('配备螺丝(mm)')
cutting_tool_parameter_accuracy = fields.Char('精度等级')
cutting_tool_parameter_wrench = fields.Float('配对扳手[mm]')
cutting_tool_parameter_screw = fields.Float('配备螺丝[mm]')
cutting_tool_parameter_accuracy_level = fields.Char('精度等级')
cutting_tool_parameter_rounded_corner = fields.Float('刀尖圆角半径[mm]')
cutting_tool_parameter_hardness = fields.Char('硬度(°)')
# 刀柄参数
cutting_tool_parameter_handle_length = fields.Float('L(mm)')
cutting_tool_parameter_length1 = fields.Float('L1(mm)')
cutting_tool_parameter_diameter1 = fields.Float('D1(mm)')
cutting_tool_parameter_handle_length = fields.Float('L[mm]')
cutting_tool_parameter_length1 = fields.Float('L1[mm]')
cutting_tool_parameter_diameter1 = fields.Float('D1[mm]')
cutting_tool_parameter_weight = fields.Float('重量(kg)')
cutting_tool_parameter_body_accuracy = fields.Float('本体精度(mm)')
cutting_tool_parameter_clamping_range = fields.Float('夹持范围(mm)')
cutting_tool_parameter_body_accuracy = fields.Float('本体精度[mm]')
cutting_tool_parameter_clamping_range = fields.Float('夹持范围[mm]')
cutting_tool_parameter_detection_accuracy = fields.Float('检测精度')
cutting_tool_parameter_detection_hardness = fields.Char('检测硬度')
cutting_tool_parameter_standard_speed = fields.Float('标准转速')
# 夹头参数
cutting_tool_parameter_accuracy = fields.Float('精度(mm)')
cutting_tool_parameter_diameter = fields.Float('外径(mm)')
cutting_tool_parameter_inner_diameter = fields.Float('内径(mm)')
cutting_tool_parameter_accuracy = fields.Float('精度[mm]')
cutting_tool_parameter_outer_diameter = fields.Float('外径[mm]')
cutting_tool_parameter_inner_diameter = fields.Float('内径[mm]')
cutting_tool_parameter_handle_model = fields.Many2many('sf.handle.model', string='适用刀柄型号')
cutting_tool_parameter_feature = fields.Char('特性')
@@ -109,28 +129,6 @@ class ResProductTemplate(models.Model):
else:
return self.env.ref('sf_dlm.product_uom_cubic_millimeter')
# model_file = fields.Binary('模型文件')
# 坯料的库存路线设置
# def _get_routes(self, route_type):
# route_manufacture = self.env.ref('mrp.route_warehouse0_manufacture', raise_if_not_found=False).sudo()
# route_mto = self.env.ref('stock.route_warehouse0_mto', raise_if_not_found=False).sudo()
# route_purchase = self.env.ref('purchase_stock.route_warehouse0_buy', raise_if_not_found=False).sudo()
# if route_manufacture and route_mto:
# # 外协
# if route_type == 'subcontract':
# route_subcontract = self.env.ref('mrp_subcontracting.route_resupply_subcontractor_mto',
# raise_if_not_found=False).sudo()
# return [route_mto.id, route_purchase.id, route_subcontract.id]
# elif route_type == 'purchase':
# # 采购
# return [route_mto.id, route_purchase.id]
# else:
# return [route_mto.id, route_manufacture.id]
# return []
# route_ids = fields.Many2many(default=lambda self: self._get_route())
# 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品
def product_create(self, product_id, item, order_id, order_number, i):
copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy()
@@ -314,6 +312,112 @@ class ResProductTemplate(models.Model):
return base64_data
@api.onchange('integral_cutting_tool_type_id')
def _get_integral_cutting_tool_type_info(self):
for item in self:
item.cutting_tool_parameter_brand = item.integral_cutting_tool_type_id.brand.id
item.cutting_tool_parameter_total_length = item.integral_cutting_tool_type_id.total_length
item.cutting_tool_parameter_shank_length = item.integral_cutting_tool_type_id.shank_length
item.cutting_tool_parameter_blade_length = item.integral_cutting_tool_type_id.blade_length
item.cutting_tool_parameter_diameter = item.integral_cutting_tool_type_id.diameter
item.cutting_tool_parameter_nut = item.integral_cutting_tool_type_id.control_system_id
item.cutting_tool_parameter_blade_number = item.integral_cutting_tool_type_id.blade_number
item.cutting_tool_parameter_material_model = item.integral_cutting_tool_type_id.material_model.id
item.cutting_tool_parameter_front_angle = item.integral_cutting_tool_type_id.front_angle
item.cutting_tool_parameter_rear_angle = item.integral_cutting_tool_type_id.rear_angle
item.cutting_tool_parameter_main_included_angle = item.integral_cutting_tool_type_id.main_included_angle
item.cutting_tool_parameter_chuck_model = item.integral_cutting_tool_type_id.chuck_model.id
item.cutting_tool_parameter_scope = item.integral_cutting_tool_type_id.scope
@api.onchange('blade_type_id')
def _get_blade_type_info(self):
for item in self:
item.cutting_tool_parameter_brand = item.blade_type_id.brand.id
item.cutting_tool_parameter_top_angle = item.blade_type_id.top_angle
item.cutting_tool_parameter_front_angle = item.blade_type_id.front_angle
item.cutting_tool_parameter_rear_angle = item.blade_type_id.rear_angle
item.cutting_tool_parameter_main_included_angle = item.blade_type_id.main_included_angle
item.cutting_tool_parameter_r_angle = item.blade_type_id.r_angle
item.cutting_tool_parameter_working_hardness = item.blade_type_id.hardness
item.cutting_tool_parameter_material_model = item.blade_type_id.material_model.id
item.cutting_tool_parameter_length = item.blade_type_id.length
item.cutting_tool_parameter_width = item.blade_type_id.width
item.cutting_tool_parameter_height = item.blade_type_id.height
item.cutting_tool_parameter_radius = item.blade_type_id.radius
item.cutting_tool_parameter_nut = item.blade_type_id.nut
item.cutting_tool_parameter_cutter_bar = item.blade_type_id.cutter_bar.id
item.cutting_tool_parameter_cutter_pad = item.blade_type_id.cutter_pad.id
@api.onchange('cutter_bar_type_id')
def _get_cutter_bar_type_info(self):
for item in self:
item.cutting_tool_parameter_brand = item.cutter_bar_type_id.brand.id
item.cutting_tool_parameter_c_diameter = item.cutter_bar_type_id.c_diameter
item.cutting_tool_parameter_d_diameter = item.cutter_bar_type_id.d_diameter
item.cutting_tool_parameter_l_total_length = item.cutter_bar_type_id.total_length
item.cutting_tool_parameter_wrench = item.cutter_bar_type_id.wrench
item.cutting_tool_parameter_screw = item.cutter_bar_type_id.screw
item.cutting_tool_parameter_blade = item.cutter_bar_type_id.blade.id
item.cutting_tool_parameter_scope = item.cutter_bar_type_id.scope
item.cutting_tool_parameter_material_model = item.cutter_bar_type_id.material_model.id
item.cutting_tool_parameter_rounded_corner = item.cutter_bar_type_id.radius
item.cutting_tool_parameter_accuracy_level = item.cutter_bar_type_id.accuracy
item.cutting_tool_parameter_blade_number = item.cutter_bar_type_id.blade_number
item.cutting_tool_parameter_hardness = item.cutter_bar_type_id.hardness
@api.onchange('cutter_pad_type_id')
def _get_cutter_pad_type_info(self):
for item in self:
item.cutting_tool_parameter_brand = item.cutter_pad_type_id.brand.id
item.cutting_tool_parameter_c_diameter = item.cutter_pad_type_id.c_diameter
item.cutting_tool_parameter_d_diameter = item.cutter_pad_type_id.d_diameter
item.cutting_tool_parameter_l_total_length = item.cutter_pad_type_id.total_length
item.cutting_tool_parameter_wrench = item.cutter_pad_type_id.wrench
item.cutting_tool_parameter_screw = item.cutter_pad_type_id.screw
item.cutting_tool_parameter_blade = item.cutter_pad_type_id.blade.id
item.cutting_tool_parameter_scope = item.cutter_pad_type_id.scope
item.cutting_tool_parameter_material_model = item.cutter_pad_type_id.material_model.id
item.cutting_tool_parameter_rounded_corner = item.cutter_pad_type_id.radius
item.cutting_tool_parameter_accuracy_level = item.cutter_pad_type_id.accuracy
item.cutting_tool_parameter_blade_number = item.cutter_pad_type_id.blade_number
item.cutting_tool_parameter_hardness = item.cutter_pad_type_id.hardness
@api.onchange('handle_type_id')
def _get_handle_type_info(self):
for item in self:
item.cutting_tool_parameter_brand = item.handle_type_id.brand.id
item.cutting_tool_parameter_handle_length = item.handle_type_id.length
item.cutting_tool_parameter_length1 = item.handle_type_id.length1
item.cutting_tool_parameter_diameter1 = item.handle_type_id.diameter1
item.cutting_tool_parameter_body_accuracy = item.handle_type_id.body_accuracy
item.cutting_tool_parameter_nut = item.handle_type_id.nut
item.cutting_tool_parameter_clamping_range = item.handle_type_id.clamping_range
item.cutting_tool_parameter_weight = item.handle_type_id.weight
item.cutting_tool_parameter_material_model = item.handle_type_id.material_model.id
item.cutting_tool_parameter_chuck_model = item.handle_type_id.chuck_model.id
item.cutting_tool_parameter_detection_accuracy = item.handle_type_id.detection_accuracy
item.cutting_tool_parameter_detection_hardness = item.handle_type_id.detection_hardness
item.cutting_tool_parameter_standard_speed = item.handle_type_id.standard_speed
@api.onchange('chuck_type_id')
def _get_chuck_type_info(self):
for item in self:
item.cutting_tool_parameter_brand = item.chuck_type_id.brand.id
item.cutting_tool_parameter_outer_diameter = item.chuck_type_id.diameter
item.cutting_tool_parameter_inner_diameter = item.chuck_type_id.inner_diameter
item.cutting_tool_parameter_accuracy = item.chuck_type_id.accuracy
item.cutting_tool_parameter_nut = item.chuck_type_id.nut
item.cutting_tool_parameter_clamping_range = item.chuck_type_id.clamping_range
item.cutting_tool_parameter_handle_model = item.chuck_type_id.handle_model.id
item.cutting_tool_parameter_material_model = item.chuck_type_id.material_model.id
item.cutting_tool_parameter_height = item.chuck_type_id.height
item.cutting_tool_parameter_feature = item.chuck_type_id.detection_accuracy
item.cutting_tool_parameter_detection_hardness = item.chuck_type_id.detection_hardness
item.cutting_tool_parameter_standard_speed = item.chuck_type_id.standard_speed
class ResMrpBom(models.Model):
_inherit = 'mrp.bom'
@@ -393,9 +497,6 @@ class ResMrpBom(models.Model):
[('categ_id.type', '=', '原材料'), ('materials_type_id', '=', product.materials_type_id.id)])
return raw_bom
# @api.constrains('type')
# def _check_type(self):
# category = self.env['product.category'].search(