From 6068a55b7948f02d46d9b656868b01b6bc451baa Mon Sep 17 00:00:00 2001 From: "jinling.yang" Date: Tue, 13 Jun 2023 17:30:35 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Esf=E7=9A=84=E5=88=80=E5=85=B7?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=9A=84=E7=9B=B8=E5=85=B3=E5=88=80=E5=85=B7?= =?UTF-8?q?=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 = '工序'