diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index c8304043..bc1be730 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -451,8 +451,8 @@ div:has(.o_required_modifier) > label::before { } } -// 设置列表底部按钮、设置列表header按钮 -.o_list_renderer .o_field_x2many_list_row_add a,.treeHeaderBtn{ +// 更改表格底部按钮样式 +.o_list_renderer .o_field_x2many_list_row_add a,.treeHeaderBtn,.o_x2m_control_panel .o_cp_buttons .btn{ display: inline-block; margin: 5px 0; font-size: 14px; @@ -463,7 +463,7 @@ div:has(.o_required_modifier) > label::before { border-radius: 0.25rem; transition: all .3s; } -.o_list_renderer .o_field_x2many_list_row_add a:hover,.treeHeaderBtn:hover{ +.o_list_renderer .o_field_x2many_list_row_add a:hover,.treeHeaderBtn:hover,.o_x2m_control_panel .o_cp_buttons .btn:hover{ background: #71639e; color: #fff -} \ No newline at end of file +} diff --git a/sf_base/models/base.py b/sf_base/models/base.py index 6fc86e94..c3152098 100644 --- a/sf_base/models/base.py +++ b/sf_base/models/base.py @@ -106,6 +106,7 @@ class MachineTool(models.Model): lead_screw = fields.Char('丝杆') workbench_L = fields.Char('工作台长度(mm)') workbench_W = fields.Char('工作台宽度(mm)') + workbench_H = fields.Char('工作台高度(mm)') guide_rail = fields.Char('导轨') machine_tool_L = fields.Char('机床长度(mm)') machine_tool_W = fields.Char('机床宽度(mm)') @@ -193,6 +194,7 @@ class MachineTool(models.Model): item.lead_screw = item.type_id.lead_screw item.workbench_L = item.type_id.workbench_L item.workbench_W = item.type_id.workbench_W + item.workbench_H = item.type_id.workbench_H item.guide_rail = item.type_id.guide_rail item.machine_tool_L = item.type_id.machine_tool_L item.machine_tool_W = item.type_id.machine_tool_W @@ -280,6 +282,7 @@ class MachineToolType(models.Model): workpiece_load = fields.Char('工件最大负载(kg)') workbench_L = fields.Char('工作台长度(mm)') workbench_W = fields.Char('工作台宽度(mm)') + workbench_H = fields.Char('工作台高度(mm)') machine_tool_L = fields.Char('机床长度(mm)') machine_tool_W = fields.Char('机床宽度(mm)') machine_tool_H = fields.Char('机床高度(mm)') @@ -295,8 +298,9 @@ class MachineToolType(models.Model): x_axis = fields.Integer('X轴') y_axis = fields.Integer('Y轴') z_axis = fields.Integer('Z轴') - b_axis = fields.Integer('B轴') - c_axis = fields.Integer('C轴') + a_axis = fields.Char('a轴') + b_axis = fields.Char('B轴') + c_axis = fields.Char('C轴') remark = fields.Char('备注') control_system_id = fields.Many2one('sf.machine.control_system', string="控制系统") @@ -309,7 +313,7 @@ class MachineToolType(models.Model): default="", string="轴数") # 1212新增字段 - a_axis = fields.Integer('a轴') + function_type = fields.Selection( [("ZXJGZX", "钻铣加工中心"), ("CXJGZX", "车削加工中心"), ("FHJGZX", "复合加工中心")], default="", string="功能类型") @@ -335,23 +339,23 @@ class MachineToolType(models.Model): straight_cutting_feed_rate = fields.Char('直线切削进给速度(mm/min)') rotary_cutting_feed_rate = fields.Char('回转切削进给速度(mm/min)') - X_precision = fields.Float('X轴定位精度(mm)', digits=(12, 3)) - X_precision_repeat = fields.Float('X轴重复定位精度(mm)', digits=(12, 3)) - Y_precision = fields.Float('Y轴定位精度(mm)', digits=(12, 3)) - Y_precision_repeat = fields.Float('Y轴重复定位精度(mm)', digits=(12, 3)) - Z_precision = fields.Float('Z轴定位精度(mm)', digits=(12, 3)) - Z_precision_repeat = fields.Float('Z轴重复定位精度(mm)', digits=(12, 3)) - a_precision = fields.Float('a轴定位精度(mm)', digits=(12, 3)) - a_precision_repeat = fields.Float('a轴重复定位精度(mm)', digits=(12, 3)) - b_precision = fields.Float('b轴定位精度(mm)', digits=(12, 3)) - b_precision_repeat = fields.Float('b轴重复定位精度(mm)', digits=(12, 3)) - c_precision = fields.Float('c轴定位精度(mm)', digits=(12, 3)) - c_precision_repeat = fields.Float('c轴重复定位精度(mm)', digits=(12, 3)) + X_precision = fields.Char('X轴定位精度(mm)') + X_precision_repeat = fields.Char('X轴重复定位精度(mm)') + Y_precision = fields.Char('Y轴定位精度(mm)') + Y_precision_repeat = fields.Char('Y轴重复定位精度(mm)') + Z_precision = fields.Char('Z轴定位精度(mm)') + Z_precision_repeat = fields.Char('Z轴重复定位精度(mm)') + a_precision = fields.Char('a轴定位精度(mm)') + a_precision_repeat = fields.Char('a轴重复定位精度(mm)') + b_precision = fields.Char('b轴定位精度(mm)') + b_precision_repeat = fields.Char('b轴重复定位精度(mm)') + c_precision = fields.Char('c轴定位精度(mm)') + c_precision_repeat = fields.Char('c轴重复定位精度(mm)') tool_full_diameter_max = fields.Float('刀具满刀最大直径(mm)') tool_perimeter_diameter_max = fields.Float('刀具邻空刀最大直径(mm)') - T_tool_time = fields.Integer('T-T换刀时间(s)') - C_tool_time = fields.Integer('C-C换刀时间(s)') + T_tool_time = fields.Float('T-T换刀时间(s)', digits=(12, 1)) + C_tool_time = fields.Float('C-C换刀时间(s)', digits=(12, 1)) jg_image_id = fields.Many2many('maintenance.equipment.image', 'jg_equipment_id', string='加工能力', domain="[('type', '=', '加工能力')]") diff --git a/sf_base/models/common.py b/sf_base/models/common.py index 6cddafd7..7496e7db 100644 --- a/sf_base/models/common.py +++ b/sf_base/models/common.py @@ -90,7 +90,7 @@ class MrsProductionProcess(models.Model): code = fields.Char("编码") name = fields.Char('名称') remark = fields.Text("备注") - processing_order_ids = fields.One2many('sf.processing.order', 'production_process_id', string='工序') + # processing_order_ids = fields.One2many('sf.processing.order', 'production_process_id', string='工序') partner_process_ids = fields.Many2many('res.partner', 'process_ids', '加工工厂') active = fields.Boolean('有效', default=True) parameter_ids = fields.One2many('sf.production.process.parameter', 'process_id', string='可选参数') @@ -98,25 +98,25 @@ class MrsProductionProcess(models.Model): # workcenter_ids = fields.Many2many('mrp.workcenter', 'rel_workcenter_process', required=True) -class MrsProcessingTechnology(models.Model): - _name = 'sf.processing.technology' - _description = '加工工艺' - - name = fields.Char('名称', index=True) - remark = fields.Text('备注', index=True) - code = fields.Char("编码") - processing_order_ids = fields.Many2many('sf.processing.order', 'sf_associated_processes', - index=True, string='工序') - active = fields.Boolean('有效', default=True) +# class MrsProcessingTechnology(models.Model): +# _name = 'sf.processing.technology' +# _description = '加工工艺' +# +# name = fields.Char('名称', index=True) +# remark = fields.Text('备注', index=True) +# code = fields.Char("编码") +# processing_order_ids = fields.Many2many('sf.processing.order', 'sf_associated_processes', +# index=True, string='工序') +# active = fields.Boolean('有效', default=True) -class MrsProcessingOrder(models.Model): - _name = 'sf.processing.order' - _description = '工序' - sequence = fields.Integer('Sequence') - processing_technology_ids = fields.Many2many('sf.processing.technology', 'sf_associated_processes', - index=True, string='加工工艺') - production_process_id = fields.Many2one('sf.production.process', string="表面工艺") +# class MrsProcessingOrder(models.Model): +# _name = 'sf.processing.order' +# _description = '工序' +# sequence = fields.Integer('Sequence') +# processing_technology_ids = fields.Many2many('sf.processing.technology', 'sf_associated_processes', +# index=True, string='加工工艺') +# production_process_id = fields.Many2one('sf.production.process', string="表面工艺") class SupplierSort(models.Model): diff --git a/sf_base/models/tool_base_new.py b/sf_base/models/tool_base_new.py index 03a3678b..a3a9e172 100644 --- a/sf_base/models/tool_base_new.py +++ b/sf_base/models/tool_base_new.py @@ -1,9 +1,6 @@ # -*- coding: utf-8 -*- -import json -import requests +from datetime import date from odoo import fields, models, api -from odoo.exceptions import ValidationError -from odoo.addons.sf_base.commons.common import Common class CuttingToolMaterial(models.Model): @@ -113,6 +110,24 @@ class CuttingToolModel(models.Model): feed_per_tooth_ids = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz(整体式刀具)') feed_per_tooth_ids_3 = fields.One2many('sf.feed.per.tooth', 'standard_library_id', '每齿走刀量fz(刀片)') material_model_id = fields.Many2one('sf.materials.model', '材料型号') + + @api.onchange('cutting_tool_material_id') + def _get_code(self): + if self.is_cloud is False: + today = date.today().strftime("%Y%m%d") + today_code = 'T-DJWL-%s-%s' % (self.cutting_tool_material_id.code, today) + cutting_tool_model = self.search( + [('code', 'ilike', today_code), ('is_cloud', '=', False), + ('active', 'in', [True, False])], + limit=1, + order="id desc") + if not cutting_tool_model: + num = "%03d" % 1 + else: + m = int(today_code[-3:]) + 1 + num = "%03d" % m + self.code = "%s%s" % (today_code, num) + # 适用夹头型号可以多选 # chuck_ids = fields.Many2many( # 'sf.cutting_tool.standard.library', diff --git a/sf_base/models/tool_other_features.py b/sf_base/models/tool_other_features.py index 7ad32bc2..f67e69fd 100644 --- a/sf_base/models/tool_other_features.py +++ b/sf_base/models/tool_other_features.py @@ -10,6 +10,7 @@ class ToolMaterialsBasicParameters(models.Model): standard_library_id = fields.Many2one('sf.cutting_tool.standard.library', string='刀具标准库') cutting_tool_type = fields.Char(related='standard_library_id.cutting_tool_type', string='刀具物料类型', store=True) + is_cloud = fields.Boolean(related='standard_library_id.is_cloud', string='云端数据') # 整体式刀具参数 total_length = fields.Float('总长度(mm)') @@ -21,7 +22,7 @@ class ToolMaterialsBasicParameters(models.Model): handle_diameter = fields.Float('柄部直径(mm)') handle_length = fields.Float('柄部长度(mm)') blade_tip_diameter = fields.Integer('刀尖直径(mm)') - blade_tip_working_size = fields.Char('刀尖处理尺寸(R半径mm/倒角)', size=20) + blade_tip_working_size = fields.Char('刀尖处理尺寸(R半径mm/倒角度)', size=20) blade_tip_taper = fields.Integer('刀尖锥度(°)') blade_diameter = fields.Float('刃部直径(mm)') blade_length = fields.Float('刃部长度(mm)') @@ -37,7 +38,7 @@ class ToolMaterialsBasicParameters(models.Model): cutting_blade_length = fields.Float('切削刃长(mm)') relief_angle = fields.Integer('后角(°)') blade_tip_circular_arc_radius = fields.Char('刀尖圆弧半径(mm)', size=20) - inscribed_circle_diameter = fields.Float('内接圆直径(mm)') + inscribed_circle_diameter = fields.Float('内接圆直径IC/D(mm)') install_aperture_diameter = fields.Float('安装孔直径(mm)') chip_breaker_groove = fields.Selection([('无', '无'), ('单面', '单面'), ('双面', '双面')], string='有无断屑槽') @@ -170,8 +171,6 @@ class FeedPerTooth(models.Model): feed_per_tooth = fields.Char('每齿走刀量 (mm/z)', size=20) active = fields.Boolean(string='有效', default=True) - - # @api.depends('product_template_id') # def _compute_product_template_id(self): # if self.product_template_id is not None: diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index 782d924d..92bebe5b 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -9,16 +9,13 @@ access_sf_machine_brand_tags,sf_machine_brand_tags,model_sf_machine_brand_tags,b access_sf_machine_brand_tags_admin,sf_machine_brand_tags_admin,model_sf_machine_brand_tags,base.group_system,1,1,1,0 access_sf_machine_control_system,sf_machine_control_system,model_sf_machine_control_system,base.group_user,1,1,1,0 access_sf_machine_control_system_admin,sf_machine_control_system_admin,model_sf_machine_control_system,base.group_system,1,1,1,0 -access_sf_processing_order,sf_processing_order,model_sf_processing_order,base.group_user,1,1,1,0 -access_sf_processing_order_admin,sf_processing_order_admin,model_sf_processing_order,base.group_system,1,1,1,0 + access_sf_production_process,sf_production_process,model_sf_production_process,base.group_user,1,1,1,0 access_sf_production_process_admin,sf_production_process_admin,model_sf_production_process,base.group_system,1,1,1,0 access_sf_production_materials,sf_production_materials,model_sf_production_materials,base.group_user,1,1,1,0 access_sf_production_materials_admin,sf_production_materials_admin,model_sf_production_materials,base.group_system,1,1,1,0 access_sf_materials_model,sf_materials_model,model_sf_materials_model,base.group_user,1,1,1,0 access_sf_materials_model_admin,sf_materials_model_admin,model_sf_materials_model,base.group_system,1,1,1,0 -access_sf_processing_technology,sf_processing_technology,model_sf_processing_technology,base.group_user,1,1,1,0 -access_sf_processing_technology_admin,sf_processing_technology_admin,model_sf_processing_technology,base.group_system,1,1,1,0 access_sf_supplier_sort,sf_supplier_sort,model_sf_supplier_sort,base.group_user,1,1,1,0 access_sf_supplier_sort_admin,sf_supplier_sort_admin,model_sf_supplier_sort,base.group_system,1,1,1,0 access_sf_production_process_parameter,sf_production_process_parameter,model_sf_production_process_parameter,base.group_user,1,1,1,0 @@ -75,11 +72,15 @@ access_sf_cutting_speed_group_purchase_director,sf_cutting_speed_group_purchase_ access_sf_cutting_speed_group_sale_director,sf_cutting_speed_group_sale_director,model_sf_cutting_speed,sf_base.group_sale_director,1,1,1,0 access_sf_cutting_speed_group_plan_dispatch,sf_cutting_speed_group_plan_dispatch,model_sf_cutting_speed,sf_base.group_plan_dispatch,1,0,0,0 access_sf_cutting_speed_group_plan_director,sf_cutting_speed_group_plan_director,model_sf_cutting_speed,sf_base.group_plan_director,1,1,1,0 +access_sf_cutting_speed_group_quality_director,sf_cutting_speed_group_quality_director,model_sf_cutting_speed,sf_base.group_quality_director,1,1,1,0 +access_sf_cutting_speed_group_quality,sf_cutting_speed_group_quality,model_sf_cutting_speed,sf_base.group_quality,1,1,1,0 access_sf_feed_per_tooth_group_purchase_director,sf_feed_per_tooth_group_purchase_director,model_sf_feed_per_tooth,sf_base.group_purchase_director,1,1,0,0 access_sf_feed_per_tooth_group_sale_director,sf_feed_per_tooth_group_sale_director,model_sf_feed_per_tooth,sf_base.group_sale_director,1,1,0,0 access_sf_feed_per_tooth_group_plan_dispatch,sf_feed_per_tooth_group_plan_dispatch,model_sf_feed_per_tooth,sf_base.group_plan_dispatch,1,0,0,0 access_sf_feed_per_tooth_group_plan_director,sf_feed_per_tooth_group_plan_director,model_sf_feed_per_tooth,sf_base.group_plan_director,1,1,0,0 access_sf_feed_per_tooth_group_sale_salemanager,sf_feed_per_tooth_group_sale_salemanager,model_sf_feed_per_tooth,sf_base.group_sale_salemanager,1,0,0,0 +access_sf_feed_per_tooth_group_quality,sf_feed_per_tooth_group_quality,model_sf_feed_per_tooth,sf_base.group_quality,1,1,1,0 +access_sf_feed_per_tooth_group_quality_director,sf_feed_per_tooth_group_quality_director,model_sf_feed_per_tooth,sf_base.group_quality_director,1,1,1,0 access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,base.group_user,1,1,1,0 access_sf_feed_per_tooth_admin,sf_feed_per_tooth_admin,model_sf_feed_per_tooth,base.group_system,1,1,1,0 access_sf_ramping_angle,sf_ramping_angle,model_sf_ramping_angle,base.group_user,1,1,1,1 @@ -94,7 +95,6 @@ access_sf_machine_brand_group_purchase_director,sf_machine_brand_group_purchase_ access_sf_machine_brand_group_sale_director,sf_machine_brand_group_sale_director,model_sf_machine_brand,sf_base.group_sale_director,1,0,0,0 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,sf_base.group_sf_mrp_user,1,0,0,0 -access_sf_processing_order,sf_processing_order,model_sf_processing_order,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_process,sf_production_process,model_sf_production_process,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_materials,sf_production_materials,model_sf_production_materials,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_materials_group_plan_director,sf_production_materials_group_plan_director,model_sf_production_materials,sf_base.group_plan_director,1,1,0,0 @@ -104,7 +104,6 @@ access_sf_materials_model,sf_materials_model,model_sf_materials_model,sf_base.gr access_sf_materials_model_group_plan_director,sf_materials_model_group_plan_director,model_sf_materials_model,sf_base.group_plan_director,1,0,0,0 access_sf_materials_model_group_purchase_director,sf_materials_model_group_purchase_director,model_sf_materials_model,sf_base.group_purchase_director,1,0,0,0 access_sf_materials_model_group_sale_director,sf_materials_model_group_sale_director,model_sf_materials_model,sf_base.group_sale_director,1,0,0,0 -access_sf_processing_technology,sf_processing_technology,model_sf_processing_technology,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_supplier_sort,sf_supplier_sort,model_sf_supplier_sort,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_process_parameter,sf_production_process_parameter,model_sf_production_process_parameter,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_process_category,sf_production_process_category,model_sf_production_process_category,sf_base.group_sf_mrp_user,1,0,0,0 @@ -143,9 +142,7 @@ access_sf_cutting_width_depth,sf_cutting_width_depth,model_sf_cutting_width_dept access_sf_cutting_width_depth_group_purchase,sf_cutting_width_depth_group_purchase,model_sf_cutting_width_depth,sf_base.group_purchase,1,0,0,0 access_maintenance_equipment_image,maintenance_equipment_image,model_maintenance_equipment_image,base.group_user,1,1,1,1 access_purchase_order_group_purchase,access_purchase_order_group_purchase,purchase.model_purchase_order,sf_base.group_purchase,1,1,1,0 -access_purchase_order_group_purchase_director,access_purchase_order_group_purchase_director,purchase.model_purchase_order,sf_base.group_purchase_director,1,1,1,0 access_purchase_order_line_group_purchase,access_purchase_order_line_group_purchase,purchase.model_purchase_order_line,sf_base.group_purchase,1,1,1,0 -access_purchase_order_line_group_purchase_director,access_purchase_order_line_group_purchase_director,purchase.model_purchase_order_line,sf_base.group_purchase_director,1,1,1,0 access_spindle_taper_type,spindle_taper_type,model_spindle_taper_type,base.group_user,1,1,1,1 access_sf_tool_groups_group_plan_dispatch,sf_tool_groups,model_sf_tool_groups,sf_base.group_plan_dispatch,1,0,0,0 access_sf_tool_groups_group_sf_tool_user,sf_tool_groups,model_sf_tool_groups,sf_base.group_sf_tool_user,1,1,1,1 @@ -161,11 +158,9 @@ access_sf_machine_tool_type,sf_machine_tool_type,model_sf_machine_tool_type,sf_b access_sf_machine_brand,sf_machine_brand,model_sf_machine_brand,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_machine_brand_tags,sf_machine_brand_tags,model_sf_machine_brand_tags,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_machine_control_system,sf_machine_control_system,model_sf_machine_control_system,sf_base.group_sf_mrp_user,1,1,0,0 -access_sf_processing_order,sf_processing_order,model_sf_processing_order,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_production_process,sf_production_process,model_sf_production_process,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_production_materials,sf_production_materials,model_sf_production_materials,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_materials_model,sf_materials_model,model_sf_materials_model,sf_base.group_sf_mrp_user,1,1,0,0 -access_sf_processing_technology,sf_processing_technology,model_sf_processing_technology,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_supplier_sort,sf_supplier_sort,model_sf_supplier_sort,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_production_process_parameter,sf_production_process_parameter,model_sf_production_process_parameter,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_production_process_category,sf_production_process_category,model_sf_production_process_category,sf_base.group_sf_mrp_user,1,1,0,0 diff --git a/sf_base/views/base_view.xml b/sf_base/views/base_view.xml index ca3aba53..a41d3a2b 100644 --- a/sf_base/views/base_view.xml +++ b/sf_base/views/base_view.xml @@ -173,6 +173,10 @@