From 3a8c65c8d15213d0670b5f1cdb6594bb43b5d967 Mon Sep 17 00:00:00 2001 From: yuxianghui <1608204036@qq.com> Date: Tue, 13 Jun 2023 11:19:06 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E8=A7=A3=E5=86=B3sf=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=86=B2=E7=AA=81=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/__manifest__.py | 2 + sf_base/models/__init__.py | 1 + sf_base/models/fixture_base.py | 240 +++++++ sf_base/security/ir.model.access.csv | 14 +- sf_base/views/fixture_base_view.xml | 681 ++++++++++++++++++++ sf_base/views/menu_fixture_view.xml | 106 +++ sf_mrs_connect/data/ir_cron_data.xml | 44 ++ sf_mrs_connect/models/res_config_setting.py | 9 + sf_mrs_connect/models/sync_common.py | 336 ++++++++++ 9 files changed, 1432 insertions(+), 1 deletion(-) create mode 100644 sf_base/models/fixture_base.py create mode 100644 sf_base/views/fixture_base_view.xml create mode 100644 sf_base/views/menu_fixture_view.xml 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 b75eee63..ff43d323 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -33,6 +33,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_mrs_connect/data/ir_cron_data.xml b/sf_mrs_connect/data/ir_cron_data.xml index 513d5dee..dd14859d 100644 --- a/sf_mrs_connect/data/ir_cron_data.xml +++ b/sf_mrs_connect/data/ir_cron_data.xml @@ -307,4 +307,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 bb996fdf..535c394e 100644 --- a/sf_mrs_connect/models/res_config_setting.py +++ b/sf_mrs_connect/models/res_config_setting.py @@ -134,6 +134,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 601b9212..d5377cf7 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -2930,3 +2930,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("认证未通过") + From 3d1d5e6ef3579e496f85715d551b0ab38d479f7a Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Tue, 13 Jun 2023 14:13:15 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E6=99=BA=E8=83=BD=E5=B7=A5=E5=8E=82?= =?UTF-8?q?=E5=88=80=E5=85=B7=E7=89=A9=E6=96=99=E6=A8=A1=E5=9E=8B=E3=80=81?= =?UTF-8?q?=E5=85=B3=E8=81=94=E5=85=B3=E7=B3=BB=E5=8F=8A=E5=85=B6=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E5=B7=B2=E5=BB=BA=E7=AB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base.py | 37 ++++++++++++++++++++-- sf_base/security/ir.model.access.csv | 2 +- sf_base/views/tool_base_menu.xml | 38 +++++++++------------- sf_base/views/tool_base_views.xml | 47 +++++++++++++++++++++++++++- 4 files changed, 97 insertions(+), 27 deletions(-) diff --git a/sf_base/models/tool_base.py b/sf_base/models/tool_base.py index b41a1075..452b5ecf 100644 --- a/sf_base/models/tool_base.py +++ b/sf_base/models/tool_base.py @@ -7,6 +7,16 @@ from odoo.exceptions import UserError from datetime import datetime +# 功能刀具物料 +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' @@ -53,6 +63,8 @@ class IntegralCuttingTool(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) # 整体式刀具类型字段,关联整体式刀具类型对象 integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具类型') # 增加品牌、总长度(mm)、柄部长度(mm)、刃部长度(mm)、直径(mm)、刃数、前角(°)、后角(°)、主偏角(°)、材料型号、配对螺母(mm)、适用夹头型号、适用范围、图片、创建人、创建时间等字段 @@ -80,6 +92,8 @@ class IntegralCuttingToolModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) remark = fields.Text('备注') @@ -90,10 +104,12 @@ class Blade(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) # 刀片类型字段,关联刀片类型对象 blade_model_number = fields.Many2one('sf.blade.model', '刀片类型') # 编码、型号名称、刀片类型、品牌、长度L(mm)、宽度D(mm)、高度T(mm)、顶角(°)、前角(°)、后角(°)、主偏角(°)、R角(°)、材料型号、加工硬度、配对螺母(mm)、适用刀杆/刀盘型号、刀尖半径(mm)、图片、创建人、创建时间字段 - brand = fields.Many2one('sf.machine.brand', '品牌',) + brand = fields.Many2one('sf.machine.brand', '品牌', ) length = fields.Float('长度L(mm)') width = fields.Float('宽度D(mm)') height = fields.Float('高度T(mm)') @@ -120,6 +136,8 @@ class BladeModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) # 刀片类型字段,关联刀片对象 blade_ids = fields.One2many('sf.blade', 'blade_model_number', '刀片类型') remark = fields.Text('备注') @@ -132,6 +150,8 @@ class CutterBar(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) # 刀杆类型字段,关联刀杆类型对象 cutter_bar_model_number = fields.Many2one('sf.cutter.bar.model', '刀杆类型') # 品牌、C柄径(mm)、L总长(mm)、材料型号、刃数、D刃径(mm)、适用刀片型号、配对扳手(mm)、配备螺丝(mm)、刀尖圆角半径、精度等级、硬度(°)、适用范围、图片、创建人、创建时间 @@ -158,6 +178,8 @@ class CutterBarModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) remark = fields.Text('备注') @@ -168,6 +190,8 @@ class CutterPad(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) # 刀盘类型字段,关联刀盘类型对象 cutter_pad_model_number = fields.Many2one('sf.cutter.pad.model', '刀盘类型') # 增加品牌、C柄径(mm)、L总长(mm)、材料型号、刃数、D刃径(mm)、适用刀片型号、配对扳手(mm)、配备螺丝(mm)、刀尖圆角半径、精度等级、硬度(°)、适用范围、图片、创建人、创建时间 @@ -194,6 +218,8 @@ class CutterPadModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) remark = fields.Text('备注') @@ -204,6 +230,8 @@ class Handle(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) # 刀柄类型字段,关联刀柄类型对象 handle_model_number = fields.Many2one('sf.handle.model', '刀柄类型') # 增加、刀柄类型、品牌、L(mm)、L1(mm)、D1(mm)、重量(kg)、材料型号、本体精度(mm)、配对螺母(mm)、适用夹头型号、夹持范围(mm)、检测精度、检测硬度、标准转速、图片、创建人、创建时间 @@ -230,6 +258,8 @@ class HandleModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) remark = fields.Text('备注') @@ -240,6 +270,8 @@ class Chuck(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) # 夹头类型字段,关联夹头类型对象 chuck_model_number = fields.Many2one('sf.chuck.model', '夹头类型') # 增加品牌、精度(mm)、外径(mm)、内径(mm)、高度(mm)、材料型号、配对螺母(mm)、适用刀柄型号、夹持范围(mm)、特性、图片、创建人、创建时间 @@ -263,5 +295,6 @@ class ChuckModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) remark = fields.Text('备注') - diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index ff43d323..f07b2fcb 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -31,7 +31,7 @@ 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_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 diff --git a/sf_base/views/tool_base_menu.xml b/sf_base/views/tool_base_menu.xml index bde509e3..851fbf21 100644 --- a/sf_base/views/tool_base_menu.xml +++ b/sf_base/views/tool_base_menu.xml @@ -100,15 +100,13 @@ sf.chuck.model tree,form - - - - - - - - - + + + 刀具物料 + ir.actions.act_window + sf.cutting.tool.material + tree,form + - - - - - - - + + - - - - - - - + + + sf.cutting.tool.material.tree + sf.cutting.tool.material + + + + + + + + + + + sf.cutting.tool.material.form + sf.cutting.tool.material + +
+ + + + + + + + + + + + + +
+
+
sf.functional.cutting.tool.tree @@ -97,6 +131,7 @@ + @@ -160,6 +195,7 @@ + @@ -225,6 +261,7 @@ + @@ -291,6 +328,7 @@ + @@ -355,6 +393,7 @@ + @@ -421,6 +460,7 @@ + @@ -513,6 +553,7 @@ + @@ -546,7 +587,7 @@ - + @@ -580,6 +621,7 @@ + @@ -613,6 +655,7 @@ + @@ -647,6 +690,7 @@ + @@ -680,6 +724,7 @@ + From 3236d477c0560c42cdfa93c0bcee313dec392a37 Mon Sep 17 00:00:00 2001 From: yuxianghui <1608204036@qq.com> Date: Tue, 13 Jun 2023 17:13:15 +0800 Subject: [PATCH 03/11] =?UTF-8?q?sf=E7=9A=84=E5=8A=9F=E8=83=BD=E5=88=80?= =?UTF-8?q?=E5=85=B7=E5=AE=9E=E6=97=B6=E5=88=86=E5=B8=83=E5=92=8C=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=87=BA=E5=85=A5=E5=BA=93=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E8=A7=86=E5=9B=BE=E7=95=8C=E9=9D=A2=E5=B7=B2=E5=BB=BA?= =?UTF-8?q?=E7=AB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/__init__.py | 2 + sf_tool_management/__manifest__.py | 35 +++++ sf_tool_management/models/__init__.py | 4 + sf_tool_management/models/base.py | 3 + .../function_tool_entry_exit_records.py | 47 +++++++ .../functional_tool_real_time_distribution.py | 38 ++++++ .../security/ir.model.access.csv | 3 + .../function_tool_entry_exit_records_view.xml | 125 ++++++++++++++++++ ...ional_tool_real_time_distribution_view.xml | 109 +++++++++++++++ sf_tool_management/views/menu_view.xml | 34 +++++ 10 files changed, 400 insertions(+) create mode 100644 sf_tool_management/__init__.py create mode 100644 sf_tool_management/__manifest__.py create mode 100644 sf_tool_management/models/__init__.py create mode 100644 sf_tool_management/models/base.py create mode 100644 sf_tool_management/models/function_tool_entry_exit_records.py create mode 100644 sf_tool_management/models/functional_tool_real_time_distribution.py create mode 100644 sf_tool_management/security/ir.model.access.csv create mode 100644 sf_tool_management/views/function_tool_entry_exit_records_view.xml create mode 100644 sf_tool_management/views/functional_tool_real_time_distribution_view.xml create mode 100644 sf_tool_management/views/menu_view.xml diff --git a/sf_tool_management/__init__.py b/sf_tool_management/__init__.py new file mode 100644 index 00000000..041ffad6 --- /dev/null +++ b/sf_tool_management/__init__.py @@ -0,0 +1,2 @@ +# -*-coding:utf-8-*- +from . import models \ No newline at end of file diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py new file mode 100644 index 00000000..29eb4eb3 --- /dev/null +++ b/sf_tool_management/__manifest__.py @@ -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/ir.model.access.csv', + + 'views/functional_tool_real_time_distribution_view.xml', + 'views/function_tool_entry_exit_records_view.xml', + 'views/menu_view.xml', + + ], + 'demo': [ + ], + 'assets': { + + 'web.assets_qweb': [ + ], + + + }, + 'license': 'LGPL-3', + 'installable': True, + 'application': False, + 'auto_install': False, +} diff --git a/sf_tool_management/models/__init__.py b/sf_tool_management/models/__init__.py new file mode 100644 index 00000000..6ba6e9ad --- /dev/null +++ b/sf_tool_management/models/__init__.py @@ -0,0 +1,4 @@ +from . import base +from . import functional_tool_real_time_distribution +from . import function_tool_entry_exit_records + diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py new file mode 100644 index 00000000..faaaf799 --- /dev/null +++ b/sf_tool_management/models/base.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + + diff --git a/sf_tool_management/models/function_tool_entry_exit_records.py b/sf_tool_management/models/function_tool_entry_exit_records.py new file mode 100644 index 00000000..d40c7478 --- /dev/null +++ b/sf_tool_management/models/function_tool_entry_exit_records.py @@ -0,0 +1,47 @@ +from odoo import models,fields,api + + +class FunctionToolEntryExitRecords(models.Model): + _name = 'sf.function.tool.entry.exit.records' + _description = '功能刀具出入库记录' + _inherit = 'sf.functional.cutting.tool' + + order = fields.Char(string='序') + + 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='备注/说明') + + @api.model + def create(self, vals): + + if not vals.get('order'): + vals['order'] = self._generate_code() + return super(FunctionToolEntryExitRecords, 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 \ No newline at end of file diff --git a/sf_tool_management/models/functional_tool_real_time_distribution.py b/sf_tool_management/models/functional_tool_real_time_distribution.py new file mode 100644 index 00000000..7e7fbca8 --- /dev/null +++ b/sf_tool_management/models/functional_tool_real_time_distribution.py @@ -0,0 +1,38 @@ +from odoo import fields, models,api + + +class FunctionalToolRealTimeDistribution(models.Model): + _name = 'sf.functional.tool.real.time.distribution' + _description = "功能刀具实时分布" + _inherit = 'sf.functional.cutting.tool' + + order = fields.Char(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.Text(string='备注/说明') + + @api.model + def create(self, vals): + + if not vals.get('order'): + vals['order'] = self._generate_code() + return super(FunctionalToolRealTimeDistribution, 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 \ No newline at end of file diff --git a/sf_tool_management/security/ir.model.access.csv b/sf_tool_management/security/ir.model.access.csv new file mode 100644 index 00000000..b902d4e5 --- /dev/null +++ b/sf_tool_management/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_sf_functional_tool_real_time_distribution,sf.functional.tool.real.time.distribution,model_sf_functional_tool_real_time_distribution,base.group_user,1,1,1,1 +access_sf_function_tool_entry_exit_records,sf.function.tool.entry.exit.records,model_sf_function_tool_entry_exit_records,base.group_user,1,1,1,1 diff --git a/sf_tool_management/views/function_tool_entry_exit_records_view.xml b/sf_tool_management/views/function_tool_entry_exit_records_view.xml new file mode 100644 index 00000000..b82dce71 --- /dev/null +++ b/sf_tool_management/views/function_tool_entry_exit_records_view.xml @@ -0,0 +1,125 @@ + + + + 功能刀具出入库记录 + sf.function.tool.entry.exit.records + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能刀具出入库记录 + sf.function.tool.entry.exit.records + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + 功能刀具出入库记录 + ir.actions.act_window + sf.function.tool.entry.exit.records + tree,form + +
\ No newline at end of file diff --git a/sf_tool_management/views/functional_tool_real_time_distribution_view.xml b/sf_tool_management/views/functional_tool_real_time_distribution_view.xml new file mode 100644 index 00000000..4133bf1f --- /dev/null +++ b/sf_tool_management/views/functional_tool_real_time_distribution_view.xml @@ -0,0 +1,109 @@ + + + + 功能刀具实时分布 + sf.functional.tool.real.time.distribution + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能刀具实时分布 + sf.functional.tool.real.time.distribution + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + + 功能刀具实时分布 + ir.actions.act_window + sf.functional.tool.real.time.distribution + tree,form + +
\ No newline at end of file diff --git a/sf_tool_management/views/menu_view.xml b/sf_tool_management/views/menu_view.xml new file mode 100644 index 00000000..841f368c --- /dev/null +++ b/sf_tool_management/views/menu_view.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + \ No newline at end of file From 6068a55b7948f02d46d9b656868b01b6bc451baa Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Tue, 13 Jun 2023 17:30:35 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E6=96=B0=E5=A2=9Esf=E7=9A=84=E5=88=80?= =?UTF-8?q?=E5=85=B7=E6=A8=A1=E6=9D=BF=E7=9A=84=E7=9B=B8=E5=85=B3=E5=88=80?= =?UTF-8?q?=E5=85=B7=E7=89=A9=E6=96=99=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/base.py | 27 --- sf_base/security/ir.model.access.csv | 2 - sf_base/views/base_view.xml | 150 ---------------- sf_base/views/menu_view.xml | 20 --- sf_dlm/__manifest__.py | 7 +- sf_dlm/data/cutting_tool_data.xml | 30 ++++ sf_dlm/data/product_data.xml | 31 ++-- sf_dlm/models/__init__.py | 3 +- sf_dlm/views/product_template_view.xml | 58 ++++++- sf_manufacturing/models/__init__.py | 2 + sf_manufacturing/models/model_type.py | 22 ++- .../models/product_template.py | 60 ++++++- sf_manufacturing/models/product_workorder.py | 12 ++ sf_mrs_connect/data/ir_cron_data.xml | 22 --- sf_mrs_connect/models/res_config_setting.py | 4 - sf_mrs_connect/models/sync_common.py | 162 ------------------ 16 files changed, 197 insertions(+), 415 deletions(-) create mode 100644 sf_dlm/data/cutting_tool_data.xml rename {sf_dlm => sf_manufacturing}/models/product_template.py (83%) create mode 100644 sf_manufacturing/models/product_workorder.py diff --git a/sf_base/models/base.py b/sf_base/models/base.py index 4c77c114..aeb0c0ac 100644 --- a/sf_base/models/base.py +++ b/sf_base/models/base.py @@ -304,33 +304,6 @@ class MachineToolType(models.Model): code = fields.Char('编码') -# 刀具 -class CuttingTool(models.Model): - _name = 'sf.cutting_tool.category' - _description = '刀具类别' - code = fields.Char('编码') - name = fields.Char('名称') - remark = fields.Text('备注') - active = fields.Boolean('有效', default=True) - - -class CuttingToolType(models.Model): - _name = 'sf.cutting_tool.type' - _description = '刀具型号' - code = fields.Char('编码') - name = fields.Char('名称') - diameter = fields.Integer('直径') - long_blade = fields.Integer('避空长/刃长') - cone_angle_pitch = fields.Integer('锥角/节距') - shank_diameter = fields.Integer('柄径') - taper_shank_length = fields.Integer('锥柄长') - tool_length = fields.Integer('刀具总长') - blade_number = fields.Integer('刃数') - category_id = fields.Many2one('sf.cutting_tool.category', string='刀具类别') - brand_id = fields.Many2one('sf.machine.brand', string='品牌') - remark = fields.Text('备注') - active = fields.Boolean('有效', default=True) - class MachineToolCategory(models.Model): _name = 'sf.machine_tool.category' _description = '机床类型' diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index b75eee63..4c30d7bb 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -1,8 +1,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_sf_machine_tool,sf_machine_tool,model_sf_machine_tool,base.group_user,1,1,1,1 -access_sf_cutting_tool_category,sf_cutting_tool_category,model_sf_cutting_tool_category,base.group_user,1,1,1,1 access_sf_machine_tool_type,sf_machine_tool_type,model_sf_machine_tool_type,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_machine_brand,sf_machine_brand,model_sf_machine_brand,base.group_user,1,1,1,1 access_sf_machine_brand_tags,sf_machine_brand_tags,model_sf_machine_brand_tags,base.group_user,1,1,1,1 access_sf_machine_control_system,sf_machine_control_system,model_sf_machine_control_system,base.group_user,1,1,1,1 diff --git a/sf_base/views/base_view.xml b/sf_base/views/base_view.xml index 7aa192c1..75d481c8 100644 --- a/sf_base/views/base_view.xml +++ b/sf_base/views/base_view.xml @@ -255,156 +255,6 @@

