diff --git a/sf_base/models/basic_parameters_fixture.py b/sf_base/models/basic_parameters_fixture.py index 7bd69a35..1333d01f 100644 --- a/sf_base/models/basic_parameters_fixture.py +++ b/sf_base/models/basic_parameters_fixture.py @@ -67,186 +67,275 @@ class BasicParametersFixture(models.Model): mounting_hole_depth = fields.Float('安装孔深度(mm)', digits=(16, 2)) 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': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'machine_tool_type_id': self.env['sf.machine_tool.type'].sudo().search( - [('code', '=', obj['machine_tool_type_id']), ('active', '=', True)]).id, - }) - return zero_chuck_param_str + code = fields.Char('编码') - 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': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'rigidity': obj['rigidity'], - }) - return zero_tray_param_str + def create_fixture_materials(self, fixture_materials_datas, fixture_model): + fixture_materials_name = fixture_model.fixture_material_id.name + if fixture_materials_name == '零点卡盘': + for fixture_materials_data in fixture_materials_datas: + self.create(self._json_zero_chuck_param(fixture_materials_data, fixture_model)) + elif fixture_materials_name == '零点托盘': + for fixture_materials_data in fixture_materials_datas: + self.create(self._json_zero_tray_param(fixture_materials_data, fixture_model)) + elif fixture_materials_name == '气动夹具': + for fixture_materials_data in fixture_materials_datas: + self.create(self._json_pneumatic_fixture_param(fixture_materials_data, fixture_model)) + elif fixture_materials_name == '虎钳夹具': + for fixture_materials_data in fixture_materials_datas: + self.create(self._json_jaw_vice_fixture_param(fixture_materials_data, fixture_model)) + elif fixture_materials_name == '磁吸夹具': + for fixture_materials_data in fixture_materials_datas: + self.create(self._json_magnet_fixture_param(fixture_materials_data, fixture_model)) + elif fixture_materials_name == '转接板(锁板)夹具': + for fixture_materials_data in fixture_materials_datas: + self.create(self._json_adapter_board_fixture_param(fixture_materials_data, fixture_model)) + elif fixture_materials_name == '三爪卡盘': + for fixture_materials_data in fixture_materials_datas: + self.create(self._json_scroll_chuck_param(fixture_materials_data, fixture_model)) - 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': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'rigidity': obj['rigidity'], - 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'type_of_drive': obj['type_of_drive'], - }) - return pneumatic_fixture_param_str + def write_fixture_materials(self, fixture_materials_datas, fixture_model): + fixture_materials_name = fixture_model.fixture_material_id.name + # cloud夹具物料的code + mrs_fixture_materials_codes = [] + for fixture_materials_data in fixture_materials_datas: + mrs_fixture_materials_codes.append(fixture_materials_data.get('code')) + # sf夹具物料的code 判断sf夹具型号关联的夹具物料在同步过来的mrs夹具物料中是否存在,不存在则删除 + sf_materials_model_codes = self._get_sf_materials_model_codes(fixture_model) + for sf_materials_model_code in sf_materials_model_codes: + if sf_materials_model_code not in mrs_fixture_materials_codes: + self.search([('code', '=', sf_materials_model_code)]).sudo().unlink() - 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': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'rigidity': obj['rigidity'], - 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'type_of_drive': obj['type_of_drive'], - }) - return jaw_vice_fixture_param_str + for fixture_materials_data in fixture_materials_datas: + fixture_materials_list = self._get_fixture_materials_list(fixture_materials_data, fixture_materials_name, + fixture_model) + fixture_materials_code = fixture_materials_list.get('code') + # 判断同步过来的mrs刀具物料在sf夹具型号关联的夹具物料中是否存在,如果存在则修改,如果不存在则创建 + if fixture_materials_code in sf_materials_model_codes: + self.search([('code', '=', fixture_materials_code)]).sudo().write(fixture_materials_list) + else: + self.sudo().create(fixture_materials_list) - 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': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'rigidity': obj['rigidity'], - 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, - 'type_of_drive': obj['type_of_drive'], - }) - return magnet_fixture_param_str + def _get_sf_materials_model_codes(self, fixture_model): + fixture_materials_name = fixture_model.fixture_material_id.name + if fixture_materials_name == '零点卡盘': + return self._get_sf_materials_model_code(fixture_model.zero_chuck_ids) + elif fixture_materials_name == '零点托盘': + return self._get_sf_materials_model_code(fixture_model.zero_tray_ids) + elif fixture_materials_name == '气动夹具': + return self._get_sf_materials_model_code(fixture_model.pneumatic_fixture_ids) + elif fixture_materials_name == '虎钳夹具': + return self._get_sf_materials_model_code(fixture_model.pneumatic_fixture_ids) + elif fixture_materials_name == '磁吸夹具': + return self._get_sf_materials_model_code(fixture_model.magnet_fixture_ids) + elif fixture_materials_name == '转接板(锁板)夹具': + return self._get_sf_materials_model_code(fixture_model.adapter_board_fixture_ids) + elif fixture_materials_name == '三爪卡盘': + return self._get_sf_materials_model_code(fixture_model.scroll_chuck_ids) + return False - 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': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).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 _get_sf_materials_model_code(self, fixture_materials_ids): + sf_materials_model_codes = [] + for fixture_materials_id in fixture_materials_ids: + sf_materials_model_codes.append(fixture_materials_id.code) + return sf_materials_model_codes - 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': self.env['sf.materials.model'].sudo().search( - [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).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 + def _get_fixture_materials_list(self, fixture_materials_data, fixture_materials_name, fixture_model): + if fixture_materials_name == '零点卡盘': + return self._json_zero_chuck_param(fixture_materials_data, fixture_model) + elif fixture_materials_name == '零点托盘': + return self._json_zero_tray_param(fixture_materials_data, fixture_model) + elif fixture_materials_name == '气动夹具': + return self._json_pneumatic_fixture_param(fixture_materials_data, fixture_model) + elif fixture_materials_name == '虎钳夹具': + return self._json_jaw_vice_fixture_param(fixture_materials_data, fixture_model) + elif fixture_materials_name == '磁吸夹具': + return self._json_magnet_fixture_param(fixture_materials_data, fixture_model) + elif fixture_materials_name == '转接板(锁板)夹具': + return self._json_adapter_board_fixture_param(fixture_materials_data, fixture_model) + elif fixture_materials_name == '三爪卡盘': + return self._json_scroll_chuck_param(fixture_materials_data, fixture_model) + return False + + def _json_zero_chuck_param(self, obj, fixture_model): + """零点卡盘:将data数据转换成list数据""" + return {'code': obj['code'], + 'fixture_model_id': fixture_model.id, + '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': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'machine_tool_type_id': self.env['sf.machine_tool.type'].sudo().search( + [('code', '=', obj['machine_tool_type_id']), ('active', '=', True)]).id} + + def _json_zero_tray_param(self, obj, fixture_model): + """零点托盘:将data数据转换成list数据""" + return {'code': obj['code'], + 'fixture_model_id': fixture_model.id, + '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': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'rigidity': obj['rigidity']} + + def _json_pneumatic_fixture_param(self, obj, fixture_model): + """气动夹具:将data数据转换成list数据""" + return {'code': obj['code'], + 'fixture_model_id': fixture_model.id, + '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': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'rigidity': obj['rigidity'], + 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'type_of_drive': obj['type_of_drive']} + + def _json_jaw_vice_fixture_param(self, obj, fixture_model): + """虎钳夹具:将data数据转换成list数据""" + return {'code': obj['code'], + 'fixture_model_id': fixture_model.id, + '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': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'rigidity': obj['rigidity'], + 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'type_of_drive': obj['type_of_drive']} + + def _json_magnet_fixture_param(self, obj, fixture_model): + """磁吸夹具:将data数据转换成list数据""" + return {'code': obj['code'], + 'fixture_model_id': fixture_model.id, + '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': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'rigidity': obj['rigidity'], + 'interface_materials_model_id': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'type_of_drive': obj['type_of_drive']} + + def _json_adapter_board_fixture_param(self, obj, fixture_model): + """转接板(锁板)夹具:将data数据转换成list数据""" + return {'code': obj['code'], + 'fixture_model_id': fixture_model.id, + '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': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'rigidity': obj['rigidity'], + 'screw_size': obj['screw_size'], + 'via_hole_diameter': obj['via_hole_diameter'], + 'type_of_drive': obj['type_of_drive']} + + def _json_scroll_chuck_param(self, obj, fixture_model): + """转接板(锁板)夹具:将data数据转换成list数据""" + return {'code': obj['code'], + 'fixture_model_id': fixture_model.id, + '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': self.env['sf.materials.model'].sudo().search( + [('materials_no', '=', obj['materials_model_id']), ('active', '=', True)]).id, + 'rigidity': obj['rigidity'], + 'mounting_hole_depth': obj['mounting_hole_depth'], + 'centering_diameter': obj['centering_diameter'], + 'type_of_drive': obj['type_of_drive']} diff --git a/sf_base/models/fixture.py b/sf_base/models/fixture.py index 52e2baf7..f64fe473 100644 --- a/sf_base/models/fixture.py +++ b/sf_base/models/fixture.py @@ -26,10 +26,10 @@ class FixtureModel(models.Model): _name = 'sf.fixture.model' _description = "夹具型号" - name = fields.Char(string="名称", size=50, required=True) - fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料", required=True) + name = fields.Char(string="名称", size=50) + fixture_material_id = fields.Many2one('sf.fixture.material', string="夹具物料") fixture_material_type = fields.Char(string="夹具物料类型", related='fixture_material_id.name') - multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型", required=True) + multi_mounting_type_id = fields.Many2one('sf.multi_mounting.type', string="联装类型") brand_id = fields.Many2one('sf.machine.brand', string="品牌") model_file = fields.Binary(string="图片") status = fields.Boolean('状态') diff --git a/sf_base/views/fixture_view.xml b/sf_base/views/fixture_view.xml index 692c3b7f..0e86738d 100644 --- a/sf_base/views/fixture_view.xml +++ b/sf_base/views/fixture_view.xml @@ -165,6 +165,7 @@ + @@ -190,6 +191,7 @@ + @@ -213,6 +215,7 @@ + @@ -240,6 +243,7 @@ + @@ -268,6 +272,7 @@ + @@ -297,6 +302,7 @@ + @@ -323,6 +329,7 @@ + diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index d9e310e0..210194db 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -827,7 +827,8 @@ class MachineToolType(models.Model): brand = self.env['sf.machine.brand'].search([('code', '=', item['brand_id'])]) jg_image_id = self.env['maintenance.equipment.image'].search([('name', 'in', item['jg_image_id'])]).ids lq_image_id = self.env['maintenance.equipment.image'].search([('name', 'in', item['lq_image_id'])]).ids - category = self.env['sf.machine_tool.category'].search([('code', '=', item['machine_tool_category']), ('active', '=', True)], limit=1) + category = self.env['sf.machine_tool.category'].search( + [('code', '=', item['machine_tool_category']), ('active', '=', True)], limit=1) if not machine_tool_type: self.create({ @@ -1475,90 +1476,62 @@ class SyncFixtureModel(models.Model): for item in result['fixture_model_yesterday_list']: if item: fixture_model = self.search([("code", '=', item['code']), ('active', 'in', [True, False])]) - 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)) + fixture_materials = self.env['sf.fixture.materials.basic.parameters'] + val = { + "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, + "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), + "status": item['status'], + "active": item['active'], + } if not fixture_model: - self.create({ - "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, - "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "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'], - }) + fixture_model = self.create(val) + fixture_material_name = fixture_model.fixture_material_id.name + if item['zero_chuck_ids'] and fixture_material_name == '零点卡盘': + fixture_materials.create_fixture_materials(item['zero_chuck_ids'], fixture_model) + elif item['zero_tray_ids'] and fixture_material_name == '零点托盘': + fixture_materials.create_fixture_materials(item['zero_tray_ids'], fixture_model) + elif item['pneumatic_fixture_ids'] and fixture_material_name == '气动夹具': + fixture_materials.create_fixture_materials(item['pneumatic_fixture_ids'], fixture_model) + elif item['jaw_vice_fixture_ids'] and fixture_material_name == '虎钳夹具': + fixture_materials.create_fixture_materials(item['jaw_vice_fixture_ids'], fixture_model) + elif item['magnet_fixture_ids'] and fixture_material_name == '磁吸夹具': + fixture_materials.create_fixture_materials(item['magnet_fixture_ids'], fixture_model) + elif item['adapter_board_fixture_ids'] and fixture_material_name == '转接板(锁板)夹具': + fixture_materials.create_fixture_materials(item['adapter_board_fixture_ids'], + fixture_model) + elif item['scroll_chuck_ids'] and fixture_material_name == '三爪卡盘': + fixture_materials.create_fixture_materials(item['scroll_chuck_ids'], fixture_model) else: - fixture_model.write({ - "zero_chuck_ids": [(5, 0, 0)], - "zero_tray_ids": [(5, 0, 0)], - "pneumatic_fixture_ids": [(5, 0, 0)], - "jaw_vice_fixture_ids": [(5, 0, 0)], - "magnet_fixture_ids": [(5, 0, 0)], - "adapter_board_fixture_ids": [(5, 0, 0)], - "scroll_chuck_ids": [(5, 0, 0)], - }) - self.env['sf.fixture.materials.basic.parameters'].sudo().search( - [('fixture_model_id', '=', False)]).unlink() - 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, - "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "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'], - }) + fixture_model.write(val) + fixture_material_name = fixture_model.fixture_material_id.name + if item['zero_chuck_ids'] and fixture_material_name == '零点卡盘': + fixture_materials.write_fixture_materials(item['zero_chuck_ids'], fixture_material_name) + elif item['zero_tray_ids'] and fixture_material_name == '零点托盘': + fixture_materials.write_fixture_materials(item['zero_tray_ids'], fixture_material_name) + elif item['pneumatic_fixture_ids'] and fixture_material_name == '气动夹具': + fixture_materials.write_fixture_materials(item['pneumatic_fixture_ids'], + fixture_material_name) + elif item['jaw_vice_fixture_ids'] and fixture_material_name == '虎钳夹具': + fixture_materials.write_fixture_materials(item['jaw_vice_fixture_ids'], + fixture_material_name) + elif item['magnet_fixture_ids'] and fixture_material_name == '磁吸夹具': + fixture_materials.write_fixture_materials(item['magnet_fixture_ids'], + fixture_material_name) + elif item['adapter_board_fixture_ids'] and fixture_material_name == '转接板(锁板)夹具': + fixture_materials.write_fixture_materials(item['adapter_board_fixture_ids'], + fixture_material_name) + elif item['scroll_chuck_ids'] and fixture_material_name == '三爪卡盘': + fixture_materials.write_fixture_materials(item['scroll_chuck_ids'], + fixture_material_name) + else: + self.env['sf.fixture.materials.basic.parameters'].sudo().search( + [('fixture_model_id', '=', fixture_model.id)]).unlink() else: raise ValidationError("夹具型号认证未通过") @@ -1576,90 +1549,58 @@ class SyncFixtureModel(models.Model): for item in result['fixture_model_all_list']: if item: fixture_model = self.search([('code', '=', item['code']), ('active', 'in', [True, False])]) - 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)) + fixture_materials = self.env['sf.fixture.materials.basic.parameters'] + val = { + "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, + "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), + "status": item['status'], + "active": item['active'], + } if not fixture_model: - self.create({ - "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, - "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "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'], - }) + fixture_model = self.create(val) + fixture_material_name = fixture_model.fixture_material_id.name + if item['zero_chuck_ids'] and fixture_material_name == '零点卡盘': + fixture_materials.create_fixture_materials(item['zero_chuck_ids'], fixture_model) + elif item['zero_tray_ids'] and fixture_material_name == '零点托盘': + fixture_materials.create_fixture_materials(item['zero_tray_ids'], fixture_model) + elif item['pneumatic_fixture_ids'] and fixture_material_name == '气动夹具': + fixture_materials.create_fixture_materials(item['pneumatic_fixture_ids'], fixture_model) + elif item['jaw_vice_fixture_ids'] and fixture_material_name == '虎钳夹具': + fixture_materials.create_fixture_materials(item['jaw_vice_fixture_ids'], fixture_model) + elif item['magnet_fixture_ids'] and fixture_material_name == '磁吸夹具': + fixture_materials.create_fixture_materials(item['magnet_fixture_ids'], fixture_model) + elif item['adapter_board_fixture_ids'] and fixture_material_name == '转接板(锁板)夹具': + fixture_materials.create_fixture_materials(item['adapter_board_fixture_ids'], + fixture_model) + elif item['scroll_chuck_ids'] and fixture_material_name == '三爪卡盘': + fixture_materials.create_fixture_materials(item['scroll_chuck_ids'], fixture_model) else: - fixture_model.write({ - "zero_chuck_ids": [(5, 0, 0)], - "zero_tray_ids": [(5, 0, 0)], - "pneumatic_fixture_ids": [(5, 0, 0)], - "jaw_vice_fixture_ids": [(5, 0, 0)], - "magnet_fixture_ids": [(5, 0, 0)], - "adapter_board_fixture_ids": [(5, 0, 0)], - "scroll_chuck_ids": [(5, 0, 0)], - }) - self.env['sf.fixture.materials.basic.parameters'].sudo().search( - [('fixture_model_id', '=', False)]).unlink() - 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, - "model_file": '' if not item['model_file'] else base64.b64decode(item['model_file']), - "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'], - }) + fixture_model.write(val) + fixture_material_name = fixture_model.fixture_material_id.name + if item['zero_chuck_ids'] and fixture_material_name == '零点卡盘': + fixture_materials.write_fixture_materials(item['zero_chuck_ids'], fixture_model) + elif item['zero_tray_ids'] and fixture_material_name == '零点托盘': + fixture_materials.write_fixture_materials(item['zero_tray_ids'], fixture_model) + elif item['pneumatic_fixture_ids'] and fixture_material_name == '气动夹具': + fixture_materials.write_fixture_materials(item['pneumatic_fixture_ids'], fixture_model) + elif item['jaw_vice_fixture_ids'] and fixture_material_name == '虎钳夹具': + fixture_materials.write_fixture_materials(item['jaw_vice_fixture_ids'], fixture_model) + elif item['magnet_fixture_ids'] and fixture_material_name == '磁吸夹具': + fixture_materials.write_fixture_materials(item['magnet_fixture_ids'], fixture_model) + elif item['adapter_board_fixture_ids'] and fixture_material_name == '转接板(锁板)夹具': + fixture_materials.write_fixture_materials(item['adapter_board_fixture_ids'], + fixture_model) + elif item['scroll_chuck_ids'] and fixture_material_name == '三爪卡盘': + fixture_materials.write_fixture_materials(item['scroll_chuck_ids'], fixture_model) + else: + self.env['sf.fixture.materials.basic.parameters'].sudo().search( + [('fixture_model_id', '=', fixture_model.id)]).unlink() else: raise ValidationError("夹具型号认证未通过") @@ -2457,8 +2398,9 @@ class CuttingToolBasicParameters(models.Model): 'cutting_tool_type': '整体式刀具', 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( [( - 'code', '=', integral_tool_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, + 'code', '=', + integral_tool_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'total_length': integral_tool_item['total_length'], 'blade_diameter': integral_tool_item['blade_diameter'], 'blade_length': integral_tool_item['blade_length'], @@ -2825,8 +2767,9 @@ class CuttingToolBasicParameters(models.Model): 'cutting_tool_type': '整体式刀具', 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( [( - 'code', '=', integral_tool_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, + 'code', '=', + integral_tool_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'total_length': integral_tool_item['total_length'], 'blade_diameter': integral_tool_item['blade_diameter'], 'blade_length': integral_tool_item['blade_length'], diff --git a/sf_plan/models/custom_plan.py b/sf_plan/models/custom_plan.py index d4402c98..5f0d254b 100644 --- a/sf_plan/models/custom_plan.py +++ b/sf_plan/models/custom_plan.py @@ -44,8 +44,9 @@ class sf_production_plan(models.Model): production_id = fields.Many2one('mrp.production', '关联制造订单') product_qty = fields.Float(string='数量', digits='Product Unit of Measure', required=True, default=0.0) production_line_id = fields.Many2one('sf.production.line', string='生产线') - date_planned_start = fields.Datetime(string='计划开始时间', required=True, index=True, copy=False, - default=fields.Datetime.now) + # date_planned_start = fields.Datetime(string='计划开始时间', required=True, index=True, copy=False, + # default=fields.Datetime.now) + date_planned_start = fields.Datetime(string='计划开始时间') date_planned_finished = fields.Datetime(string='计划结束时间') # 排程设置selection(倒排,顺排,默认倒排) schedule_setting = fields.Selection([ @@ -80,7 +81,7 @@ class sf_production_plan(models.Model): def _compute_production_line_id(self): for item in self: item.sudo().production_id.production_line_id = item.production_line_id.id - item.sudo().production_id.plan_start_processing_time = item.date_planned_start + # item.sudo().production_id.plan_start_processing_time = item.date_planned_start # @api.onchange('state') # def _onchange_state(self): @@ -198,7 +199,9 @@ class sf_production_plan(models.Model): 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_start = record.date_planned_start + item.date_planned_start = datetime.now() + record.sudo().production_id.plan_start_processing_time = item.date_planned_start item.date_planned_finished = item.date_planned_start + timedelta( minutes=record.env['mrp.routing.workcenter'].sudo().search( [('name', '=', 'CNC加工')]).time_cycle) @@ -291,6 +294,7 @@ class sf_production_plan(models.Model): print('时间设置失败,请检查是否为工序分配工作中心,%s' % e) def cancel_production_schedule(self): + self.date_planned_start = False self.date_planned_finished = False self.state = 'draft' self.production_line_id = False diff --git a/sf_plan/views/view.xml b/sf_plan/views/view.xml index 38c7f4f8..1e7ff0f6 100644 --- a/sf_plan/views/view.xml +++ b/sf_plan/views/view.xml @@ -88,7 +88,7 @@ - + diff --git a/sf_tool_management/models/functional_tool_enroll.py b/sf_tool_management/models/functional_tool_enroll.py index 0cfac5b7..1d954ed0 100644 --- a/sf_tool_management/models/functional_tool_enroll.py +++ b/sf_tool_management/models/functional_tool_enroll.py @@ -197,6 +197,12 @@ class FunctionalCuttingToolEntity(models.Model): record.enroll_functional_tool_entity() return records + def write(self, vals): + res = super().write(vals) + if vals.get('current_location'): + self.enroll_functional_tool_entity() + return res + class FunctionalToolWarning(models.Model): _inherit = 'sf.functional.tool.warning' diff --git a/sf_warehouse/models/model.py b/sf_warehouse/models/model.py index 3e691430..8e0a3116 100644 --- a/sf_warehouse/models/model.py +++ b/sf_warehouse/models/model.py @@ -424,6 +424,14 @@ class Sf_stock_move_line(models.Model): # lot_qr_code = fields.Binary(string='二维码', compute='_compute_lot_qr_code', store=True) lot_qr_code = fields.Binary(string='二维码', compute='_compute_lot_qr_code', store=True) + def action_revert_inventory(self): + # 检查用户是否有执行操作的权限 + if not self.env.user.has_group('sf_warehouse.group_sf_stock_user'): + raise UserError(_('抱歉,只有库管人员可以执行此动作')) + + # 如果用户有权限,调用父类方法 + return super(CustomStockMoveLine, self).action_revert_inventory() + @api.depends('lot_name') def _compute_lot_qr_code(self): for record in self: