Merge branch refs/heads/develop into refs/heads/feature/设备维保
This commit is contained in:
@@ -17,8 +17,10 @@
|
||||
'views/base_view.xml',
|
||||
'views/common_view.xml',
|
||||
"views/menu_view.xml",
|
||||
"views/tool_base_views.xml",
|
||||
"views/tool_base_menu.xml",
|
||||
"views/tool_views.xml",
|
||||
"views/tool_menu.xml",
|
||||
# "views/tool_base_views.xml",
|
||||
# "views/tool_base_menu.xml",
|
||||
'views/fixture_base_view.xml',
|
||||
'views/menu_fixture_view.xml',
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
from . import base
|
||||
from . import common
|
||||
from . import tool_base
|
||||
# from . import tool_base
|
||||
from . import tool_base_new
|
||||
from . import fixture_base
|
||||
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
import logging
|
||||
|
||||
from odoo import fields, models, api
|
||||
from odoo.exceptions import UserError
|
||||
# from odoo.addons import sf_base, sf_common
|
||||
from datetime import datetime
|
||||
# from odoo.exceptions import UserError
|
||||
# # from odoo.addons import sf_base, sf_common
|
||||
# from datetime import datetime
|
||||
|
||||
|
||||
# 功能刀具物料
|
||||
@@ -24,7 +24,6 @@ class FunctionalCuttingTool(models.Model):
|
||||
|
||||
code = fields.Char('编码')
|
||||
name = fields.Char('名称')
|
||||
# 增加功能刀具类型、整体式刀具型号、刀片型号、刀杆型号、刀盘型号、刀柄型号、夹头型号、直径(mm)、刀具等级、加工精度(mm)、装刀长、刃数、整体刃长(mm)、有效刃长(mm)、最大寿命值、是否标准刀、适用范围
|
||||
functional_model_number = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型')
|
||||
integral_model_number = fields.Many2one('sf.integral.cutting.tool', string='整体式刀具型号')
|
||||
blade_model_number = fields.Many2one('sf.blade', string='刀片型号')
|
||||
|
||||
267
sf_base/models/tool_base_new.py
Normal file
267
sf_base/models/tool_base_new.py
Normal file
@@ -0,0 +1,267 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import fields, models, api
|
||||
# from datetime import datetime
|
||||
# from odoo.exceptions import ValidationError
|
||||
|
||||
|
||||
# 刀具物料
|
||||
class CuttingToolMaterial(models.Model):
|
||||
_name = 'sf.cutting.tool.material'
|
||||
_description = '刀具物料'
|
||||
|
||||
code = fields.Char('编码')
|
||||
name = fields.Char('名称')
|
||||
remark = fields.Char('备注')
|
||||
|
||||
|
||||
# 功能刀具
|
||||
class FunctionalCuttingTool(models.Model):
|
||||
_name = 'sf.functional.cutting.tool'
|
||||
_description = '功能刀具'
|
||||
|
||||
code = fields.Char('编码')
|
||||
name = fields.Char('名称')
|
||||
mrs_cutting_tool_type_id = fields.Many2one('sf.cutting.tool.type', string='功能刀具类型')
|
||||
mrs_cutting_tool_model_id = fields.Many2one('sf.cutting.tool.model', string='刀具型号')
|
||||
diameter = fields.Float('直径(mm)')
|
||||
tool_grade = fields.Selection([('1', 'P1'), ('2', 'P2'), ('3', 'P3'), ('4', 'P4'), ('5', 'P5'), ('6', 'P6')],
|
||||
string='刀具等级')
|
||||
machining_accuracy = fields.Float('加工精度(mm)')
|
||||
tool_length = fields.Float('装刀长')
|
||||
blade_number = fields.Integer('刃数')
|
||||
integral_blade_length = fields.Float('整体刃长(mm)')
|
||||
effective_blade_length = fields.Float('有效刃长(mm)')
|
||||
max_life = fields.Float('最大寿命值')
|
||||
is_standard = fields.Boolean('是否标准刀')
|
||||
applicable_range = fields.Char('适用范围')
|
||||
image = fields.Binary('图片')
|
||||
|
||||
|
||||
# 功能刀具类型
|
||||
class FunctionalCuttingToolModel(models.Model):
|
||||
_name = 'sf.functional.cutting.tool.model'
|
||||
_description = '功能刀具类型'
|
||||
|
||||
name = fields.Char('名称', required=True)
|
||||
code = fields.Char('编码', required=True)
|
||||
remark = fields.Char('备注')
|
||||
|
||||
|
||||
# 刀具型号
|
||||
class CuttingToolModel(models.Model):
|
||||
_name = 'sf.cutting.tool.model'
|
||||
_description = '刀具型号'
|
||||
|
||||
name = fields.Char('名称')
|
||||
code = fields.Char('编码')
|
||||
mrs_machine_brand_id = fields.Many2one('sf.machine.brand', '品牌')
|
||||
mrs_materials_model_id = fields.Many2one('sf.materials.model', '材料型号')
|
||||
# 关联刀具物料
|
||||
mrs_cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True)
|
||||
# 关联刀具物料名称
|
||||
mrs_cutting_tool_material_name = fields.Char(related='mrs_cutting_tool_material_id.name', string='刀具物料名称',
|
||||
store=True)
|
||||
# 关联刀具类型
|
||||
mrs_cutting_tool_type_id = fields.Many2one(
|
||||
'sf.cutting.tool.type', '刀具类型',
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', mrs_cutting_tool_material_name)]", required=True)
|
||||
|
||||
# 整体式刀具特有字段
|
||||
integral_code = fields.Char('整体式刀具编码')
|
||||
integral_total_length = fields.Float('总长度(mm)')
|
||||
integral_shank_length = fields.Float('柄部长度(mm)')
|
||||
integral_blade_length = fields.Float('刃部长度(mm)')
|
||||
integral_diameter = fields.Float('直径(mm)')
|
||||
integral_blade_number = fields.Integer('刃数')
|
||||
integral_front_angle = fields.Float('前角(°)')
|
||||
integral_rear_angle = fields.Float('后角(°)')
|
||||
integral_main_included_angle = fields.Float('主偏角(°)')
|
||||
integral_nut = fields.Float('配对螺母(mm)')
|
||||
integral_scope = fields.Char('适用范围')
|
||||
|
||||
# 刀片特有字段
|
||||
blade_code = fields.Char('刀片编码')
|
||||
blade_length = fields.Float('长度L(mm)')
|
||||
blade_width = fields.Float('宽度D(mm)')
|
||||
blade_height = fields.Float('高度T(mm)')
|
||||
blade_top_angle = fields.Float('顶角(°)')
|
||||
blade_front_angle = fields.Float('前角(°)')
|
||||
blade_rear_angle = fields.Float('后角(°)')
|
||||
blade_main_included_angle = fields.Float('主偏角(°)')
|
||||
blade_r_angle = fields.Float('R角(°)')
|
||||
blade_hardness = fields.Char('加工硬度')
|
||||
blade_radius = fields.Float('刀尖半径(mm)')
|
||||
blade_nut = fields.Float('配对螺母(mm)')
|
||||
mrs_cutting_tool_model_blade_cutter_bar_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='sf_cutting_tool_model_blade_cutter_bar_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '刀杆')]",
|
||||
string='适用刀杆型号',
|
||||
default=lambda self: [], # 使用空列表作为默认值
|
||||
)
|
||||
mrs_cutting_tool_model_blade_cutter_pad_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='sf_cutting_tool_model_blade_cutter_pad_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '刀盘')]",
|
||||
string='适用刀盘型号',
|
||||
default=lambda self: [], # 使用空列表作为默认值
|
||||
)
|
||||
|
||||
# 刀杆特有字段
|
||||
bar_code = fields.Char('刀杆编码', readonly=True)
|
||||
bar_c_diameter = fields.Float('C柄径(mm)')
|
||||
bar_total_length = fields.Float('L总长(mm)')
|
||||
bar_blade_number = fields.Integer('刃数')
|
||||
bar_d_diameter = fields.Float('D刃径(mm)')
|
||||
mrs_cutting_tool_model_bar_blade_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='sf_cutting_tool_model_bar_blade_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '刀片')]",
|
||||
string='适用刀片型号',
|
||||
default=lambda self: [], # 使用空列表作为默认值
|
||||
)
|
||||
bar_wrench = fields.Float('配对扳手(mm)')
|
||||
bar_screw = fields.Float('配备螺丝(mm)')
|
||||
bar_radius = fields.Float('刀尖圆角半径')
|
||||
bar_accuracy = fields.Char('精度等级')
|
||||
bar_hardness = fields.Char('硬度(°)')
|
||||
bar_scope = fields.Char('适用范围')
|
||||
|
||||
# 刀盘特有字段
|
||||
pad_code = fields.Char('刀盘编码', readonly=True)
|
||||
pad_c_diameter = fields.Float('C柄径(mm)')
|
||||
pad_total_length = fields.Float('L总长(mm)')
|
||||
pad_blade_number = fields.Integer('刃数')
|
||||
pad_d_diameter = fields.Float('D刃径(mm)')
|
||||
mrs_cutting_tool_model_pad_blade_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='sf_cutting_tool_model_pad_blade_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '刀片')]",
|
||||
string='适用刀片型号',
|
||||
default=lambda self: [], # 使用空列表作为默认值
|
||||
)
|
||||
pad_wrench = fields.Float('配对扳手(mm)')
|
||||
pad_screw = fields.Float('配备螺丝(mm)')
|
||||
pad_radius = fields.Float('刀尖圆角半径')
|
||||
pad_accuracy = fields.Char('精度等级')
|
||||
pad_hardness = fields.Char('硬度(°)')
|
||||
pad_scope = fields.Char('适用范围')
|
||||
|
||||
# 刀柄特有字段
|
||||
handle_code = fields.Char('刀柄编码', readonly=True)
|
||||
handle_length = fields.Float('L(mm)')
|
||||
handle_length1 = fields.Float('L1(mm)')
|
||||
handle_diameter1 = fields.Float('D1(mm)')
|
||||
handle_weight = fields.Float('重量(kg)')
|
||||
handle_body_accuracy = fields.Float('本体精度(mm)')
|
||||
handle_nut = fields.Float('配对螺母(mm)')
|
||||
mrs_cutting_tool_model_handle_chuck_model_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='sf_cutting_tool_model_handle_chuck_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '夹头')]",
|
||||
string='适用夹头型号',
|
||||
|
||||
)
|
||||
handle_clamping_range = fields.Float('夹持范围(mm)')
|
||||
handle_detection_accuracy = fields.Float('检测精度')
|
||||
handle_detection_hardness = fields.Char('检测硬度')
|
||||
handle_standard_speed = fields.Float('标准转速')
|
||||
|
||||
# 夹头特有字段
|
||||
chuck_code = fields.Char('夹头编码', readonly=True)
|
||||
chuck_accuracy = fields.Float('精度(mm)')
|
||||
chuck_diameter = fields.Float('外径(mm)')
|
||||
chuck_inner_diameter = fields.Float('内径(mm)')
|
||||
chuck_height = fields.Float('高度(mm)')
|
||||
chuck_nut = fields.Float('配对螺母(mm)')
|
||||
mrs_cutting_tool_model_chuck_handle_model_ids = fields.Many2many(
|
||||
'sf.cutting.tool.model',
|
||||
relation='sf_cutting_tool_model_chuck_handle_rel',
|
||||
column1='model_id_1',
|
||||
column2='model_id_2',
|
||||
domain="[('mrs_cutting_tool_material_id.name', '=', '刀柄')]",
|
||||
string='适用刀柄型号',
|
||||
default=lambda self: [], # 使用空列表作为默认值
|
||||
)
|
||||
chuck_clamping_range = fields.Float('夹持范围(mm)')
|
||||
chuck_feature = fields.Char('特性')
|
||||
|
||||
image = fields.Binary('图片')
|
||||
|
||||
hide_integral = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏整体式刀具')
|
||||
hide_blade = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀片')
|
||||
hide_cutter_bar = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀杆')
|
||||
hide_cutter_pad = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀盘')
|
||||
hide_handler = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀柄')
|
||||
hide_chuck = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏夹头')
|
||||
hide_model = fields.Boolean(compute='_compute_hide_model_number', default=True, string='隐藏型号')
|
||||
|
||||
@api.depends('mrs_cutting_tool_material_id')
|
||||
def _compute_hide_model_number(self):
|
||||
"""
|
||||
根据刀具物料类型,显示不同的字段
|
||||
"""
|
||||
for record in self:
|
||||
record.hide_integral = False
|
||||
record.hide_blade = False
|
||||
record.hide_cutter_bar = False
|
||||
record.hide_cutter_pad = False
|
||||
record.hide_handler = False
|
||||
record.hide_chuck = False
|
||||
record.hide_model = True
|
||||
|
||||
if record.mrs_cutting_tool_material_id and record.mrs_cutting_tool_material_id.name == '整体式刀具':
|
||||
record.hide_model = False
|
||||
record.hide_integral = True
|
||||
elif record.mrs_cutting_tool_material_id and record.mrs_cutting_tool_material_id.name == '刀片':
|
||||
record.hide_model = False
|
||||
record.hide_blade = True
|
||||
elif record.mrs_cutting_tool_material_id and record.mrs_cutting_tool_material_id.name == '刀杆':
|
||||
record.hide_model = False
|
||||
record.hide_cutter_bar = True
|
||||
elif record.mrs_cutting_tool_material_id and record.mrs_cutting_tool_material_id.name == '刀盘':
|
||||
record.hide_model = False
|
||||
record.hide_cutter_pad = True
|
||||
elif record.mrs_cutting_tool_material_id and record.mrs_cutting_tool_material_id.name == '刀柄':
|
||||
record.hide_model = False
|
||||
record.hide_handler = True
|
||||
elif record.mrs_cutting_tool_material_id and record.mrs_cutting_tool_material_id.name == '夹头':
|
||||
record.hide_model = False
|
||||
record.hide_chuck = True
|
||||
else:
|
||||
record.hide_model = True
|
||||
|
||||
|
||||
# 刀具类型
|
||||
class CuttingToolType(models.Model):
|
||||
_name = 'sf.cutting.tool.type'
|
||||
_description = '刀具类型'
|
||||
|
||||
code = fields.Char('编码')
|
||||
name = fields.Char('名称')
|
||||
# 关联刀具物料
|
||||
mrs_cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料')
|
||||
# 整体式刀具类型特有字段
|
||||
integral_tool_type_code = fields.Char('整体式刀具类型编码')
|
||||
# 刀片类型特有字段
|
||||
blade_type_code = fields.Char('刀片类型编码')
|
||||
# 刀杆类型特有字段
|
||||
bar_type_code = fields.Char('刀杆类型编码')
|
||||
# 刀盘类型特有字段
|
||||
pad_type_code = fields.Char('刀盘类型编码')
|
||||
# 刀柄类型特有字段
|
||||
handle_type_code = fields.Char('刀柄类型编码')
|
||||
# 夹头类型特有字段
|
||||
chuck_type_code = fields.Char('夹头类型编码')
|
||||
|
||||
remark = fields.Char('备注')
|
||||
@@ -15,21 +15,11 @@ access_sf_production_process_parameter,sf_production_process_parameter,model_sf_
|
||||
access_sf_production_process_category,sf_production_process_category,model_sf_production_process_category,base.group_user,1,1,1,1
|
||||
access_sf_machine_tool_category,sf_machine_tool_category,model_sf_machine_tool_category,base.group_user,1,1,1,1
|
||||
|
||||
access_sf_functional_cutting_tool,sf.functional.cutting.tool,model_sf_functional_cutting_tool,base.group_user,1,1,1,1
|
||||
access_sf_functional_cutting_tool_model,sf.functional.cutting.tool.model,model_sf_functional_cutting_tool_model,base.group_user,1,1,1,1
|
||||
access_sf_integral_cutting_tool,sf.integral.cutting.tool,model_sf_integral_cutting_tool,base.group_user,1,1,1,1
|
||||
access_sf_integral_cutting_tool_model,sf.integral.cutting.tool.model,model_sf_integral_cutting_tool_model,base.group_user,1,1,1,1
|
||||
access_sf_blade,sf.blade,model_sf_blade,base.group_user,1,1,1,1
|
||||
access_sf_blade_model,sf.blade.model,model_sf_blade_model,base.group_user,1,1,1,1
|
||||
access_sf_cutter_bar,sf.cutter.bar,model_sf_cutter_bar,base.group_user,1,1,1,1
|
||||
access_sf_cutter_bar_model,sf.cutter.bar.model,model_sf_cutter_bar_model,base.group_user,1,1,1,1
|
||||
access_sf_cutter_pad,sf.cutter.pad,model_sf_cutter_pad,base.group_user,1,1,1,1
|
||||
access_sf_cutter_pad_model,sf.cutter.pad.model,model_sf_cutter_pad_model,base.group_user,1,1,1,1
|
||||
access_sf_handle,sf.handle,model_sf_handle,base.group_user,1,1,1,1
|
||||
access_sf_handle_model,sf.handle.model,model_sf_handle_model,base.group_user,1,1,1,1
|
||||
access_sf_chuck,sf.chuck,model_sf_chuck,base.group_user,1,1,1,1
|
||||
access_sf_chuck_model,sf.chuck.model,model_sf_chuck_model,base.group_user,1,1,1,1
|
||||
access_sf_cutting_tool_material,sf.cutting.tool.material,model_sf_cutting_tool_material,base.group_user,1,1,1,1
|
||||
access_sf_cutting_tool_material,sf_cutting_tool_material,model_sf_cutting_tool_material,base.group_user,1,1,1,1
|
||||
access_sf_cutting_tool_type,sf_cutting_tool_type,model_sf_cutting_tool_type,base.group_user,1,1,1,1
|
||||
access_sf_cutting_tool_model,sf_cutting_tool_model,model_sf_cutting_tool_model,base.group_user,1,1,1,1
|
||||
access_sf_functional_cutting_tool,sf_functional_cutting_tool,model_sf_functional_cutting_tool,base.group_user,1,1,1,1
|
||||
access_sf_functional_cutting_tool_model,sf_functional_cutting_tool_model,model_sf_functional_cutting_tool_model,base.group_user,1,1,1,1
|
||||
|
||||
access_sf_fixture_setting_element,sf_fixture_setting_element,model_sf_fixture_setting_element,base.group_user,1,1,1,1
|
||||
access_sf_setting_element_type,sf_setting_element_type,model_sf_setting_element_type,base.group_user,1,1,1,1
|
||||
|
||||
|
@@ -19,4 +19,8 @@
|
||||
.o_inner_group .img-fluid {
|
||||
width: 133px !important;
|
||||
height: 133px !important;
|
||||
}
|
||||
|
||||
.o_search_panel.account_root {
|
||||
flex: unset !important;
|
||||
}
|
||||
@@ -35,7 +35,9 @@
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<!-- 刀具物料search view -->
|
||||
|
||||
|
||||
<!-- ================================================刀具物料视图================================================ -->
|
||||
<record model="ir.ui.view" id="view_cutting_tool_material_search">
|
||||
<field name="name">sf.cutting.tool.material.search</field>
|
||||
<field name="model">sf.cutting.tool.material</field>
|
||||
|
||||
89
sf_base/views/tool_menu.xml
Normal file
89
sf_base/views/tool_menu.xml
Normal file
@@ -0,0 +1,89 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<!-- 刀具物料action -->
|
||||
<record id="action_sf_cutting_tool_material" model="ir.actions.act_window">
|
||||
<field name="name">刀具物料</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.cutting.tool.material</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
<!-- 刀具类型action -->
|
||||
<record id="action_sf_cutting_tool_type" model="ir.actions.act_window">
|
||||
<field name="name">刀具类型</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.cutting.tool.type</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
<!-- 刀具型号action -->
|
||||
<record id="action_sf_cutting_tool" model="ir.actions.act_window">
|
||||
<field name="name">刀具型号</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.cutting.tool.model</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
<!-- 功能刀具action -->
|
||||
<record id="action_sf_functional_cutting_tool" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.cutting.tool</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
<!-- 功能刀具类型 -->
|
||||
<record id="action_sf_functional_cutting_tool_model_type" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具类型</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.cutting.tool.model</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<!-- 刀具 -->
|
||||
<menuitem
|
||||
id="menu_sf_cutting_tool"
|
||||
parent="menu_sf_base"
|
||||
name="刀具"
|
||||
sequence="3"
|
||||
/>
|
||||
<!-- 刀具物料 -->
|
||||
<menuitem
|
||||
id="menu_sf_cutting_tool_material"
|
||||
parent="menu_sf_base"
|
||||
name="刀具物料"
|
||||
sequence="6"
|
||||
action="action_sf_cutting_tool_material"
|
||||
/>
|
||||
<!-- 刀具类型 -->
|
||||
<menuitem
|
||||
id="menu_sf_cutting_tool_type"
|
||||
parent="menu_sf_base"
|
||||
name="刀具类型"
|
||||
sequence="10"
|
||||
action="action_sf_cutting_tool_type"
|
||||
/>
|
||||
<!-- 刀具型号 -->
|
||||
<menuitem
|
||||
id="menu_sf_integral_cutting_tool"
|
||||
parent="menu_sf_base"
|
||||
name="刀具型号"
|
||||
sequence="15"
|
||||
action="action_sf_cutting_tool"
|
||||
/>
|
||||
<!-- 功能刀具 -->
|
||||
<menuitem
|
||||
id="menu_sf_functional_cutting_tool"
|
||||
parent="menu_sf_base"
|
||||
name="功能刀具"
|
||||
sequence="21"
|
||||
action="action_sf_functional_cutting_tool"
|
||||
/>
|
||||
<!-- 功能刀具类型 -->
|
||||
<menuitem
|
||||
id="menu_sf_functional_cutting_tool_model_type"
|
||||
parent="menu_sf_base"
|
||||
name="功能刀具类型"
|
||||
sequence="26"
|
||||
action="action_sf_functional_cutting_tool_model_type"
|
||||
/>
|
||||
</data>
|
||||
</odoo>
|
||||
376
sf_base/views/tool_views.xml
Normal file
376
sf_base/views/tool_views.xml
Normal file
@@ -0,0 +1,376 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- ================================================刀具物料================================================ -->
|
||||
<record id="view_cutting_tool_material_tree" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.material.tree</field>
|
||||
<field name="model">sf.cutting.tool.material</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="刀具物料">
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="remark"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_cutting_tool_material_form" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.material.form</field>
|
||||
<field name="model">sf.cutting.tool.material</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="刀具物料">
|
||||
<sheet>
|
||||
<group col='1'>
|
||||
<group string='基本信息'>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="remark"/>
|
||||
</group>
|
||||
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_cutting_tool_material_search">
|
||||
<field name="name">sf.cutting.tool.material.search</field>
|
||||
<field name="model">sf.cutting.tool.material</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="刀具物料">
|
||||
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
|
||||
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================功能刀具================================================ -->
|
||||
<record id="view_functional_cutting_tool_tree" model="ir.ui.view">
|
||||
<field name="name">sf.functional.cutting.tool.tree</field>
|
||||
<field name="model">sf.functional.cutting.tool</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="功能刀具">
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_type_id"/>
|
||||
<field name="image" widget='image'/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_functional_cutting_tool_form" model="ir.ui.view">
|
||||
<field name="name">sf.functional.cutting.tool.form</field>
|
||||
<field name="model">sf.functional.cutting.tool</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="功能刀具">
|
||||
<sheet>
|
||||
<group col='1'>
|
||||
<group string='基本信息'>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_type_id" options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="mrs_cutting_tool_model_id" options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="image" nolabel="1" widget="image"/>
|
||||
</group>
|
||||
|
||||
</group>
|
||||
<group string='参数信息'>
|
||||
<group>
|
||||
<field name="diameter"/>
|
||||
<field name="tool_grade"/>
|
||||
<field name="machining_accuracy"/>
|
||||
<field name="tool_length"/>
|
||||
<field name="blade_number"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="integral_blade_length"/>
|
||||
<field name="effective_blade_length"/>
|
||||
<field name="max_life"/>
|
||||
<field name="is_standard"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string='其他信息'>
|
||||
<group>
|
||||
<field name="applicable_range"/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.ui.view" id="view_functional_cutting_tool_search">
|
||||
<field name="name">sf.functional.cutting.tool.search</field>
|
||||
<field name="model">sf.functional.cutting.tool</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="功能刀具">
|
||||
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- ================================================功能刀具类型================================================ -->
|
||||
<record id="view_cutter_function_tree" model="ir.ui.view">
|
||||
<field name="name">sf.cutter.function.tree</field>
|
||||
<field name="model">sf.functional.cutting.tool.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="功能刀具类型">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="remark"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_cutter_function_form" model="ir.ui.view">
|
||||
<field name="name">sf.cutter.function.form</field>
|
||||
<field name="model">sf.functional.cutting.tool.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="功能刀具类型">
|
||||
<sheet>
|
||||
<group string="功能刀具类型">
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="remark"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- 功能刀具类型搜索 -->
|
||||
<record model="ir.ui.view" id="view_cutter_function_search">
|
||||
<field name="name">sf.cutter.function.search</field>
|
||||
<field name="model">sf.functional.cutting.tool.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="功能刀具类型">
|
||||
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ================================================刀具型号================================================ -->
|
||||
<record id="view_cutting_tool_model_tree" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.model.tree</field>
|
||||
<field name="model">sf.cutting.tool.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="刀具型号">
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_material_id"/>
|
||||
<field name="image" widget='image'/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_cutting_tool_model_form" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.model.form</field>
|
||||
<field name="model">sf.cutting.tool.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="刀具型号">
|
||||
<sheet>
|
||||
<group col='1'>
|
||||
<group string='基本信息'>
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_material_id" options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="mrs_machine_brand_id" options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="mrs_materials_model_id" options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
<field name="mrs_cutting_tool_type_id" options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="image" nolabel="1" widget="image"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string='参数信息'>
|
||||
<group>
|
||||
<field name="hide_integral" invisible="1"/>
|
||||
<field name="hide_blade" invisible="1"/>
|
||||
<field name="hide_cutter_bar" invisible="1"/>
|
||||
<field name="hide_cutter_pad" invisible="1"/>
|
||||
<field name="hide_handler" invisible="1"/>
|
||||
<field name="hide_chuck" invisible="1"/>
|
||||
<field name="mrs_cutting_tool_material_name" invisible="1"/>
|
||||
|
||||
<field name="integral_total_length" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_shank_length" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_blade_length" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_diameter" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_blade_number" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
|
||||
<field name="blade_length" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_width" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_height" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_top_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_front_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_rear_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
|
||||
<field name="bar_c_diameter" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
<field name="bar_total_length" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
<field name="bar_blade_number" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
<field name="bar_d_diameter" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
<field name="bar_wrench" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
|
||||
|
||||
<field name="pad_c_diameter" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_total_length" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_blade_number" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_d_diameter" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_wrench" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
|
||||
|
||||
<field name="handle_length" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_length1" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_diameter1" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_weight" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_body_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
|
||||
<field name="chuck_accuracy" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
|
||||
<field name="chuck_diameter" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
|
||||
<field name="chuck_inner_diameter" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
|
||||
<field name="chuck_height" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
|
||||
|
||||
|
||||
</group>
|
||||
<group>
|
||||
|
||||
<field name="integral_front_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_rear_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_main_included_angle" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_nut" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
<field name="integral_scope" attrs="{'invisible': [('hide_integral', '=', False)], 'required': [('hide_integral', '!=', False)]}"/>
|
||||
|
||||
|
||||
<field name="blade_main_included_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_r_angle" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_hardness" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_radius" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
<field name="blade_nut" attrs="{'invisible': [('hide_blade', '=', False)], 'required': [('hide_blade', '!=', False)]}"/>
|
||||
|
||||
|
||||
<field name="bar_screw" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
<field name="bar_radius" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
<field name="bar_hardness" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
<field name="bar_scope" attrs="{'invisible': [('hide_cutter_bar', '=', False)], 'required': [('hide_cutter_bar', '!=', False)]}"/>
|
||||
|
||||
|
||||
<field name="pad_screw" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_radius" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_accuracy" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_hardness" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
<field name="pad_scope" attrs="{'invisible': [('hide_cutter_pad', '=', False)], 'required': [('hide_cutter_pad', '!=', False)]}"/>
|
||||
|
||||
|
||||
<field name="handle_nut" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_clamping_range" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_detection_accuracy" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_detection_hardness" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
<field name="handle_standard_speed" attrs="{'invisible': [('hide_handler', '=', False)], 'required': [('hide_handler', '!=', False)]}"/>
|
||||
|
||||
<field name="chuck_nut" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
|
||||
<field name="chuck_clamping_range" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
|
||||
<field name="chuck_feature" attrs="{'invisible': [('hide_chuck', '=', False)], 'required': [('hide_chuck', '!=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string='其他信息'>
|
||||
<group>
|
||||
<field name="mrs_cutting_tool_model_blade_cutter_bar_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_blade', '=', False)]}"/>
|
||||
<field name="mrs_cutting_tool_model_bar_blade_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_cutter_bar', '=', False)]}"/>
|
||||
<field name="mrs_cutting_tool_model_pad_blade_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_cutter_pad', '=', False)]}"/>
|
||||
<field name="mrs_cutting_tool_model_handle_chuck_model_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_handler', '=', False)]}"/>
|
||||
<field name="mrs_cutting_tool_model_chuck_handle_model_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_chuck', '=', False)]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="mrs_cutting_tool_model_blade_cutter_pad_ids" widget="many2many_tags" options="{'no_create': True, 'no_quick_create': True}" attrs="{'invisible': [('hide_blade', '=', False)]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- 刀具型号搜索 -->
|
||||
<record id="view_cutting_tool_model_search" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.model.search</field>
|
||||
<field name="model">sf.cutting.tool.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="刀具型号">
|
||||
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
|
||||
<searchpanel class="account_root">
|
||||
<field name="mrs_cutting_tool_material_id" icon="fa-filter"/>
|
||||
</searchpanel>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- ================================================刀具类型================================================ -->
|
||||
<record id="view_cutting_tool_type_tree" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.type.tree</field>
|
||||
<field name="model">sf.cutting.tool.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="刀具类型">
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_material_id"/>
|
||||
<field name="remark"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_cutting_tool_type_form" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.type.form</field>
|
||||
<field name="model">sf.cutting.tool.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="刀具类型">
|
||||
<sheet>
|
||||
<group string="刀具类型">
|
||||
<group>
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_material_id" options="{'no_create': True, 'no_quick_create': True}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="remark"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- 刀具类型搜索 -->
|
||||
<record id="view_cutting_tool_type_search" model="ir.ui.view">
|
||||
<field name="name">sf.cutting.tool.type.search</field>
|
||||
<field name="model">sf.cutting.tool.type</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="刀具类型">
|
||||
<field name="name" string="名称搜索" filter_domain="[('name','ilike',self)]"/>
|
||||
<field name="code" string="编码搜索" filter_domain="[('code','ilike',self)]"/>
|
||||
<searchpanel class="account_root">
|
||||
<field name="mrs_cutting_tool_material_id" icon="fa-filter"/>
|
||||
</searchpanel>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -154,137 +154,137 @@
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
|
||||
<record model="ir.cron" id="sf_cron17">
|
||||
<field name="name">同步整体式刀具型号</field>
|
||||
<field name="model_id" ref="model_sf_integral_cutting_tool"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_integral_cutting_tool()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron17"> -->
|
||||
<!-- <field name="name">同步整体式刀具型号</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_integral_cutting_tool"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_integral_cutting_tool()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron18">
|
||||
<field name="name">同步整体式刀具类型</field>
|
||||
<field name="model_id" ref="model_sf_integral_cutting_tool_model"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_integral_cutting_tool_model()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron18"> -->
|
||||
<!-- <field name="name">同步整体式刀具类型</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_integral_cutting_tool_model"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_integral_cutting_tool_model()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron19">
|
||||
<field name="name">同步刀片型号</field>
|
||||
<field name="model_id" ref="model_sf_blade"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_blade()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron19"> -->
|
||||
<!-- <field name="name">同步刀片型号</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_blade"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_blade()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron20">
|
||||
<field name="name">同步刀片类型</field>
|
||||
<field name="model_id" ref="model_sf_blade_model"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_blade_model()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron20"> -->
|
||||
<!-- <field name="name">同步刀片类型</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_blade_model"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_blade_model()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron21">
|
||||
<field name="name">同步刀杆型号</field>
|
||||
<field name="model_id" ref="model_sf_cutter_bar"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_cutter_bar()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron21"> -->
|
||||
<!-- <field name="name">同步刀杆型号</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_cutter_bar"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_cutter_bar()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron22">
|
||||
<field name="name">同步刀杆类型</field>
|
||||
<field name="model_id" ref="model_sf_cutter_bar_model"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_cutter_bar_model()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron22"> -->
|
||||
<!-- <field name="name">同步刀杆类型</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_cutter_bar_model"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_cutter_bar_model()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron23">
|
||||
<field name="name">同步刀盘型号</field>
|
||||
<field name="model_id" ref="model_sf_cutter_pad"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_cutter_pad()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron23"> -->
|
||||
<!-- <field name="name">同步刀盘型号</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_cutter_pad"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_cutter_pad()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron24">
|
||||
<field name="name">同步刀盘类型</field>
|
||||
<field name="model_id" ref="model_sf_cutter_pad_model"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_cutter_pad_model()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron24"> -->
|
||||
<!-- <field name="name">同步刀盘类型</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_cutter_pad_model"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_cutter_pad_model()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron25">
|
||||
<field name="name">同步刀柄型号</field>
|
||||
<field name="model_id" ref="model_sf_handle"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_handle()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron25"> -->
|
||||
<!-- <field name="name">同步刀柄型号</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_handle"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_handle()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron26">
|
||||
<field name="name">同步刀柄类型</field>
|
||||
<field name="model_id" ref="model_sf_handle_model"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_handle_model()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron26"> -->
|
||||
<!-- <field name="name">同步刀柄类型</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_handle_model"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_handle_model()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron27">
|
||||
<field name="name">同步夹头型号</field>
|
||||
<field name="model_id" ref="model_sf_chuck"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_chuck()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron27"> -->
|
||||
<!-- <field name="name">同步夹头型号</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_chuck"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_chuck()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron28">
|
||||
<field name="name">同步夹头类型</field>
|
||||
<field name="model_id" ref="model_sf_chuck_model"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">model.sync_chuck_model()</field>
|
||||
<field name="interval_number">1</field>
|
||||
<field name="interval_type">days</field>
|
||||
<field name="numbercall">-1</field>
|
||||
<field name="doall" eval="False"/>
|
||||
</record>
|
||||
<!-- <record model="ir.cron" id="sf_cron28"> -->
|
||||
<!-- <field name="name">同步夹头类型</field> -->
|
||||
<!-- <field name="model_id" ref="model_sf_chuck_model"/> -->
|
||||
<!-- <field name="state">code</field> -->
|
||||
<!-- <field name="code">model.sync_chuck_model()</field> -->
|
||||
<!-- <field name="interval_number">1</field> -->
|
||||
<!-- <field name="interval_type">days</field> -->
|
||||
<!-- <field name="numbercall">-1</field> -->
|
||||
<!-- <field name="doall" eval="False"/> -->
|
||||
<!-- </record> -->
|
||||
|
||||
<record model="ir.cron" id="sf_cron29">
|
||||
<field name="name">同步资源库夹紧元件型号</field>
|
||||
|
||||
@@ -42,18 +42,15 @@ class ResConfigSettings(models.TransientModel):
|
||||
_logger.info("同步资源库机床类型")
|
||||
# self.env['sf.production.process.parameter'].sync_all_production_process_parameter()
|
||||
# _logger.info("同步表面工艺参数")
|
||||
# _logger.info("定时同步每日功能刀具类型列表...")
|
||||
# # self.env['sf.functional.cutting.tool.model'].sync_functional_cutting_tool_model()
|
||||
# _logger.info("同步每日功能刀具类型完成")
|
||||
_logger.info("定时同步每日功能刀具类型列表...")
|
||||
# self.env['sf.functional.cutting.tool.model'].sync_functional_cutting_tool_model()
|
||||
_logger.info("同步每日功能刀具类型完成")
|
||||
_logger.info("同步所有功能刀具类型...")
|
||||
self.env['sf.functional.cutting.tool.model'].sync_all_functional_cutting_tool_model()
|
||||
_logger.info("同步所有功能刀具类型完成")
|
||||
# _logger.info("定时同步每日整体式刀具类型列表...")
|
||||
# # self.env['sf.integral.cutting.tool'].sync_integral_cutting_tool()
|
||||
# _logger.info("同步整体式刀具类型完成")
|
||||
# _logger.info("同步每日刀具物料...")
|
||||
# self.env['sf.cutting.tool.material'].sync_cutting_tool_material()
|
||||
# _logger.info("同步每日刀具物料完成")
|
||||
_logger.info("同步每日刀具物料...")
|
||||
self.env['sf.cutting.tool.material'].sync_cutting_tool_material()
|
||||
_logger.info("同步每日刀具物料完成")
|
||||
_logger.info("同步所有刀具物料...")
|
||||
self.env['sf.cutting.tool.material'].sync_all_cutting_tool_material()
|
||||
_logger.info("同步所有刀具物料完成")
|
||||
@@ -132,6 +129,21 @@ class ResConfigSettings(models.TransientModel):
|
||||
# _logger.info("同步每日同步功能刀具列表...")
|
||||
# self.env['sf.functional.cutting.tool'].sync_functional_cutting_tool()
|
||||
# _logger.info("同步每日功能刀具列表完成")
|
||||
_logger.info("同步每日刀具类型...")
|
||||
self.env['sf.cutting.tool.type'].sync_tool_type()
|
||||
_logger.info("同步每日刀具类型完成")
|
||||
_logger.info("同步所有刀具类型...")
|
||||
self.env['sf.cutting.tool.type'].sync_all_tool_type()
|
||||
_logger.info("同步所有刀具类型完成")
|
||||
_logger.info("同步每日刀具型号...")
|
||||
self.env['sf.cutting.tool.model'].sync_tool_model()
|
||||
_logger.info("同步每日刀具型号完成")
|
||||
_logger.info("同步所有刀具型号...")
|
||||
self.env['sf.cutting.tool.model'].sync_all_tool_model()
|
||||
_logger.info("同步所有刀具型号完成")
|
||||
_logger.info("同步每日同步功能刀具列表...")
|
||||
self.env['sf.functional.cutting.tool'].sync_functional_cutting_tool()
|
||||
_logger.info("同步每日功能刀具列表完成")
|
||||
_logger.info("同步所有功能刀具列表...")
|
||||
self.env['sf.functional.cutting.tool'].sync_all_functional_cutting_tool()
|
||||
_logger.info("同步所有功能刀具列表完成")
|
||||
@@ -149,7 +161,6 @@ class ResConfigSettings(models.TransientModel):
|
||||
_logger.info("捕获错误信息:%s" % e)
|
||||
raise ValidationError("数据错误导致同步失败,请联系管理员")
|
||||
|
||||
|
||||
@api.model
|
||||
def get_values(self):
|
||||
"""
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
5
sf_tool_management/__init__.py
Normal file
5
sf_tool_management/__init__.py
Normal file
@@ -0,0 +1,5 @@
|
||||
|
||||
|
||||
# -*-coding:utf-8-*-
|
||||
from . import models
|
||||
from . import wizard
|
||||
35
sf_tool_management/__manifest__.py
Normal file
35
sf_tool_management/__manifest__.py
Normal file
@@ -0,0 +1,35 @@
|
||||
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
{
|
||||
'name': '机企猫智能工厂 刀具管理',
|
||||
'version': '1.0',
|
||||
'summary': '智能工厂刀具管理',
|
||||
'sequence': 1,
|
||||
'description': """
|
||||
在本模块,定义了主要的角色、菜单、基础业务对象
|
||||
""",
|
||||
'category': 'sf',
|
||||
'website': 'https://www.sf.jikimo.com',
|
||||
'depends': ['account', 'sf_base', 'mrp'],
|
||||
'data': [
|
||||
'security/group_security.xml',
|
||||
'security/ir.model.access.csv',
|
||||
'wizard/wizard_view.xml',
|
||||
'views/tool_base_views.xml',
|
||||
'views/menu_view.xml',
|
||||
],
|
||||
'demo': [
|
||||
],
|
||||
'assets': {
|
||||
|
||||
'web.assets_qweb': [
|
||||
],
|
||||
|
||||
|
||||
},
|
||||
'license': 'LGPL-3',
|
||||
'installable': True,
|
||||
'application': False,
|
||||
'auto_install': False,
|
||||
}
|
||||
369
sf_tool_management/models/base.py
Normal file
369
sf_tool_management/models/base.py
Normal file
@@ -0,0 +1,369 @@
|
||||
|
||||
|
||||
|
||||
|
||||
class FunctionalCuttingToolEntity(models.Model):
|
||||
_name = 'sf.functional.cutting.tool.entity'
|
||||
_inherit = 'sf.functional.cutting.tool'
|
||||
_description = '功能刀具管理'
|
||||
|
||||
order = fields.Char(string='序')
|
||||
functional_cutting_tool_id = fields.Many2one('sf.functional.cutting.tool', string='功能刀具', invisible=True)
|
||||
# 功能刀具预警 特有字段
|
||||
install_tool_time = fields.Char("装刀时间")
|
||||
outbound_time = fields.Char('出库时间')
|
||||
on_board_time = fields.Char('上机时间')
|
||||
machine_tool_code = fields.Char('机台号')
|
||||
cutting_tool_code = fields.Char('刀位号')
|
||||
idle_time = fields.Char('闲置时长')
|
||||
alarm_value = fields.Char('报警值')
|
||||
used_value = fields.Char('已使用值')
|
||||
alarm_type = fields.Char('报警类型')
|
||||
alarm_time = fields.Char('报警时间')
|
||||
dispose_user = fields.Char('处理人')
|
||||
dispose_time = fields.Char('处理时间')
|
||||
dispose_func = fields.Char('处理方法/措施')
|
||||
remark = fields.Char('备注')
|
||||
|
||||
# 功能刀具出入库记录 特有字段
|
||||
thickness = fields.Selection([('1', '粗'), ('2', '中'), ('3', '精')], string='粗/中/精')
|
||||
max_life_span = fields.Char(string='最大寿命值')
|
||||
# alarm_value = fields.Char(string='报警值')
|
||||
# used_value = fields.Char(string='已使用值')
|
||||
current_state = fields.Char(string='当前状态')
|
||||
current_store_area = fields.Char(string='当前库区')
|
||||
current_store_place = fields.Char(string='当前库位')
|
||||
number = fields.Integer(string='数量')
|
||||
reason_application = fields.Char(string='申请原因')
|
||||
applicant = fields.Char(string='申请人')
|
||||
return_staff = fields.Char(string='归还人')
|
||||
return_time = fields.Date(string='归还入库时间')
|
||||
tool_state = fields.Char(string="刀具状态")
|
||||
tool_install_staff = fields.Char(string='装刀人')
|
||||
tool_install_time = fields.Datetime(string='装刀时间')
|
||||
receive_equipment = fields.Char(string='领用机台')
|
||||
receive_staff = fields.Char(string='领用人')
|
||||
receive_time = fields.Char(string='领用出库时间')
|
||||
# remark = fields.Text(string='备注/说明')
|
||||
|
||||
# 功能刀具实时分布
|
||||
tool_stock_num = fields.Text(string='刀具房库存数量')
|
||||
side_shelf_num = fields.Text(string='线边货架货架数量')
|
||||
on_tool_stock_num = fields.Text(string='机内刀库库存数量')
|
||||
tool_stock_total = fields.Text(string='合计')
|
||||
return_reuse_num_re = fields.Text(string='归还再用数量(精)')
|
||||
return_reuse_num_co = fields.Text(string='归还再用数量(粗)')
|
||||
return_processing_num = fields.Text(string='归还需磨削数量')
|
||||
return_total = fields.Text(string='合计')
|
||||
total = fields.Text(string='总计')
|
||||
|
||||
# remark = fields.Char(string='备注/说明')
|
||||
|
||||
# @api.onchange('functional_cutting_tool_id')
|
||||
# def get_functional_cutting_tool_info(self):
|
||||
# for item in self:
|
||||
# item.code = item.functional_cutting_tool_id.code,
|
||||
# item.name = item.functional_cutting_tool_id.name,
|
||||
# item.functional_model_number = item.functional_cutting_tool_id.functional_model_number,
|
||||
# item.integral_model_number = item.functional_cutting_tool_id.integral_model_number,
|
||||
# item.blade_model_number = item.functional_cutting_tool_id.blade_model_number,
|
||||
# item.cutterbar_model_number = item.functional_cutting_tool_id.cutterbar_model_number,
|
||||
# item.cutterpad_model_number = item.functional_cutting_tool_id.cutterpad_model_number,
|
||||
# item.handle_model_number = item.functional_cutting_tool_id.handle_model_number,
|
||||
# item.chuck_model_number = item.functional_cutting_tool_id.chuck_model_number,
|
||||
# item.diameter = item.functional_cutting_tool_id.diameter,
|
||||
# item.tool_grade = item.functional_cutting_tool_id.tool_grade,
|
||||
# item.machining_accuracy = item.functional_cutting_tool_id.machining_accuracy,
|
||||
# item.ctool_lengthode = item.functional_cutting_tool_id.tool_length,
|
||||
# item.blade_number = item.functional_cutting_tool_id.blade_number,
|
||||
# item.integral_blade_length = item.functional_cutting_tool_id.integral_blade_length,
|
||||
# item.effective_blade_length = item.functional_cutting_tool_id.effective_blade_length,
|
||||
# item.max_life = item.functional_cutting_tool_id.max_life,
|
||||
# item.is_standard = item.functional_cutting_tool_id.is_standard,
|
||||
# item.applicable_range = item.functional_cutting_tool_id.applicable_range,
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
|
||||
if not vals.get('order'):
|
||||
vals['order'] = self._generate_code()
|
||||
return super(FunctionalCuttingToolEntity, self).create(vals)
|
||||
|
||||
@api.model
|
||||
def _generate_code(self):
|
||||
last_tool = self.search([], order='id desc', limit=1)
|
||||
if last_tool:
|
||||
last_code = int(last_tool.code.split('-')[-1])
|
||||
new_code = '{:03d}'.format(last_code + 1)
|
||||
else:
|
||||
new_code = '001'
|
||||
return new_code
|
||||
|
||||
|
||||
class MachineTableToolChangingApply(models.Model):
|
||||
_name = 'sf.machine.table.tool.changing.apply'
|
||||
_description = '机床换刀申请'
|
||||
|
||||
apply_to_tool_change_ids = fields.One2many(
|
||||
'sf.tool.change.requirement.information',
|
||||
'tool_change_to_apply_id',
|
||||
string='换刀需求信息',
|
||||
attrs="{'invisible': 1}")
|
||||
|
||||
CNC_machine_table = fields.Char(string='CNC机床')
|
||||
# todo 机床类型和刀位号 为 Many2one
|
||||
machine_table_type = fields.Char(string='机床类型')
|
||||
machine_tool_code = fields.Char(string='机台号', attrs="{'invisible': 1}")
|
||||
cutter_spacing_code = fields.Char(string='刀位号')
|
||||
functional_tool_code = fields.Char(string='功能刀具编码')
|
||||
functional_tool_name = fields.Char(string='功能刀具名称')
|
||||
# todo 功能刀具类型为 Many2one
|
||||
functional_tool_type = fields.Char(string='功能刀具类型')
|
||||
diameter = fields.Char(string='直径')
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精')
|
||||
hilt_name = fields.Char(string='刀柄名称')
|
||||
hilt_code = fields.Char(string='刀柄编号')
|
||||
max_lifetime_value = fields.Char(string='最大寿命值')
|
||||
alarm_value = fields.Char(string='报警值')
|
||||
used_value = fields.Char(string='已使用值')
|
||||
functional_tool_status = fields.Selection([('正常', '正常'), ('异常', '异常')], string='功能刀具状态', default='正常')
|
||||
|
||||
replacement_tool_code = fields.Char(string='待换刀具编码')
|
||||
replacement_tool_name = fields.Char(string='待换刀具名称')
|
||||
replacement_tool_type = fields.Char(string='待换刀具类型')
|
||||
replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')],
|
||||
string='粗/中/精')
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧')
|
||||
applicant = fields.Char(string='申请人')
|
||||
used_tool_time = fields.Datetime(string='用刀时间')
|
||||
reason_for_applying = fields.Char(string='申请原因')
|
||||
remark = fields.Char(string='备注说明')
|
||||
|
||||
status = fields.Selection([('0', '未操作'), ('1', '已换刀申请'), ('2', '已转移')], string='操作状态', default='0')
|
||||
|
||||
@api.onchange('functional_tool_status')
|
||||
def automation_apply_for_tool_change(self):
|
||||
"""
|
||||
自动申请换刀
|
||||
:return:
|
||||
"""
|
||||
# 更新数据到机台换刀申请界面
|
||||
# todo 换刀申请条件需补充完善
|
||||
if(self.functional_tool_status == '异常'):
|
||||
self.env['sf.machine.table.tool.changing.apply'].search([
|
||||
('CNC_machine_table', '=', self.CNC_machine_table)]).write({
|
||||
'replacement_tool_code': self.functional_tool_code,
|
||||
'replacement_tool_name': self.functional_tool_name,
|
||||
'replacement_tool_type': self.functional_tool_type,
|
||||
'replacement_tool_coarse_middle_thin': self.coarse_middle_thin,
|
||||
'new_former': '0',
|
||||
'applicant': None,
|
||||
'used_tool_time': fields.Datetime.now(),
|
||||
'reason_for_applying': None,
|
||||
'remark': None,
|
||||
'status': '1'
|
||||
})
|
||||
|
||||
# 新建组装任务
|
||||
self.env['sf.functional.tool.assembly'].create({
|
||||
'functional_tool_code': self.functional_tool_code,
|
||||
'functional_tool_name': self.functional_tool_name,
|
||||
'functional_tool_type': self.functional_tool_type,
|
||||
'functional_tool_diameter': self.diameter,
|
||||
'loading_task_source': '1',
|
||||
'applicant': self.applicant,
|
||||
'reason_for_applying': self.reason_for_applying,
|
||||
'use_tool_time': self.used_tool_time,
|
||||
'machine_tool_name': self.CNC_machine_table,
|
||||
'machine_tool_code': self.machine_tool_code,
|
||||
'cutter_spacing_code': self.cutter_spacing_code
|
||||
})
|
||||
|
||||
|
||||
|
||||
def new_assembly_task(self,vals):
|
||||
"""
|
||||
新建组装任务
|
||||
:param vals:
|
||||
:return:
|
||||
"""
|
||||
# todo 增加设置直径的值
|
||||
# tool_changing_apply = self.env['sf.machine.table.tool.changing.apply'].search(
|
||||
# [('CNC_machine_table', '=', vals.get('CNC_machine_table'))])
|
||||
# for i in tool_changing_apply:
|
||||
# print(i)
|
||||
# vals['functional_tool_diameter'] = self.diameter
|
||||
|
||||
self.env['sf.functional.tool.assembly'].create(vals)
|
||||
|
||||
|
||||
def revocation_1(self):
|
||||
"""
|
||||
换刀申请撤回按键
|
||||
:return:
|
||||
"""
|
||||
# 撤回数据更新
|
||||
self.env['sf.machine.table.tool.changing.apply'].search([('CNC_machine_table', '=', self.CNC_machine_table)]).write({
|
||||
'replacement_tool_code': None,
|
||||
'replacement_tool_name': None,
|
||||
'replacement_tool_type': None,
|
||||
'replacement_tool_coarse_middle_thin': None,
|
||||
'new_former': None,
|
||||
'applicant': None,
|
||||
'used_tool_time': None,
|
||||
'reason_for_applying': None,
|
||||
'remark': None,
|
||||
'status': '0'
|
||||
})
|
||||
|
||||
# 撤回功能刀具组装创建新任务
|
||||
self.env['sf.functional.tool.assembly'].search(
|
||||
[('functional_tool_code', '=', self.functional_tool_code)]).unlink()
|
||||
|
||||
|
||||
def revocation_2(self):
|
||||
"""
|
||||
转移撤回按键
|
||||
:return:
|
||||
"""
|
||||
self.env['sf.machine.table.tool.changing.apply'].search(
|
||||
[('CNC_machine_table', '=', self.CNC_machine_table)]).write({
|
||||
'status': '0'
|
||||
})
|
||||
|
||||
|
||||
class CAMWorkOrderProgramKnifePlan(models.Model):
|
||||
_name = 'sf.cam.work.order.program.knife.plan'
|
||||
_description = 'CAM工单程序用刀计划'
|
||||
|
||||
ticket_task_code = fields.Char(string='工单任务编号')
|
||||
cam_procedure_code = fields.Char(string='CAM程序编号')
|
||||
cam_cutter_spacing_code = fields.Char(string='CAM刀位号')
|
||||
functional_tool_code = fields.Char(string='功能刀具编码')
|
||||
functional_tool_name = fields.Char(string='功能刀具名称')
|
||||
functional_tool_type = fields.Char(string='功能刀具类型')
|
||||
machine_table_name = fields.Char(string='机床名称')
|
||||
machine_tool_cutter_spacing_code = fields.Char(string='机床刀位号')
|
||||
diameter = fields.Char(string='直径(程式)')
|
||||
tool_loading_length = fields.Char(string='装刀长')
|
||||
clearance_length = fields.Char(string='避空长')
|
||||
tool_included_angle = fields.Char(string='刀尖角(R角)')
|
||||
L_D = fields.Char(string='L/D')
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精')
|
||||
required_cutting_time = fields.Char(string='需要切割时间')
|
||||
whether_standard_tool = fields.Boolean(string='是否标准刀')
|
||||
need_knife_time = fields.Datetime(string='需要用刀时间')
|
||||
plan_execute_status = fields.Selection([('0', '待下发'), ('1', '执行中'), ('2', '已完成')], string='计划执行状态')
|
||||
applicant = fields.Char(string='申请人')
|
||||
reason_for_applying = fields.Char(string='申请原因')
|
||||
remark = fields.Char(string='备注说明')
|
||||
|
||||
def automation_apply_for_tooling(self):
|
||||
"""
|
||||
todo 自动申请装刀
|
||||
:return:
|
||||
"""
|
||||
self.env['sf.functional.tool.assembly'].create({
|
||||
'functional_tool_code': self.functional_tool_code,
|
||||
'functional_tool_name': self.functional_tool_name,
|
||||
'functional_tool_type': self.functional_tool_type,
|
||||
'functional_tool_diameter': self.diameter,
|
||||
'functional_tool_length': self.tool_loading_length,
|
||||
'loading_task_source': '0',
|
||||
'coarse_middle_thin': None,
|
||||
'tool_loading_length': None,
|
||||
'applicant': self.applicant,
|
||||
'reason_for_applying': self.reason_for_applying,
|
||||
'use_tool_time': self.need_knife_time,
|
||||
'machine_tool_name': self.machine_table_name,
|
||||
'machine_tool_code': self.cam_procedure_code,
|
||||
'cutter_spacing_code': self.cam_cutter_spacing_code
|
||||
})
|
||||
|
||||
# 将计划执行状态改为执行中
|
||||
self.env['sf.cam.work.order.program.knife.plan'].search(
|
||||
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '1'})
|
||||
|
||||
def revocation(self):
|
||||
"""
|
||||
撤回装刀申请
|
||||
:return:
|
||||
"""
|
||||
self.env['sf.functional.tool.assembly'].search(
|
||||
[('functional_tool_code', '=', self.functional_tool_code)]).unlink()
|
||||
|
||||
# 将计划执行状态改为待执行
|
||||
self.env['sf.cam.work.order.program.knife.plan'].search(
|
||||
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '0'})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class FunctionalToolAssembly(models.Model):
|
||||
_name = 'sf.functional.tool.assembly'
|
||||
_description = '功能刀具组装'
|
||||
|
||||
functional_tool_code = fields.Char(string='功能刀具编码')
|
||||
functional_tool_name = fields.Char(string='功能刀具名称')
|
||||
functional_tool_type = fields.Char(string='功能刀具类型')
|
||||
functional_tool_diameter = fields.Char(string='功能刀具直径')
|
||||
functional_tool_length = fields.Char(string='功能刀具伸出长')
|
||||
functional_tool_cutting_type = fields.Char(string='功能刀具切削类型')
|
||||
|
||||
tool_name = fields.Char(string='刀具名称')
|
||||
tool_brand = fields.Char(string='品牌')
|
||||
tool_type = fields.Char(string='型号')
|
||||
knife_handle_name = fields.Char(string='刀柄名称')
|
||||
knife_handle_brand = fields.Char(string='品牌')
|
||||
knife_handle_type = fields.Char(string='型号')
|
||||
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精')
|
||||
tool_loading_length = fields.Char(string='装刀长')
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧')
|
||||
reference_length = fields.Char(string='参考伸出长')
|
||||
cut_time = fields.Char(string='已切削时间')
|
||||
cut_length = fields.Char(string='已切削长度')
|
||||
cut_number = fields.Char(string='已切削次数')
|
||||
|
||||
loading_task_source = fields.Selection([('0', 'CAM装刀'), ('1', '机台换刀')], string='装刀任务来源')
|
||||
applicant = fields.Char(string='申请人')
|
||||
reason_for_applying = fields.Char(string='申请原因')
|
||||
apply_time = fields.Datetime(string='申请时间', default=fields.Datetime.now())
|
||||
|
||||
assemble_status = fields.Selection([('0', '待组装'), ('1', '已组装'), ('2', '已出库')],string='组装状态', default='0')
|
||||
use_tool_time = fields.Datetime(string='用刀时间')
|
||||
production_line_name = fields.Char(string='产线名称')
|
||||
machine_tool_name = fields.Char(string='机床名称')
|
||||
machine_tool_code = fields.Char(string='机台号')
|
||||
cutter_spacing_code = fields.Char(string='刀位号')
|
||||
tool_loading_person = fields.Char(string='装刀人')
|
||||
tool_loading_time = fields.Datetime(string='装刀时间')
|
||||
receive_person = fields.Char(string='领用人')
|
||||
receive_time = fields.Datetime(string='领用出库时间')
|
||||
remark = fields.Char(string='备注说明')
|
||||
|
||||
def cancel_functional_tool_assembly(self):
|
||||
"""
|
||||
取消功能刀具组装
|
||||
:return:
|
||||
"""
|
||||
self.env['sf.functional.tool.assembly'].search([
|
||||
('machine_tool_name', '=', self.machine_tool_name),
|
||||
('cutter_spacing_code', '=', self.cutter_spacing_code)
|
||||
]).write({
|
||||
'tool_name': None,
|
||||
'tool_brand': None,
|
||||
'tool_type': None,
|
||||
'knife_handle_name': None,
|
||||
'knife_handle_brand': None,
|
||||
'knife_handle_type': None,
|
||||
'coarse_middle_thin': None,
|
||||
'tool_loading_length': None,
|
||||
'new_former': None,
|
||||
'reference_length': None,
|
||||
'cut_time': None,
|
||||
'cut_length': None,
|
||||
'cut_number': None,
|
||||
'assemble_status': '0'
|
||||
})
|
||||
18
sf_tool_management/security/ir.model.access.csv
Normal file
18
sf_tool_management/security/ir.model.access.csv
Normal file
@@ -0,0 +1,18 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_sf_functional_cutting_tool_entity,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,base.group_user,1,1,1,1
|
||||
access_sf_cam_work_order_program_knife_plan,sf.cam.work.order.program.knife.plan,model_sf_cam_work_order_program_knife_plan,base.group_user,1,1,1,1
|
||||
access_sf_machine_table_tool_changing_apply,sf.machine.table.tool.changing.apply,model_sf_machine_table_tool_changing_apply,base.group_user,1,1,1,1
|
||||
|
||||
|
||||
access_sf_tool_change_requirement_information,sf.tool.change.requirement.information,model_sf_tool_change_requirement_information,base.group_user,1,1,1,1
|
||||
access_sf_tool_transfer_request_information,sf.tool.transfer.request.information,model_sf_tool_transfer_request_information,base.group_user,1,1,1,1
|
||||
access_sf_apply_for_tooling,sf.apply.for.tooling,model_sf_apply_for_tooling,base.group_user,1,1,1,1
|
||||
|
||||
access_sf_functional_tool_assembly,sf.functional.tool.assembly,model_sf_functional_tool_assembly,base.group_user,1,1,1,1
|
||||
access_sf_functional_tool_assembly_order,sf.functional.tool.assembly.order,model_sf_functional_tool_assembly_order,base.group_user,1,1,1,1
|
||||
access_sf_delivery_of_cargo_from_storage,sf.delivery.of.cargo.from.storage,model_sf_delivery_of_cargo_from_storage,base.group_user,1,1,1,1
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
82
sf_tool_management/views/menu_view.xml
Normal file
82
sf_tool_management/views/menu_view.xml
Normal file
@@ -0,0 +1,82 @@
|
||||
|
||||
<record id="action_sf_functional_cutting_tool_warning" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具预警</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="view_mode">tree</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<menuitem id="menu_sf_tool_manage"
|
||||
name="刀具管理"
|
||||
groups="mrp.group_mrp_routings"
|
||||
parent="mrp.menu_mrp_root"
|
||||
sequence="20"/>
|
||||
<menuitem
|
||||
id="menu_sf_functional_cutting_tool"
|
||||
parent="menu_sf_tool_manage"
|
||||
name="功能刀具列表"
|
||||
sequence="3"
|
||||
action="sf_function_tool_entry_list_view_act"
|
||||
/>
|
||||
|
||||
|
||||
<menuitem
|
||||
id="menu_sf_functional_cutting_tool_warning"
|
||||
parent="menu_sf_tool_manage"
|
||||
name="功能刀具预警"
|
||||
sequence="4"
|
||||
action="action_sf_functional_cutting_tool_warning"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
sequence="6"
|
||||
name="功能刀具实时分布"
|
||||
id="menu_sf_functional_tool_real_time_distribution"
|
||||
action="sf_functional_tool_real_time_distribution_view_act"
|
||||
parent="menu_sf_tool_manage"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
sequence="10"
|
||||
name="功能刀具出入库记录"
|
||||
id="menu_sf_function_tool_entry_exit_records"
|
||||
action="sf_function_tool_entry_exit_records_view_act"
|
||||
parent="menu_sf_tool_manage"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
sequence="0"
|
||||
name="功能刀具计划"
|
||||
id="menu_sf_function_tool_plan"
|
||||
parent="menu_sf_tool_manage"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
sequence="10"
|
||||
name="CAM工单程序用刀计划"
|
||||
id="menu_sf_cam_work_order_program_knife_plan"
|
||||
action="sf_cam_work_order_program_knife_plan_view_act"
|
||||
parent="menu_sf_function_tool_plan"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
sequence="0"
|
||||
name="机床换刀申请"
|
||||
id="menu_sf_machine_table_tool_changing_apply"
|
||||
action="sf_machine_table_tool_changing_apply_view_act"
|
||||
parent="menu_sf_function_tool_plan"
|
||||
/>
|
||||
|
||||
<menuitem
|
||||
sequence="2"
|
||||
name="功能刀具组装"
|
||||
id="menu_sf_functional_tool_assembly"
|
||||
action="sf_functional_tool_assembly_view_act"
|
||||
parent="menu_sf_tool_manage"
|
||||
/>
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
510
sf_tool_management/views/tool_base_views.xml
Normal file
510
sf_tool_management/views/tool_base_views.xml
Normal file
@@ -0,0 +1,510 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!--========================================功能刀具列表========================================-->
|
||||
<record id="view_functional_cutting_tool_list_tree" model="ir.ui.view">
|
||||
<field name="name">sf.functional.cutting.tool.entity.list.tree</field>
|
||||
<field name="model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="功能刀具">
|
||||
<field name="code" />
|
||||
<field name="name" />
|
||||
<field name="mrs_cutting_tool_type_id" />
|
||||
<field name="mrs_cutting_tool_model_id"/>
|
||||
<field name="diameter" optional="show"/>
|
||||
<field name="tool_grade" optional="show"/>
|
||||
<field name="machining_accuracy" optional="hide"/>
|
||||
<field name="tool_length" optional="show"/>
|
||||
<field name="blade_number" optional="show"/>
|
||||
<field name="integral_blade_length" optional="show"/>
|
||||
<field name="effective_blade_length" optional="show"/>
|
||||
<field name="max_life" optional="show"/>
|
||||
<field name="is_standard" optional="show"/>
|
||||
<field name="applicable_range" optional="show"/>
|
||||
<field name="image" widget='image' optional="show"/>
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_function_tool_entry_list_view_act" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具列表</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_functional_cutting_tool_list_tree"/>
|
||||
</record>
|
||||
|
||||
<!-- ======================================== 功能刀具预警========================================-->
|
||||
<record id="view_functional_cutting_tool_warning_tree" model="ir.ui.view">
|
||||
<field name="name">sf.functional.cutting.tool.entity.tree</field>
|
||||
<field name="model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="功能刀具">
|
||||
<field name="code" />
|
||||
<field name="name" />
|
||||
<field name="mrs_cutting_tool_type_id" />
|
||||
<field name="mrs_cutting_tool_model_id"/>
|
||||
<field name="install_tool_time" optional="show"/>
|
||||
<field name="outbound_time" optional="show"/>
|
||||
<field name="machining_accuracy" optional="hide"/>
|
||||
<field name="on_board_time" optional="show"/>
|
||||
<field name="machine_tool_code" optional="show"/>
|
||||
<field name="cutting_tool_code" optional="show"/>
|
||||
<field name="idle_time" optional="show"/>
|
||||
<field name="alarm_value" optional="show"/>
|
||||
<field name="used_value" optional="show"/>
|
||||
<field name="alarm_type" optional="show"/>
|
||||
<field name="alarm_time" optional="show"/>
|
||||
<field name="dispose_user" optional="show"/>
|
||||
<field name="dispose_time" optional="show"/>
|
||||
<field name="dispose_func" optional="show"/>
|
||||
<field name="remark" optional="show"/>
|
||||
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- ========================================功能刀具出入库记录================================================================== -->
|
||||
|
||||
<record id="sf_function_tool_entry_exit_records_view_tree" model="ir.ui.view">
|
||||
<field name="name">功能刀具出入库记录</field>
|
||||
<field name="model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<!-- <field name="order"/>-->
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_type_id"/>
|
||||
<field name="mrs_cutting_tool_model_id"/>
|
||||
<field name="diameter" optional="hide"/>
|
||||
<field name="tool_grade" optional="hide"/>
|
||||
<field name="machining_accuracy" optional="hide"/>
|
||||
<field name="tool_length" optional="hide"/>
|
||||
<field name="blade_number" optional="hide"/>
|
||||
<field name="integral_blade_length" optional="hide"/>
|
||||
<field name="effective_blade_length" optional="hide"/>
|
||||
<field name="max_life" optional="hide"/>
|
||||
<field name="is_standard" optional="hide"/>
|
||||
<field name="applicable_range" optional="hide"/>
|
||||
<field name="thickness" optional="show"/>
|
||||
<field name="max_life_span" optional="show"/>
|
||||
<field name="alarm_value" optional="show"/>
|
||||
<field name="used_value" optional="show"/>
|
||||
<field name="current_state" optional="show"/>
|
||||
<field name="current_store_area" optional="show"/>
|
||||
<field name="current_store_place" optional="show"/>
|
||||
<field name="number" optional="show"/>
|
||||
<field name="reason_application" optional="show"/>
|
||||
<field name="applicant" optional="show"/>
|
||||
<field name="return_staff" optional="show"/>
|
||||
<field name="return_time" optional="show"/>
|
||||
<field name="tool_state" optional="show"/>
|
||||
<field name="tool_install_staff" optional="show"/>
|
||||
<field name="tool_install_time" optional="show"/>
|
||||
<field name="receive_equipment" optional="show"/>
|
||||
<field name="receive_staff" optional="show"/>
|
||||
<field name="receive_time" optional="show"/>
|
||||
<field name="remark" optional="show"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_function_tool_entry_exit_records_view_act" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具出入库记录</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="sf_function_tool_entry_exit_records_view_tree"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- =====================================功能刀具实时分布============================================================= -->
|
||||
<record id="sf_functional_tool_real_time_distribution_view_tree" model="ir.ui.view">
|
||||
<field name="name">功能刀具实时分布</field>
|
||||
<field name="model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<!-- <field name="order"/>-->
|
||||
<field name="code"/>
|
||||
<field name="name"/>
|
||||
<field name="mrs_cutting_tool_type_id"/>
|
||||
<field name="mrs_cutting_tool_model_id"/>
|
||||
<field name="diameter" optional="hide"/>
|
||||
<field name="tool_grade" optional="hide"/>
|
||||
<field name="machining_accuracy" optional="hide"/>
|
||||
<field name="tool_length" optional="hide"/>
|
||||
<field name="blade_number" optional="hide"/>
|
||||
<field name="integral_blade_length" optional="hide"/>
|
||||
<field name="effective_blade_length" optional="hide"/>
|
||||
<field name="max_life" optional="hide"/>
|
||||
<field name="is_standard" optional="hide"/>
|
||||
<field name="applicable_range" optional="hide"/>
|
||||
<field name="tool_stock_num" optional="show"/>
|
||||
<field name="side_shelf_num" optional="show"/>
|
||||
<field name="on_tool_stock_num" optional="show"/>
|
||||
<field name="tool_stock_total" optional="show"/>
|
||||
<field name="return_reuse_num_re" optional="show"/>
|
||||
<field name="return_reuse_num_co" optional="show"/>
|
||||
<field name="return_processing_num" optional="show"/>
|
||||
<field name="return_total" optional="show"/>
|
||||
<field name="total" optional="show"/>
|
||||
<field name="remark" optional="show"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_functional_tool_real_time_distribution_view_act" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具实时分布</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.cutting.tool.entity</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="sf_functional_tool_real_time_distribution_view_tree"/>
|
||||
</record>
|
||||
|
||||
|
||||
<!--================================================机床换刀申请================================================-->
|
||||
<record id="sf_machine_table_tool_changing_apply_tree" model="ir.ui.view">
|
||||
<field name="name">机床换刀申请</field>
|
||||
<field name="model">sf.machine.table.tool.changing.apply</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="CNC_machine_table"/>
|
||||
<field name="machine_tool_code" invisible="1"/>
|
||||
<field name="machine_table_type"/>
|
||||
<field name="cutter_spacing_code"/>
|
||||
<field name="functional_tool_code"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type"/>
|
||||
<field name="diameter"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
<field name="hilt_name"/>
|
||||
<field name="hilt_code"/>
|
||||
<field name="max_lifetime_value"/>
|
||||
<field name="alarm_value"/>
|
||||
<field name="used_value"/>
|
||||
<field name="functional_tool_status"/>
|
||||
<field name="status" invisible="1"/>
|
||||
|
||||
<button string="换刀申请"
|
||||
name="%(sf_tool_management.sf_tool_change_requirement_information_act)d"
|
||||
type="action"
|
||||
context="{ 'default_CNC_machine_table':CNC_machine_table,
|
||||
'default_machine_tool_code': machine_tool_code,
|
||||
'default_cutter_spacing_code': cutter_spacing_code,
|
||||
'default_replacement_tool_code': functional_tool_code,
|
||||
'default_replacement_tool_name': functional_tool_name,
|
||||
'default_replacement_tool_type': functional_tool_type,
|
||||
'default_replacement_tool_coarse_middle_thin': coarse_middle_thin}"
|
||||
attrs="{'invisible': [('status', '!=', '0')]}"
|
||||
class="btn-primary"
|
||||
/>
|
||||
<button string="换刀申请" name="" attrs="{'invisible': [('status', '=', '0')]}" class="btn-primary"/>
|
||||
|
||||
<button string="转移"
|
||||
name="%(sf_tool_management.sf_tool_transfer_request_information_act)d"
|
||||
type="action"
|
||||
context="{ 'default_CNC_machine_table':CNC_machine_table,
|
||||
'default_machine_tool_code': machine_tool_code,
|
||||
'default_cutter_spacing_code': cutter_spacing_code,
|
||||
'default_functional_tool_code': functional_tool_code,
|
||||
'default_functional_tool_name': functional_tool_name,
|
||||
'default_functional_tool_type': functional_tool_type}"
|
||||
class="btn-primary"
|
||||
attrs="{'invisible': [('status', '!=', '0')]}"
|
||||
/>
|
||||
<button string="转移" name="" class="btn-primary" attrs="{'invisible': [('status', '=', '0')]}"/>
|
||||
<button string="撤回" name="" class="btn-primary" attrs="{'invisible': [('status', '!=', '0')]}"/>
|
||||
<button string="撤回" name="revocation_1" type="object" class="btn-primary" attrs="{'invisible': [('status', '!=', '1')]}"/>
|
||||
<button string="撤回" name="revocation_2" type="object" class="btn-primary" attrs="{'invisible': [('status', '!=', '2')]}"/>
|
||||
|
||||
<field name="replacement_tool_code"/>
|
||||
<field name="replacement_tool_name"/>
|
||||
<field name="replacement_tool_type"/>
|
||||
<field name="replacement_tool_coarse_middle_thin"/>
|
||||
<field name="new_former"/>
|
||||
<field name="applicant"/>
|
||||
<field name="used_tool_time"/>
|
||||
<field name="reason_for_applying"/>
|
||||
<field name="remark"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_machine_table_tool_changing_apply_search" model="ir.ui.view" >
|
||||
<field name="model">sf.machine.table.tool.changing.apply</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="CNC_machine_table"/>
|
||||
<field name="machine_tool_code" invisible="1"/>
|
||||
<field name="machine_table_type"/>
|
||||
<field name="cutter_spacing_code"/>
|
||||
<field name="functional_tool_code"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type"/>
|
||||
<field name="diameter"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
<field name="hilt_name"/>
|
||||
<field name="hilt_code"/>
|
||||
<field name="max_lifetime_value"/>
|
||||
<field name="alarm_value"/>
|
||||
<field name="used_value"/>
|
||||
<field name="functional_tool_status"/>
|
||||
<field name="replacement_tool_code"/>
|
||||
<field name="replacement_tool_name"/>
|
||||
<field name="replacement_tool_type"/>
|
||||
<field name="replacement_tool_coarse_middle_thin"/>
|
||||
<field name="new_former"/>
|
||||
<field name="applicant"/>
|
||||
<field name="used_tool_time"/>
|
||||
<field name="reason_for_applying"/>
|
||||
<field name="remark"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- <record id="sf_machine_table_tool_changing_apply_search" model="ir.ui.view">-->
|
||||
|
||||
<record id="sf_machine_table_tool_changing_apply_view_act" model="ir.actions.act_window">
|
||||
<field name="name">机床换刀申请</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.machine.table.tool.changing.apply</field>
|
||||
<field name="view_mode">tree,form,search</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!--================================================CAM工单程序用刀计划================================================-->
|
||||
<record id="sf_CAM_work_order_program_knife_plan_tree" model="ir.ui.view">
|
||||
<field name="name">CAM工单程序用刀计划</field>
|
||||
<field name="model">sf.cam.work.order.program.knife.plan</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="ticket_task_code"/>
|
||||
<field name="cam_procedure_code"/>
|
||||
<field name="cam_cutter_spacing_code"/>
|
||||
<field name="functional_tool_code"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type"/>
|
||||
<field name="machine_table_name"/>
|
||||
<field name="machine_tool_cutter_spacing_code"/>
|
||||
<field name="diameter"/>
|
||||
<field name="tool_loading_length"/>
|
||||
<field name="clearance_length"/>
|
||||
<field name="tool_included_angle"/>
|
||||
<field name="L_D"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
<field name="required_cutting_time"/>
|
||||
<field name="whether_standard_tool"/>
|
||||
<field name="need_knife_time"/>
|
||||
<field name="plan_execute_status"/>
|
||||
<field name="applicant"/>
|
||||
<field name="reason_for_applying"/>
|
||||
<field name="remark"/>
|
||||
<button string="装刀申请"
|
||||
name="%(sf_tool_management.sf_apply_for_tooling_act)d"
|
||||
type="action"
|
||||
context="{ 'default_ticket_task_code':ticket_task_code,
|
||||
'default_cam_procedure_code': cam_procedure_code,
|
||||
'default_machine_table_name': machine_table_name,
|
||||
'default_cam_cutter_spacing_code': cam_cutter_spacing_code,
|
||||
'default_functional_tool_code': functional_tool_code,
|
||||
'default_functional_tool_name': functional_tool_name,
|
||||
'default_functional_tool_type': functional_tool_type,
|
||||
'default_diameter': diameter,
|
||||
'default_tool_loading_length': tool_loading_length,
|
||||
'default_clearance_length': clearance_length,
|
||||
'default_tool_included_angle': tool_included_angle,
|
||||
'default_L_D': L_D,
|
||||
'default_coarse_middle_thin': coarse_middle_thin,
|
||||
'default_whether_standard_tool': whether_standard_tool,
|
||||
'default_need_knife_time': need_knife_time,
|
||||
'default_applicant': applicant,
|
||||
'default_required_cutting_time': required_cutting_time,
|
||||
'default_reason_for_applying': reason_for_applying}"
|
||||
class="btn-primary"
|
||||
attrs="{'invisible': [('plan_execute_status', '!=', '0')]}"
|
||||
/>
|
||||
<button string="装刀申请" name="" class="btn-primary" attrs="{'invisible': [('plan_execute_status', '=', '0')]}"/>
|
||||
<button string="撤回" name="revocation" type="object" class="btn-primary" attrs="{'invisible': [('plan_execute_status', '!=', '1')]}"/>
|
||||
<button string="撤回" name="" class="btn-primary" attrs="{'invisible': [('plan_execute_status', '=', '1')]}"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_cam_work_order_program_knife_plan_search" model="ir.ui.view" >
|
||||
<field name="model">sf.cam.work.order.program.knife.plan</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="ticket_task_code"/>
|
||||
<field name="cam_procedure_code"/>
|
||||
<field name="cam_cutter_spacing_code"/>
|
||||
<field name="functional_tool_code"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type"/>
|
||||
<field name="machine_table_name"/>
|
||||
<field name="machine_tool_cutter_spacing_code"/>
|
||||
<field name="diameter"/>
|
||||
<field name="tool_loading_length"/>
|
||||
<field name="clearance_length"/>
|
||||
<field name="tool_included_angle"/>
|
||||
<field name="L_D"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
<field name="required_cutting_time"/>
|
||||
<field name="whether_standard_tool"/>
|
||||
<field name="need_knife_time"/>
|
||||
<field name="plan_execute_status"/>
|
||||
<field name="applicant"/>
|
||||
<field name="reason_for_applying"/>
|
||||
<field name="remark"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_cam_work_order_program_knife_plan_view_act" model="ir.actions.act_window">
|
||||
<field name="name">CAM工单程序用刀计划</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.cam.work.order.program.knife.plan</field>
|
||||
<field name="view_mode">tree,form,search</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!--================================================功能刀具组装================================================-->
|
||||
<record id="sf_functional_tool_assembly_tree" model="ir.ui.view">
|
||||
<field name="name">功能刀具组装</field>
|
||||
<field name="model">sf.functional.tool.assembly</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="functional_tool_code"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type"/>
|
||||
<field name="functional_tool_diameter"/>
|
||||
<field name="functional_tool_length"/>
|
||||
<field name="functional_tool_cutting_type"/>
|
||||
<field name="tool_name"/>
|
||||
<field name="tool_brand"/>
|
||||
<field name="tool_type"/>
|
||||
<field name="knife_handle_name"/>
|
||||
<field name="knife_handle_brand"/>
|
||||
<field name="knife_handle_type"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
<field name="tool_loading_length"/>
|
||||
<field name="new_former"/>
|
||||
<field name="reference_length"/>
|
||||
<field name="cut_time"/>
|
||||
<field name="cut_length"/>
|
||||
<field name="cut_number"/>
|
||||
<field name="loading_task_source"/>
|
||||
<field name="applicant"/>
|
||||
<field name="reason_for_applying"/>
|
||||
<field name="apply_time"/>
|
||||
|
||||
<button string="组装"
|
||||
name="%(sf_tool_management.sf_functional_tool_assembly_order_act)d"
|
||||
type="action"
|
||||
context="{
|
||||
'default_machine_tool_name': machine_tool_name,
|
||||
'default_cutter_spacing_code': cutter_spacing_code,
|
||||
'default_functional_tool_name': functional_tool_name,
|
||||
'default_functional_tool_type': functional_tool_type,
|
||||
'default_functional_tool_length': functional_tool_length,
|
||||
'default_effective_length': None,
|
||||
'default_functional_tool_diameter': functional_tool_diameter,
|
||||
'default_tool_included_angle': None,
|
||||
'default_functional_tool_cutting_type': functional_tool_cutting_type,
|
||||
'default_required_cutting_time': None,
|
||||
'default_whether_standard_tool': None}"
|
||||
attrs="{'invisible': [('assemble_status', '!=', '0')]}"
|
||||
class="btn-primary"/>
|
||||
<button string="组装" name="" attrs="{'invisible': [('assemble_status', '=', '0')]}" class="btn-primary"/>
|
||||
|
||||
<button string="取消组装" name="cancel_functional_tool_assembly" type="object" attrs="{'invisible': [('assemble_status', '=', '0')]}" class="btn-primary"/>
|
||||
<button string="取消组装" name="" attrs="{'invisible': [('assemble_status', '!=', '0')]}" class="btn-primary"/>
|
||||
|
||||
<button string="自动打印二维码" name="" class="btn-primary"/>
|
||||
|
||||
<button string="出库"
|
||||
name="%(sf_tool_management.sf_delivery_of_cargo_from_storager_act)d"
|
||||
type="action"
|
||||
context="{
|
||||
'default_functional_tool_code': functional_tool_code,
|
||||
'default_machine_tool_name': machine_tool_name,
|
||||
'default_functional_tool_type': functional_tool_type,
|
||||
'default_production_line_name': production_line_name,
|
||||
'default_machine_tool_code': machine_tool_code,
|
||||
'default_receive_person': receive_person,
|
||||
'default_receive_time': receive_time
|
||||
}"
|
||||
attrs="{'invisible': [('assemble_status', '!=', '1')]}" class="btn-primary"/>
|
||||
<button string="出库" name="" attrs="{'invisible': [('assemble_status', '=', '1')]}" class="btn-primary"/>
|
||||
|
||||
<button string="组装单打印" name="" class="btn-primary"/>
|
||||
|
||||
|
||||
<field name="assemble_status"/>
|
||||
<field name="use_tool_time"/>
|
||||
<field name="production_line_name"/>
|
||||
<field name="machine_tool_name"/>
|
||||
<field name="machine_tool_code"/>
|
||||
<field name="cutter_spacing_code"/>
|
||||
<field name="tool_loading_person"/>
|
||||
<field name="tool_loading_time"/>
|
||||
<field name="receive_person"/>
|
||||
<field name="receive_time"/>
|
||||
<field name="remark"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_functional_tool_assembly_search" model="ir.ui.view" >
|
||||
<field name="model">sf.functional.tool.assembly</field>
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="functional_tool_code"/>
|
||||
<field name="functional_tool_name"/>
|
||||
<field name="functional_tool_type"/>
|
||||
<field name="functional_tool_diameter"/>
|
||||
<field name="functional_tool_length"/>
|
||||
<field name="functional_tool_cutting_type"/>
|
||||
<field name="tool_name"/>
|
||||
<field name="tool_brand"/>
|
||||
<field name="tool_type"/>
|
||||
<field name="knife_handle_name"/>
|
||||
<field name="knife_handle_brand"/>
|
||||
<field name="knife_handle_type"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
<field name="tool_loading_length"/>
|
||||
<field name="new_former"/>
|
||||
<field name="reference_length"/>
|
||||
<field name="cut_time"/>
|
||||
<field name="cut_length"/>
|
||||
<field name="cut_number"/>
|
||||
<field name="loading_task_source"/>
|
||||
<field name="applicant"/>
|
||||
<field name="reason_for_applying"/>
|
||||
<field name="apply_time"/>
|
||||
<field name="assemble_status"/>
|
||||
<field name="use_tool_time"/>
|
||||
<field name="production_line_name"/>
|
||||
<field name="machine_tool_name"/>
|
||||
<field name="machine_tool_code"/>
|
||||
<field name="cutter_spacing_code"/>
|
||||
<field name="tool_loading_person"/>
|
||||
<field name="tool_loading_time"/>
|
||||
<field name="receive_person"/>
|
||||
<field name="receive_time"/>
|
||||
<field name="remark"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_functional_tool_assembly_view_act" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具组装</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.tool.assembly</field>
|
||||
<field name="view_mode">tree,form,search</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
1
sf_tool_management/wizard/__init__.py
Normal file
1
sf_tool_management/wizard/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import wizard
|
||||
239
sf_tool_management/wizard/wizard.py
Normal file
239
sf_tool_management/wizard/wizard.py
Normal file
@@ -0,0 +1,239 @@
|
||||
from odoo import fields, models, api
|
||||
|
||||
|
||||
class ToolChangeRequirementInformation(models.TransientModel):
|
||||
_name = 'sf.tool.change.requirement.information'
|
||||
_description = '换刀需求信息'
|
||||
|
||||
tool_change_to_apply_id = fields.Many2one('sf.machine.table.tool.changing.apply', string='机床换刀申请')
|
||||
|
||||
CNC_machine_table = fields.Char(string='CNC机床', readonly=True)
|
||||
machine_tool_code = fields.Char(string='机台号', readonly=True)
|
||||
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
|
||||
|
||||
replacement_tool_code = fields.Char(string='待换刀具编码')
|
||||
replacement_tool_name = fields.Char(string='待换刀具名称')
|
||||
replacement_tool_type = fields.Char(string='待换刀具类型')
|
||||
replacement_tool_coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')],
|
||||
string='粗/中/精')
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧')
|
||||
applicant = fields.Char(string='申请人')
|
||||
used_tool_time = fields.Datetime(string='用刀时间')
|
||||
reason_for_applying = fields.Char(string='申请原因')
|
||||
remark = fields.Char(string='备注说明')
|
||||
|
||||
def tool_changing_apply(self):
|
||||
"""
|
||||
确认换刀申请(按键)
|
||||
:return:
|
||||
"""
|
||||
# 封装数据
|
||||
desc = {
|
||||
'CNC_machine_table': self.CNC_machine_table,
|
||||
'machine_tool_code': self.machine_tool_code,
|
||||
'cutter_spacing_code': self.cutter_spacing_code,
|
||||
'replacement_tool_code': self.replacement_tool_code,
|
||||
'replacement_tool_name': self.replacement_tool_name,
|
||||
'replacement_tool_type': self.replacement_tool_type,
|
||||
'replacement_tool_coarse_middle_thin': self.replacement_tool_coarse_middle_thin,
|
||||
'new_former': self.new_former,
|
||||
'applicant': self.applicant,
|
||||
'used_tool_time': self.used_tool_time,
|
||||
'reason_for_applying': self.reason_for_applying,
|
||||
'remark': self.new_former,
|
||||
'status': '1'
|
||||
}
|
||||
# 将数据更新到机台换刀申请界面
|
||||
self.env['sf.machine.table.tool.changing.apply'].search(
|
||||
[('CNC_machine_table', '=', desc.get('CNC_machine_table'))]).write(desc)
|
||||
|
||||
# 功能刀具组装创建新任务
|
||||
self.env['sf.machine.table.tool.changing.apply'].new_assembly_task({
|
||||
'functional_tool_code': self.replacement_tool_code,
|
||||
'functional_tool_name': self.replacement_tool_name,
|
||||
'functional_tool_type': self.replacement_tool_type,
|
||||
'loading_task_source': '1',
|
||||
'applicant': self.applicant,
|
||||
'reason_for_applying': self.reason_for_applying,
|
||||
'use_tool_time': self.used_tool_time,
|
||||
'machine_tool_name': self.CNC_machine_table,
|
||||
'machine_tool_code': self.machine_tool_code,
|
||||
'cutter_spacing_code': self.cutter_spacing_code
|
||||
})
|
||||
|
||||
# 关闭弹出窗口
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
|
||||
class ToolTransferRequestInformation(models.TransientModel):
|
||||
_name = 'sf.tool.transfer.request.information'
|
||||
_description = '刀具转移申请信息'
|
||||
|
||||
CNC_machine_table = fields.Char(string='CNC机床', readonly=True)
|
||||
machine_tool_code = fields.Char(string='机台号', readonly=True)
|
||||
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
|
||||
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
|
||||
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
|
||||
# todo 功能刀具类型为 Many2one
|
||||
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
|
||||
transfer_target = fields.Selection([('机台', '机台'),
|
||||
('线边刀库', '线边刀库'),
|
||||
('刀具房', '刀具房')], string='转移到:', default='线边刀库')
|
||||
|
||||
new_cnc_machine_table = fields.Char(string='机床名称')
|
||||
new_machine_tool_code = fields.Char(string='机床号')
|
||||
new_cutter_spacing_code = fields.Char(string='刀位号')
|
||||
|
||||
magazine_tool_warehouse_district = fields.Char(string='库区')
|
||||
magazine_tool_warehouse_position = fields.Char(string='库位')
|
||||
|
||||
tool_room_warehouse_district = fields.Char(string='库区')
|
||||
tool_room_warehouse_position = fields.Char(string='库位')
|
||||
|
||||
def tool_transfer_apply(self):
|
||||
"""
|
||||
刀具转移申请信息确定按钮
|
||||
:return:
|
||||
"""
|
||||
self.env['sf.machine.table.tool.changing.apply'].search(
|
||||
[('CNC_machine_table', '=', self.CNC_machine_table)]).write({'status': '2'})
|
||||
|
||||
|
||||
class ApplyForTooling(models.TransientModel):
|
||||
_name = 'sf.apply.for.tooling'
|
||||
_description = '申请装刀'
|
||||
|
||||
ticket_task_code = fields.Char(string='工单任务编号', readonly=True)
|
||||
cam_procedure_code = fields.Char(string='CAM程序编号', readonly=True)
|
||||
machine_table_name = fields.Char(string='机床名称', readonly=True)
|
||||
cam_cutter_spacing_code = fields.Char(string='CAM刀位号', readonly=True)
|
||||
functional_tool_code = fields.Char(string='功能刀具编码', readonly=True)
|
||||
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
|
||||
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
|
||||
|
||||
diameter = fields.Char(string='直径(程式)', readonly=True)
|
||||
tool_loading_length = fields.Char(string='装刀长', readonly=True)
|
||||
clearance_length = fields.Char(string='避空长', readonly=True)
|
||||
tool_included_angle = fields.Char(string='刀尖角(R角)', readonly=True)
|
||||
L_D = fields.Char(string='L/D', readonly=True)
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=True)
|
||||
|
||||
whether_standard_tool = fields.Boolean(string='是否标准刀', readonly=True)
|
||||
need_knife_time = fields.Datetime(string='需要用刀时间', readonly=True)
|
||||
required_cutting_time = fields.Char(string='需要切割时间', readonly=True)
|
||||
reason_for_applying = fields.Char(string='申请原因', readonly=True)
|
||||
|
||||
applicant = fields.Char(string='申请人', invisible='1')
|
||||
|
||||
def apply_for_tooling(self):
|
||||
"""
|
||||
申请装刀
|
||||
:return:
|
||||
"""
|
||||
self.env['sf.functional.tool.assembly'].create({
|
||||
'functional_tool_code': self.functional_tool_code,
|
||||
'functional_tool_name': self.functional_tool_name,
|
||||
'functional_tool_type': self.functional_tool_type,
|
||||
'functional_tool_diameter': self.diameter,
|
||||
'functional_tool_length': self.tool_loading_length,
|
||||
'loading_task_source': '0',
|
||||
'coarse_middle_thin': None,
|
||||
'tool_loading_length': None,
|
||||
'applicant': self.applicant,
|
||||
'reason_for_applying': self.reason_for_applying,
|
||||
'use_tool_time': self.need_knife_time,
|
||||
'machine_tool_name': self.machine_table_name,
|
||||
'machine_tool_code': self.cam_procedure_code,
|
||||
'cutter_spacing_code': self.cam_cutter_spacing_code
|
||||
})
|
||||
|
||||
# 将计划执行状态改为执行中
|
||||
self.env['sf.cam.work.order.program.knife.plan'].search(
|
||||
[('functional_tool_code', '=', self.functional_tool_code)]).write({'plan_execute_status': '1'})
|
||||
|
||||
# 关闭弹出窗口
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
|
||||
class FunctionalToolAssemblyOrder(models.TransientModel):
|
||||
_name = 'sf.functional.tool.assembly.order'
|
||||
_description = '功能刀具组装单'
|
||||
|
||||
# 功能刀具申请信息
|
||||
machine_tool_name = fields.Char(string='机床名称', readonly=True)
|
||||
cutter_spacing_code = fields.Char(string='刀位号', readonly=True)
|
||||
functional_tool_name = fields.Char(string='功能刀具名称', readonly=True)
|
||||
functional_tool_type = fields.Char(string='功能刀具类型', readonly=True)
|
||||
functional_tool_length = fields.Char(string='功能刀具伸出长', readonly=True)
|
||||
effective_length = fields.Char(string='有效长', readonly=True)
|
||||
functional_tool_diameter = fields.Char(string='功能刀具直径', readonly=True)
|
||||
tool_included_angle = fields.Char(string='刀尖角(R角)', readonly=True)
|
||||
functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=True)
|
||||
required_cutting_time = fields.Char(string='需要切割时间', readonly=True)
|
||||
whether_standard_tool = fields.Boolean(string='是否标准刀', readonly=True)
|
||||
|
||||
# 功能刀具组装信息
|
||||
tool_name = fields.Char(string='刀具名称')
|
||||
tool_code = fields.Char(string='刀具编码')
|
||||
tool_brand = fields.Char(string='品牌')
|
||||
tool_type = fields.Char(string='型号')
|
||||
knife_handle_name = fields.Char(string='刀柄名称')
|
||||
knife_handle_code = fields.Char(string='刀柄编码')
|
||||
knife_handle_brand = fields.Char(string='品牌')
|
||||
knife_handle_type = fields.Char(string='型号')
|
||||
coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精')
|
||||
tool_loading_length = fields.Char(string='装刀长')
|
||||
new_former = fields.Selection([('0', '新'), ('1', '旧')], string='新/旧')
|
||||
reference_length = fields.Char(string='参考伸出长')
|
||||
cut_time = fields.Char(string='已切削时间')
|
||||
cut_length = fields.Char(string='已切削长度')
|
||||
cut_number = fields.Char(string='已切削次数')
|
||||
|
||||
def functional_tool_assembly(self):
|
||||
"""
|
||||
功能刀具组装
|
||||
:return:
|
||||
"""
|
||||
self.env['sf.functional.tool.assembly'].search([
|
||||
('machine_tool_name', '=', self.machine_tool_name),
|
||||
('cutter_spacing_code', '=', self.cutter_spacing_code)
|
||||
]).write({
|
||||
'tool_name': self.tool_name,
|
||||
'tool_brand': self.tool_brand,
|
||||
'tool_type': self.tool_type,
|
||||
'knife_handle_name': self.knife_handle_name,
|
||||
'knife_handle_brand': self.knife_handle_brand,
|
||||
'knife_handle_type': self.knife_handle_type,
|
||||
'coarse_middle_thin': self.coarse_middle_thin,
|
||||
'tool_loading_length': self.tool_loading_length,
|
||||
'new_former': self.new_former,
|
||||
'reference_length': self.reference_length,
|
||||
'cut_time': self.cut_time,
|
||||
'cut_length': self.cut_length,
|
||||
'cut_number': self.cut_number,
|
||||
'assemble_status': '1',
|
||||
'tool_loading_person': self.env.user.name,
|
||||
'tool_loading_time': fields.Datetime.now()
|
||||
})
|
||||
|
||||
# 关闭弹出窗口
|
||||
return {'type': 'ir.actions.act_window_close'}
|
||||
|
||||
|
||||
class DeliveryOfCargoFromStorage(models.TransientModel):
|
||||
_name = 'sf.delivery.of.cargo.from.storage'
|
||||
_description = '出库'
|
||||
|
||||
functional_tool_code = fields.Char(string='功能刀具编码')
|
||||
functional_tool_name = fields.Char(string='功能刀具名称')
|
||||
functional_tool_type = fields.Char(string='功能刀具类型')
|
||||
production_line_name = fields.Char(string='产线名称')
|
||||
machine_tool_code = fields.Char(string='机台号')
|
||||
receive_person = fields.Char(string='领用人')
|
||||
receive_time = fields.Datetime(string='领用出库时间')
|
||||
|
||||
def stock_removal(self):
|
||||
"""
|
||||
出库
|
||||
:return:
|
||||
"""
|
||||
295
sf_tool_management/wizard/wizard_view.xml
Normal file
295
sf_tool_management/wizard/wizard_view.xml
Normal file
@@ -0,0 +1,295 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<!--================================================换刀需求信息================================================-->
|
||||
<record id="sf_tool_change_requirement_information_form" model="ir.ui.view">
|
||||
<field name="name">换刀需求信息</field>
|
||||
<field name="model">sf.tool.change.requirement.information</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="换刀需求信息">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="CNC_machine_table"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="machine_tool_code"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutter_spacing_code"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="replacement_tool_name"/>
|
||||
<field name="replacement_tool_type"/>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="replacement_tool_coarse_middle_thin"/>
|
||||
<field name="used_tool_time"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="new_former"/>
|
||||
<field name="applicant"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="reason_for_applying"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button string="确定" name="tool_changing_apply" type="object" class="btn-primary" confirm="是否确认申请换刀"/>
|
||||
<button string="取消" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_tool_change_requirement_information_act" model="ir.actions.act_window">
|
||||
<field name="name">换刀需求信息</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.tool.change.requirement.information</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="sf_tool_change_requirement_information_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!--================================================刀具转移申请信息================================================-->
|
||||
<record id="sf_tool_transfer_request_information_form" model="ir.ui.view">
|
||||
<field name="name">刀具转移申请信息</field>
|
||||
<field name="model">sf.tool.transfer.request.information</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="刀具转移申请信息">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="CNC_machine_table"/>
|
||||
<field name="functional_tool_code" string="刀具编码"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="machine_tool_code"/>
|
||||
<field name="functional_tool_name" string="刀具名称"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutter_spacing_code"/>
|
||||
<field name="functional_tool_type" string="刀具类型"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="transfer_target" widget="radio" options="{'horizontal': true}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="new_cnc_machine_table" attrs="{'readonly': [('transfer_target', '!=', '机台')]}"/>
|
||||
<field name="new_machine_tool_code" attrs="{'readonly': [('transfer_target', '!=', '机台')]}"/>
|
||||
<field name="new_cutter_spacing_code" attrs="{'readonly': [('transfer_target', '!=', '机台')]}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="magazine_tool_warehouse_district" attrs="{'readonly': [('transfer_target', '!=', '线边刀库')]}"/>
|
||||
<field name="magazine_tool_warehouse_position" attrs="{'readonly': [('transfer_target', '!=', '线边刀库')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="tool_room_warehouse_district" attrs="{'readonly': [('transfer_target', '!=', '刀具房')]}"/>
|
||||
<field name="tool_room_warehouse_position" attrs="{'invisible': [('transfer_target', '!=', '刀具房')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button string="确定" name="tool_transfer_apply" type="object" class="btn-primary" confirm="是否确认刀具转移申请"/>
|
||||
<button string="取消" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_tool_transfer_request_information_act" model="ir.actions.act_window">
|
||||
<field name="name">刀具转移申请信息</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.tool.transfer.request.information</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="sf_tool_transfer_request_information_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!--================================================申请装刀================================================-->
|
||||
<record id="sf_apply_for_tooling_form" model="ir.ui.view">
|
||||
<field name="name">申请装刀</field>
|
||||
<field name="model">sf.apply.for.tooling</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="申请装刀">
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="ticket_task_code" string="工单编号"/>
|
||||
<field name="machine_table_name" string="CAM指定机床"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cam_procedure_code" string="CAM程序编号"/>
|
||||
<field name="cam_cutter_spacing_code" string="CAM指定刀位号"/>
|
||||
</group>
|
||||
</group>
|
||||
|
||||
<group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="diameter" string="直径"/>
|
||||
<field name="tool_included_angle"/>
|
||||
<field name="whether_standard_tool"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="tool_loading_length" string="刀尖角"/>
|
||||
<field name="L_D"/>
|
||||
<field name="need_knife_time"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="clearance_length"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
<field name="required_cutting_time" string="需切削时长"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="reason_for_applying"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button string="确定" name="apply_for_tooling" type="object" class="btn-primary" confirm="是否确认申请装刀"/>
|
||||
<button string="取消" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_apply_for_tooling_act" model="ir.actions.act_window">
|
||||
<field name="name">申请装刀</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.apply.for.tooling</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="sf_apply_for_tooling_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!--================================================功能刀具组装单================================================-->
|
||||
<record id="sf_functional_tool_assembly_order_form" model="ir.ui.view">
|
||||
<field name="name">功能刀具组装单</field>
|
||||
<field name="model">sf.functional.tool.assembly.order</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="功能刀具组装单">
|
||||
<sheet>
|
||||
<group string="功能刀具申请信息">
|
||||
<group>
|
||||
<group>
|
||||
<field name="machine_tool_name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cutter_spacing_code"/>
|
||||
</group>
|
||||
</group><group>
|
||||
<group>
|
||||
<field name="functional_tool_name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="functional_tool_type"/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="functional_tool_length"/>
|
||||
<field name="effective_length"/>
|
||||
<field name="functional_tool_cutting_type"/>
|
||||
<field name="required_cutting_time"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="functional_tool_diameter"/>
|
||||
<field name="tool_included_angle"/>
|
||||
<field name="whether_standard_tool"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="功能刀具组装信息">
|
||||
<group>
|
||||
<group>
|
||||
<field name="tool_name"/>
|
||||
<field name="knife_handle_name"/>
|
||||
<field name="tool_loading_length"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="tool_code"/>
|
||||
<field name="knife_handle_code"/>
|
||||
<field name="coarse_middle_thin"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<group>
|
||||
<field name="tool_brand"/>
|
||||
<field name="knife_handle_brand"/>
|
||||
<field name="new_former"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="tool_type"/>
|
||||
<field name="knife_handle_type"/>
|
||||
<field name="reference_length"/>
|
||||
</group>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="cut_time"/>
|
||||
<field name="cut_length"/>
|
||||
<field name="cut_number"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button string="确定" name="functional_tool_assembly" type="object" class="btn-primary" confirm="是否确认申请组装"/>
|
||||
<button string="取消" class="btn-secondary" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_functional_tool_assembly_order_act" model="ir.actions.act_window">
|
||||
<field name="name">功能刀具组装单</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.functional.tool.assembly.order</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="sf_functional_tool_assembly_order_form"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
|
||||
|
||||
|
||||
<!--================================================出库================================================-->
|
||||
<record id="sf_delivery_of_cargo_from_storager_tree" model="ir.ui.view">
|
||||
<field name="name">出库</field>
|
||||
<field name="model">sf.delivery.of.cargo.from.storage</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="functional_tool_code" string="编码"/>
|
||||
<field name="functional_tool_name" string="名称"/>
|
||||
<field name="functional_tool_type" string="类型"/>
|
||||
<field name="production_line_name" string="生产线"/>
|
||||
<field name="machine_tool_code" string="机台"/>
|
||||
<field name="receive_person"/>
|
||||
<field name="receive_time" string="出库时间"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="sf_delivery_of_cargo_from_storager_act" model="ir.actions.act_window">
|
||||
<field name="name">出库</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">sf.delivery.of.cargo.from.storage</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="sf_delivery_of_cargo_from_storager_tree"/>
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
Reference in New Issue
Block a user