- #------------------刀具型号------------------ - - - search.sf.cutting_tool.type - sf.cutting_tool.type - - - - - - - - - tree.sf.cutting_tool.type - sf.cutting_tool.type - - - - - - - - - - - form.sf.cutting_tool.type - sf.cutting_tool.type - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - 刀具型号 - ir.actions.act_window - sf.cutting_tool.type - tree,form - -

- [刀具型号] 还没有哦!点左上角的[创建]按钮,沙发归你了! -

-

-

-
-
- - #------------------刀具类别------------------ - - - search.sf.cutting_tool.category - sf.cutting_tool.category - - - - - - - - - tree.sf.cutting_tool.category - sf.cutting_tool.category - - - - - - - - - - form.sf.cutting_tool.category - sf.cutting_tool.category - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - 刀具类别 - ir.actions.act_window - sf.cutting_tool.category - tree,form - -

- [刀具类别] 还没有哦!点左上角的[创建]按钮,沙发归你了! -

-

-

-
-
#------------------机床注册------------------ diff --git a/sf_base/views/menu_view.xml b/sf_base/views/menu_view.xml index e011a29d..c9b8f1c1 100644 --- a/sf_base/views/menu_view.xml +++ b/sf_base/views/menu_view.xml @@ -127,26 +127,6 @@ sequence="1" action="action_sf_machine_tool_category"/> - - - - - - + + + + 刀具 + 刀具 + + + + 夹具 + 夹具 + + + + 刀具标准模板 + + + + + product + true + + + + serial + + + + diff --git a/sf_dlm/data/product_data.xml b/sf_dlm/data/product_data.xml index 54a468ad..8cd8ecf7 100644 --- a/sf_dlm/data/product_data.xml +++ b/sf_dlm/data/product_data.xml @@ -20,21 +20,32 @@ 表面工艺 + + + + + + + + + + + CNC加工产品模板 - delivery + product false - true + serial - false + 坯料自加工模板 @@ -42,15 +53,15 @@ - delivery + product false - true + serial - false + @@ -59,14 +70,14 @@ - delivery + product true serial - false + 坯料采购模板 @@ -74,14 +85,14 @@ - delivery + product true serial - false +
\ No newline at end of file diff --git a/sf_dlm/models/__init__.py b/sf_dlm/models/__init__.py index c6b96570..a8d31912 100644 --- a/sf_dlm/models/__init__.py +++ b/sf_dlm/models/__init__.py @@ -1,6 +1,5 @@ -from. import product_template from. import product_supplierinfo -from. import product_workorder + diff --git a/sf_dlm/views/product_template_view.xml b/sf_dlm/views/product_template_view.xml index efcab98d..c005987c 100644 --- a/sf_dlm/views/product_template_view.xml +++ b/sf_dlm/views/product_template_view.xml @@ -4,13 +4,8 @@ product.template.form.inherit.sf product.template - + - - - - - + @@ -77,6 +73,56 @@ + + + + +
+ + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
+ + + + + + + +
+
+ + + + + +
+
+
+
+
diff --git a/sf_manufacturing/models/__init__.py b/sf_manufacturing/models/__init__.py index 419dee46..c174827d 100644 --- a/sf_manufacturing/models/__init__.py +++ b/sf_manufacturing/models/__init__.py @@ -5,6 +5,8 @@ from . import mrp_maintenance from . import mrp_routing_workcenter from . import mrp_workorder from . import model_type +from . import product_template +from . import product_workorder from . import stock from . import res_user diff --git a/sf_manufacturing/models/model_type.py b/sf_manufacturing/models/model_type.py index 14315148..c665de36 100644 --- a/sf_manufacturing/models/model_type.py +++ b/sf_manufacturing/models/model_type.py @@ -1,6 +1,25 @@ from odoo import fields, models +class ResProductCategory(models.Model): + _inherit = "product.category" + + type = fields.Selection( + [("成品", "成品"), ("坯料", "坯料"), ("原材料", "原材料"), ("表面工艺", "表面工艺"), ("刀具", "刀具"), + ("夹具", "夹具")], + default="", string="类型") + +# +# class ResProductTemplateCateg(models.Model): +# _inherit = 'product.template' +# +# categ_type = fields.Selection( +# [("成品", "成品"), ("坯料", "坯料"), ("原材料", "原材料"), ("表面工艺", "表面工艺"), ("刀具", "刀具"), +# ("夹具", "夹具")], +# string='产品的类别', related='categ_id.type', +# store=True) + + class ModelType(models.Model): _name = 'sf.model.type' _description = '模型类型' @@ -82,5 +101,6 @@ class SurfaceTechnicsModelTypeRoutingSort(models.Model): _sql_constraints = [ ( - 'route_model_type_uniq', 'unique (route_workcenter_id,surface_technics_model_type_id)', '表面工艺工序不能重复!') + 'route_model_type_uniq', 'unique (route_workcenter_id,surface_technics_model_type_id)', + '表面工艺工序不能重复!') ] diff --git a/sf_dlm/models/product_template.py b/sf_manufacturing/models/product_template.py similarity index 83% rename from sf_dlm/models/product_template.py rename to sf_manufacturing/models/product_template.py index 55bfc854..7df376a0 100644 --- a/sf_dlm/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -15,7 +15,8 @@ class ResProductTemplate(models.Model): # 模型的长,宽,高,体积,精度,材料 model_name = fields.Char('模型名称') categ_type = fields.Selection( - [("成品", "成品"), ("坯料", "坯料"), ("原材料", "原材料"), ("表面工艺", "表面工艺")], + [("成品", "成品"), ("坯料", "坯料"), ("原材料", "原材料"), ("表面工艺", "表面工艺"), ("刀具", "刀具"), + ("夹具", "夹具")], string='产品的类别', related='categ_id.type', store=True) model_long = fields.Float('模型长[mm]', digits=(16, 3)) @@ -49,6 +50,58 @@ class ResProductTemplate(models.Model): model_code = fields.Char('模型编码') is_bfm = fields.Boolean('业务平台是否自动创建', default=False) + 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_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_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_top_angle = fields.Float('顶角(°)') + cutting_tool_parameter_top_angle = fields.Float('R角(°)') + cutting_tool_parameter_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_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_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_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_weight = fields.Float('重量(kg)') + 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_handle_model = fields.Many2many('sf.handle.model', string='适用刀柄型号') + cutting_tool_parameter_feature = fields.Char('特性') + def _get_volume_uom_id_from_ir_config_parameter(self): product_length_in_feet_param = self.env['ir.config_parameter'].sudo().get_param('product.volume_in_cubic_feet') if product_length_in_feet_param == '1': @@ -341,12 +394,7 @@ class ResMrpBom(models.Model): return raw_bom -class ResProductCategory(models.Model): - _inherit = "product.category" - type = fields.Selection( - [("成品", "成品"), ("坯料", "坯料"), ("原材料", "原材料"), ("表面工艺", "表面工艺")], - default="", string="类型") # @api.constrains('type') # def _check_type(self): diff --git a/sf_manufacturing/models/product_workorder.py b/sf_manufacturing/models/product_workorder.py new file mode 100644 index 00000000..bcdc5d86 --- /dev/null +++ b/sf_manufacturing/models/product_workorder.py @@ -0,0 +1,12 @@ +from odoo import fields, models + + +class ResMrpWorkOrder(models.Model): + _inherit = 'mrp.workorder' + _order = 'sequence' + + product_tmpl_id_length = fields.Float(related='production_id.product_tmpl_id.length', readonly=True, store=True, check_company=True, string="坯料长度(mm)") + product_tmpl_id_width = fields.Float(related='production_id.product_tmpl_id.width', readonly=True, store=True, check_company=True, string="坯料宽度(mm)") + product_tmpl_id_height = fields.Float(related='production_id.product_tmpl_id.height', readonly=True, store=True, check_company=True, string="坯料高度(mm)") + product_tmpl_id_materials_id = fields.Many2one(related='production_id.product_tmpl_id.materials_id', readonly=True, store=True, check_company=True, string="材料") + product_tmpl_id_materials_type_id = fields.Many2one(related='production_id.product_tmpl_id.materials_type_id', readonly=True, store=True, check_company=True, string="型号") diff --git a/sf_mrs_connect/data/ir_cron_data.xml b/sf_mrs_connect/data/ir_cron_data.xml index 513d5dee..54b273ef 100644 --- a/sf_mrs_connect/data/ir_cron_data.xml +++ b/sf_mrs_connect/data/ir_cron_data.xml @@ -99,28 +99,6 @@ - - 同步资源库刀具类别 - - code - model.sync_cutting_tool_category() - 1 - days - -1 - - - - - 同步资源库刀具型号 - - code - model.sync_cutting_tool_type() - 1 - days - -1 - - - 同步资源库工序 diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py index bb996fdf..d5379e07 100644 --- a/sf_mrs_connect/models/res_config_setting.py +++ b/sf_mrs_connect/models/res_config_setting.py @@ -40,10 +40,6 @@ class ResConfigSettings(models.TransientModel): _logger.info("同步资源库机床型号") self.env['sf.machine_tool.category'].sync_all_machine_tool_category() _logger.info("同步资源库机床类型") - self.env['sf.cutting_tool.category'].sync_all_cutting_tool_category() - _logger.info("同步资源库刀具类别") - self.env['sf.cutting_tool.type'].sync_all_cutting_tool_type() - _logger.info("同步资源库刀具") # self.env['sf.production.process.parameter'].sync_all_production_process_parameter() # _logger.info("同步表面工艺参数") _logger.info("定时同步每日功能刀具类型列表...") diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 601b9212..01f8a304 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -883,168 +883,6 @@ class MachineToolType(models.Model): raise ValidationError("认证未通过") -class CuttingTool(models.Model): - _inherit = 'sf.cutting_tool.category' - _description = '刀具类别' - url = '/api/cutting_tool_category/list' - - # 定时同步刀具类别 - def sync_cutting_tool_category(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['cutting_tool_category_yesterday_list']: - brand = self.env['sf.cutting_tool.category'].search( - [("code", '=', item['code'])]) - if brand: - brand.id = item['id'], - brand.name = item['name'], - brand.code = item['code'], - brand.active = item['active'], - brand.remark = item['remark'] - else: - self.env['sf.cutting_tool.category'].create({ - "id": item['id'], - "name": item['name'], - "code": item['code'], - "remark": item['remark'], - "active": item['active'], - # "tag_ids": item['tag_ids'] - - }) - else: - raise ValidationError("认证未通过") - - # 同步所有刀具类别 - def sync_all_cutting_tool_category(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['cutting_tool_category_all_list']: - brand = self.env['sf.cutting_tool.category'].search( - [("code", '=', item['code'])]) - if not brand: - self.env['sf.cutting_tool.category'].create({ - "id": item['id'], - "name": item['name'], - "code": item['code'], - "remark": item['remark'], - "active": item['active'], - # "tag_ids": item['tag_ids'] - - }) - else: - raise ValidationError("认证未通过") - - -class CuttingToolType(models.Model): - _inherit = 'sf.cutting_tool.type' - _description = '刀具型号' - url = '/api/cutting_tool_type/list' - - # 定时同步刀具型号 - def sync_cutting_tool_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['cutting_tool_type_yesterday_list']: - brand = self.env['sf.cutting_tool.type'].search( - [("code", '=', item['code'])]) - if brand: - brand.id = item['id'], - brand.name = item['name'], - brand.code = item['code'], - brand.active = item['active'], - brand.remark = item['remark'], - brand.diameter = item['diameter'], - brand.cone_angle_pitch = item['cone_angle_pitch'], - brand.shank_diameter = item['shank_diameter'], - brand.long_blade = item['long_blade'], - brand.taper_shank_length = item['taper_shank_length'], - brand.tool_length = item['tool_length'], - brand.blade_number = item['blade_number'] - brand.brand_id = self.env['sf.machine.brand'].search([('code', '=', item['brand_id'])]).id, - brand.category_id = self.env['sf.cutting_tool.category'].search( - [('code', '=', item['category_id'])]).id - else: - self.env['sf.cutting_tool.type'].create({ - "id": item['id'], - "name": item['name'], - "remark": item['remark'], - "code": item['code'], - "active": item['active'], - "diameter": item['diameter'], - "cone_angle_pitch": item['cone_angle_pitch'], - "shank_diameter": item['shank_diameter'], - "long_blade": item['long_blade'], - "taper_shank_length": item['taper_shank_length'], - "tool_length": item['tool_length'], - "blade_number": item['blade_number'], - 'brand_id': self.env['sf.machine.brand'].search([('code', '=', item['brand_id'])]).id, - "category_id": self.env['sf.cutting_tool.category'].search( - [('code', '=', item['category_id'])]).id, - }) - else: - raise ValidationError("认证未通过") - - # 同步所有刀具型号 - def sync_all_cutting_tool_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['cutting_tool_type_all_list']: - brand = self.env['sf.cutting_tool.type'].search( - [("code", '=', item['code'])]) - if not brand: - self.env['sf.cutting_tool.type'].create({ - "id": item['id'], - "name": item['name'], - "remark": item['remark'], - "code": item['code'], - "active": item['active'], - "diameter": item['diameter'], - "cone_angle_pitch": item['cone_angle_pitch'], - "shank_diameter": item['shank_diameter'], - "long_blade": item['long_blade'], - "taper_shank_length": item['taper_shank_length'], - "tool_length": item['tool_length'], - "blade_number": item['blade_number'], - 'brand_id': self.env['sf.machine.brand'].search([('code', '=', item['brand_id'])]).id, - "category_id": self.env['sf.cutting_tool.category'].search( - [('code', '=', item['category_id'])]).id, - }) - else: - raise ValidationError("认证未通过") - - class sfProcessingOrder(models.Model): _inherit = 'sf.processing.order' _description = '工序' From 24fd92fa3b12d2ee06187dcb140fa3d8979e6990 Mon Sep 17 00:00:00 2001 From: yuxianghui <1608204036@qq.com> Date: Wed, 14 Jun 2023 16:27:16 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E5=AF=B9=E5=8A=9F=E8=83=BD=E5=88=80?= =?UTF-8?q?=E5=85=B7=E9=A2=84=E8=AD=A6=E3=80=81=E5=AE=9E=E6=97=B6=E5=88=86?= =?UTF-8?q?=E5=B8=83=E5=92=8C=E5=87=BA=E5=85=A5=E5=BA=93=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=E8=BF=9B=E8=A1=8C=E4=BA=86=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/__init__.py | 2 +- sf_tool_management/__manifest__.py | 5 +- sf_tool_management/models/__init__.py | 2 - sf_tool_management/models/base.py | 73 +++++++++ .../function_tool_entry_exit_records.py | 47 ------ .../functional_tool_real_time_distribution.py | 38 ----- .../security/group_security.xml | 4 + .../security/ir.model.access.csv | 8 +- .../function_tool_entry_exit_records_view.xml | 125 --------------- ...ional_tool_real_time_distribution_view.xml | 109 ------------- sf_tool_management/views/menu_view.xml | 35 ++++- sf_tool_management/views/tool_base_views.xml | 146 ++++++++++++++++++ 12 files changed, 259 insertions(+), 335 deletions(-) delete mode 100644 sf_tool_management/models/function_tool_entry_exit_records.py delete mode 100644 sf_tool_management/models/functional_tool_real_time_distribution.py create mode 100644 sf_tool_management/security/group_security.xml delete mode 100644 sf_tool_management/views/function_tool_entry_exit_records_view.xml delete mode 100644 sf_tool_management/views/functional_tool_real_time_distribution_view.xml create mode 100644 sf_tool_management/views/tool_base_views.xml diff --git a/sf_tool_management/__init__.py b/sf_tool_management/__init__.py index 041ffad6..c081ee06 100644 --- a/sf_tool_management/__init__.py +++ b/sf_tool_management/__init__.py @@ -1,2 +1,2 @@ # -*-coding:utf-8-*- -from . import models \ No newline at end of file +from . import models diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index 29eb4eb3..8368f528 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -12,10 +12,9 @@ 'website': 'https://www.sf.jikimo.com', 'depends': ['account', 'sf_base', 'mrp'], 'data': [ + 'security/group_security.xml', 'security/ir.model.access.csv', - - 'views/functional_tool_real_time_distribution_view.xml', - 'views/function_tool_entry_exit_records_view.xml', + 'views/tool_base_views.xml', 'views/menu_view.xml', ], diff --git a/sf_tool_management/models/__init__.py b/sf_tool_management/models/__init__.py index 6ba6e9ad..c1c7e803 100644 --- a/sf_tool_management/models/__init__.py +++ b/sf_tool_management/models/__init__.py @@ -1,4 +1,2 @@ from . import base -from . import functional_tool_real_time_distribution -from . import function_tool_entry_exit_records diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index faaaf799..af915884 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -1,3 +1,76 @@ # -*- coding: utf-8 -*- +from odoo import fields, models, api +class FunctionalCuttingToolEntity(models.Model): + _name = 'sf.functional.cutting.tool.entity' + _inherit = 'sf.functional.cutting.tool' + _description = '功能刀具管理' + + order = fields.Char(string='序') + + # 功能刀具预警 特有字段 + 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.Text(string='备注/说明') + + @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 diff --git a/sf_tool_management/models/function_tool_entry_exit_records.py b/sf_tool_management/models/function_tool_entry_exit_records.py deleted file mode 100644 index d40c7478..00000000 --- a/sf_tool_management/models/function_tool_entry_exit_records.py +++ /dev/null @@ -1,47 +0,0 @@ -from odoo import models,fields,api - - -class FunctionToolEntryExitRecords(models.Model): - _name = 'sf.function.tool.entry.exit.records' - _description = '功能刀具出入库记录' - _inherit = 'sf.functional.cutting.tool' - - order = fields.Char(string='序') - - 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='备注/说明') - - @api.model - def create(self, vals): - - if not vals.get('order'): - vals['order'] = self._generate_code() - return super(FunctionToolEntryExitRecords, 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 \ No newline at end of file diff --git a/sf_tool_management/models/functional_tool_real_time_distribution.py b/sf_tool_management/models/functional_tool_real_time_distribution.py deleted file mode 100644 index 7e7fbca8..00000000 --- a/sf_tool_management/models/functional_tool_real_time_distribution.py +++ /dev/null @@ -1,38 +0,0 @@ -from odoo import fields, models,api - - -class FunctionalToolRealTimeDistribution(models.Model): - _name = 'sf.functional.tool.real.time.distribution' - _description = "功能刀具实时分布" - _inherit = 'sf.functional.cutting.tool' - - order = fields.Char(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.Text(string='备注/说明') - - @api.model - def create(self, vals): - - if not vals.get('order'): - vals['order'] = self._generate_code() - return super(FunctionalToolRealTimeDistribution, 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 \ No newline at end of file diff --git a/sf_tool_management/security/group_security.xml b/sf_tool_management/security/group_security.xml new file mode 100644 index 00000000..b8668782 --- /dev/null +++ b/sf_tool_management/security/group_security.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/sf_tool_management/security/ir.model.access.csv b/sf_tool_management/security/ir.model.access.csv index b902d4e5..3156f716 100644 --- a/sf_tool_management/security/ir.model.access.csv +++ b/sf_tool_management/security/ir.model.access.csv @@ -1,3 +1,7 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_sf_functional_tool_real_time_distribution,sf.functional.tool.real.time.distribution,model_sf_functional_tool_real_time_distribution,base.group_user,1,1,1,1 -access_sf_function_tool_entry_exit_records,sf.function.tool.entry.exit.records,model_sf_function_tool_entry_exit_records,base.group_user,1,1,1,1 +access_sf_functional_cutting_tool_entity,sf.functional.cutting.tool.entity,model_sf_functional_cutting_tool_entity,base.group_user,1,1,1,1 + + + + + diff --git a/sf_tool_management/views/function_tool_entry_exit_records_view.xml b/sf_tool_management/views/function_tool_entry_exit_records_view.xml deleted file mode 100644 index b82dce71..00000000 --- a/sf_tool_management/views/function_tool_entry_exit_records_view.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - 功能刀具出入库记录 - sf.function.tool.entry.exit.records - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 功能刀具出入库记录 - sf.function.tool.entry.exit.records - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - 功能刀具出入库记录 - ir.actions.act_window - sf.function.tool.entry.exit.records - tree,form - -
\ No newline at end of file diff --git a/sf_tool_management/views/functional_tool_real_time_distribution_view.xml b/sf_tool_management/views/functional_tool_real_time_distribution_view.xml deleted file mode 100644 index 4133bf1f..00000000 --- a/sf_tool_management/views/functional_tool_real_time_distribution_view.xml +++ /dev/null @@ -1,109 +0,0 @@ - - - - 功能刀具实时分布 - sf.functional.tool.real.time.distribution - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 功能刀具实时分布 - sf.functional.tool.real.time.distribution - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - - 功能刀具实时分布 - ir.actions.act_window - sf.functional.tool.real.time.distribution - tree,form - -
\ No newline at end of file diff --git a/sf_tool_management/views/menu_view.xml b/sf_tool_management/views/menu_view.xml index 841f368c..2abf6a11 100644 --- a/sf_tool_management/views/menu_view.xml +++ b/sf_tool_management/views/menu_view.xml @@ -1,18 +1,37 @@ - + + + 功能刀具预警 + ir.actions.act_window + sf.functional.cutting.tool.entity + tree + + + + + name="功能刀具列表" + sequence="3" + action="sf_base.action_sf_functional_cutting_tool" + /> + + + + /> + /> \ No newline at end of file diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml new file mode 100644 index 00000000..8bf5a904 --- /dev/null +++ b/sf_tool_management/views/tool_base_views.xml @@ -0,0 +1,146 @@ + + + + + + sf.functional.cutting.tool.entity.tree + sf.functional.cutting.tool.entity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能刀具出入库记录 + sf.functional.cutting.tool.entity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能刀具出入库记录 + ir.actions.act_window + sf.functional.cutting.tool.entity + tree + + + + + + + 功能刀具实时分布 + sf.functional.cutting.tool.entity + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 功能刀具实时分布 + ir.actions.act_window + sf.functional.cutting.tool.entity + tree + + + + + From 93c5bcebe155be73ccbad080b42662bd066e4d76 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 14 Jun 2023 16:33:53 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=88=80=E5=85=B7?= =?UTF-8?q?=E7=89=A9=E6=96=99=E5=90=8C=E6=AD=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base.py | 87 +++++- sf_base/security/ir.model.access.csv | 1 + sf_base/views/tool_base_menu.xml | 16 ++ sf_base/views/tool_base_views.xml | 70 ++++- sf_mrs_connect/models/res_config_setting.py | 21 +- sf_mrs_connect/models/sync_common.py | 277 +++++++++++++++++--- 6 files changed, 399 insertions(+), 73 deletions(-) diff --git a/sf_base/models/tool_base.py b/sf_base/models/tool_base.py index 452b5ecf..1c8dadbb 100644 --- a/sf_base/models/tool_base.py +++ b/sf_base/models/tool_base.py @@ -17,6 +17,68 @@ class CuttingToolMaterial(models.Model): remark = fields.Char('备注') +# 测试模型 +class aa_test(models.Model): + _name = 'sf.test' + _description = '测试' + + model_number = fields.Char('型号', readonly=True) + # 关联刀具物料 + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') + # 关联整体式刀具型号 + integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具型号') + # 关联刀片型号 + blade_model_number = fields.Many2one('sf.blade', '刀片型号') + # 关联刀杆型号 + cutterbar_model_number = fields.Many2one('sf.cutter.bar', '刀杆型号') + # 关联刀盘型号 + cutterpad_model_number = fields.Many2one('sf.cutter.pad', '刀盘型号') + # 关联刀柄型号 + handle_model_number = fields.Many2one('sf.handle', '刀柄型号') + # 关联夹头型号 + chuck_model_number = fields.Many2one('sf.chuck', '夹头型号') + + hide_integral_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏整体式刀具型号') + hide_blade_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀片型号') + hide_cutterbar_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀杆型号') + hide_cutterpad_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀盘型号') + hide_handle_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀柄型号') + hide_chuck_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏夹头型号') + hide_model_number = fields.Boolean(compute='_compute_hide_model_number', default=True, string='隐藏型号') + + @api.depends('cutting_tool_material') + def _compute_hide_model_number(self): + for record in self: + record.hide_integral_model_number = False + record.hide_blade_model_number = False + record.hide_cutterbar_model_number = False + record.hide_cutterpad_model_number = False + record.hide_handle_model_number = False + record.hide_chuck_model_number = False + record.hide_model_number = True + + if record.cutting_tool_material and record.cutting_tool_material.name == '整体式刀具': + record.hide_model_number = False + record.hide_integral_model_number = True + elif record.cutting_tool_material and record.cutting_tool_material.name == '刀片': + record.hide_model_number = False + record.hide_blade_model_number = True + elif record.cutting_tool_material and record.cutting_tool_material.name == '刀杆': + record.hide_model_number = False + record.hide_cutterbar_model_number = True + elif record.cutting_tool_material and record.cutting_tool_material.name == '刀盘': + record.hide_model_number = False + record.hide_cutterpad_model_number = True + elif record.cutting_tool_material and record.cutting_tool_material.name == '刀柄': + record.hide_model_number = False + record.hide_handle_model_number = True + elif record.cutting_tool_material and record.cutting_tool_material.name == '夹头': + record.hide_model_number = False + record.hide_chuck_model_number = True + else: + record.hide_model_number = True + + # 功能刀具 class FunctionalCuttingTool(models.Model): _name = 'sf.functional.cutting.tool' @@ -64,7 +126,7 @@ class IntegralCuttingTool(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') # 整体式刀具类型字段,关联整体式刀具类型对象 integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具类型') # 增加品牌、总长度(mm)、柄部长度(mm)、刃部长度(mm)、直径(mm)、刃数、前角(°)、后角(°)、主偏角(°)、材料型号、配对螺母(mm)、适用夹头型号、适用范围、图片、创建人、创建时间等字段 @@ -93,7 +155,7 @@ class IntegralCuttingToolModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') remark = fields.Text('备注') @@ -105,7 +167,7 @@ class Blade(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') # 刀片类型字段,关联刀片类型对象 blade_model_number = fields.Many2one('sf.blade.model', '刀片类型') # 编码、型号名称、刀片类型、品牌、长度L(mm)、宽度D(mm)、高度T(mm)、顶角(°)、前角(°)、后角(°)、主偏角(°)、R角(°)、材料型号、加工硬度、配对螺母(mm)、适用刀杆/刀盘型号、刀尖半径(mm)、图片、创建人、创建时间字段 @@ -137,7 +199,7 @@ class BladeModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') # 刀片类型字段,关联刀片对象 blade_ids = fields.One2many('sf.blade', 'blade_model_number', '刀片类型') remark = fields.Text('备注') @@ -151,7 +213,7 @@ class CutterBar(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') # 刀杆类型字段,关联刀杆类型对象 cutter_bar_model_number = fields.Many2one('sf.cutter.bar.model', '刀杆类型') # 品牌、C柄径(mm)、L总长(mm)、材料型号、刃数、D刃径(mm)、适用刀片型号、配对扳手(mm)、配备螺丝(mm)、刀尖圆角半径、精度等级、硬度(°)、适用范围、图片、创建人、创建时间 @@ -179,7 +241,7 @@ class CutterBarModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') remark = fields.Text('备注') @@ -191,7 +253,7 @@ class CutterPad(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') # 刀盘类型字段,关联刀盘类型对象 cutter_pad_model_number = fields.Many2one('sf.cutter.pad.model', '刀盘类型') # 增加品牌、C柄径(mm)、L总长(mm)、材料型号、刃数、D刃径(mm)、适用刀片型号、配对扳手(mm)、配备螺丝(mm)、刀尖圆角半径、精度等级、硬度(°)、适用范围、图片、创建人、创建时间 @@ -219,7 +281,7 @@ class CutterPadModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') remark = fields.Text('备注') @@ -231,7 +293,7 @@ class Handle(models.Model): code = fields.Char('编码') name = fields.Char('型号名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') # 刀柄类型字段,关联刀柄类型对象 handle_model_number = fields.Many2one('sf.handle.model', '刀柄类型') # 增加、刀柄类型、品牌、L(mm)、L1(mm)、D1(mm)、重量(kg)、材料型号、本体精度(mm)、配对螺母(mm)、适用夹头型号、夹持范围(mm)、检测精度、检测硬度、标准转速、图片、创建人、创建时间 @@ -259,7 +321,7 @@ class HandleModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') remark = fields.Text('备注') @@ -267,11 +329,12 @@ class HandleModel(models.Model): class Chuck(models.Model): _name = 'sf.chuck' _description = '夹头' + _rec_name = 'code' code = fields.Char('编码') name = fields.Char('型号名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') # 夹头类型字段,关联夹头类型对象 chuck_model_number = fields.Many2one('sf.chuck.model', '夹头类型') # 增加品牌、精度(mm)、外径(mm)、内径(mm)、高度(mm)、材料型号、配对螺母(mm)、适用刀柄型号、夹持范围(mm)、特性、图片、创建人、创建时间 @@ -296,5 +359,5 @@ class ChuckModel(models.Model): code = fields.Char('编码') name = fields.Char('名称') # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料', required=True) + cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') remark = fields.Text('备注') diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index f07b2fcb..c21529ff 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -32,6 +32,7 @@ access_sf_handle_model,sf.handle.model,model_sf_handle_model,base.group_user,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_test,sf.test,model_sf_test,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 diff --git a/sf_base/views/tool_base_menu.xml b/sf_base/views/tool_base_menu.xml index 851fbf21..71c0b6ef 100644 --- a/sf_base/views/tool_base_menu.xml +++ b/sf_base/views/tool_base_menu.xml @@ -107,7 +107,15 @@ sf.cutting.tool.material tree,form
+ + + 测试 + ir.actions.act_window + sf.test + tree,form + + + + diff --git a/sf_base/views/tool_base_views.xml b/sf_base/views/tool_base_views.xml index be2159ea..30816d77 100644 --- a/sf_base/views/tool_base_views.xml +++ b/sf_base/views/tool_base_views.xml @@ -145,6 +145,8 @@ + + @@ -156,12 +158,12 @@ - - - + + + @@ -209,7 +211,8 @@ - + + @@ -217,15 +220,12 @@ + - - - - @@ -262,6 +262,8 @@ + + @@ -290,7 +292,6 @@ - @@ -329,6 +330,8 @@ + + @@ -356,7 +359,6 @@ - @@ -394,6 +396,8 @@ + + @@ -419,7 +423,6 @@ - @@ -461,6 +464,8 @@ + + @@ -483,7 +488,6 @@ - @@ -734,7 +738,49 @@ + + + sf.test.tree + sf.test + + + + + + + + + sf.test.form + sf.test + +
+ + + + + + + + + + + + + + + + + + + + + + + +
+
+
diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py index 535c394e..c62f5be3 100644 --- a/sf_mrs_connect/models/res_config_setting.py +++ b/sf_mrs_connect/models/res_config_setting.py @@ -55,6 +55,11 @@ class ResConfigSettings(models.TransientModel): _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_all_cutting_tool_material() _logger.info("同步每日刀片类型列表...") self.env['sf.blade.model'].sync_blade_model() _logger.info("同步每日刀片类型完成") @@ -134,14 +139,14 @@ 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("同步资源库导向元件导向方式") + # 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) diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index d5377cf7..8fcbee28 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -726,7 +726,7 @@ class MachineToolType(models.Model): [('code', '=', item['machine_tool_id'])]).id else: - print(item['machine_tool_picture'].encode('utf-8')) + # print(item['machine_tool_picture'].encode('utf-8')) self.env['sf.machine_tool.type'].create({ "id": item['id'], "name": item['name'], @@ -1237,6 +1237,78 @@ class MachineToolCategory(models.Model): raise ValidationError("认证未通过") +# 同步刀具物料 +class sfSyncCutting_tool_Material(models.Model): + _inherit = 'sf.cutting.tool.material' + _description = '刀具物料同步' + + url = '/api/mrs_cutting_tool_material/list' + + # 定时同步每日刀具物料 + def sync_cutting_tool_material(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:%s' % result) + if result['status'] == 1: + if result.get('mrs_cutting_tool_material_yesterday_list'): + for item in result['mrs_cutting_tool_material_yesterday_list']: + if item: + brand = self.env['sf.cutting.tool.material'].search( + [("code", '=', item['code'])]) + if not brand: + self.env['sf.cutting.tool.material'].create({ + "name": item['name'], + "code": item['code'], + "remark": item['remark'], + }) + else: + brand.write({ + "name": item['name'], + "code": item['code'], + "remark": item['remark'], + }) + else: + raise ValidationError("认证未通过") + + # 同步所有刀具物料 + def sync_all_cutting_tool_material(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:%s' % result) + if result['status'] == 1: + if result.get('mrs_cutting_tool_material_all_list'): + for item in result['mrs_cutting_tool_material_all_list']: + if item: + brand = self.env['sf.cutting.tool.material'].search( + [("code", '=', item['code'])]) + if not brand: + self.env['sf.cutting.tool.material'].create({ + "name": item['name'], + "code": item['code'], + "remark": item['remark'], + }) + else: + brand.write({ + "name": item['name'], + "code": item['code'], + "remark": item['remark'], + }) + + # 同步功能刀具列表 class sfSyncFunctional_cutting_tool(models.Model): _inherit = 'sf.functional.cutting.tool' @@ -1254,7 +1326,7 @@ class sfSyncFunctional_cutting_tool(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_functional_cutting_tool_yesterday_list'): for item in result['mrs_functional_cutting_tool_yesterday_list']: @@ -1462,7 +1534,7 @@ class SyncFunctionalCuttingToolModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_functional_cutting_tool_model_yesterday_list'): for item in result['mrs_functional_cutting_tool_model_yesterday_list']: @@ -1495,7 +1567,7 @@ class SyncFunctionalCuttingToolModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_functional_cutting_tool_model_all_list'): for item in result['mrs_functional_cutting_tool_model_all_list']: @@ -1536,7 +1608,7 @@ class SyncIntegralCuttingTool(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_integral_cutting_tool_yesterday_list'): for item in result['mrs_integral_cutting_tool_yesterday_list']: @@ -1561,6 +1633,8 @@ class SyncIntegralCuttingTool(models.Model): [("code", '=', item['integral_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "total_length": item['total_length'], "shank_length": item['shank_length'], "blade_length": item['blade_length'], @@ -1584,6 +1658,8 @@ class SyncIntegralCuttingTool(models.Model): [("code", '=', item['integral_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "total_length": item['total_length'], "shank_length": item['shank_length'], "blade_length": item['blade_length'], @@ -1613,7 +1689,7 @@ class SyncIntegralCuttingTool(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_integral_cutting_tool_all_list'): for item in result['mrs_integral_cutting_tool_all_list']: @@ -1638,6 +1714,8 @@ class SyncIntegralCuttingTool(models.Model): [("code", '=', item['integral_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "total_length": item['total_length'], "shank_length": item['shank_length'], "blade_length": item['blade_length'], @@ -1661,6 +1739,8 @@ class SyncIntegralCuttingTool(models.Model): [("code", '=', item['integral_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "total_length": item['total_length'], "shank_length": item['shank_length'], "blade_length": item['blade_length'], @@ -1698,7 +1778,7 @@ class SyncIntegralCuttingToolModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_integral_cutting_tool_model_list'): for item in result['mrs_integral_cutting_tool_model_list']: @@ -1710,6 +1790,16 @@ class SyncIntegralCuttingToolModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, + }) + else: + brand.write({ + "name": item['name'], + "code": item['code'], + "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: raise ValidationError("认证未通过") @@ -1725,7 +1815,7 @@ class SyncIntegralCuttingToolModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_integral_cutting_tool_model_all_list'): for item in result['mrs_integral_cutting_tool_model_all_list']: @@ -1737,6 +1827,16 @@ class SyncIntegralCuttingToolModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, + }) + else: + brand.write({ + "name": item['name'], + "code": item['code'], + "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: raise ValidationError("认证未通过") @@ -1759,10 +1859,20 @@ class SyncBlade(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_blade_yesterday_list'): for item in result['mrs_blade_yesterday_list']: + bar_list = [] + pad_list = [] + if item.get('cutter_bar'): + for i in item.get('cutter_bar'): + bar_list.append(self.env['sf.cutter.bar'].search( + [("code", '=', i)]).id) + if item.get('cutter_pad'): + for j in item.get('cutter_pad'): + pad_list.append(self.env['sf.cutter.pad'].search( + [("code", '=', j)]).id) if item: # code, name, blade_model_number, brand, length, width, height, top_angle, front_angle, rear_angle, main_included_angle, r_angle, material_model, hardness, nut, cutter_bar, cutter_pad, radius, image, create_uid, create_date brand = self.env['sf.blade'].search( @@ -1779,6 +1889,8 @@ class SyncBlade(models.Model): [("code", '=', item['blade_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "width": item['width'], "height": item['height'], @@ -1791,8 +1903,8 @@ class SyncBlade(models.Model): [("materials_no", '=', item['material_model'])]).id, "hardness": item['hardness'], "nut": item['nut'], - "cutter_bar": item['cutter_bar'], - "cutter_pad": item['cutter_pad'], + "cutter_bar": bar_list, + "cutter_pad": pad_list, "radius": item['radius'], "image": image, }) @@ -1803,6 +1915,8 @@ class SyncBlade(models.Model): [("code", '=', item['blade_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "width": item['width'], "height": item['height'], @@ -1815,8 +1929,8 @@ class SyncBlade(models.Model): [("materials_no", '=', item['material_model'])]).id, "hardness": item['hardness'], "nut": item['nut'], - "cutter_bar": item['cutter_bar'], - "cutter_pad": item['cutter_pad'], + "cutter_bar": bar_list, + "cutter_pad": pad_list, "radius": item['radius'], "image": image, }) @@ -1838,7 +1952,16 @@ class SyncBlade(models.Model): if result['status'] == 1: if result.get('mrs_blade_all_list'): for item in result['mrs_blade_all_list']: - # print('item_image:%s' % item['image'].encode('utf-8) + bar_list = [] + pad_list = [] + if item.get('cutter_bar'): + for i in item.get('cutter_bar'): + bar_list.append(self.env['sf.cutter.bar'].search( + [("code", '=', i)]).id) + if item.get('cutter_pad'): + for j in item.get('cutter_pad'): + pad_list.append(self.env['sf.cutter.pad'].search( + [("code", '=', j)]).id) if item: brand = self.env['sf.blade'].search( @@ -1855,6 +1978,8 @@ class SyncBlade(models.Model): [("code", '=', item['blade_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "width": item['width'], "height": item['height'], @@ -1867,8 +1992,8 @@ class SyncBlade(models.Model): [("materials_no", '=', item['material_model'])]).id, "hardness": item['hardness'], "nut": item['nut'], - "cutter_bar": item['cutter_bar'], - "cutter_pad": item['cutter_pad'], + "cutter_bar": bar_list, + "cutter_pad": pad_list, "radius": item['radius'], "image": image, }) @@ -1879,6 +2004,8 @@ class SyncBlade(models.Model): [("code", '=', item['blade_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "width": item['width'], "height": item['height'], @@ -1891,8 +2018,8 @@ class SyncBlade(models.Model): [("materials_no", '=', item['material_model'])]).id, "hardness": item['hardness'], "nut": item['nut'], - "cutter_bar": item['cutter_bar'], - "cutter_pad": item['cutter_pad'], + "cutter_bar": bar_list, + "cutter_pad": pad_list, "radius": item['radius'], "image": image, }) @@ -1918,7 +2045,7 @@ class SyncBladeModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_blade_model_yesterday_list'): for item in result['mrs_blade_model_yesterday_list']: @@ -1930,12 +2057,16 @@ class SyncBladeModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步每日刀片类型列表成功') else: @@ -1952,7 +2083,7 @@ class SyncBladeModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_blade_model_all_list'): for item in result['mrs_blade_model_all_list']: @@ -1964,12 +2095,16 @@ class SyncBladeModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步刀片类型列表成功') else: @@ -1994,7 +2129,7 @@ class SyncCutterBar(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_bar_yesterday_list'): for item in result['mrs_cutter_bar_yesterday_list']: @@ -2019,6 +2154,8 @@ class SyncCutterBar(models.Model): [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2042,6 +2179,8 @@ class SyncCutterBar(models.Model): [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2072,7 +2211,7 @@ class SyncCutterBar(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_bar_all_list'): for item in result['mrs_cutter_bar_all_list']: @@ -2097,6 +2236,8 @@ class SyncCutterBar(models.Model): [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2120,6 +2261,8 @@ class SyncCutterBar(models.Model): [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2158,7 +2301,7 @@ class SyncCutterBarModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_bar_model_yesterday_list'): for item in result['mrs_cutter_bar_model_yesterday_list']: @@ -2170,18 +2313,22 @@ class SyncCutterBarModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步每日刀片类型列表成功') else: raise ValidationError("认证未通过") - # 定时同步所有刀杆类型列表 + # 同步所有刀杆类型列表 def sync_all_cutter_bar_model(self): sf_sync_config = self.env['res.config.settings'].get_values() token = sf_sync_config['token'] @@ -2192,7 +2339,7 @@ class SyncCutterBarModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_bar_model_all_list'): for item in result['mrs_cutter_bar_model_all_list']: @@ -2204,12 +2351,16 @@ class SyncCutterBarModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步刀杆类型列表成功') else: @@ -2234,7 +2385,7 @@ class SyncCutterPad(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_pad_yesterday_list'): for item in result['mrs_cutter_pad_yesterday_list']: @@ -2259,6 +2410,8 @@ class SyncCutterPad(models.Model): [("code", '=', item['cutter_pad_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2283,6 +2436,8 @@ class SyncCutterPad(models.Model): [("code", '=', item['cutter_pad_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2314,7 +2469,7 @@ class SyncCutterPad(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_pad_all_list'): for item in result['mrs_cutter_pad_all_list']: @@ -2339,6 +2494,8 @@ class SyncCutterPad(models.Model): [("code", '=', item['cutter_pad_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2363,6 +2520,8 @@ class SyncCutterPad(models.Model): [("code", '=', item['cutter_pad_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "c_diameter": item['c_diameter'], "total_length": item['total_length'], "material_model": self.env['sf.materials.model'].search( @@ -2402,7 +2561,7 @@ class SyncCutterPadModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_pad_model_yesterday_list'): for item in result['mrs_cutter_pad_model_yesterday_list']: @@ -2414,12 +2573,16 @@ class SyncCutterPadModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步每日刀盘类型列表成功') else: @@ -2436,7 +2599,7 @@ class SyncCutterPadModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_pad_model_all_list'): for item in result['mrs_cutter_pad_model_all_list']: @@ -2448,12 +2611,16 @@ class SyncCutterPadModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步刀盘类型列表成功') else: @@ -2478,7 +2645,7 @@ class SyncHandle(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_handle_yesterday_list'): for item in result['mrs_handle_yesterday_list']: @@ -2503,6 +2670,8 @@ class SyncHandle(models.Model): [("code", '=', item['handle_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "length1": item['length1'], "diameter1": item['diameter1'], @@ -2527,6 +2696,8 @@ class SyncHandle(models.Model): [("code", '=', item['handle_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "length1": item['length1'], "diameter1": item['diameter1'], @@ -2558,7 +2729,7 @@ class SyncHandle(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_handle_all_list'): for item in result['mrs_handle_all_list']: @@ -2583,6 +2754,8 @@ class SyncHandle(models.Model): [("code", '=', item['handle_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "length1": item['length1'], "diameter1": item['diameter1'], @@ -2607,6 +2780,8 @@ class SyncHandle(models.Model): [("code", '=', item['handle_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "length": item['length'], "length1": item['length1'], "diameter1": item['diameter1'], @@ -2646,7 +2821,7 @@ class SyncHandleModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_handle_model_yesterday_list'): for item in result['mrs_handle_model_yesterday_list']: @@ -2658,12 +2833,16 @@ class SyncHandleModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步每日刀柄类型列表成功') else: @@ -2680,7 +2859,7 @@ class SyncHandleModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_handle_model_all_list'): for item in result['mrs_handle_model_all_list']: @@ -2692,12 +2871,16 @@ class SyncHandleModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步刀柄类型列表成功') else: @@ -2722,7 +2905,7 @@ class SyncChuck(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_chuck_yesterday_list'): for item in result['mrs_chuck_yesterday_list']: @@ -2747,6 +2930,8 @@ class SyncChuck(models.Model): [("code", '=', item['chuck_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "accuracy": item['accuracy'], "diameter": item['diameter'], "inner_diameter": item['inner_diameter'], @@ -2767,6 +2952,8 @@ class SyncChuck(models.Model): [("code", '=', item['chuck_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "accuracy": item['accuracy'], "diameter": item['diameter'], "inner_diameter": item['inner_diameter'], @@ -2794,7 +2981,7 @@ class SyncChuck(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_chuck_all_list'): for item in result['mrs_chuck_all_list']: @@ -2819,6 +3006,8 @@ class SyncChuck(models.Model): [("code", '=', item['chuck_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "accuracy": item['accuracy'], "diameter": item['diameter'], "inner_diameter": item['inner_diameter'], @@ -2839,6 +3028,8 @@ class SyncChuck(models.Model): [("code", '=', item['chuck_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, "accuracy": item['accuracy'], "diameter": item['diameter'], "inner_diameter": item['inner_diameter'], @@ -2874,7 +3065,7 @@ class SyncChuckModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_chuck_model_yesterday_list'): for item in result['mrs_chuck_model_yesterday_list']: @@ -2886,12 +3077,16 @@ class SyncChuckModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步每日夹头类型列表成功') else: @@ -2908,7 +3103,7 @@ class SyncChuckModel(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - print('result:%s' % result) + # print('result:%s' % result) if result['status'] == 1: if result.get('mrs_chuck_model_all_list'): for item in result['mrs_chuck_model_all_list']: @@ -2920,20 +3115,22 @@ class SyncChuckModel(models.Model): "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) else: brand.write({ "name": item['name'], "code": item['code'], "remark": item['remark'], + "cutting_tool_material": self.env['sf.cutting.tool.material'].search( + [("code", '=', item['cutting_tool_material'])]).id, }) print('同步夹头类型列表成功') else: raise ValidationError("认证未通过") - - '''=========================================夹紧元件类型===============================================''' @@ -3062,7 +3259,6 @@ class sfFixtureClampingElement(models.Model): # "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( @@ -3265,4 +3461,3 @@ class sfGuideElementGuideMode(models.Model): }) else: raise ValidationError("认证未通过") - From f6651ffffb89d6836b70b8a2178401140595aa6c Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Wed, 14 Jun 2023 17:36:39 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/models/tool_base.py | 62 ---------------------------- sf_base/security/ir.model.access.csv | 1 - sf_base/views/menu_fixture_view.xml | 2 +- sf_base/views/tool_base_menu.xml | 20 +-------- sf_base/views/tool_base_views.xml | 44 -------------------- 5 files changed, 2 insertions(+), 127 deletions(-) diff --git a/sf_base/models/tool_base.py b/sf_base/models/tool_base.py index 1c8dadbb..33426cd4 100644 --- a/sf_base/models/tool_base.py +++ b/sf_base/models/tool_base.py @@ -17,68 +17,6 @@ class CuttingToolMaterial(models.Model): remark = fields.Char('备注') -# 测试模型 -class aa_test(models.Model): - _name = 'sf.test' - _description = '测试' - - model_number = fields.Char('型号', readonly=True) - # 关联刀具物料 - cutting_tool_material = fields.Many2one('sf.cutting.tool.material', '刀具物料') - # 关联整体式刀具型号 - integral_model_number = fields.Many2one('sf.integral.cutting.tool.model', '整体式刀具型号') - # 关联刀片型号 - blade_model_number = fields.Many2one('sf.blade', '刀片型号') - # 关联刀杆型号 - cutterbar_model_number = fields.Many2one('sf.cutter.bar', '刀杆型号') - # 关联刀盘型号 - cutterpad_model_number = fields.Many2one('sf.cutter.pad', '刀盘型号') - # 关联刀柄型号 - handle_model_number = fields.Many2one('sf.handle', '刀柄型号') - # 关联夹头型号 - chuck_model_number = fields.Many2one('sf.chuck', '夹头型号') - - hide_integral_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏整体式刀具型号') - hide_blade_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀片型号') - hide_cutterbar_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀杆型号') - hide_cutterpad_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀盘型号') - hide_handle_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏刀柄型号') - hide_chuck_model_number = fields.Boolean(compute='_compute_hide_model_number', default=False, string='隐藏夹头型号') - hide_model_number = fields.Boolean(compute='_compute_hide_model_number', default=True, string='隐藏型号') - - @api.depends('cutting_tool_material') - def _compute_hide_model_number(self): - for record in self: - record.hide_integral_model_number = False - record.hide_blade_model_number = False - record.hide_cutterbar_model_number = False - record.hide_cutterpad_model_number = False - record.hide_handle_model_number = False - record.hide_chuck_model_number = False - record.hide_model_number = True - - if record.cutting_tool_material and record.cutting_tool_material.name == '整体式刀具': - record.hide_model_number = False - record.hide_integral_model_number = True - elif record.cutting_tool_material and record.cutting_tool_material.name == '刀片': - record.hide_model_number = False - record.hide_blade_model_number = True - elif record.cutting_tool_material and record.cutting_tool_material.name == '刀杆': - record.hide_model_number = False - record.hide_cutterbar_model_number = True - elif record.cutting_tool_material and record.cutting_tool_material.name == '刀盘': - record.hide_model_number = False - record.hide_cutterpad_model_number = True - elif record.cutting_tool_material and record.cutting_tool_material.name == '刀柄': - record.hide_model_number = False - record.hide_handle_model_number = True - elif record.cutting_tool_material and record.cutting_tool_material.name == '夹头': - record.hide_model_number = False - record.hide_chuck_model_number = True - else: - record.hide_model_number = True - - # 功能刀具 class FunctionalCuttingTool(models.Model): _name = 'sf.functional.cutting.tool' diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index c21529ff..f07b2fcb 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -32,7 +32,6 @@ access_sf_handle_model,sf.handle.model,model_sf_handle_model,base.group_user,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_test,sf.test,model_sf_test,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 diff --git a/sf_base/views/menu_fixture_view.xml b/sf_base/views/menu_fixture_view.xml index ab7981c4..4a5e1283 100644 --- a/sf_base/views/menu_fixture_view.xml +++ b/sf_base/views/menu_fixture_view.xml @@ -8,7 +8,7 @@ diff --git a/sf_base/views/tool_base_menu.xml b/sf_base/views/tool_base_menu.xml index 71c0b6ef..bfb56640 100644 --- a/sf_base/views/tool_base_menu.xml +++ b/sf_base/views/tool_base_menu.xml @@ -107,16 +107,8 @@ sf.cutting.tool.material tree,form - - - 测试 - ir.actions.act_window - sf.test - tree,form - - - + - - - - diff --git a/sf_base/views/tool_base_views.xml b/sf_base/views/tool_base_views.xml index 30816d77..1dfb7ca7 100644 --- a/sf_base/views/tool_base_views.xml +++ b/sf_base/views/tool_base_views.xml @@ -738,49 +738,5 @@
- - - sf.test.tree - sf.test - - - - - - - - - sf.test.form - sf.test - -
- - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- From fc6b756aaf48d057c8a530ca10f4a3184d69d8eb Mon Sep 17 00:00:00 2001 From: yuxianghui <1608204036@qq.com> Date: Thu, 15 Jun 2023 09:57:14 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E5=85=B3=E8=81=94=E4=BA=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=92=8C=E5=8A=9F=E8=83=BD=E5=88=80?= =?UTF-8?q?=E5=85=B7=E7=AE=A1=E7=90=86=E4=BF=A9=E4=B8=AA=E5=AF=B9=E8=B1=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/models/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index af915884..691b7268 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -8,7 +8,7 @@ class FunctionalCuttingToolEntity(models.Model): _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('出库时间') From b1da7a8fdafd0345038e3957cb563045d433a718 Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 15 Jun 2023 12:20:26 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E5=9E=8B=E5=8F=B7=E5=AF=B9=E8=B1=A1?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=90=9C=E7=B4=A2=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/views/tool_base_views.xml | 89 +++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git a/sf_base/views/tool_base_views.xml b/sf_base/views/tool_base_views.xml index 1dfb7ca7..2d4a88fb 100644 --- a/sf_base/views/tool_base_views.xml +++ b/sf_base/views/tool_base_views.xml @@ -35,6 +35,18 @@
+ + + sf.cutting.tool.material.search + sf.cutting.tool.material + + + + + + + + sf.functional.cutting.tool.tree @@ -100,6 +112,17 @@
+ + + sf.functional.cutting.tool.search + sf.functional.cutting.tool + + + + + + + @@ -169,6 +192,17 @@
+ + + sf.integral.cutting.tool.search + sf.integral.cutting.tool + + + + + + + sf.blade.tree @@ -233,6 +267,17 @@
+ + + sf.blade.search + sf.blade + + + + + + + sf.cutter.bar.tree @@ -300,6 +345,17 @@
+ + + sf.cutter.bar.search + sf.cutter.bar + + + + + + + @@ -366,6 +422,17 @@
+ + + sf.cutter.pad.search + sf.cutter.pad + + + + + + + @@ -434,6 +501,17 @@
+ + + sf.handle.search + sf.handle + + + + + + + @@ -499,6 +577,17 @@
+ + + sf.chuck.search + sf.chuck + + + + + + + From ba93adfb7b5a5498f37afefd3926667f0acb421d Mon Sep 17 00:00:00 2001 From: mgw <1392924357@qq.com> Date: Thu, 15 Jun 2023 15:40:23 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=90=8C=E6=AD=A5bug?= =?UTF-8?q?=EF=BC=88=E5=88=80=E7=89=87=E7=B1=BB=E5=9E=8B=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E6=97=A0=E5=80=BC=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_base/views/tool_base_menu.xml | 2 +- sf_mrs_connect/models/res_config_setting.py | 97 +++++++++++---------- sf_mrs_connect/models/sync_common.py | 10 +-- 3 files changed, 55 insertions(+), 54 deletions(-) diff --git a/sf_base/views/tool_base_menu.xml b/sf_base/views/tool_base_menu.xml index bfb56640..aef0c124 100644 --- a/sf_base/views/tool_base_menu.xml +++ b/sf_base/views/tool_base_menu.xml @@ -11,7 +11,7 @@ - 功能刀具型号 + 功能刀具 ir.actions.act_window sf.functional.cutting.tool tree,form diff --git a/sf_mrs_connect/models/res_config_setting.py b/sf_mrs_connect/models/res_config_setting.py index c62f5be3..92433e1e 100644 --- a/sf_mrs_connect/models/res_config_setting.py +++ b/sf_mrs_connect/models/res_config_setting.py @@ -46,95 +46,96 @@ 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.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_all_cutting_tool_material() - _logger.info("同步每日刀片类型列表...") - self.env['sf.blade.model'].sync_blade_model() - _logger.info("同步每日刀片类型完成") + _logger.info("同步所有刀具物料完成") + # _logger.info("同步每日刀片类型列表...") + # self.env['sf.blade.model'].sync_blade_model() + # _logger.info("同步每日刀片类型完成") _logger.info("同步所有刀片类型列表...") self.env['sf.blade.model'].sync_all_blade_model() _logger.info("同步所有刀片类型完成") - _logger.info("同步每日刀杆类型...") - self.env['sf.cutter.bar.model'].sync_cutter_bar_model() - _logger.info("同步每日刀杆类型完成") + # _logger.info("同步每日刀杆类型...") + # self.env['sf.cutter.bar.model'].sync_cutter_bar_model() + # _logger.info("同步每日刀杆类型完成") _logger.info("同步所有刀杆类型...") self.env['sf.cutter.bar.model'].sync_all_cutter_bar_model() _logger.info("同步所有刀杆类型完成") - _logger.info("同步每日刀盘类型...") - self.env['sf.cutter.pad.model'].sync_cutter_pad_model() - _logger.info("同步每日刀盘类型完成") + # _logger.info("同步每日刀盘类型...") + # self.env['sf.cutter.pad.model'].sync_cutter_pad_model() + # _logger.info("同步每日刀盘类型完成") _logger.info("同步所有刀盘类型...") self.env['sf.cutter.pad.model'].sync_all_cutter_pad_model() _logger.info("同步所有刀盘类型完成") - _logger.info("同步每日刀柄类型...") - self.env['sf.handle.model'].sync_handle_model() - _logger.info("同步每日刀柄类型完成") + # _logger.info("同步每日刀柄类型...") + # self.env['sf.handle.model'].sync_handle_model() + # _logger.info("同步每日刀柄类型完成") _logger.info("同步所有刀柄类型...") self.env['sf.handle.model'].sync_all_handle_model() _logger.info("同步所有刀柄类型完成") - _logger.info("同步每日夹头类型...") - self.env['sf.chuck.model'].sync_chuck_model() - _logger.info("同步每日夹头类型完成") + # _logger.info("同步每日夹头类型...") + # self.env['sf.chuck.model'].sync_chuck_model() + # _logger.info("同步每日夹头类型完成") _logger.info("同步所有夹头类型...") self.env['sf.chuck.model'].sync_all_chuck_model() _logger.info("同步所有夹头类型完成") - _logger.info("同步每日整体式刀具类型...") - self.env['sf.integral.cutting.tool.model'].sync_integral_cutting_tool_model() - _logger.info("同步每日整体式刀具类型完成") + # _logger.info("同步每日整体式刀具类型...") + # self.env['sf.integral.cutting.tool.model'].sync_integral_cutting_tool_model() + # _logger.info("同步每日整体式刀具类型完成") _logger.info("同步所有整体式刀具类型...") self.env['sf.integral.cutting.tool.model'].sync_all_integral_cutting_tool_model() _logger.info("同步所有整体式刀具类型完成") - _logger.info("同步每日刀片列表...") - self.env['sf.blade'].sync_blade() - _logger.info("同步每日刀片完成") + # _logger.info("同步每日刀片列表...") + # self.env['sf.blade'].sync_blade() + # _logger.info("同步每日刀片完成") _logger.info("同步所有刀片列表...") self.env['sf.blade'].sync_all_blade() _logger.info("同步所有刀片完成") - _logger.info("同步每日刀杆列表...") - self.env['sf.cutter.bar'].sync_cutter_bar() - _logger.info("同步每日刀杆完成") + # _logger.info("同步每日刀杆列表...") + # self.env['sf.cutter.bar'].sync_cutter_bar() + # _logger.info("同步每日刀杆完成") _logger.info("同步所有刀杆列表...") self.env['sf.cutter.bar'].sync_all_cutter_bar() _logger.info("同步所有刀杆完成") - _logger.info("同步每日刀盘列表...") - self.env['sf.cutter.pad'].sync_cutter_pad() - _logger.info("同步每日刀盘完成") + # _logger.info("同步每日刀盘列表...") + # self.env['sf.cutter.pad'].sync_cutter_pad() + # _logger.info("同步每日刀盘完成") _logger.info("同步所有刀盘列表...") self.env['sf.cutter.pad'].sync_all_cutter_pad() _logger.info("同步所有刀盘完成") - _logger.info("同步每日刀柄列表...") - self.env['sf.handle'].sync_handle() - _logger.info("同步每日刀柄完成") + # _logger.info("同步每日刀柄列表...") + # self.env['sf.handle'].sync_handle() + # _logger.info("同步每日刀柄完成") _logger.info("同步所有刀柄列表...") self.env['sf.handle'].sync_all_handle() _logger.info("同步所有刀柄完成") - _logger.info("同步每日夹头列表...") - self.env['sf.chuck'].sync_chuck() - _logger.info("同步每日夹头完成") + # _logger.info("同步每日夹头列表...") + # self.env['sf.chuck'].sync_chuck() + # _logger.info("同步每日夹头完成") _logger.info("同步所有夹头列表...") self.env['sf.chuck'].sync_all_chuck() _logger.info("同步所有夹头完成") - _logger.info("同步每日整体式刀具列表...") - self.env['sf.integral.cutting.tool'].sync_integral_cutting_tool() - _logger.info("同步每日整体式刀具完成") + # _logger.info("同步每日整体式刀具列表...") + # self.env['sf.integral.cutting.tool'].sync_integral_cutting_tool() + # _logger.info("同步每日整体式刀具完成") _logger.info("同步所有整体式刀具列表...") self.env['sf.integral.cutting.tool'].sync_all_integral_cutting_tool() _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_functional_cutting_tool() + # _logger.info("同步每日功能刀具列表完成") _logger.info("同步所有功能刀具列表...") self.env['sf.functional.cutting.tool'].sync_all_functional_cutting_tool() _logger.info("同步所有功能刀具列表完成") diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 8fcbee28..b1bfde46 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -2150,7 +2150,7 @@ class SyncCutterBar(models.Model): self.env['sf.cutter.bar'].create({ "code": item['code'], "name": item['name'], - "cutter_bar_model_number": self.env['sf.cutter.bar'].search( + "cutter_bar_model_number": self.env['sf.cutter.bar.model'].search( [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, @@ -2175,7 +2175,7 @@ class SyncCutterBar(models.Model): brand.write({ "code": item['code'], "name": item['name'], - "cutter_bar_model_number": self.env['sf.cutter.bar'].search( + "cutter_bar_model_number": self.env['sf.cutter.bar.model'].search( [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, @@ -2211,7 +2211,7 @@ class SyncCutterBar(models.Model): r = requests.post(strUrl, json={}, data=None, headers=headers) r = r.json() result = json.loads(r['result']) - # print('result:%s' % result) + print('result:%s' % result) if result['status'] == 1: if result.get('mrs_cutter_bar_all_list'): for item in result['mrs_cutter_bar_all_list']: @@ -2232,7 +2232,7 @@ class SyncCutterBar(models.Model): self.env['sf.cutter.bar'].create({ "code": item['code'], "name": item['name'], - "cutter_bar_model_number": self.env['sf.cutter.bar'].search( + "cutter_bar_model_number": self.env['sf.cutter.bar.model'].search( [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, @@ -2257,7 +2257,7 @@ class SyncCutterBar(models.Model): brand.write({ "code": item['code'], "name": item['name'], - "cutter_bar_model_number": self.env['sf.cutter.bar'].search( + "cutter_bar_model_number": self.env['sf.cutter.bar.model'].search( [("code", '=', item['cutter_bar_model_number'])]).id, "brand": self.env['sf.machine.brand'].search( [("code", '=', item['brand'])]).id, From 4f7489f471fcc09293e0c45b6796da919103ac67 Mon Sep 17 00:00:00 2001 From: yuxianghui <1608204036@qq.com> Date: Thu, 15 Jun 2023 17:04:40 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=80=E5=85=B7=E5=AE=9E=E6=97=B6=E5=88=86=E5=B8=83?= =?UTF-8?q?=E5=92=8C=E5=87=BA=E5=85=A5=E5=BA=93=E8=AE=B0=E5=BD=95=E7=9A=84?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E6=98=BE=E7=A4=BA=E6=95=88=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sf_tool_management/views/tool_base_views.xml | 124 +++++++++---------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/sf_tool_management/views/tool_base_views.xml b/sf_tool_management/views/tool_base_views.xml index 8bf5a904..962759f4 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -42,45 +42,45 @@ sf.functional.cutting.tool.entity - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -100,36 +100,36 @@ sf.functional.cutting.tool.entity - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + +