diff --git a/jikimo_frontend/static/src/scss/custom_style.scss b/jikimo_frontend/static/src/scss/custom_style.scss index 5d660025..eddf019b 100644 --- a/jikimo_frontend/static/src/scss/custom_style.scss +++ b/jikimo_frontend/static/src/scss/custom_style.scss @@ -132,11 +132,11 @@ td.o_required_modifier { //font-weight: bold; } -.text-truncate { - overflow: unset !important; - text-overflow: unset !important; - white-space: nowrap!important; -} +//.text-truncate { +// overflow: unset !important; +// text-overflow: unset !important; +// white-space: nowrap!important; +//} .o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector):not(.o_handle_cell):not(.o_list_button):not(.o_list_record_remove) { white-space: nowrap !important; @@ -383,7 +383,9 @@ div:has(.o_required_modifier) > label::before { } } } - +.oe_kanban_details li.o_text_overflow { + display: block; +} .o_stock_kanban .o_kanban_card_content { .row { align-items: center; @@ -411,4 +413,19 @@ div:has(.o_required_modifier) > label::before { .o_inner_group.processingMethod { grid-template-columns: auto; } +} + +// 设置所有表格序号列padding为0 +.o_form_view .o_notebook > .tab-content > .tab-pane > :first-child:not(.o_group) .o_field_x2many.o_field_x2many_list tr > :first-child, .o_form_view .o_notebook > .tab-content > .tab-pane > :first-child.o_invisible_modifier + .o_field_widget .o_field_x2many.o_field_x2many_list tr > :first-child { + padding: 0; + text-align: center; +} + +// 设置剩余number类型数据表格列 left +.o_list_renderer .o_list_table thead .o_list_number_th { + text-align:left; +} + +.o_list_renderer .flex-row-reverse { + flex-direction: unset!important; } \ No newline at end of file diff --git a/jikimo_frontend/static/src/scss/rowno_in_tree.scss b/jikimo_frontend/static/src/scss/rowno_in_tree.scss index c244ad7d..5f8a2648 100644 --- a/jikimo_frontend/static/src/scss/rowno_in_tree.scss +++ b/jikimo_frontend/static/src/scss/rowno_in_tree.scss @@ -1,4 +1,4 @@ .row_no { - width: 3.2% !important; + width: 35px !important; vertical-align: middle; } diff --git a/sf_base/__manifest__.py b/sf_base/__manifest__.py index e2fb731c..59ad967a 100644 --- a/sf_base/__manifest__.py +++ b/sf_base/__manifest__.py @@ -23,6 +23,7 @@ 'views/tool_basic_param.xml', 'views/tool_menu.xml', 'views/menu_fixture_view.xml', + 'views/change_base_view.xml', ], 'demo': [ diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py index 0dfb4b6d..a1b1a9a6 100644 --- a/sf_base/models/basic_parameters_fixture.py +++ b/sf_base/models/basic_parameters_fixture.py @@ -16,7 +16,7 @@ class BasicParametersFixture(models.Model): weight = fields.Float('重量(mm)', digits=(16, 2)) orientation_dish_diameter = fields.Float('定位盘直径(mm)', digits=(16, 2)) clamping_diameter = fields.Float('装夹直径(mm)', digits=(16, 2)) - clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='夹装单元数') + clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='装夹单元数') chucking_power_max = fields.Float('最大夹持力(KN)', digits=(16, 2)) repeated_positioning_accuracy = fields.Char('重复定位精度(mm)', size=20) boolean_transposing_hole = fields.Boolean('是否有转位孔') @@ -59,10 +59,183 @@ class BasicParametersFixture(models.Model): magnetic_field_height = fields.Float('磁场高度(mm)', digits=(16, 2)) magnetic_pole_plate_grinding_allowance = fields.Float('磁极板磨削余量(mm)', digits=(16, 2)) - # '转接板夹具' 字段 + # '转接板(锁板)夹具' 字段 screw_size = fields.Float('螺牙大小(mm)', digits=(16, 2)) via_hole_diameter = fields.Float('过孔直径(mm)', digits=(16, 2)) # '三爪卡盘' 字段 mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2)) - centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2)) \ No newline at end of file + centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2)) + + def _json_zero_chuck_param(self, obj): + zero_chuck_param_str = (0, '', { + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'diameter': obj['diameter'], + 'weight': obj['weight'], + 'orientation_dish_diameter': obj['orientation_dish_diameter'], + 'clamping_diameter': obj['clamping_diameter'], + 'clamping_num': obj['clamping_num'], + 'chucking_power_max': obj['chucking_power_max'], + 'repeated_positioning_accuracy': obj['repeated_positioning_accuracy'], + 'boolean_transposing_hole': obj['boolean_transposing_hole'], + 'unlocking_method': obj['unlocking_method'], + 'boolean_chip_blowing_function': obj['boolean_chip_blowing_function'], + 'carrying_capacity_max': obj['carrying_capacity_max'], + 'rigidity': obj['rigidity'], + 'materials_model_id': obj['materials_model_id'], + 'machine_tool_type_id': obj['machine_tool_type_id'], + }) + return zero_chuck_param_str + + def _json_zero_tray_param(self, obj): + zero_tray_param_str = (0, '', { + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'diameter': obj['diameter'], + 'weight': obj['weight'], + 'clamping_diameter': obj['clamping_diameter'], + 'connector_diameter': obj['connector_diameter'], + 'chucking_power_max': obj['chucking_power_max'], + 'repeated_positioning_accuracy': obj['repeated_positioning_accuracy'], + 'boolean_chip_blowing_function': obj['boolean_chip_blowing_function'], + 'way_to_install': obj['way_to_install'], + 'type_of_drive': obj['type_of_drive'], + 'carrying_capacity_max': obj['carrying_capacity_max'], + 'materials_model_id': obj['materials_model_id'], + 'rigidity': obj['rigidity'], + }) + return zero_tray_param_str + + def _json_pneumatic_fixture_param(self, obj): + pneumatic_fixture_param_str = (0, '', { + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'weight': obj['weight'], + 'gripper_length_min': obj['gripper_length_min'], + 'gripper_width_min': obj['gripper_width_min'], + 'gripper_height_min': obj['gripper_height_min'], + 'gripper_diameter_min': obj['gripper_diameter_min'], + 'gripper_length_max': obj['gripper_length_max'], + 'gripper_width_max': obj['gripper_width_max'], + 'gripper_height_max': obj['gripper_height_max'], + 'gripper_diameter_max': obj['gripper_diameter_max'], + 'chucking_power_max': obj['chucking_power_max'], + 'carrying_capacity_max': obj['carrying_capacity_max'], + 'rated_air_pressure': obj['rated_air_pressure'], + 'materials_model_id': obj['materials_model_id'], + 'rigidity': obj['rigidity'], + 'interface_materials_model_id': obj['interface_materials_model_id'], + 'type_of_drive': obj['type_of_drive'], + }) + return pneumatic_fixture_param_str + + def _json_jaw_vice_fixture_param(self, obj): + jaw_vice_fixture_param_str = (0, '', { + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'weight': obj['weight'], + 'gripper_length_min': obj['gripper_length_min'], + 'gripper_width_min': obj['gripper_width_min'], + 'gripper_height_min': obj['gripper_height_min'], + 'gripper_diameter_min': obj['gripper_diameter_min'], + 'gripper_length_max': obj['gripper_length_max'], + 'gripper_width_max': obj['gripper_width_max'], + 'gripper_height_max': obj['gripper_height_max'], + 'gripper_diameter_max': obj['gripper_diameter_max'], + 'chucking_power_max': obj['chucking_power_max'], + 'carrying_capacity_max': obj['carrying_capacity_max'], + 'transverse_groove': obj['transverse_groove'], + 'longitudinal_fitting_groove': obj['longitudinal_fitting_groove'], + 'materials_model_id': obj['materials_model_id'], + 'rigidity': obj['rigidity'], + 'interface_materials_model_id': obj['interface_materials_model_id'], + 'type_of_drive': obj['type_of_drive'], + }) + return jaw_vice_fixture_param_str + + def _json_magnet_fixture_param(self, obj): + magnet_fixture_param_str = (0, '', { + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'height_tolerance_value': obj['height_tolerance_value'], + 'weight': obj['weight'], + 'gripper_length_min': obj['gripper_length_min'], + 'gripper_width_min': obj['gripper_width_min'], + 'gripper_height_min': obj['gripper_height_min'], + 'gripper_diameter_min': obj['gripper_diameter_min'], + 'gripper_length_max': obj['gripper_length_max'], + 'gripper_width_max': obj['gripper_width_max'], + 'gripper_height_max': obj['gripper_height_max'], + 'gripper_diameter_max': obj['gripper_diameter_max'], + 'rated_adsorption_force': obj['rated_adsorption_force'], + 'magnetic_field_height': obj['magnetic_field_height'], + 'magnetic_pole_plate_grinding_allowance': obj['magnetic_pole_plate_grinding_allowance'], + 'carrying_capacity_max': obj['carrying_capacity_max'], + 'materials_model_id': obj['materials_model_id'], + 'rigidity': obj['rigidity'], + 'interface_materials_model_id': obj['interface_materials_model_id'], + 'type_of_drive': obj['type_of_drive'], + }) + return magnet_fixture_param_str + + def _json_adapter_board_fixture_param(self, obj): + adapter_board_fixture_param_str = (0, '', { + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'weight': obj['weight'], + 'gripper_length_min': obj['gripper_length_min'], + 'gripper_width_min': obj['gripper_width_min'], + 'gripper_height_min': obj['gripper_height_min'], + 'gripper_diameter_min': obj['gripper_diameter_min'], + 'gripper_length_max': obj['gripper_length_max'], + 'gripper_width_max': obj['gripper_width_max'], + 'gripper_height_max': obj['gripper_height_max'], + 'gripper_diameter_max': obj['gripper_diameter_max'], + 'chucking_power_max': obj['chucking_power_max'], + 'carrying_capacity_max': obj['carrying_capacity_max'], + 'materials_model_id': obj['materials_model_id'], + 'rigidity': obj['rigidity'], + 'screw_size': obj['screw_size'], + 'via_hole_diameter': obj['via_hole_diameter'], + 'type_of_drive': obj['type_of_drive'], + }) + return adapter_board_fixture_param_str + + def _json_scroll_chuck_param(self, obj): + scroll_chuck_param_str = (0, '', { + 'name': obj['name'], + 'length': obj['length'], + 'width': obj['width'], + 'height': obj['height'], + 'diameter': obj['diameter'], + 'weight': obj['weight'], + 'gripper_length_min': obj['gripper_length_min'], + 'gripper_width_min': obj['gripper_width_min'], + 'gripper_height_min': obj['gripper_height_min'], + 'gripper_diameter_min': obj['gripper_diameter_min'], + 'gripper_length_max': obj['gripper_length_max'], + 'gripper_width_max': obj['gripper_width_max'], + 'gripper_height_max': obj['gripper_height_max'], + 'gripper_diameter_max': obj['gripper_diameter_max'], + 'chucking_power_max': obj['chucking_power_max'], + 'carrying_capacity_max': obj['carrying_capacity_max'], + 'materials_model_id': obj['materials_model_id'], + 'rigidity': obj['rigidity'], + 'mounting_hole_depth': obj['mounting_hole_depth'], + 'centering_diameter': obj['centering_diameter'], + 'type_of_drive': obj['type_of_drive'], + }) + return scroll_chuck_param_str diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index 91aec75e..c1591745 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -32,6 +32,7 @@ class FixtureModel(models.Model): multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True) brand_id = fields.Many2one('sf.machine.brand', string="品牌") model_file = fields.Binary(string="3D模型图") + status = fields.Boolean('状态') active = fields.Boolean('有效', default=False) zero_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', @@ -45,7 +46,7 @@ class FixtureModel(models.Model): magnet_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='磁吸夹具基本参数') adapter_board_fixture_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', - string='转接板夹具基本参数') + string='转接板(锁板)夹具基本参数') scroll_chuck_ids = fields.One2many('sf.fixture.materials.basic.parameters', 'fixture_model_id', string='三爪卡盘基本参数') @@ -67,7 +68,7 @@ class FixtureModel(models.Model): if fixture_material_id: if self.fixture_material_id.name == "气动夹具": code = self._get_code("JKM-C-JJWL-QDJJ-") - elif self.fixture_material_id.name == "转接板夹具": + elif self.fixture_material_id.name == "转接板(锁板)夹具": code = self._get_code("JKM-C-JJWL-ZJJJ-") elif self.fixture_material_id.name == "磁吸夹具": code = self._get_code("JKM-C-JJWL-CXJJ-") diff --git a/sf_base/security/group_security.xml b/sf_base/security/group_security.xml index dd78c2c0..478d41b9 100644 --- a/sf_base/security/group_security.xml +++ b/sf_base/security/group_security.xml @@ -71,7 +71,7 @@ 计划总监 - + diff --git a/sf_base/views/change_base_view.xml b/sf_base/views/change_base_view.xml new file mode 100644 index 00000000..3c02351a --- /dev/null +++ b/sf_base/views/change_base_view.xml @@ -0,0 +1,15 @@ + + + + + sf.base.res.partner.kanban + res.partner + + + + + + + + + diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index 15f43fb1..0a7d1e8e 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -341,7 +341,7 @@ + attrs="{'invisible': [('fixture_material_type', '!=', '转接板(锁板)夹具')]}"> diff --git a/sf_dlm_management/static/js/changeCss.js b/sf_dlm_management/static/js/changeCss.js new file mode 100644 index 00000000..9510a207 --- /dev/null +++ b/sf_dlm_management/static/js/changeCss.js @@ -0,0 +1,35 @@ +// 因为表格可以拖动设置宽度,所以需要用js设置初始宽度 +function setBasicParamTableWidth() { + + + const basicParamDom = $('.fixTableCss') + let dom = [] + try { + dom = basicParamDom.find('table').find('thead').children().children() + + } catch { + dom = [] + } + if (!dom) return + dom.each(function () { + if ($(this).hasClass('row_no') >= 0) { // 序号列 + // 不设置 通过css设置 + } + const text = $(this).text() + $(this).find('span').removeClass('text-truncate') + if (text.length > 5) { + $(this).width('150px') + } else if (text.length == 5) { + $(this).width('100px') + } else if (text.length == 4) { + $(this).width('80px') + } else if (text.length == 3) { + $(this).width('65px') + } else if (text.length == 2) { + $(this).width('50px') + } + + }) +} + +setTimeout(setBasicParamTableWidth, 500) diff --git a/sf_dlm_management/views/product_template_management_view.xml b/sf_dlm_management/views/product_template_management_view.xml index 737d56db..9628e1c2 100644 --- a/sf_dlm_management/views/product_template_management_view.xml +++ b/sf_dlm_management/views/product_template_management_view.xml @@ -41,6 +41,10 @@ + + {'readonly': [('categ_id', '!=', False)]} @@ -89,8 +93,7 @@ - - + product.template.only.form.inherit.sf product.template @@ -101,7 +104,15 @@ - + + + + + product.template.only.form.inherit.sf + product.template + + + @@ -444,7 +455,7 @@ + attrs="{'readonly': [('categ_type', '=', '刀具')]}" class="fixTableCss"> @@ -463,6 +474,8 @@ + + @@ -483,64 +496,106 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sf_machine_connect/views/machine_monitor.xml b/sf_machine_connect/views/machine_monitor.xml index 83b89598..9c9a21a3 100644 --- a/sf_machine_connect/views/machine_monitor.xml +++ b/sf_machine_connect/views/machine_monitor.xml @@ -29,44 +29,44 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -216,46 +216,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sf_maintenance/__manifest__.py b/sf_maintenance/__manifest__.py index cec0b7e3..e5a4f03b 100644 --- a/sf_maintenance/__manifest__.py +++ b/sf_maintenance/__manifest__.py @@ -10,6 +10,7 @@ 'data': [ 'security/group_security.xml', 'security/ir.model.access.csv', + 'security/ir_rule_data.xml', 'views/maintenance_logs_views.xml', 'views/maintenance_views.xml', 'views/equipment_maintenance_standards_views.xml', diff --git a/sf_maintenance/security/ir.model.access.csv b/sf_maintenance/security/ir.model.access.csv index d772d54c..6c7c1495 100644 --- a/sf_maintenance/security/ir.model.access.csv +++ b/sf_maintenance/security/ir.model.access.csv @@ -12,8 +12,12 @@ access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equi access_sf_robot_axis_num,sf_robot_axis_num,model_sf_robot_axis_num,sf_group_equipment_manager,1,1,1,0 -access_maintenance_request,maintenance.request,maintenance.model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0 -access_maintenance_equipment,maintenance_equipment,model_maintenance_equipment,sf_base.group_plan_dispatch,1,0,0,0 -access_sf_maintenance_logs,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0 -access_maintenance_standard_image,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0 -access_equipment_maintenance_standards,equipment_maintenance_standards,model_equipment_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0 \ No newline at end of file +access_maintenance_request_group_plan_dispatch,maintenance.request,maintenance.model_maintenance_request,sf_base.group_plan_dispatch,1,0,0,0 +access_maintenance_equipment_group_plan_dispatch,maintenance.equipment,maintenance.model_maintenance_equipment,sf_base.group_plan_dispatch,1,1,1,1 +access_sf_maintenance_logs_group_plan_dispatch,sf_maintenance_logs,model_sf_maintenance_logs,sf_base.group_plan_dispatch,1,0,0,0 +access_maintenance_standard_image_group_plan_dispatch,maintenance_standard_image,model_maintenance_standard_image,sf_base.group_plan_dispatch,1,0,0,0 +access_equipment_maintenance_standards_group_plan_dispatch,equipment_maintenance_standards,model_equipment_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0 +access_maintenance_standards_group_plan_dispatch,maintenance_standards,model_maintenance_standards,sf_base.group_plan_dispatch,1,0,0,0 + +access_maintenance_equipment_tool_group_plan_dispatch,maintenance.equipment.tool,sf_manufacturing.model_maintenance_equipment_tool,sf_base.group_plan_dispatch,1,0,0,0 +access_sf_robot_axis_num_group_plan_dispatch,sf.robot.axis.num,model_sf_robot_axis_num,sf_base.group_plan_dispatch,1,0,0,0 \ No newline at end of file diff --git a/sf_maintenance/security/ir_rule_data.xml b/sf_maintenance/security/ir_rule_data.xml new file mode 100644 index 00000000..3aa4366f --- /dev/null +++ b/sf_maintenance/security/ir_rule_data.xml @@ -0,0 +1,15 @@ + + + + + Maintenance Equipment Plan Dispatch Rule + + + + True + False + False + False + + + diff --git a/sf_manufacturing/models/mrp_workorder.py b/sf_manufacturing/models/mrp_workorder.py index d0690c54..53307af7 100644 --- a/sf_manufacturing/models/mrp_workorder.py +++ b/sf_manufacturing/models/mrp_workorder.py @@ -137,7 +137,10 @@ class ResMrpWorkOrder(models.Model): """ 检测is_ok(是否合格)被修改的话,就将当前用户赋值给inspection_user_id """ - self.inspection_user_id = self.env.user.id + if not self.inspection_user_id: + self.inspection_user_id = self.env.user.id + else: + self.inspection_user_id = False @api.onchange('functional_fixture_id') def _onchange_functional_fixture_id(self): diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index 285d43f0..333da9aa 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -486,28 +486,6 @@ class ResProductMo(models.Model): string='适用刀柄型号' ) - # 夹具参数 - fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料") - fixture_model_id = fields.Many2one('sf.fixture.model', string="夹具型号") - fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name') - fixture_multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型") - fixture_clamping_way = fields.Char(string="装夹方式") - fixture_port_type = fields.Char(string="接口类型") - fixture_model_file = fields.Binary(string="3D模型图") - - fixture_clamp_workpiece_length_max = fields.Integer(string="夹持工件长度max(mm)") - fixture_clamp_workpiece_width_max = fields.Integer(string="夹持工件宽度max(mm)") - fixture_clamp_workpiece_height_max = fields.Integer(string="夹持工件高度max(mm)") - fixture_clamp_workpiece_diameter_max = fields.Float(string="夹持工件直径max(mm)", digits=(16, 6)) - - fixture_maximum_carrying_weight = fields.Float(string="最大承载重量(kg)", digits=(16, 4)) - fixture_maximum_clamping_force = fields.Integer(string="最大夹持力(n)") - fixture_driving_way = fields.Char(string="驱动方式") - fixture_apply_machine_tool_type_ids = fields.Many2many('sf.machine_tool.type', 'rel_product_machine_tool_type', - string="适用机床型号") - fixture_through_hole_size = fields.Integer(string="过孔大小(mm)") - fixture_screw_size = fields.Integer(string="螺牙大小(mm)") - # 注册状态 register_state = fields.Selection([('未注册', '未注册'), ('已注册', '已注册'), ('注册失败', '注册失败')], string='注册状态', default='未注册') @@ -826,6 +804,124 @@ class ResProductMo(models.Model): return base64_data +class ResProductFixture(models.Model): + _inherit = 'product.template' + _description = '夹具产品信息' + + fixture_model_id = fields.Many2one('sf.fixture.model', '夹具型号') + specification_fixture_id = fields.Many2one('sf.fixture.materials.basic.parameters', '夹具规格') + + fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", required=True) + fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name') + multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True) + model_file = fields.Binary(string="3D模型图") + + # 夹具物料基本参数 + # length = fields.Float('长度(mm)', digits=(16, 2)) + # width = fields.Float('宽度(mm)', digits=(16, 2)) + # height = fields.Float('高度(mm)', digits=(16, 2)) + diameter = fields.Float('直径(mm)', digits=(16, 2)) + + # '零点卡盘' 字段 + weight = fields.Float('重量(mm)', digits=(16, 2)) + orientation_dish_diameter = fields.Float('定位盘直径(mm)', digits=(16, 2)) + clamping_diameter = fields.Float('装夹直径(mm)', digits=(16, 2)) + clamping_num = fields.Selection([('1', '1'), ('2', '2'), ('4', '4'), ('6', '6'), ('8', '8')], string='装夹单元数') + chucking_power_max = fields.Float('最大夹持力(KN)', digits=(16, 2)) + repeated_positioning_accuracy = fields.Char('重复定位精度(mm)', size=20) + boolean_transposing_hole = fields.Boolean('是否有转位孔') + unlocking_method = fields.Selection( + [('手动', '手动'), ('气动', '气动'), ('液压', '液压'), ('电动', '电动'), ('其他', '其他')], string='解锁方式') + boolean_chip_blowing_function = fields.Boolean('是否有吹屑功能') + carrying_capacity_max = fields.Float('最大承载重量(kg)', digits=(16, 2)) + rigidity = fields.Integer('硬度HRC') + materials_model_id = fields.Many2one('sf.materials.model', '夹具材质') + machine_tool_type_id = fields.Many2one('sf.machine_tool.type', '适用机床型号') + + # ’零点托盘‘ 字段 + connector_diameter = fields.Selection([('2', '2'), ('3', '3'), ('4', '4'), ('5', '5'), ('6', '6'), ('8', '8')], + string='连接头直径(mm)') + way_to_install = fields.Selection( + [('接口式', '接口式'), ('螺栓固定', '螺栓固定'), ('磁吸式', '磁吸式'), ('其他', '其他')], string='安装方式') + type_of_drive = fields.Selection( + [('气动式', '气动式'), ('液压式', '液压式'), ('机械式', '机械式'), ('电动式', '电动式'), ('其他', '其他')], + string='驱动方式') + + # ’气动夹具‘ 字段 + gripper_length_min = fields.Float('夹持工件最小长度(mm)', digits=(16, 2)) + gripper_width_min = fields.Float('夹持工件最小宽度(mm)', digits=(16, 2)) + gripper_height_min = fields.Float('夹持工件最小高度(mm)', digits=(16, 2)) + gripper_diameter_min = fields.Float('夹持工件最小直径(mm)', digits=(16, 2)) + gripper_length_max = fields.Float('夹持工件最大长度(mm)', digits=(16, 2)) + gripper_width_max = fields.Float('夹持工件最大宽度(mm)', digits=(16, 2)) + gripper_height_max = fields.Float('夹持工件最大高度(mm)', digits=(16, 2)) + gripper_diameter_max = fields.Float('夹持工件最大直径(mm)', digits=(16, 2)) + rated_air_pressure = fields.Float('额定气压(Mpa)', digits=(16, 2)) + interface_materials_model_id = fields.Many2one('sf.materials.model', '接口类型') + + # ‘虎钳夹具' 字段 + transverse_groove = fields.Float('横向配合槽n(mm)', digits=(16, 2)) + longitudinal_fitting_groove = fields.Float('纵向配合槽l(mm)', digits=(16, 2)) + + # '磁吸夹具' 字段 + height_tolerance_value = fields.Char('高度公差(mm)') + rated_adsorption_force = fields.Float('额定吸附力(N/cm²)', digits=(16, 2)) + magnetic_field_height = fields.Float('磁场高度(mm)', digits=(16, 2)) + magnetic_pole_plate_grinding_allowance = fields.Float('磁极板磨削余量(mm)', digits=(16, 2)) + + # '转接板(锁板)夹具' 字段 + screw_size = fields.Float('螺牙大小(mm)', digits=(16, 2)) + via_hole_diameter = fields.Float('过孔直径(mm)', digits=(16, 2)) + + # '三爪卡盘' 字段 + mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2)) + centering_diameter = fields.Float('定心直径(mm)', digits=(16, 2)) + + @api.onchange('specification_fixture_id') + def _onchange_specification_fixture_id(self): + if self.specification_fixture_id: + self.length = self.specification_fixture_id.length + self.width = self.specification_fixture_id.width + self.height = self.specification_fixture_id.height + self.weight = self.specification_fixture_id.weight + self.diameter = self.specification_fixture_id.diameter + self.orientation_dish_diameter = self.specification_fixture_id.orientation_dish_diameter + self.clamping_diameter = self.specification_fixture_id.clamping_diameter + self.clamping_num = self.specification_fixture_id.clamping_num + self.chucking_power_max = self.specification_fixture_id.chucking_power_max + self.repeated_positioning_accuracy = self.specification_fixture_id.repeated_positioning_accuracy + self.boolean_transposing_hole = self.specification_fixture_id.boolean_transposing_hole + self.unlocking_method = self.specification_fixture_id.unlocking_method + self.boolean_chip_blowing_function = self.specification_fixture_id.boolean_chip_blowing_function + self.carrying_capacity_max = self.specification_fixture_id.carrying_capacity_max + self.rigidity = self.specification_fixture_id.rigidity + self.materials_model_id = self.specification_fixture_id.materials_model_id + self.machine_tool_type_id = self.specification_fixture_id.machine_tool_type_id + self.connector_diameter = self.specification_fixture_id.connector_diameter + self.way_to_install = self.specification_fixture_id.way_to_install + self.type_of_drive = self.specification_fixture_id.type_of_drive + self.gripper_length_min = self.specification_fixture_id.gripper_length_min + self.gripper_width_min = self.specification_fixture_id.gripper_width_min + self.gripper_height_min = self.specification_fixture_id.gripper_height_min + self.gripper_diameter_min = self.specification_fixture_id.gripper_diameter_min + self.gripper_length_max = self.specification_fixture_id.gripper_length_max + self.gripper_width_max = self.specification_fixture_id.gripper_width_max + self.gripper_height_max = self.specification_fixture_id.gripper_height_max + self.gripper_diameter_max = self.specification_fixture_id.gripper_diameter_max + self.rated_air_pressure = self.specification_fixture_id.rated_air_pressure + self.interface_materials_model_id = self.specification_fixture_id.interface_materials_model_id + self.transverse_groove = self.specification_fixture_id.transverse_groove + self.longitudinal_fitting_groove = self.specification_fixture_id.longitudinal_fitting_groove + self.height_tolerance_value = self.specification_fixture_id.height_tolerance_value + self.rated_adsorption_force = self.specification_fixture_id.rated_adsorption_force + self.magnetic_field_height = self.specification_fixture_id.magnetic_field_height + self.magnetic_pole_plate_grinding_allowance = self.specification_fixture_id.magnetic_pole_plate_grinding_allowance + self.screw_size = self.specification_fixture_id.screw_size + self.via_hole_diameter = self.specification_fixture_id.via_hole_diameter + self.mounting_hole_depth = self.specification_fixture_id.mounting_hole_depth + self.centering_diameter = self.specification_fixture_id.centering_diameter + + class SfMaintenanceEquipmentAndProductTemplate(models.Model): _inherit = 'maintenance.equipment' _description = '设备' diff --git a/sf_manufacturing/models/stock.py b/sf_manufacturing/models/stock.py index 4f2c43f3..27edc40f 100644 --- a/sf_manufacturing/models/stock.py +++ b/sf_manufacturing/models/stock.py @@ -202,8 +202,7 @@ class StockRule(models.Model): sale_order = self.env['sale.order'].sudo().search([('name', '=', production.origin)]) if sale_order: sale_order.write({'schedule_status': 'to schedule'}) - self.env['sf.production.plan'].sudo().with_company(company_id). \ - create({ + self.env['sf.production.plan'].sudo().with_company(company_id).create({ 'name': production.name, 'order_deadline': sale_order.deadline_of_delivery, 'production_id': production.id, diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index fe7bd12e..bb4b631f 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -649,24 +649,24 @@ class MachineToolType(models.Model): 'machine_tool_picture': image, "heightened_way": item['heightened_way'], "workpiece_load": item['workpiece_load'], - #"lead_screw": item['lead_screw'], + # "lead_screw": item['lead_screw'], "workbench_L": item['workbench_L'], "workbench_W": item['workbench_W'], - #"guide_rail": item['guide_rail'], + # "guide_rail": item['guide_rail'], "machine_tool_L": item['machine_tool_L'], "machine_tool_W": item['machine_tool_W'], "machine_tool_H": item['machine_tool_H'], - #"feed_speed": item['feed_speed'], - #"tool_speed": item['tool_speed'], + # "feed_speed": item['feed_speed'], + # "tool_speed": item['tool_speed'], "distance_min": item['distance_min'], "distance_max": item['distance_max'], - #"taper": item['taper'], - #"torque": item['torque'], - #"motor_power": item['motor_power'], + # "taper": item['taper'], + # "torque": item['torque'], + # "motor_power": item['motor_power'], "tool_quality_max": item['tool_quality_max'], "tool_long_max": item['tool_long_max'], - #"tool_diameter_max": item['tool_diameter_max'], - #"tool_diameter_min": item['tool_diameter_min'], + # "tool_diameter_max": item['tool_diameter_max'], + # "tool_diameter_min": item['tool_diameter_min'], "machine_tool_category": category.id, 'taper_type_id': taper_type_id.id, "function_type": item['function_type'], @@ -731,24 +731,24 @@ class MachineToolType(models.Model): 'machine_tool_picture': image, "heightened_way": item['heightened_way'], "workpiece_load": item['workpiece_load'], - #"lead_screw": item['lead_screw'], + # "lead_screw": item['lead_screw'], "workbench_L": item['workbench_L'], "workbench_W": item['workbench_W'], - #"guide_rail": item['guide_rail'], + # "guide_rail": item['guide_rail'], "machine_tool_L": item['machine_tool_L'], "machine_tool_W": item['machine_tool_W'], "machine_tool_H": item['machine_tool_H'], - #"feed_speed": item['feed_speed'], - #"tool_speed": item['tool_speed'], + # "feed_speed": item['feed_speed'], + # "tool_speed": item['tool_speed'], "distance_min": item['distance_min'], "distance_max": item['distance_max'], - #"taper": item['taper'], - #"torque": item['torque'], - #"motor_power": item['motor_power'], + # "taper": item['taper'], + # "torque": item['torque'], + # "motor_power": item['motor_power'], "tool_quality_max": item['tool_quality_max'], "tool_long_max": item['tool_long_max'], - #"tool_diameter_max": item['tool_diameter_max'], - #"tool_diameter_min": item['tool_diameter_min'], + # "tool_diameter_max": item['tool_diameter_max'], + # "tool_diameter_min": item['tool_diameter_min'], "machine_tool_category": category.id, 'taper_type_id': taper_type_id.id, "function_type": item['function_type'], @@ -844,24 +844,24 @@ class MachineToolType(models.Model): 'machine_tool_picture': image, "heightened_way": item['heightened_way'], "workpiece_load": item['workpiece_load'], - #"lead_screw": item['lead_screw'], + # "lead_screw": item['lead_screw'], "workbench_L": item['workbench_L'], "workbench_W": item['workbench_W'], - #"guide_rail": item['guide_rail'], + # "guide_rail": item['guide_rail'], "machine_tool_L": item['machine_tool_L'], "machine_tool_W": item['machine_tool_W'], "machine_tool_H": item['machine_tool_H'], - #"feed_speed": item['feed_speed'], - #"tool_speed": item['tool_speed'], + # "feed_speed": item['feed_speed'], + # "tool_speed": item['tool_speed'], "distance_min": item['distance_min'], "distance_max": item['distance_max'], - #"taper": item['taper'], - #"torque": item['torque'], - #"motor_power": item['motor_power'], + # "taper": item['taper'], + # "torque": item['torque'], + # "motor_power": item['motor_power'], "tool_quality_max": item['tool_quality_max'], "tool_long_max": item['tool_long_max'], - #"tool_diameter_max": item['tool_diameter_max'], - #"tool_diameter_min": item['tool_diameter_min'], + # "tool_diameter_max": item['tool_diameter_max'], + # "tool_diameter_min": item['tool_diameter_min'], "machine_tool_category": category.id, 'taper_type_id': taper_type_id.id, "function_type": item['function_type'], @@ -903,7 +903,6 @@ class MachineToolType(models.Model): "jg_image_id": jg_image_id.ids, "lq_image_id": lq_image_id.ids, - }) else: machine_tool_type.update({ @@ -927,24 +926,24 @@ class MachineToolType(models.Model): 'machine_tool_picture': image, "heightened_way": item['heightened_way'], "workpiece_load": item['workpiece_load'], - #"lead_screw": item['lead_screw'], + # "lead_screw": item['lead_screw'], "workbench_L": item['workbench_L'], "workbench_W": item['workbench_W'], - #"guide_rail": item['guide_rail'], + # "guide_rail": item['guide_rail'], "machine_tool_L": item['machine_tool_L'], "machine_tool_W": item['machine_tool_W'], "machine_tool_H": item['machine_tool_H'], - #"feed_speed": item['feed_speed'], - #"tool_speed": item['tool_speed'], + # "feed_speed": item['feed_speed'], + # "tool_speed": item['tool_speed'], "distance_min": item['distance_min'], "distance_max": item['distance_max'], - #"taper": item['taper'], - #"torque": item['torque'], - #"motor_power": item['motor_power'], + # "taper": item['taper'], + # "torque": item['torque'], + # "motor_power": item['motor_power'], "tool_quality_max": item['tool_quality_max'], "tool_long_max": item['tool_long_max'], - #"tool_diameter_max": item['tool_diameter_max'], - #"tool_diameter_min": item['tool_diameter_min'], + # "tool_diameter_max": item['tool_diameter_max'], + # "tool_diameter_min": item['tool_diameter_min'], "machine_tool_category": category.id, 'taper_type_id': taper_type_id.id, "function_type": item['function_type'], @@ -1459,6 +1458,39 @@ class SyncFixtureModel(models.Model): for item in result['fixture_model_yesterday_list']: if item: fixture_model = self.search([("code", '=', item['code'])]) + zero_chuck_list = [] + for zero_chuck_id in item['zero_chuck_ids']: + zero_chuck_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_zero_chuck_param(zero_chuck_id)) + zero_tray_list = [] + for zero_tray_id in item['zero_tray_ids']: + zero_tray_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_zero_tray_param(zero_tray_id)) + pneumatic_fixture_list = [] + for pneumatic_fixture_id in item['pneumatic_fixture_ids']: + pneumatic_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_pneumatic_fixture_param( + pneumatic_fixture_id)) + jaw_vice_fixture_list = [] + for jaw_vice_fixture_id in item['jaw_vice_fixture_ids']: + jaw_vice_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_jaw_vice_fixture_param( + jaw_vice_fixture_id)) + magnet_fixture_list = [] + for magnet_fixture_id in item['magnet_fixture_ids']: + magnet_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_magnet_fixture_param( + magnet_fixture_id)) + adapter_board_fixture_list = [] + for adapter_board_fixture_id in item['adapter_board_fixture_ids']: + adapter_board_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_adapter_board_fixture_param( + adapter_board_fixture_id)) + scroll_chuck_list = [] + for scroll_chuck_id in item['scroll_chuck_ids']: + scroll_chuck_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_scroll_chuck_param( + scroll_chuck_id)) if not fixture_model: self.create({ "name": item['name'], @@ -1468,56 +1500,35 @@ class SyncFixtureModel(models.Model): "multi_mounting_type_id": self.env['sf.multi_mounting.type'].search( [('code', '=', item['multi_mounting_type_code'])]).id, "brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id, - "clamping_way": item['clamping_way'], - "port_type": item['port_type'], "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "length": item['length'], - "width": item['width'], - "height": item['height'], - "weight": item['weight'], - "clamp_workpiece_length_max": item['clamp_workpiece_length_max'], - "clamp_workpiece_width_max": item['clamp_workpiece_width_max'], - "clamp_workpiece_height_max": item['clamp_workpiece_height_max'], - "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'], - "maximum_carrying_weight": item['maximum_carrying_weight'], - "maximum_clamping_force": item['maximum_clamping_force'], - "materials_model_id": self.env['sf.materials.model'].search( - [('materials_no', '=', item['materials_model_code'])]).id, - "driving_way": item['driving_way'], - "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids( - item['apply_machine_tool_type_code']), - "through_hole_size": item['through_hole_size'], - "screw_size": item['screw_size'], + "zero_chuck_ids": zero_chuck_list, + "zero_tray_ids": zero_tray_list, + "pneumatic_fixture_ids": pneumatic_fixture_list, + "jaw_vice_fixture_ids": jaw_vice_fixture_list, + "magnet_fixture_ids": magnet_fixture_list, + "adapter_board_fixture_ids": adapter_board_fixture_list, + "scroll_chuck_ids": scroll_chuck_list, + "status": item['status'], "active": item['active'], }) else: fixture_model.write({ "name": item['name'], + "code": item['code'], "fixture_material_id": self.env['sf.fixture.material'].search( [('code', '=', item['fixture_material_code'])]).id, "multi_mounting_type_id": self.env['sf.multi_mounting.type'].search( [('code', '=', item['multi_mounting_type_code'])]).id, "brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id, - "clamping_way": item['clamping_way'], - "port_type": item['port_type'], "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "length": item['length'], - "width": item['width'], - "height": item['height'], - "weight": item['weight'], - "clamp_workpiece_length_max": item['clamp_workpiece_length_max'], - "clamp_workpiece_width_max": item['clamp_workpiece_width_max'], - "clamp_workpiece_height_max": item['clamp_workpiece_height_max'], - "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'], - "maximum_carrying_weight": item['maximum_carrying_weight'], - "maximum_clamping_force": item['maximum_clamping_force'], - "materials_model_id": self.env['sf.materials.model'].search( - [('materials_no', '=', item['materials_model_code'])]).id, - "driving_way": item['driving_way'], - "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids( - item['apply_machine_tool_type_code']), - "through_hole_size": item['through_hole_size'], - "screw_size": item['screw_size'], + "zero_chuck_ids": zero_chuck_list, + "zero_tray_ids": zero_tray_list, + "pneumatic_fixture_ids": pneumatic_fixture_list, + "jaw_vice_fixture_ids": jaw_vice_fixture_list, + "magnet_fixture_ids": magnet_fixture_list, + "adapter_board_fixture_ids": adapter_board_fixture_list, + "scroll_chuck_ids": scroll_chuck_list, + "status": item['status'], "active": item['active'], }) else: @@ -1537,6 +1548,39 @@ class SyncFixtureModel(models.Model): for item in result['fixture_model_all_list']: if item: fixture_model = self.search([("code", '=', item['code'])]) + zero_chuck_list = [] + for zero_chuck_id in item['zero_chuck_ids']: + zero_chuck_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_zero_chuck_param(zero_chuck_id)) + zero_tray_list = [] + for zero_tray_id in item['zero_tray_ids']: + zero_tray_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_zero_tray_param(zero_tray_id)) + pneumatic_fixture_list = [] + for pneumatic_fixture_id in item['pneumatic_fixture_ids']: + pneumatic_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_pneumatic_fixture_param( + pneumatic_fixture_id)) + jaw_vice_fixture_list = [] + for jaw_vice_fixture_id in item['jaw_vice_fixture_ids']: + jaw_vice_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_jaw_vice_fixture_param( + jaw_vice_fixture_id)) + magnet_fixture_list = [] + for magnet_fixture_id in item['magnet_fixture_ids']: + magnet_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_magnet_fixture_param( + magnet_fixture_id)) + adapter_board_fixture_list = [] + for adapter_board_fixture_id in item['adapter_board_fixture_ids']: + adapter_board_fixture_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_adapter_board_fixture_param( + adapter_board_fixture_id)) + scroll_chuck_list = [] + for scroll_chuck_id in item['scroll_chuck_ids']: + scroll_chuck_list.append( + self.env['sf.fixture.materials.basic.parameters']._json_scroll_chuck_param( + scroll_chuck_id)) if not fixture_model: self.create({ "name": item['name'], @@ -1546,56 +1590,35 @@ class SyncFixtureModel(models.Model): "multi_mounting_type_id": self.env['sf.multi_mounting.type'].search( [('code', '=', item['multi_mounting_type_code'])]).id, "brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id, - "clamping_way": item['clamping_way'], - "port_type": item['port_type'], "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "length": item['length'], - "width": item['width'], - "height": item['height'], - "weight": item['weight'], - "clamp_workpiece_length_max": item['clamp_workpiece_length_max'], - "clamp_workpiece_width_max": item['clamp_workpiece_width_max'], - "clamp_workpiece_height_max": item['clamp_workpiece_height_max'], - "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'], - "maximum_carrying_weight": item['maximum_carrying_weight'], - "maximum_clamping_force": item['maximum_clamping_force'], - "materials_model_id": self.env['sf.materials.model'].search( - [('materials_no', '=', item['materials_model_code'])]).id, - "driving_way": item['driving_way'], - "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids( - item['apply_machine_tool_type_code']), - "through_hole_size": item['through_hole_size'], - "screw_size": item['screw_size'], + "zero_chuck_ids": zero_chuck_list, + "zero_tray_ids": zero_tray_list, + "pneumatic_fixture_ids": pneumatic_fixture_list, + "jaw_vice_fixture_ids": jaw_vice_fixture_list, + "magnet_fixture_ids": magnet_fixture_list, + "adapter_board_fixture_ids": adapter_board_fixture_list, + "scroll_chuck_ids": scroll_chuck_list, + "status": item['status'], "active": item['active'], }) else: fixture_model.write({ "name": item['name'], + "code": item['code'], "fixture_material_id": self.env['sf.fixture.material'].search( [('code', '=', item['fixture_material_code'])]).id, "multi_mounting_type_id": self.env['sf.multi_mounting.type'].search( [('code', '=', item['multi_mounting_type_code'])]).id, "brand_id": self.env['sf.machine.brand'].search([('code', '=', item['brand_code'])]).id, - "clamping_way": item['clamping_way'], - "port_type": item['port_type'], "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "length": item['length'], - "width": item['width'], - "height": item['height'], - "weight": item['weight'], - "clamp_workpiece_length_max": item['clamp_workpiece_length_max'], - "clamp_workpiece_width_max": item['clamp_workpiece_width_max'], - "clamp_workpiece_height_max": item['clamp_workpiece_height_max'], - "clamp_workpiece_diameter_max": item['clamp_workpiece_diameter_max'], - "maximum_carrying_weight": item['maximum_carrying_weight'], - "maximum_clamping_force": item['maximum_clamping_force'], - "materials_model_id": self.env['sf.materials.model'].search( - [('materials_no', '=', item['materials_model_code'])]).id, - "driving_way": item['driving_way'], - "apply_machine_tool_type_ids": self.env['sf.machine_tool.type'].sudo()._get_ids( - item['apply_machine_tool_type_code']), - "through_hole_size": item['through_hole_size'], - "screw_size": item['screw_size'], + "zero_chuck_ids": zero_chuck_list, + "zero_tray_ids": zero_tray_list, + "pneumatic_fixture_ids": pneumatic_fixture_list, + "jaw_vice_fixture_ids": jaw_vice_fixture_list, + "magnet_fixture_ids": magnet_fixture_list, + "adapter_board_fixture_ids": adapter_board_fixture_list, + "scroll_chuck_ids": scroll_chuck_list, + "status": item['status'], "active": item['active'], }) else: diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py index 075c7e21..a60af7f3 100644 --- a/sf_plan/models/custom_plan.py +++ b/sf_plan/models/custom_plan.py @@ -153,40 +153,45 @@ class sf_production_plan(models.Model): """ 排程方法 """ - if not self.production_line_id: - raise ValidationError("未选择生产线") - else: - workorder_id_list = self.production_id.workorder_ids.ids - if self.production_id.workorder_ids: - for item in self.production_id.workorder_ids: - if item.name == 'CNC加工': - item.date_planned_finished = datetime.now() + timedelta(days=100) - item.date_planned_start = self.date_planned_start - item.date_planned_finished = item.date_planned_start + timedelta( - minutes=self.env['mrp.routing.workcenter'].sudo().search( - [('name', '=', 'CNC加工')]).time_cycle) - item.duration_expected = self.env['mrp.routing.workcenter'].sudo().search( - [('name', '=', 'CNC加工')]).time_cycle - self.calculate_plan_time_before(item, workorder_id_list) - self.calculate_plan_time_after(item, workorder_id_list) - self.date_planned_start, self.date_planned_finished = \ - item.date_planned_start, item.date_planned_finished - self.state = 'done' - self.production_id.schedule_state = '已排' - # self.production_id.date_planned_start = self.date_planned_start - # self.production_id.date_planned_finished = self.date_planned_finished + for record in self: + if not record.production_line_id: + raise ValidationError("未选择生产线") else: - raise ValidationError("未找到工单") - # self.date_planned_finished = self.date_planned_start + timedelta(days=3) - # self.state = 'done' - return { - 'name': '排程甘特图', - 'type': 'ir.actions.act_window', - 'res_model': 'sf.production.plan', # 要跳转的模型名称 - # 要显示的视图类型,可以是'form', 'tree', 'kanban', 'graph', 'calendar', 'pivot'等 - 'view_mode': 'gantt,tree,form', - 'target': 'current', # 跳转的目标窗口,可以是'current'或'new' - } + workorder_id_list = record.production_id.workorder_ids.ids + if record.production_id.workorder_ids: + for item in record.production_id.workorder_ids: + if item.name == 'CNC加工': + item.date_planned_finished = datetime.now() + timedelta(days=100) + item.date_planned_start = record.date_planned_start + item.date_planned_finished = item.date_planned_start + timedelta( + minutes=record.env['mrp.routing.workcenter'].sudo().search( + [('name', '=', 'CNC加工')]).time_cycle) + item.duration_expected = record.env['mrp.routing.workcenter'].sudo().search( + [('name', '=', 'CNC加工')]).time_cycle + record.calculate_plan_time_before(item, workorder_id_list) + record.calculate_plan_time_after(item, workorder_id_list) + record.date_planned_start, record.date_planned_finished = \ + item.date_planned_start, item.date_planned_finished + record.state = 'done' + record.production_id.schedule_state = '已排' + mrp_production_ids = record.production_id._get_children().ids + print('mrp_production_ids', mrp_production_ids) + for i in mrp_production_ids: + record.env['mrp.production'].browse(i).schedule_state = '已排' + # record.production_id.date_planned_start = record.date_planned_start + # record.production_id.date_planned_finished = record.date_planned_finished + else: + raise ValidationError("未找到工单") + # record.date_planned_finished = record.date_planned_start + timedelta(days=3) + # record.state = 'done' + return { + 'name': '排程甘特图', + 'type': 'ir.actions.act_window', + 'res_model': 'sf.production.plan', # 要跳转的模型名称 + # 要显示的视图类型,可以是'form', 'tree', 'kanban', 'graph', 'calendar', 'pivot'等 + 'view_mode': 'gantt,tree,form', + 'target': 'current', # 跳转的目标窗口,可以是'current'或'new' + } def calculate_plan_time_before(self, item, workorder_id_list): """ diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml index fbca7218..c1bdf5fe 100644 --- a/sf_plan/views/view.xml +++ b/sf_plan/views/view.xml @@ -5,7 +5,10 @@ sf.production.plan.tree sf.production.plan - + + + + diff --git a/sf_quality/security/ir.model.access.csv b/sf_quality/security/ir.model.access.csv index a26c135b..8e91f577 100644 --- a/sf_quality/security/ir.model.access.csv +++ b/sf_quality/security/ir.model.access.csv @@ -1,6 +1,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_quality_point_group_quality,quality_point_group_quality,quality.model_quality_point,sf_base.group_quality,1,1,1,0 -access_quality_point_group_quality_director,quality_point_group_quality_director,quality.model_quality_point,sf_base.group_quality_director,1,1,0,0 +access_quality_point_group_quality_director,quality_point_group_quality_director,quality.model_quality_point,sf_base.group_quality_director,1,1,1,0 access_quality_point_group_plan_dispatch,quality_point_group_plan_dispatch,quality.model_quality_point,sf_base.group_plan_dispatch,1,0,0,0 access_quality_point_group_plan_director,quality_point_group_plan_director,quality.model_quality_point,sf_base.group_plan_director,1,0,0,0 access_quality_point_group_sf_equipment_user,quality_point_group_sf_equipment_user,quality.model_quality_point,sf_base.group_sf_equipment_user,1,0,0,0 @@ -30,8 +30,8 @@ access_quality_alert_group_sf_mrp_manager,quality_alert_group_sf_mrp_manager,qua access_quality_alert_group_equipment_user,quality_alert_group_equipment_user,quality.model_quality_alert,sf_maintenance.sf_group_equipment_user,1,0,0,0 access_quality_alert_group_equipment_manager,quality_alert_group_equipment_manager,quality.model_quality_alert,sf_maintenance.sf_group_equipment_manager,1,0,0,0 -access_quality_alert_team_group_quality,quality_alert_team_group_quality,quality.model_quality_alert_team,sf_base.group_quality,1,1,1,0 -access_quality_alert_team_group_quality_director,quality_alert_team_group_quality_director,quality.model_quality_alert_team,sf_base.group_quality_director,1,1,0,0 +access_quality_alert_team_group_quality,quality_alert_team_group_quality,quality.model_quality_alert_team,sf_base.group_quality,1,0,0,0 +access_quality_alert_team_group_quality_director,quality_alert_team_group_quality_director,quality.model_quality_alert_team,sf_base.group_quality_director,1,1,1,0 access_quality_alert_team_group_plan_dispatch,quality_alert_team_group_plan_dispatch,quality.model_quality_alert_team,sf_base.group_plan_dispatch,1,0,0,0 access_quality_alert_team_group_plan_director,quality_alert_team_group_plan_director,quality.model_quality_alert_team,sf_base.group_plan_director,1,0,0,0 access_quality_alert_team_group_sf_equipment_user,quality_alert_team_group_sf_equipment_user,quality.model_quality_alert_team,sf_base.group_sf_equipment_user,1,0,0,0 @@ -51,18 +51,17 @@ access_product_template_group_equipment_user,product_template_group_equipment_us access_product_template_group_equipment_manager,product_template_group_equipment_manager,product.model_product_template,sf_maintenance.sf_group_equipment_manager,1,0,0,0 access_quality_alert_stage_group_quality,quality_alert_stage_group_quality,quality.model_quality_alert_stage,sf_base.group_quality,1,0,0,0 -access_quality_alert_stage_group_quality_director,quality_alert_stage_group_quality_director,quality.model_quality_alert_stage,sf_base.group_quality_director,1,0,0,0 +access_quality_alert_stage_group_quality_director,quality_alert_stage_group_quality_director,quality.model_quality_alert_stage,sf_base.group_quality_director,1,1,1,0 access_quality_point_test_type_group_quality,quality_point_test_type_group_quality,quality.model_quality_point_test_type,sf_base.group_quality,1,0,0,0 access_quality_point_test_type_group_quality_director,quality_point_test_type_group_quality_director,quality.model_quality_point_test_type,sf_base.group_quality_director,1,0,0,0 access_quality_tag_group_quality,quality_tag_group_quality,quality.model_quality_tag,sf_base.group_quality,1,0,0,0 -access_quality_tag_group_quality_director,quality_tag_group_quality_director,quality.model_quality_tag,sf_base.group_quality_director,1,0,0,0 +access_quality_tag_group_quality_director,quality_tag_group_quality_director,quality.model_quality_tag,sf_base.group_quality_director,1,1,1,0 access_quality_reason_type_group_quality,quality_reason_group_quality,quality.model_quality_reason,sf_base.group_quality,1,0,0,0 access_quality_reason_type_group_quality_director,quality_reason_group_quality_director,quality.model_quality_reason,sf_base.group_quality_director,1,0,0,0 - - +access_quality_alert_stage,quality.alert.stage,quality.model_quality_alert_stage,sf_base.group_plan_dispatch,1,0,0,0 diff --git a/sf_sale/__manifest__.py b/sf_sale/__manifest__.py index ba6a99db..6d340058 100644 --- a/sf_sale/__manifest__.py +++ b/sf_sale/__manifest__.py @@ -22,6 +22,11 @@ 'views/purchase_order_view.xml', 'views/quick_easy_order_view.xml' ], + 'assets': { + 'web.assets_backend': [ + 'sf_sale/static/js/setTableWidth.js', + ] + }, 'demo': [ ], 'qweb': [ diff --git a/sf_sale/models/sale_order.py b/sf_sale/models/sale_order.py index 8cbcbb31..e1d0bad0 100644 --- a/sf_sale/models/sale_order.py +++ b/sf_sale/models/sale_order.py @@ -86,6 +86,7 @@ class ResaleOrderLine(models.Model): _inherit = 'sale.order.line' model_glb_file = fields.Binary('模型的glb文件') + check_status = fields.Selection(related='order_id.check_status') class RePurchaseOrder(models.Model): @@ -144,17 +145,31 @@ class ResPartnerToSale(models.Model): else: domain = [('id', '=', False)] return self._search(domain, limit=limit, access_rights_uid=name_get_uid) + elif self._context.get('is_supplier'): + if self.env.user.has_group('sf_base.group_purchase_director'): + domain = [('supplier_rank', '>', 0)] + elif self.env.user.has_group('sf_base.group_purchase'): + customer = self.env['res.partner'].search( + [('supplier_rank', '>', 0), ('user_id', '=', self.env.user.id)]) + if customer: + ids = [t.id for t in customer] + domain = [('id', 'in', ids)] + else: + domain = [('id', '=', False)] + return self._search(domain, limit=limit, access_rights_uid=name_get_uid) return super()._name_search(name, args, operator, limit, name_get_uid) @api.onchange('user_id') def _get_salesman(self): if self.customer_rank > 0: - self.user_id = self.env.user.id + if self.env.user.has_group('sf_base.group_sale_salemanager'): + self.user_id = self.env.user.id @api.onchange('purchase_user_id') def _get_purchaseman(self): if self.supplier_rank > 0: - self.purchase_user_id = self.env.user.id + if self.env.user.has_group('sf_base.group_purchase'): + self.purchase_user_id = self.env.user.id class ResUserToSale(models.Model): @@ -166,7 +181,10 @@ class ResUserToSale(models.Model): if self.env.user.has_group('sf_base.group_sale_director'): domain = [] elif self.env.user.has_group('sf_base.group_sale_salemanager'): - domain = [('id', '=', self.env.user.id)] + if self.id != self.env.user.id: + domain = [('id', '=', self.id)] + else: + domain = [('id', '=', self.env.user.id)] return self._search(domain, limit=limit, access_rights_uid=name_get_uid) elif self._context.get('supplier_rank'): if self.env.user.has_group('sf_base.group_purchase_director'): diff --git a/sf_sale/security/group_security.xml b/sf_sale/security/group_security.xml index 431b872b..c6af4225 100644 --- a/sf_sale/security/group_security.xml +++ b/sf_sale/security/group_security.xml @@ -32,7 +32,7 @@ 销售经理查看自己的客户 - [('user_id','=',user.id),('customer_rank','>',0)] + [('user_id', '=', user.id),('customer_rank', '>', 0)] @@ -64,8 +64,9 @@ 采购总监查看所有的订单 - [(1,'=',1),('check_status','!=', False] + [(1,'=',1)] + diff --git a/sf_sale/security/ir.model.access.csv b/sf_sale/security/ir.model.access.csv index 9489a6cc..569c146f 100644 --- a/sf_sale/security/ir.model.access.csv +++ b/sf_sale/security/ir.model.access.csv @@ -29,6 +29,8 @@ access_mrp_bom_group_sale_salemanager,mrp_bom_group_sale_salemanager,mrp.model_m access_mrp_bom_group_sale_director,mrp_bom_group_sale_director,mrp.model_mrp_bom,sf_base.group_sale_director,1,0,0,0 access_mrp_bom_group_purchase,mrp_bom_group_purchase,mrp.model_mrp_bom,sf_base.group_purchase,1,0,0,0 access_mrp_bom_group_purchase_director,mrp_bom_group_purchase_director,mrp.model_mrp_bom,sf_base.group_purchase_director,1,0,0,0 +access_mrp_bom_group_quality,mrp_bom_group_quality,mrp.model_mrp_bom,sf_base.group_quality,1,0,0,0 +access_mrp_bom_group_quality_director,mrp_bom_group_quality_director,mrp.model_mrp_bom,sf_base.group_quality_director,1,0,0,0 access_stock_move_group_sale_salemanager,stock_move_group_sale_salemanager,stock.model_stock_move,sf_base.group_sale_salemanager,1,0,0,0 access_stock_move_group_sale_director,stock_move_group_sale_director,stock.model_stock_move,sf_base.group_sale_director,1,0,0,0 access_stock_move_group_purchase,stock_move_group_purchase,stock.model_stock_move,sf_base.group_purchase,1,0,0,0 @@ -67,3 +69,11 @@ access_purchase_order_wizard_group_purchase,purchase_order_wizard_group_purchase access_purchase_order_wizard_group_purchase_director,purchase_order_wizard_group_purchase_director,model_purchase_order_wizard,sf_base.group_purchase_director,1,1,1,0 access_crm_tag_group_sale_salemanager,crm_tag_group_sale_salemanager,sales_team.model_crm_tag,sf_base.group_sale_salemanager,1,0,0,0 access_crm_tag_group_sale_director,crm_tag_group_sale_director,sales_team.model_crm_tag,sf_base.group_sale_director,1,1,1,0 + +access_sale_order,sale.order,sale.model_sale_order,sf_base.group_plan_dispatch,1,0,0,0 +access_res_partner_group_purchase,res_partner_group_purchase,base.model_res_partner,sf_base.group_purchase,1,1,1,0 +access_res_partner_group_purchase_director,res_partner_group_purchase_director,base.model_res_partner,sf_base.group_purchase_director,1,1,1,0 +access_sale_advance_payment_inv_group_sale_salemanager,sale_advance_payment_inv_group_sale_salemanager,sale.model_sale_advance_payment_inv,sf_base.group_sale_salemanager,1,1,1,0 +access_sale_advance_payment_inv_group_sale_director,sale_advance_payment_inv_group_sale_director,sale.model_sale_advance_payment_inv,sf_base.group_sale_director,1,1,1,0 + + diff --git a/sf_sale/static/js/setTableWidth.js b/sf_sale/static/js/setTableWidth.js new file mode 100644 index 00000000..7cae3950 --- /dev/null +++ b/sf_sale/static/js/setTableWidth.js @@ -0,0 +1,28 @@ +function setTableWidth() { + let timer = null + const dom = $('.o_list_renderer ') + if(!dom.length) { + timer = setTimeout(setTableWidth, 500) + return + } + const widthTest = '' + $('body').append(widthTest) + clearTimeout(timer) + const tbody_tr = dom.find('tbody').children('tr') + dom.find('thead').children('tr').children().each(function () { + $('#widthTest').text($(this).text()) + const width = $('#widthTest').width() + const i = $(this).index() + console.log(111) + tbody_tr.each(function () { + if($(this).children().length > 2) { + $(this).children().eq(i).css('min-width', width + 'px') + } + }) + }) +} + +$(function () { + setTableWidth() +}) + diff --git a/sf_sale/views/purchase_order_view.xml b/sf_sale/views/purchase_order_view.xml index 93b59032..51dfaf63 100644 --- a/sf_sale/views/purchase_order_view.xml +++ b/sf_sale/views/purchase_order_view.xml @@ -6,6 +6,9 @@ purchase.order + + + diff --git a/sf_sale/views/res_partner_view.xml b/sf_sale/views/res_partner_view.xml index 2ab384eb..c7bb79af 100644 --- a/sf_sale/views/res_partner_view.xml +++ b/sf_sale/views/res_partner_view.xml @@ -6,6 +6,9 @@ res.partner + + false + @@ -42,7 +45,7 @@ + attrs="{'required' : [('customer_rank','>', 0)]}"/> 1 @@ -69,6 +72,9 @@ res.partner + + false + diff --git a/sf_sale/views/sale_order_view.xml b/sf_sale/views/sale_order_view.xml index d1f0dfb8..db94b2c9 100644 --- a/sf_sale/views/sale_order_view.xml +++ b/sf_sale/views/sale_order_view.xml @@ -36,8 +36,7 @@ attrs="{'invisible': ['|','&',('check_status', '!=', 'approved'),('state', 'in', ['draft','cancel']),'&',('check_status', '=', 'approved'),('state', 'in', ['sale','cancel'])]}"/> - {'invisible': ['|',('check_status', '!=', 'approved'),('schedule_status', - 'not in', ['to schedule',False])]} + {'invisible': [('check_status', '=', False)]} @@ -63,7 +62,7 @@ + string="模型文件" attrs="{'readonly': [('state', 'in', ['draft'])]}"/> {'readonly': [('state', 'in', ['cancel','sale'])]} diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index e334c32a..c56f9463 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -27,6 +27,8 @@ 'web.assets_qweb': [ ], 'web.assets_backend': [ + 'sf_tool_management/static/src/change.scss' + ] }, diff --git a/sf_tool_management/models/base.py b/sf_tool_management/models/base.py index e1d1010b..80ac3811 100644 --- a/sf_tool_management/models/base.py +++ b/sf_tool_management/models/base.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- +import re from datetime import timedelta - from odoo import fields, models, api from odoo import SUPERUSER_ID from odoo.exceptions import ValidationError @@ -234,6 +234,7 @@ class FunctionalToolWarning(models.Model): class StockMoveLine(models.Model): _inherit = 'stock.move.line' _description = '功能刀具出入库记录' + _order = 'install_tool_time desc' functional_tool_name_id = fields.Many2one('sf.functional.tool.assembly', string='功能刀具名称') functional_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', store=True, @@ -253,11 +254,11 @@ class RealTimeDistributionOfFunctionalTools(models.Model): _name = 'sf.real.time.distribution.of.functional.tools' _description = '功能刀具安全库存' - name = fields.Char('功能刀具名称') - sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', + name = fields.Char('功能刀具名称', readonly=False) + sf_cutting_tool_type_id = fields.Many2one('sf.functional.cutting.tool.model', string='功能刀具类型', readonly=False, group_expand='_read_mrs_cutting_tool_type_ids', store=True) - diameter = fields.Integer(string='刀具直径(mm)') - knife_tip_r_angle = fields.Float(string='刀尖R角(mm)') + diameter = fields.Integer(string='刀具直径(mm)', readonly=False) + knife_tip_r_angle = fields.Float(string='刀尖R角(mm)', readonly=False) tool_stock_num = fields.Integer(string='刀具房数量') side_shelf_num = fields.Integer(string='线边刀库数量') on_tool_stock_num = fields.Integer(string='机内刀库数量') @@ -266,10 +267,10 @@ class RealTimeDistributionOfFunctionalTools(models.Model): max_stock_num = fields.Integer('最高库存量') batch_replenishment_num = fields.Integer('批次补货量', readonly=True, compute='_compute_batch_replenishment_num') unit = fields.Char('单位') - image = fields.Binary('图片') + image = fields.Binary('图片', readonly=False) - coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精') - whether_standard_knife = fields.Boolean(string='是否标准刀', default=True) + coarse_middle_thin = fields.Selection([("1", "粗"), ('2', '中'), ('3', '精')], string='粗/中/精', readonly=False) + whether_standard_knife = fields.Boolean(string='是否标准刀', default=True, readonly=False) # 能力特征信息 suitable_machining_method_ids = fields.Many2many( 'maintenance.equipment.image', 'rel_machining_product_template_distribution', '适合加工方式', @@ -299,7 +300,7 @@ class RealTimeDistributionOfFunctionalTools(models.Model): @api.constrains('min_stock_num', 'max_stock_num') def _check_stock_num(self): for obj in self: - if obj.min_stock_num > obj.min_stock_num: + if obj.min_stock_num > obj.max_stock_num: raise ValidationError('【最低安全库存】不能高于【最高安全库存】!!!') @api.model @@ -326,31 +327,31 @@ class RealTimeDistributionOfFunctionalTools(models.Model): if tool.tool_stock_total < tool.min_stock_num: tool.batch_replenishment_num = tool.max_stock_num - tool.tool_stock_total # 根据判断创建功能刀具组装单 - if not tool.sf_functional_tool_assembly_ids: + if not tool.sf_functional_tool_assembly_ids and re.match(r'^\d+$', str(tool.id)): for i in range(tool.batch_replenishment_num): - tool.create_functional_tool_assembly() + tool.create_functional_tool_assembly(tool) print(i, ": ", tool.sf_functional_tool_assembly_ids) else: tool.batch_replenishment_num = 0 - def create_functional_tool_assembly(self): + def create_functional_tool_assembly(self, tool): """ 创建功能刀具组装单 """ - functional_tool_assembly = self.env['sf.functional.tool.assembly'].sudo().create({ - 'functional_tool_name': self.name, - 'functional_tool_type_id': self.sf_cutting_tool_type_id.id, - 'functional_tool_diameter': self.diameter, - 'knife_tip_r_angle': self.knife_tip_r_angle, - 'coarse_middle_thin': self.coarse_middle_thin, + functional_tool_assembly = tool.env['sf.functional.tool.assembly'].sudo().create({ + 'functional_tool_name': tool.name, + 'functional_tool_type_id': tool.sf_cutting_tool_type_id.id, + 'functional_tool_diameter': tool.diameter, + 'knife_tip_r_angle': tool.knife_tip_r_angle, + 'coarse_middle_thin': tool.coarse_middle_thin, 'loading_task_source': '2', 'use_tool_time': fields.Datetime.now() + timedelta(hours=4), 'applicant': '系统自动', 'apply_time': fields.Datetime.now(), - 'whether_standard_knife': self.whether_standard_knife, + 'whether_standard_knife': tool.whether_standard_knife, 'reason_for_applying': '安全库存', }) - self.sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)] + tool.sf_functional_tool_assembly_ids = [(4, functional_tool_assembly.id)] def estimate_functional_tool_assembly_ids(self, tool): """ @@ -394,6 +395,15 @@ class RealTimeDistributionOfFunctionalTools(models.Model): vals['sf_functional_cutting_tool_entity_ids'] = sf_functional_cutting_tool_entity_ids.ids self.env['sf.real.time.distribution.of.functional.tools'].create(vals) + status_create = fields.Boolean('是否是新增状态', default=True) + + @api.model_create_multi + def create(self, vals_list): + for vals in vals_list: + vals['status_create'] = False + records = super(RealTimeDistributionOfFunctionalTools, self).create(vals_list) + return records + class MachineTableToolChangingApply(models.Model): _name = 'sf.machine.table.tool.changing.apply' @@ -781,7 +791,7 @@ class FunctionalToolAssembly(models.Model): L_D_number = fields.Float(string='L/D值(mm)', readonly=True) hiding_length = fields.Float(string='避空长(mm)', readonly=True) - functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False) + # functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False) tool_loading_person = fields.Char(string='装刀人', readonly=True) tool_loading_time = fields.Datetime(string='装刀时间', readonly=True) remark = fields.Char(string='备注说明', readonly=True) diff --git a/sf_tool_management/static/src/change.scss b/sf_tool_management/static/src/change.scss index 40fdcc8e..a4e64f97 100644 --- a/sf_tool_management/static/src/change.scss +++ b/sf_tool_management/static/src/change.scss @@ -8,4 +8,14 @@ .modal-content .o_list_button { +} + +.o_form_view .o_field_widget .o_list_renderer { + width: calc(100% - 64px) !important; + margin:0 auto; + overflow: auto; +} + +.o_list_renderer .o_list_table tbody > tr > td:not(.o_list_record_selector).o_list_number { + text-align: left; } \ 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 index 86c42c92..62c0f0eb 100644 --- a/sf_tool_management/views/tool_base_views.xml +++ b/sf_tool_management/views/tool_base_views.xml @@ -310,22 +310,29 @@ - + + - - - - - + + + + + - + @@ -366,7 +373,7 @@ - + @@ -871,7 +878,7 @@ - + @@ -930,7 +936,6 @@ 'default_new_former':new_former, 'default_use_tool_time':use_tool_time, 'default_reason_for_applying':reason_for_applying, - 'default_functional_tool_cutting_type':functional_tool_cutting_type, }" attrs="{'invisible': [('assemble_status', '!=', '0')]}" class="btn-primary"/> @@ -1109,7 +1114,7 @@ - + @@ -1162,7 +1167,7 @@ - + @@ -1173,7 +1178,7 @@ ir.actions.act_window sf.functional.tool.assembly tree,form,search - + {'search_default_no_assemble_status':1} diff --git a/sf_tool_management/wizard/wizard.py b/sf_tool_management/wizard/wizard.py index 89b9f854..a8b10fd1 100644 --- a/sf_tool_management/wizard/wizard.py +++ b/sf_tool_management/wizard/wizard.py @@ -330,7 +330,7 @@ class FunctionalToolAssemblyOrder(models.TransientModel): L_D_number = fields.Float(string='L/D值(mm)', compute='_compute_l_d_number') hiding_length = fields.Float(string='避空长(mm)') - functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False) + # functional_tool_cutting_type = fields.Char(string='功能刀具切削类型', readonly=False) @api.onchange('integral_code_id') def _onchange_after_assembly_functional_tool_diameter(self): @@ -537,6 +537,8 @@ class StockPicking(models.Model): self.env['stock.move.line'].create({ 'picking_id': picking_id.id, 'product_id': stock_lot.product_id.id, + 'location_id': picking_id.location_id.id, + 'location_dest_id': picking_id.location_dest_id.id, 'lot_id': stock_lot.id, 'qty_done': 1, 'functional_tool_name_id': functional_tool_assembly.id diff --git a/sf_tool_management/wizard/wizard_view.xml b/sf_tool_management/wizard/wizard_view.xml index 7b3d2ab5..7586a513 100644 --- a/sf_tool_management/wizard/wizard_view.xml +++ b/sf_tool_management/wizard/wizard_view.xml @@ -190,7 +190,7 @@ - + diff --git a/sf_warehouse/security/ir.model.access.csv b/sf_warehouse/security/ir.model.access.csv index 2367fbd7..b5954085 100644 --- a/sf_warehouse/security/ir.model.access.csv +++ b/sf_warehouse/security/ir.model.access.csv @@ -1,4 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink + access_sf_shelf_location,sf.shelf.location,model_sf_shelf_location,sf_warehouse.group_sf_stock_user,1,1,1,0 access_procurement_group,procurement.group,stock.model_procurement_group,base.group_user,1,1,1,0 @@ -95,17 +96,20 @@ access_stock_lot_label_layout_user,lot.label.layout.user,stock.model_lot_label_l access_stock_replenish_option,stock.replenishment.option,stock.model_stock_replenishment_option,sf_warehouse.group_sf_stock_user,1,1,1,0 access_mrp_production,mrp.production,mrp.model_mrp_production,sf_warehouse.group_sf_stock_user,1,1,1,0 -access_sf_shelf_location,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,0,0,0 -access_stock_move,stock.move,stock.model_stock_move,sf_base.group_plan_dispatch,1,0,0,0 +access_sf_shelf_location_group_plan_dispatch,sf.shelf.location,model_sf_shelf_location,sf_base.group_plan_dispatch,1,1,0,0 +access_stock_move,stock.move,stock.model_stock_move,sf_base.group_plan_dispatch,1,1,1,0 access_stock_scrap_user,stock.scrap.user,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,0,0,0 access_stock_scrap_manager,stock.scrap.manager,stock.model_stock_scrap,sf_base.group_plan_dispatch,1,0,0,0 access_stock_picking,stock.picking,stock.model_stock_picking,sf_base.group_plan_dispatch,1,0,0,0 -access_stock_lot,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,1,1,0 -access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,stock.model_stock_warehouse_orderpoint,sf_base.group_plan_dispatch,1,0,0,0 -access_stock_quant,stock.quant,stock.model_stock_quant,sf_base.group_plan_dispatch,1,0,0,0 +access_stock_lot_group_plan_dispatch,stock.lot,stock.model_stock_lot,sf_base.group_plan_dispatch,1,0,0,0 +access_stock_lot_group_plan_director,stock.lot,stock.model_stock_lot,sf_base.group_plan_director,1,1,1,0 +access_stock_warehouse_orderpoint,stock.warehouse.orderpoint,stock.model_stock_warehouse_orderpoint,sf_base.group_plan_dispatch,1,1,0,0 +access_stock_quant,stock.quant,stock.model_stock_quant,sf_base.group_plan_dispatch,1,1,1,0 -access_product_product,product.product,product.model_product_product,sf_base.group_plan_dispatch,1,1,1,0 -access_product_template,product.template,product.model_product_template,sf_base.group_plan_dispatch,1,1,1,0 +access_product_product,product.product,product.model_product_product,sf_base.group_plan_dispatch,1,0,0,0 +access_product_template,product.template,product.model_product_template,sf_base.group_plan_dispatch,1,0,0,0 +access_product_product,product.product,product.model_product_product,sf_base.group_plan_director,1,1,1,0 +access_product_template,product.template,product.model_product_template,sf_base.group_plan_director,1,1,1,0 access_stock_inventory_conflict,stock.inventory.conflict,stock.model_stock_inventory_conflict,sf_base.group_plan_dispatch,1,0,0,0 access_stock_inventory_warning,stock.inventory.warning,stock.model_stock_inventory_warning,sf_base.group_plan_dispatch,1,0,0,0