diff --git a/sf_base/__manifest__.py b/sf_base/__manifest__.py index 21f4d41d..2c05e1a2 100644 --- a/sf_base/__manifest__.py +++ b/sf_base/__manifest__.py @@ -19,6 +19,8 @@ "views/menu_view.xml", "views/tool_base_views.xml", "views/tool_base_menu.xml", + 'views/fixture_base_view.xml', + 'views/menu_fixture_view.xml', ], 'demo': [ diff --git a/sf_base/models/__init__.py b/sf_base/models/__init__.py index f6e247d2..5b9136ae 100644 --- a/sf_base/models/__init__.py +++ b/sf_base/models/__init__.py @@ -1,5 +1,6 @@ from . import base from . import common from . import tool_base +from . import fixture_base diff --git a/sf_base/models/fixture_base.py b/sf_base/models/fixture_base.py new file mode 100644 index 00000000..6ca48f71 --- /dev/null +++ b/sf_base/models/fixture_base.py @@ -0,0 +1,240 @@ +from odoo import models, fields + +'''============================定位元件型号=====================================''' + + +class FixtureSettingElement(models.Model): + _name = 'sf.fixture.setting.element' + _description = "定位元件型号" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="型号名称", readonly=True) + setting_ele_type_id = fields.Many2one('sf.setting.element.type', string="定位元件类型", readonly=True) + brand_id = fields.Many2one('sf.machine.brand', string="品牌", readonly=True) + + length = fields.Char(string='长度(mm)', readonly=True) + width = fields.Char(string='宽度(mm)', readonly=True) + height = fields.Char(string='高度(mm)', readonly=True) + diameter = fields.Char(string='直径(mm)', readonly=True) + + material_type_id = fields.Many2one('sf.materials.model', string='材料型号', readonly=True) + hardness = fields.Char(string='硬度(°)', readonly=True) + chucking_power = fields.Char(string='夹持力', readonly=True) + surface_treatment = fields.Char(string='表面处理', readonly=True) + accuracy_grade = fields.Char(string='精度等级', readonly=True) + + picture = fields.Binary(string="图片", readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''=============================定位原件类型=============================================''' + + +class SettingElementType(models.Model): + _name = 'sf.setting.element.type' + _description = "定位原件类型" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string='定位原件类型', readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''==============================夹紧元件型号==============================================''' + + +class FixtureClampingElement(models.Model): + _name = 'sf.fixture.clamping.element' + _description = "夹紧元件型号" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="型号名称", readonly=True) + clamping_ele_type_id = fields.Many2one('sf.clamping.element.type', string="夹紧元件类型", readonly=True) + brand_id = fields.Many2one('sf.machine.brand', string="品牌", readonly=True) + + length = fields.Char(string='长度(mm)', readonly=True) + width = fields.Char(string='宽度(mm)', readonly=True) + height = fields.Char(string='高度(mm)', readonly=True) + diameter = fields.Char(string='直径(mm)', readonly=True) + + material_type_id = fields.Many2one('sf.materials.model', string='材料型号', readonly=True) + hardness = fields.Char(string='硬度(°)', readonly=True) + chucking_power = fields.Char(string='夹持力', readonly=True) + surface_treatment = fields.Char(string='夹持方式', readonly=True) + accuracy_grade = fields.Char(string='精度等级', readonly=True) + + picture = fields.Binary(string="图片", readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''============================夹紧元件类型=======================================''' + + +# 夹紧元件类型 +class ClampingElementType(models.Model): + _name = "sf.clamping.element.type" + _description = "夹紧元件类型" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(name='夹紧元件类型', readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''=========================对刀夹具型号=====================================''' + + +class FixtureToolSetting(models.Model): + _name = 'sf.fixture.tool.setting' + _description = "对刀夹具型号" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="型号名称", readonly=True) + tool_setting_type_id = fields.Many2one('sf.tool.setting.type', string="对刀夹具类型", readonly=True) + brand_id = fields.Many2one('sf.machine.brand', string="品牌", readonly=True) + + length = fields.Char(string='长度(mm)', readonly=True) + width = fields.Char(string='宽度(mm)', readonly=True) + height = fields.Char(string='高度(mm)', readonly=True) + diameter = fields.Char(string='直径(mm)', readonly=True) + + material_type_id = fields.Many2one('sf.materials.model', string='材料型号', readonly=True) + hardness = fields.Char(string='硬度(°)', readonly=True) + chucking_power = fields.Char(string='夹持力', readonly=True) + clamp_mode = fields.Char(string='夹持方式', readonly=True) + accuracy_grade = fields.Char(string='精度等级', readonly=True) + max_clamp_diameter = fields.Char('最大夹持直接(mm)', readonly=True) + + picture = fields.Binary(string="图片", readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''===========================对刀夹具类型==========================================''' + + +class ToolSettingType(models.Model): + _name = 'sf.tool.setting.type' + _description = "对刀夹具类型" + + code = fields.Char('编码', readonly=True) + name = fields.Char(string='对刀夹具类型', readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''==========================定位装置型号=======================================''' + + +class FixtureLocatingDevice(models.Model): + _name = 'sf.fixture.locating.device' + _description = "定位装置型号" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="型号名称", readonly=True) + locating_device_type_id = fields.Many2one('sf.locating.device.type', string="定位装置类型", readonly=True) + brand_id = fields.Many2one('sf.machine.brand', string="品牌", readonly=True) + + length = fields.Char(string='长度(mm)', readonly=True) + width = fields.Char(string='宽度(mm)', readonly=True) + height = fields.Char(string='高度(mm)', readonly=True) + diameter = fields.Char(string='直径(mm)', readonly=True) + + material_type_id = fields.Many2one('sf.materials.model', string='材料型号', readonly=True) + weight = fields.Char(string='重量(kg)', readonly=True) + accuracy_grade = fields.Char(string='精度等级', readonly=True) + locate_mode_ids = fields.Many2many('sf.locating.device.locate.mode', string='定位装置定位方式', readonly=True) + max_bearing_capacity = fields.Char(string='最大承载力', readonly=True) + + picture = fields.Binary(string="图片", readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''==============================定位装置类型================================''' + + +# 定位装置型号 +class LocatingDeviceType(models.Model): + _name = 'sf.locating.device.type' + _description = "定位装置类型" + + code = fields.Char('编码', readonly=True) + name = fields.Char(string='定位装置类型', readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''============================定位装置定位方式========================================''' + + +# 定位装置定位方式 +class LocatingDeviceLocateMode(models.Model): + _name = 'sf.locating.device.locate.mode' + _description = "定位装置定位方式" + + code = fields.Char('编码', readonly=True) + name = fields.Char('定位方式', readonly=True) + name_id = fields.Many2many('sf.fixture.locating.device', string='定位装置', readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''===========================导向元件型号====================================''' + + +class FixtureGuideElement(models.Model): + _name = 'sf.fixture.guide.element' + _description = "导向元件型号" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="型号名称", readonly=True) + guide_ele_type_id = fields.Many2one('sf.guide.element.type', string="导向元件类型", readonly=True) + brand_id = fields.Many2one('sf.machine.brand', string="品牌", readonly=True) + + length = fields.Char(string='长度(mm)', readonly=True) + width = fields.Char(string='宽度(mm)', readonly=True) + height = fields.Char(string='高度(mm)', readonly=True) + diameter = fields.Char(string='直径(mm)', readonly=True) + + material_type_id = fields.Many2one('sf.materials.model', string='材料型号', readonly=True) + weight = fields.Char(string='重量', readonly=True) + accuracy_grade = fields.Char(string='精度等级', readonly=True) + guide_ele_guide_mode_id = fields.Many2many('sf.guide.element.guide.mode', string='导向元件导向方式', readonly=True) + scope_of_application = fields.Char(string='适用范围', readonly=True) + guide_ele_way_to_install_id = fields.Many2many('sf.guide.element.way.to.install', string='导向元件安装方式', + readonly=True) + + picture = fields.Binary(string="图片", readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''=============================导向元件类型============================================''' + + +class GuideElementType(models.Model): + _name = 'sf.guide.element.type' + _description = "导向元件类型" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="导向元件类型", readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''================================导向元件导向方式==========================================''' + + +class GuideElementGuideMode(models.Model): + _name = 'sf.guide.element.guide.mode' + _description = "导向元件导向方式" + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="导向元件导向方式", readonly=True) + name_id = fields.Many2many('sf.fixture.guide.element', string='导向元件', readonly=True) + comment = fields.Text(string='备注', readonly=True) + + +'''=============================导向元件安装方式===========================================''' + + +class GuideElementWayToInstall(models.Model): + _name = 'sf.guide.element.way.to.install' + _description = '导向元件安装方式' + + code = fields.Char(string='编码', readonly=True) + name = fields.Char(string="导向元件安装方式", readonly=True) + name_id = fields.Many2many('sf.fixture.guide.element', string='导向元件', readonly=True) + comment = fields.Text(string='备注', readonly=True) diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index 4c30d7bb..961fe123 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -31,6 +31,18 @@ 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_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 +access_sf_fixture_clamping_element,sf_fixture_clamping_element,model_sf_fixture_clamping_element,base.group_user,1,1,1,1 +access_sf_clamping_element_type,sf_clamping_element_type,model_sf_clamping_element_type,base.group_user,1,1,1,1 +access_sf_fixture_tool_setting,sf_fixture_tool_setting,model_sf_fixture_tool_setting,base.group_user,1,1,1,1 +access_sf_tool_setting_type,sf_tool_setting_type,model_sf_tool_setting_type,base.group_user,1,1,1,1 +access_sf_fixture_locating_device,sf_fixture_locating_device,model_sf_fixture_locating_device,base.group_user,1,1,1,1 +access_sf_locating_device_type,sf_locating_device_type,model_sf_locating_device_type,base.group_user,1,1,1,1 +access_sf_locating_device_locate_mode,sf_locating_device_locate_mode,model_sf_locating_device_locate_mode,base.group_user,1,1,1,1 +access_sf_fixture_guide_element,sf_fixture_guide_element,model_sf_fixture_guide_element,base.group_user,1,1,1,1 +access_sf_guide_element_type,sf_guide_element_type,model_sf_guide_element_type,base.group_user,1,1,1,1 +access_sf_guide_element_guide_mode,sf_guide_element_guide_mode,model_sf_guide_element_guide_mode,base.group_user,1,1,1,1 +access_sf_guide_element_way_to_install,sf_guide_element_way_to_install,model_sf_guide_element_way_to_install,base.group_user,1,1,1,1 diff --git a/sf_base/views/fixture_base_view.xml b/sf_base/views/fixture_base_view.xml new file mode 100644 index 00000000..09cd4b86 --- /dev/null +++ b/sf_base/views/fixture_base_view.xml @@ -0,0 +1,681 @@ + + + + + + 定位元件型号 + sf.fixture.setting.element + + + + + + + + + + + + + 定位元件型号 + sf.fixture.setting.element + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + 定位元件型号 + ir.actions.act_window + sf.fixture.setting.element + tree,form + + + + + + + 定位原件类型 + sf.setting.element.type + + + + + + + + + + 定位元件类型 + sf.setting.element.type + +
+ + + + + + + + + + + + + +
+
+
+ + + 定位元件类型 + ir.actions.act_window + sf.setting.element.type + tree,form + + + + + + + + 夹紧元件型号 + sf.fixture.clamping.element + + + + + + + + + + + + + 夹紧元件型号 + sf.fixture.clamping.element + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + 夹紧元件型号 + ir.actions.act_window + sf.fixture.clamping.element + tree,form + + + + + + + + 夹紧元件类型 + sf.clamping.element.type + + + + + + + + + + 夹紧元件类型 + sf.clamping.element.type + +
+ + + + + + + + + + + + + +
+
+
+ + + 夹紧元件类型 + ir.actions.act_window + sf.clamping.element.type + tree,form + + + + + + + 对刀夹具型号 + sf.fixture.tool.setting + + + + + + + + + + + + + 对刀夹具型号 + sf.fixture.tool.setting + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + 对刀夹具型号 + ir.actions.act_window + sf.fixture.tool.setting + tree,form + + + + + + 对刀夹具类型 + sf.tool.setting.type + + + + + + + + + + 对刀夹具类型 + sf.tool.setting.type + +
+ + + + + + + + + + + + + +
+
+
+ + + 对刀夹具类型 + ir.actions.act_window + sf.tool.setting.type + tree,form + + + + + + + 定位装置型号 + sf.fixture.locating.device + + + + + + + + + + + + + 定位装置型号 + sf.fixture.locating.device + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + 定位装置型号 + ir.actions.act_window + sf.fixture.locating.device + tree,form + + + + + + 定位装置类型 + sf.locating.device.type + + + + + + + + + + 定位装置类型 + sf.locating.device.type + +
+ + + + + + + + + + + + + +
+
+
+ + + 定位装置类型 + ir.actions.act_window + sf.locating.device.type + tree,form + + + + + + 定位装置定位方式 + sf.locating.device.locate.mode + + + + + + + + + + 定位装置定位方式 + sf.locating.device.locate.mode + +
+ + + + + + + + + + + + + + +
+
+
+ + + 定位装置定位方式 + ir.actions.act_window + sf.locating.device.locate.mode + tree,form + + + + + + 导向元件型号 + sf.fixture.guide.element + + + + + + + + + + + + + 导向元件型号 + sf.fixture.guide.element + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + 导向元件型号 + ir.actions.act_window + sf.fixture.guide.element + tree,form + + + + + + 导向元件类型 + sf.guide.element.type + + + + + + + + + + 导向元件类型 + sf.guide.element.type + +
+ + + + + + + + + + + + + +
+
+
+ + + 导向元件类型 + ir.actions.act_window + sf.guide.element.type + tree,form + + + + + + + 导向元件导向方式 + sf.guide.element.guide.mode + + + + + + + + + + 导向元件导向方式 + sf.guide.element.guide.mode + +
+ + + + + + + + + + + + + + +
+
+
+ + + 导向元件导向方式 + ir.actions.act_window + sf.guide.element.guide.mode + tree,form + + + + + + + 导向元件安装方式 + sf.guide.element.way.to.install + + + + + + + + + + 导向元件安装方式 + sf.guide.element.way.to.install + +
+ + + + + + + + + + + + + + +
+
+
+ + + 导向元件安装方式 + ir.actions.act_window + sf.guide.element.way.to.install + tree,form + + + + +
\ No newline at end of file diff --git a/sf_base/views/menu_fixture_view.xml b/sf_base/views/menu_fixture_view.xml new file mode 100644 index 00000000..ab7981c4 --- /dev/null +++ b/sf_base/views/menu_fixture_view.xml @@ -0,0 +1,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index c005987c..a2a4cb14 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -18,13 +18,27 @@ - + + attrs="{'invisible': ['|',('categ_type', '=', '表面工艺'),('categ_type', '=', '刀具')]}"/> + + + + + + + @@ -51,21 +65,15 @@
- - - - @@ -74,52 +82,141 @@
- + - -
- - - - - - - - - - - - - - -
-
- - - - - - - - -
-
- - - - - - - -
-
- - - - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 7df376a0..185611fa 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -50,55 +50,75 @@ class ResProductTemplate(models.Model): model_code = fields.Char('模型编码') is_bfm = fields.Boolean('业务平台是否自动创建', default=False) + cutting_tool = fields.Selection([ + ('整体式刀具', '整体式刀具'), + ('刀片', '刀片'), + ('刀杆', '刀杆'), + ('刀盘', '刀盘'), + ('刀柄', '刀柄'), + ('夹头', '夹头')], string='刀具') + # 关联整体式刀具型号 + integral_cutting_tool_type_id = fields.Many2one('sf.integral.cutting.tool', '整体式刀具型号') + # 关联刀片型号 + blade_type_id = fields.Many2one('sf.blade', '刀片型号') + # 关联刀杆型号 + cutter_bar_type_id = fields.Many2one('sf.cutter.bar', '刀杆型号') + # 关联刀盘型号 + cutter_pad_type_id = fields.Many2one('sf.cutter.pad', '刀盘型号') + # 关联刀柄型号 + handle_type_id = fields.Many2one('sf.handle', '刀柄型号') + # 关联夹头型号 + chuck_type_id = fields.Many2one('sf.chuck', '夹头型号') cutting_tool_parameter_brand = fields.Many2one('sf.machine.brand', '品牌') # 整体式刀具参数 - cutting_tool_parameter_total_length = fields.Float('总长度(mm)') - cutting_tool_parameter_shank_length = fields.Float('柄部长度(mm)') - cutting_tool_parameter_blade_length = fields.Float('刃部长度(mm)') - cutting_tool_parameter_diameter = fields.Float('直径(mm)') + cutting_tool_parameter_total_length = fields.Float('总长度[mm]') + cutting_tool_parameter_shank_length = fields.Float('柄部长度[mm]') + cutting_tool_parameter_blade_length = fields.Float('刃部长度[mm]') + cutting_tool_parameter_diameter = fields.Float('直径[mm]') cutting_tool_parameter_blade_number = fields.Integer('刃数') cutting_tool_parameter_front_angle = fields.Float('前角(°)') cutting_tool_parameter_rear_angle = fields.Float('后角(°)') cutting_tool_parameter_main_included_angle = fields.Float('主偏角(°)') cutting_tool_parameter_material_model = fields.Many2one('sf.materials.model', '材料型号') - cutting_tool_parameter_nut = fields.Float('配对螺母(mm)') + cutting_tool_parameter_nut = fields.Float('配对螺母[mm]') # 适用夹头型号可以多选 cutting_tool_parameter_chuck_model = fields.Many2many('sf.chuck', string='适用夹头型号') cutting_tool_parameter_scope = fields.Char('适用范围') cutting_tool_parameter_image = fields.Binary('图片') # 刀片参数 - cutting_tool_parameter_length = fields.Float('长度L(mm)') - cutting_tool_parameter_width = fields.Float('宽度D(mm)') - cutting_tool_parameter_height = fields.Float('高度T(mm)') + cutting_tool_parameter_length = fields.Float('长度L[mm]') + cutting_tool_parameter_width = fields.Float('宽度D[mm])') + cutting_tool_parameter_height = fields.Float('高度T[mm]') cutting_tool_parameter_top_angle = fields.Float('顶角(°)') - cutting_tool_parameter_top_angle = fields.Float('R角(°)') - cutting_tool_parameter_hardness = fields.Char('加工硬度') + cutting_tool_parameter_r_angle = fields.Float('R角(°)') + cutting_tool_parameter_working_hardness = fields.Char('加工硬度') cutting_tool_parameter_cutter_bar = fields.Many2many('sf.cutter.bar', string='适用刀杆型号') cutting_tool_parameter_cutter_pad = fields.Many2many('sf.cutter.pad', string='适用刀盘型号') - cutting_tool_parameter_radius = fields.Float('刀尖半径(mm)') + cutting_tool_parameter_radius = fields.Float('刀尖半径[mm]') # 刀杆/刀盘参数 - cutting_tool_parameter_c_diameter = fields.Float('C柄径(mm)') - cutting_tool_parameter_total_length = fields.Float('L总长(mm)') - cutting_tool_parameter_d_diameter = fields.Float('D刃径(mm)') + cutting_tool_parameter_c_diameter = fields.Float('C柄径[mm]') + cutting_tool_parameter_l_total_length = fields.Float('L总长[mm]') + cutting_tool_parameter_d_diameter = fields.Float('D刃径[mm]') cutting_tool_parameter_blade = fields.Many2many('sf.blade', string='适用刀片型号') - cutting_tool_parameter_wrench = fields.Float('配对扳手(mm)') - cutting_tool_parameter_screw = fields.Float('配备螺丝(mm)') - cutting_tool_parameter_accuracy = fields.Char('精度等级') + cutting_tool_parameter_wrench = fields.Float('配对扳手[mm]') + cutting_tool_parameter_screw = fields.Float('配备螺丝[mm]') + cutting_tool_parameter_accuracy_level = fields.Char('精度等级') + cutting_tool_parameter_rounded_corner = fields.Float('刀尖圆角半径[mm]') cutting_tool_parameter_hardness = fields.Char('硬度(°)') # 刀柄参数 - cutting_tool_parameter_handle_length = fields.Float('L(mm)') - cutting_tool_parameter_length1 = fields.Float('L1(mm)') - cutting_tool_parameter_diameter1 = fields.Float('D1(mm)') + cutting_tool_parameter_handle_length = fields.Float('L[mm]') + cutting_tool_parameter_length1 = fields.Float('L1[mm]') + cutting_tool_parameter_diameter1 = fields.Float('D1[mm]') cutting_tool_parameter_weight = fields.Float('重量(kg)') - cutting_tool_parameter_body_accuracy = fields.Float('本体精度(mm)') - cutting_tool_parameter_clamping_range = fields.Float('夹持范围(mm)') + cutting_tool_parameter_body_accuracy = fields.Float('本体精度[mm]') + cutting_tool_parameter_clamping_range = fields.Float('夹持范围[mm]') cutting_tool_parameter_detection_accuracy = fields.Float('检测精度') cutting_tool_parameter_detection_hardness = fields.Char('检测硬度') cutting_tool_parameter_standard_speed = fields.Float('标准转速') # 夹头参数 - cutting_tool_parameter_accuracy = fields.Float('精度(mm)') - cutting_tool_parameter_diameter = fields.Float('外径(mm)') - cutting_tool_parameter_inner_diameter = fields.Float('内径(mm)') + cutting_tool_parameter_accuracy = fields.Float('精度[mm]') + cutting_tool_parameter_outer_diameter = fields.Float('外径[mm]') + cutting_tool_parameter_inner_diameter = fields.Float('内径[mm]') cutting_tool_parameter_handle_model = fields.Many2many('sf.handle.model', string='适用刀柄型号') cutting_tool_parameter_feature = fields.Char('特性') @@ -109,28 +129,6 @@ class ResProductTemplate(models.Model): else: return self.env.ref('sf_dlm.product_uom_cubic_millimeter') - # model_file = fields.Binary('模型文件') - - # 坯料的库存路线设置 - # def _get_routes(self, route_type): - # route_manufacture = self.env.ref('mrp.route_warehouse0_manufacture', raise_if_not_found=False).sudo() - # route_mto = self.env.ref('stock.route_warehouse0_mto', raise_if_not_found=False).sudo() - # route_purchase = self.env.ref('purchase_stock.route_warehouse0_buy', raise_if_not_found=False).sudo() - # if route_manufacture and route_mto: - # # 外协 - # if route_type == 'subcontract': - # route_subcontract = self.env.ref('mrp_subcontracting.route_resupply_subcontractor_mto', - # raise_if_not_found=False).sudo() - # return [route_mto.id, route_purchase.id, route_subcontract.id] - # elif route_type == 'purchase': - # # 采购 - # return [route_mto.id, route_purchase.id] - # else: - # return [route_mto.id, route_manufacture.id] - # return [] - - # route_ids = fields.Many2many(default=lambda self: self._get_route()) - # 业务平台分配工厂后在智能工厂先创建销售订单再创建该产品 def product_create(self, product_id, item, order_id, order_number, i): copy_product_id = product_id.with_user(self.env.ref("base.user_admin")).copy() @@ -314,6 +312,112 @@ class ResProductTemplate(models.Model): return base64_data + @api.onchange('integral_cutting_tool_type_id') + def _get_integral_cutting_tool_type_info(self): + for item in self: + item.cutting_tool_parameter_brand = item.integral_cutting_tool_type_id.brand.id + item.cutting_tool_parameter_total_length = item.integral_cutting_tool_type_id.total_length + item.cutting_tool_parameter_shank_length = item.integral_cutting_tool_type_id.shank_length + item.cutting_tool_parameter_blade_length = item.integral_cutting_tool_type_id.blade_length + item.cutting_tool_parameter_diameter = item.integral_cutting_tool_type_id.diameter + item.cutting_tool_parameter_nut = item.integral_cutting_tool_type_id.control_system_id + item.cutting_tool_parameter_blade_number = item.integral_cutting_tool_type_id.blade_number + item.cutting_tool_parameter_material_model = item.integral_cutting_tool_type_id.material_model.id + item.cutting_tool_parameter_front_angle = item.integral_cutting_tool_type_id.front_angle + item.cutting_tool_parameter_rear_angle = item.integral_cutting_tool_type_id.rear_angle + item.cutting_tool_parameter_main_included_angle = item.integral_cutting_tool_type_id.main_included_angle + item.cutting_tool_parameter_chuck_model = item.integral_cutting_tool_type_id.chuck_model.id + item.cutting_tool_parameter_scope = item.integral_cutting_tool_type_id.scope + + @api.onchange('blade_type_id') + def _get_blade_type_info(self): + for item in self: + item.cutting_tool_parameter_brand = item.blade_type_id.brand.id + item.cutting_tool_parameter_top_angle = item.blade_type_id.top_angle + item.cutting_tool_parameter_front_angle = item.blade_type_id.front_angle + item.cutting_tool_parameter_rear_angle = item.blade_type_id.rear_angle + item.cutting_tool_parameter_main_included_angle = item.blade_type_id.main_included_angle + item.cutting_tool_parameter_r_angle = item.blade_type_id.r_angle + item.cutting_tool_parameter_working_hardness = item.blade_type_id.hardness + item.cutting_tool_parameter_material_model = item.blade_type_id.material_model.id + item.cutting_tool_parameter_length = item.blade_type_id.length + item.cutting_tool_parameter_width = item.blade_type_id.width + item.cutting_tool_parameter_height = item.blade_type_id.height + item.cutting_tool_parameter_radius = item.blade_type_id.radius + item.cutting_tool_parameter_nut = item.blade_type_id.nut + item.cutting_tool_parameter_cutter_bar = item.blade_type_id.cutter_bar.id + item.cutting_tool_parameter_cutter_pad = item.blade_type_id.cutter_pad.id + + @api.onchange('cutter_bar_type_id') + def _get_cutter_bar_type_info(self): + for item in self: + item.cutting_tool_parameter_brand = item.cutter_bar_type_id.brand.id + item.cutting_tool_parameter_c_diameter = item.cutter_bar_type_id.c_diameter + item.cutting_tool_parameter_d_diameter = item.cutter_bar_type_id.d_diameter + item.cutting_tool_parameter_l_total_length = item.cutter_bar_type_id.total_length + item.cutting_tool_parameter_wrench = item.cutter_bar_type_id.wrench + item.cutting_tool_parameter_screw = item.cutter_bar_type_id.screw + item.cutting_tool_parameter_blade = item.cutter_bar_type_id.blade.id + item.cutting_tool_parameter_scope = item.cutter_bar_type_id.scope + item.cutting_tool_parameter_material_model = item.cutter_bar_type_id.material_model.id + item.cutting_tool_parameter_rounded_corner = item.cutter_bar_type_id.radius + item.cutting_tool_parameter_accuracy_level = item.cutter_bar_type_id.accuracy + item.cutting_tool_parameter_blade_number = item.cutter_bar_type_id.blade_number + item.cutting_tool_parameter_hardness = item.cutter_bar_type_id.hardness + + @api.onchange('cutter_pad_type_id') + def _get_cutter_pad_type_info(self): + for item in self: + item.cutting_tool_parameter_brand = item.cutter_pad_type_id.brand.id + item.cutting_tool_parameter_c_diameter = item.cutter_pad_type_id.c_diameter + item.cutting_tool_parameter_d_diameter = item.cutter_pad_type_id.d_diameter + item.cutting_tool_parameter_l_total_length = item.cutter_pad_type_id.total_length + item.cutting_tool_parameter_wrench = item.cutter_pad_type_id.wrench + item.cutting_tool_parameter_screw = item.cutter_pad_type_id.screw + item.cutting_tool_parameter_blade = item.cutter_pad_type_id.blade.id + item.cutting_tool_parameter_scope = item.cutter_pad_type_id.scope + item.cutting_tool_parameter_material_model = item.cutter_pad_type_id.material_model.id + item.cutting_tool_parameter_rounded_corner = item.cutter_pad_type_id.radius + item.cutting_tool_parameter_accuracy_level = item.cutter_pad_type_id.accuracy + item.cutting_tool_parameter_blade_number = item.cutter_pad_type_id.blade_number + item.cutting_tool_parameter_hardness = item.cutter_pad_type_id.hardness + + @api.onchange('handle_type_id') + def _get_handle_type_info(self): + for item in self: + item.cutting_tool_parameter_brand = item.handle_type_id.brand.id + item.cutting_tool_parameter_handle_length = item.handle_type_id.length + item.cutting_tool_parameter_length1 = item.handle_type_id.length1 + item.cutting_tool_parameter_diameter1 = item.handle_type_id.diameter1 + item.cutting_tool_parameter_body_accuracy = item.handle_type_id.body_accuracy + item.cutting_tool_parameter_nut = item.handle_type_id.nut + item.cutting_tool_parameter_clamping_range = item.handle_type_id.clamping_range + item.cutting_tool_parameter_weight = item.handle_type_id.weight + item.cutting_tool_parameter_material_model = item.handle_type_id.material_model.id + item.cutting_tool_parameter_chuck_model = item.handle_type_id.chuck_model.id + item.cutting_tool_parameter_detection_accuracy = item.handle_type_id.detection_accuracy + item.cutting_tool_parameter_detection_hardness = item.handle_type_id.detection_hardness + item.cutting_tool_parameter_standard_speed = item.handle_type_id.standard_speed + + @api.onchange('chuck_type_id') + def _get_chuck_type_info(self): + for item in self: + item.cutting_tool_parameter_brand = item.chuck_type_id.brand.id + item.cutting_tool_parameter_outer_diameter = item.chuck_type_id.diameter + item.cutting_tool_parameter_inner_diameter = item.chuck_type_id.inner_diameter + item.cutting_tool_parameter_accuracy = item.chuck_type_id.accuracy + item.cutting_tool_parameter_nut = item.chuck_type_id.nut + item.cutting_tool_parameter_clamping_range = item.chuck_type_id.clamping_range + item.cutting_tool_parameter_handle_model = item.chuck_type_id.handle_model.id + item.cutting_tool_parameter_material_model = item.chuck_type_id.material_model.id + item.cutting_tool_parameter_height = item.chuck_type_id.height + item.cutting_tool_parameter_feature = item.chuck_type_id.detection_accuracy + item.cutting_tool_parameter_detection_hardness = item.chuck_type_id.detection_hardness + item.cutting_tool_parameter_standard_speed = item.chuck_type_id.standard_speed + + + + class ResMrpBom(models.Model): _inherit = 'mrp.bom' @@ -393,9 +497,6 @@ class ResMrpBom(models.Model): [('categ_id.type', '=', '原材料'), ('materials_type_id', '=', product.materials_type_id.id)]) return raw_bom - - - # @api.constrains('type') # def _check_type(self): # category = self.env['product.category'].search( diff --git a/sf_mrs_connect/data/ir_cron_data.xml b/sf_mrs_connect/data/ir_cron_data.xml index 54b273ef..016789b6 100644 --- a/sf_mrs_connect/data/ir_cron_data.xml +++ b/sf_mrs_connect/data/ir_cron_data.xml @@ -285,4 +285,48 @@ -1 + + + 同步资源库夹紧元件型号 + + code + model.sync_fixture_clamping_element() + 1 + days + -1 + + + + + 同步资源库夹紧元件类型 + + code + model.sync_clamping_element_type() + 1 + days + -1 + + + + + 同步资源库导向元件类型 + + code + model.sync_guide_element_type() + 1 + days + -1 + + + + + 同步资源库导向元件导向方式 + + code + model.sync_guide_element_guide_mode() + 1 + days + -1 + + \ No newline at end of file diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py index d5379e07..04176e08 100644 --- a/sf_mrs_connect/models/res_config_setting.py +++ b/sf_mrs_connect/models/res_config_setting.py @@ -130,6 +130,15 @@ class ResConfigSettings(models.TransientModel): self.env['sf.functional.cutting.tool'].sync_all_functional_cutting_tool() _logger.info("同步所有功能刀具列表完成") + self.env['sf.fixture.clamping.element'].sync_all_fixture_clamping_element() + _logger.info("同步资源库夹紧元件型号") + self.env['sf.clamping.element.type'].sync_all_clamping_element_type() + _logger.info("同步资源库夹紧元件类型") + self.env['sf.guide.element.type'].sync_all_guide_element_type() + _logger.info("同步资源库导向元件类型") + self.env['sf.guide.element.guide.mode'].sync_all_guide_element_guide_mode() + _logger.info("同步资源库导向元件导向方式") + except Exception as e: _logger.info("捕获错误信息:%s" % e) raise ValidationError("数据错误导致同步失败,请联系管理员") diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 01f8a304..cec789ff 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -2768,3 +2768,339 @@ class SyncChuckModel(models.Model): print('同步夹头类型列表成功') else: raise ValidationError("认证未通过") + + + + +'''=========================================夹紧元件类型===============================================''' + + +class sfClampingElementType(models.Model): + _inherit = 'sf.clamping.element.type' + _description = '夹紧元件类型' + url = '/api/mrs_clamping_element_type/list' + + # 定时同步每日夹紧元件类型 + def sync_clamping_element_type(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['mrs_clamping_element_type_yesterday_list']: + if item: + brand = self.env['sf.clamping.element.type'].search( + [("code", '=', item['code'])]) + if brand: + brand.name = item['name'], + brand.code = item['code'], + brand.comment = item['comment'] + else: + self.env['sf.clamping.element.type'].create({ + "name": item['name'], + "code": item['code'], + "comment": item['comment'] + }) + else: + raise ValidationError("认证未通过") + + # 同步所有夹紧元件类型 + def sync_all_clamping_element_type(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + _logger.info('result:%s' % result) + for item in result['mrs_clamping_element_type_all_list']: + if item: + brand = self.env['sf.clamping.element.type'].search( + [("code", '=', item['code'])]) + if not brand: + self.env['sf.clamping.element.type'].create({ + "name": item['name'], + "code": item['code'], + "comment": item['comment'] + }) + else: + raise ValidationError("认证未通过") + + +'''=================================夹紧元件型号=============================================''' + + +class sfFixtureClampingElement(models.Model): + _inherit = 'sf.fixture.clamping.element' + _description = '夹紧元件型号' + url = '/api/mrs_fixture_clamping_element/list' + + # 定时同步夹紧元件型号 + def sync_fixture_clamping_element(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + for item in result['mrs_fixture_clamping_element_yesterday_list']: + brand = self.env['sf.fixture.clamping.element'].search( + [("code", '=', item['code'])]) + if brand: + brand.code = item['code'], + brand.name = item['name'], + + brand.length = item['length'], + brand.width = item['width'], + brand.height = item['height'], + brand.diameter = item['diameter'], + brand.hardness = item['hardness'], + brand.chucking_power = item['chucking_power'], + brand.surface_treatment = item['surface_treatment'], + brand.accuracy_grade = item['accuracy_grade'], + # brand.picture = item['picture'].encode('utf-8'), + brand.picture = base64.b64decode(item['picture']), + brand.comment = item['comment'], + + brand.brand_id = self.env['sf.machine.brand'].search( + [('code', '=', item['brand_id'])]).id, + brand.material_type_id = self.env['sf.materials.model'].search( + [('materials_no', '=', item['material_type_id'])]).id, + brand.clamping_ele_type_id = self.env['sf.clamping.element.type'].search( + [('code', '=', item['clamping_ele_type_id'])]).id + + else: + self.env['sf.fixture.clamping.element'].create({ + "code": item['code'], + "name": item['name'], + + "length": item['length'], + "width": item['width'], + "height": item['height'], + "diameter": item['diameter'], + "hardness": item['hardness'], + "chucking_power": item['chucking_power'], + "surface_treatment": item['surface_treatment'], + "accuracy_grade": item['accuracy_grade'], + + 'picture': base64.b64decode(item['picture']), + # "picture": item['picture'].encode('utf-8'), + "comment": item['comment'], + + + 'brand_id': self.env['sf.machine.brand'].search( + [('code', '=', item['brand_id'])]).id, + "material_type_id": self.env['sf.materials.model'].search( + [('materials_no', '=', item['material_type_id'])]).id, + "clamping_ele_type_id": self.env['sf.clamping.element.type'].search( + [('code', '=', item['clamping_ele_type_id'])]).id, + }) + else: + raise ValidationError("认证未通过") + + # 同步所有夹紧元件型号 + def sync_all_fixture_clamping_element(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + print(result) + if result['status'] == 1: + for item in result['mrs_fixture_clamping_element_all_list']: + brand = self.env['sf.fixture.clamping.element'].search( + [("code", '=', item['code'])]) + if not brand: + self.env['sf.fixture.clamping.element'].create({ + "code": item['code'], + "name": item['name'], + + "length": item['length'], + "width": item['width'], + "height": item['height'], + "diameter": item['diameter'], + "hardness": item['hardness'], + "chucking_power": item['chucking_power'], + "surface_treatment": item['surface_treatment'], + "accuracy_grade": item['accuracy_grade'], + + # "picture": item['picture'].encode('utf-8'), + 'picture': base64.b64decode(item['picture']), + "comment": item['comment'], + + 'brand_id': self.env['sf.machine.brand'].search( + [('code', '=', item['brand_id'])]).id, + "material_type_id": self.env['sf.materials.model'].search( + [('materials_no', '=', item['material_type_id'])]).id, + "clamping_ele_type_id": self.env['sf.clamping.element.type'].search( + [('code', '=', item['clamping_ele_type_id'])]).id, + }) + + + else: + raise ValidationError("认证未通过") + + +'''===================================导向元件类型==========================================''' + + +class sfGuideElementType(models.Model): + _inherit = 'sf.guide.element.type' + _description = '导向元件类型' + url = '/api/mrs_guide_element_type/list' + + # 定时同步每日导向元件类型 + def sync_guide_element_type(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + _logger.info('result:%s' % result) + for item in result['mrs_guide_element_type_yesterday_list']: + if item: + brand = self.env['sf.guide.element.type'].search( + [("code", '=', item['code'])]) + if brand: + brand.name = item['name'], + brand.code = item['code'], + brand.comment = item['comment'] + else: + self.env['sf.guide.element.type'].create({ + "name": item['name'], + "code": item['code'], + "comment": item['comment'] + }) + else: + raise ValidationError("认证未通过") + + # 同步所有导向元件类型 + def sync_all_guide_element_type(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + _logger.info('result:%s' % result) + for item in result['mrs_guide_element_type_all_list']: + if item: + brand = self.env['sf.guide.element.type'].search( + [("code", '=', item['code'])]) + if not brand: + self.env['sf.guide.element.type'].create({ + "name": item['name'], + "code": item['code'], + "comment": item['comment'] + }) + # guide_element_type = self.env['sf.guide.element.type'].search([('code', '=', code)]) + # tags = self.env['sf.tag'].search([('name', '=', 'new_tag_name')]) + # guide_element_type.write({'tag_ids': [(6, 0, tags.ids)]}) + else: + raise ValidationError("认证未通过") + + +'''===================================导向元件导向方式==========================================''' + + +class sfGuideElementGuideMode(models.Model): + _inherit = 'sf.guide.element.guide.mode' + _description = '导向元件导向方式' + url = '/api/mrs_guide_element_guide_mode/list' + + # 定时同步每日导向元件导向方式 + def sync_guide_element_guide_mode(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + _logger.info('result:%s' % result) + for item in result['mrs_guide_element_guide_mode_yesterday_list']: + name_id_list = [] + if item.get('guide_ele_guide_mode_id'): + for i in item.get('guide_ele_guide_mode_id'): + name_id_list.append(self.env['sf.fixture.guide.element'].search( + [("code", '=', i)]).id) + if item: + brand = self.env['sf.guide.element.guide.mode'].search( + [("code", '=', item['code'])]) + if brand: + brand.name = item['name'], + brand.code = item['code'], + brand.comment = item['comment'] + brand.name_id = name_id_list + + else: + self.env['sf.guide.element.guide.mode'].create({ + "name": item['name'], + "code": item['code'], + "comment": item['comment'], + "name_id": name_id_list + }) + else: + raise ValidationError("认证未通过") + + # 同步所有导向元件导向方式 + def sync_all_guide_element_guide_mode(self): + sf_sync_config = self.env['res.config.settings'].get_values() + token = sf_sync_config['token'] + sf_secret_key = sf_sync_config['sf_secret_key'] + headers = Common.get_headers(self, token, sf_secret_key) + + strUrl = sf_sync_config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + _logger.info('result:%s' % result) + for item in result['mrs_guide_element_guide_mode_all_list']: + name_id_list = [] + if item.get('guide_ele_guide_mode_id'): + for i in item.get('guide_ele_guide_mode_id'): + name_id_list.append(self.env['sf.fixture.guide.element'].search( + [("code", '=', i)]).id) + if item: + brand = self.env['sf.guide.element.guide.mode'].search( + [("code", '=', item['code'])]) + if not brand: + self.env['sf.guide.element.guide.mode'].create({ + "name": item['name'], + "code": item['code'], + "comment": item['comment'], + "name_id": name_id_list + }) + else: + raise ValidationError("认证未通过") +