diff --git a/sf_base/security/ir.model.access.csv b/sf_base/security/ir.model.access.csv index a6c5d78f..188e0e64 100644 --- a/sf_base/security/ir.model.access.csv +++ b/sf_base/security/ir.model.access.csv @@ -31,6 +31,10 @@ access_sf_cutting_tool_material,sf_cutting_tool_material,model_sf_cutting_tool_m access_sf_cutting_tool_material_admin,sf_cutting_tool_material_admin,model_sf_cutting_tool_material,base.group_system,1,1,1,0 access_sf_cutting_tool_type,sf_cutting_tool_type,model_sf_cutting_tool_type,base.group_user,1,1,1,0 access_sf_cutting_tool_type_admin,sf_cutting_tool_type_admin,model_sf_cutting_tool_type,base.group_system,1,1,1,0 +access_sf_cutting_tool_type_group_purchase_director,sf_cutting_tool_type_group_purchase_director,model_sf_cutting_tool_type,sf_base.group_purchase_director,1,1,0,0 +access_sf_cutting_tool_type_group_sale_director,sf_cutting_tool_type_group_sale_director,model_sf_cutting_tool_type,sf_base.group_sale_director,1,1,0,0 +access_sf_cutting_tool_type_group_plan_director,sf_cutting_tool_type_group_plan_director,model_sf_cutting_tool_type,sf_base.group_plan_director,1,1,0,0 + access_sf_functional_cutting_tool,sf_functional_cutting_tool,model_sf_functional_cutting_tool,base.group_user,1,1,1,0 access_sf_functional_cutting_tool_admin,sf_functional_cutting_tool_admin,model_sf_functional_cutting_tool,base.group_system,1,1,1,0 access_sf_functional_cutting_tool_model,sf_functional_cutting_tool_model,model_sf_functional_cutting_tool_model,base.group_user,1,1,1,0 @@ -59,12 +63,12 @@ access_sf_tool_materials_basic_parameters,sf_tool_materials_basic_parameters,mod access_sf_tool_materials_basic_parameters_admin,sf_tool_materials_basic_parameters_admin,model_sf_tool_materials_basic_parameters,base.group_system,1,1,1,0 access_sf_cutting_speed,sf_cutting_speed,model_sf_cutting_speed,base.group_user,1,1,1,0 access_sf_cutting_speed_admin,sf_cutting_speed_admin,model_sf_cutting_speed,base.group_system,1,1,1,0 -access_sf_cutting_speed_group_purchase_director,sf_cutting_speed_group_purchase_director,model_sf_cutting_speed,sf_base.group_purchase_director,1,0,1,0 -access_sf_cutting_speed_group_sale_director,sf_cutting_speed_group_sale_director,model_sf_cutting_speed,sf_base.group_sale_director,1,0,1,0 -access_sf_cutting_speed_group_plan_director,sf_cutting_speed_group_plan_director,model_sf_cutting_speed,sf_base.group_plan_director,1,0,1,0 -access_sf_feed_per_tooth_group_purchase_director,sf_feed_per_tooth_group_purchase_director,model_sf_feed_per_tooth,sf_base.group_purchase_director,1,0,1,0 -access_sf_feed_per_tooth_group_sale_director,sf_feed_per_tooth_group_sale_director,model_sf_feed_per_tooth,sf_base.group_sale_director,1,0,1,0 -access_sf_feed_per_tooth_group_plan_director,sf_feed_per_tooth_group_plan_director,model_sf_feed_per_tooth,sf_base.group_plan_director,1,0,1,0 +access_sf_cutting_speed_group_purchase_director,sf_cutting_speed_group_purchase_director,model_sf_cutting_speed,sf_base.group_purchase_director,1,1,1,0 +access_sf_cutting_speed_group_sale_director,sf_cutting_speed_group_sale_director,model_sf_cutting_speed,sf_base.group_sale_director,1,1,1,0 +access_sf_cutting_speed_group_plan_director,sf_cutting_speed_group_plan_director,model_sf_cutting_speed,sf_base.group_plan_director,1,1,1,0 +access_sf_feed_per_tooth_group_purchase_director,sf_feed_per_tooth_group_purchase_director,model_sf_feed_per_tooth,sf_base.group_purchase_director,1,1,0,0 +access_sf_feed_per_tooth_group_sale_director,sf_feed_per_tooth_group_sale_director,model_sf_feed_per_tooth,sf_base.group_sale_director,1,1,0,0 +access_sf_feed_per_tooth_group_plan_director,sf_feed_per_tooth_group_plan_director,model_sf_feed_per_tooth,sf_base.group_plan_director,1,1,0,0 access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,base.group_user,1,1,1,0 access_sf_feed_per_tooth_admin,sf_feed_per_tooth_admin,model_sf_feed_per_tooth,base.group_system,1,1,1,0 access_sf_ramping_angle,sf_ramping_angle,model_sf_ramping_angle,base.group_user,1,1,1,1 @@ -74,12 +78,21 @@ access_sf_cutting_width_depth_admin,sf_cutting_width_depth_admin,model_sf_cuttin access_sf_machine_tool,sf_machine_tool,model_sf_machine_tool,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_machine_tool_type,sf_machine_tool_type,model_sf_machine_tool_type,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_machine_brand,sf_machine_brand,model_sf_machine_brand,sf_base.group_sf_mrp_user,1,0,0,0 +access_sf_machine_brand_group_plan_director,sf_machine_brand_group_plan_director,model_sf_machine_brand,sf_base.group_plan_director,1,0,0,0 +access_sf_machine_brand_group_purchase_director,sf_machine_brand_group_purchase_director,model_sf_machine_brand,sf_base.group_purchase_director,1,0,0,0 +access_sf_machine_brand_group_sale_director,sf_machine_brand_group_sale_director,model_sf_machine_brand,sf_base.group_sale_director,1,0,0,0 access_sf_machine_brand_tags,sf_machine_brand_tags,model_sf_machine_brand_tags,base.group_user,1,1,1,1 access_sf_machine_control_system,sf_machine_control_system,model_sf_machine_control_system,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_processing_order,sf_processing_order,model_sf_processing_order,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_process,sf_production_process,model_sf_production_process,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_materials,sf_production_materials,model_sf_production_materials,sf_base.group_sf_mrp_user,1,0,0,0 +access_sf_production_materials_group_plan_director,sf_production_materials_group_plan_director,model_sf_production_materials,sf_base.group_plan_director,1,1,0,0 +access_sf_production_materials_group_purchase_director,sf_production_materials_group_purchase_director,model_sf_production_materials,sf_base.group_purchase_director,1,1,0,0 +access_sf_production_materials_group_sale_director,sf_production_materials_group_sale_director,model_sf_production_materials,sf_base.group_sale_director,1,1,0,0 access_sf_materials_model,sf_materials_model,model_sf_materials_model,sf_base.group_sf_mrp_user,1,0,0,0 +access_sf_materials_model_group_plan_director,sf_materials_model_group_plan_director,model_sf_materials_model,sf_base.group_plan_director,1,0,0,0 +access_sf_materials_model_group_purchase_director,sf_materials_model_group_purchase_director,model_sf_materials_model,sf_base.group_purchase_director,1,0,0,0 +access_sf_materials_model_group_sale_director,sf_materials_model_group_sale_director,model_sf_materials_model,sf_base.group_sale_director,1,0,0,0 access_sf_processing_technology,sf_processing_technology,model_sf_processing_technology,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_supplier_sort,sf_supplier_sort,model_sf_supplier_sort,sf_base.group_sf_mrp_user,1,0,0,0 access_sf_production_process_parameter,sf_production_process_parameter,model_sf_production_process_parameter,sf_base.group_sf_mrp_user,1,0,0,0 @@ -112,9 +125,16 @@ access_sf_tool_materials_basic_parameters_group_plan_director,sf_tool_materials_ access_sf_tool_materials_basic_parameters_group_purchase_director,sf_tool_materials_basic_parameters_group_purchase_director,model_sf_tool_materials_basic_parameters,sf_base.group_purchase_director,1,0,1,0 access_sf_cutting_speed,sf_cutting_speed,model_sf_cutting_speed,sf_base.group_sf_mrp_user,1,0,0,0 +access_sf_cutting_speed_group_purchase,sf_cutting_speed_group_purchase,model_sf_cutting_speed,sf_base.group_purchase,1,0,0,0 +access_sf_cutting_speed_group_sale_salemanager,sf_cutting_speed_group_sale_salemanager,model_sf_cutting_speed,sf_base.group_sale_salemanager,1,0,0,0 + + access_sf_feed_per_tooth,sf_feed_per_tooth,model_sf_feed_per_tooth,sf_base.group_sf_mrp_user,1,0,0,0 +access_sf_feed_per_tooth_group_purchase,sf_feed_per_tooth_group_purchase,model_sf_feed_per_tooth,sf_base.group_purchase,1,0,0,0 access_sf_ramping_angle,sf_ramping_angle,model_sf_ramping_angle,sf_base.group_sf_mrp_user,1,0,0,0 +access_sf_ramping_angle_group_purchase,sf_ramping_angle_group_purchase,model_sf_ramping_angle,sf_base.group_purchase,1,0,0,0 access_sf_cutting_width_depth,sf_cutting_width_depth,model_sf_cutting_width_depth,sf_base.group_sf_mrp_user,1,0,0,0 +access_sf_cutting_width_depth_group_purchase,sf_cutting_width_depth_group_purchase,model_sf_cutting_width_depth,sf_base.group_purchase,1,0,0,0 access_maintenance_equipment_image,maintenance_equipment_image,model_maintenance_equipment_image,base.group_user,1,1,1,1 access_purchase_order_group_purchase,access_purchase_order_group_purchase,purchase.model_purchase_order,sf_base.group_purchase,1,1,1,0 @@ -154,12 +174,6 @@ access_sf_functional_cutting_tool,sf_functional_cutting_tool,model_sf_functional access_sf_functional_cutting_tool_model,sf_functional_cutting_tool_model,model_sf_functional_cutting_tool_model,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_fixture_material,sf_fixture_material,model_sf_fixture_material,sf_base.group_sf_mrp_user,1,1,0,0 access_sf_fixture_materials_basic_parameters,sf_fixture_materials_basic_parameters,model_sf_fixture_materials_basic_parameters,sf_base.group_sf_mrp_user,1,1,0,0 - - - - - - - - +access_mrp_production_group_sale_salemanager,mrp_production_group_sale_salemanager,mrp.model_mrp_production,sf_base.group_sale_salemanager,1,0,0,0 +access_mrp_production_group_sale_director,mrp_production_group_sale_director,mrp.model_mrp_production,sf_base.group_sale_director,1,0,0,0 diff --git a/sf_manufacturing/models/product_template.py b/sf_manufacturing/models/product_template.py index b9209d57..efabad99 100644 --- a/sf_manufacturing/models/product_template.py +++ b/sf_manufacturing/models/product_template.py @@ -259,7 +259,7 @@ class ResProductMo(models.Model): self.cutting_tool_main_included_angle = self.specification_id.main_included_angle self.cutting_tool_top_angle = self.specification_id.top_angle self.cutting_tool_screw = self.specification_id.screw - self.cutting_tool_wrench = self.specification_id.wrench + self.cutting_tool_wrench = self.specification_id.spanner self.cutting_tool_blade_id = self.specification_id.blade_id.id self.cutting_tool_is_cooling_hole = self.specification_id.is_cooling_hole self.cutting_tool_locating_slot_code = self.specification_id.locating_slot_code diff --git a/sf_manufacturing/security/ir.model.access.csv b/sf_manufacturing/security/ir.model.access.csv index 2dd36758..345407ac 100644 --- a/sf_manufacturing/security/ir.model.access.csv +++ b/sf_manufacturing/security/ir.model.access.csv @@ -23,6 +23,8 @@ access_mrp_workcenter_manager,mrp_workcenter,model_mrp_workcenter,sf_base.group_ access_mrp_workcenter_productivity,mrp_workcenter_productivity,model_mrp_workcenter_productivity,sf_base.group_sf_mrp_user,1,0,0,0 access_mrp_workcenter_productivity_manager,mrp_workcenter_productivity,model_mrp_workcenter_productivity,sf_base.group_sf_mrp_manager,1,1,1,0 access_sf_workpiece_delivery_group_sf_order_user,sf_workpiece_delivery_group_sf_order_user,model_sf_workpiece_delivery,sf_base.group_sf_order_user,1,1,0,0 +access_sf_workpiece_delivery_group_sf_equipment_user,sf_workpiece_delivery_group_sf_equipment_user,model_sf_workpiece_delivery,sf_base.group_sf_equipment_user,1,1,0,0 + access_sf_workpiece_delivery_manager,sf_workpiece_delivery,model_sf_workpiece_delivery,sf_base.group_sf_mrp_manager,1,1,0,0 access_sf_workpiece_delivery_admin,sf_workpiece_delivery_admin,model_sf_workpiece_delivery,base.group_system,1,1,1,0 access_sf_workpiece_delivery_wizard_group_sf_order_user,sf_workpiece_delivery_wizard_group_sf_order_user,model_sf_workpiece_delivery_wizard,sf_base.group_sf_order_user,1,1,1,0 @@ -40,6 +42,10 @@ access_mrp_workcenter_manager,mrp.workcenter.manager,mrp.model_mrp_workcenter,sf access_mrp_routing_workcenter_manager,mrp.routing.workcenter.manager,mrp.model_mrp_routing_workcenter,sf_base.group_sf_mrp_user,1,1,1,0 access_mrp_bom_manager,mrp.bom.manager,mrp.model_mrp_bom,sf_base.group_sf_mrp_user,1,1,1,0 access_mrp_bom_line_manager,mrp.bom.line.manager,mrp.model_mrp_bom_line,sf_base.group_sf_mrp_user,1,1,1,0 +access_mrp_bom_line_group_plan_director,mrp_bom_line_group_plan_director,mrp.model_mrp_bom_line,sf_base.group_plan_director,1,1,1,0 +access_mrp_bom_line_group_sale_director,mrp_bom_line_group_sale_director,mrp.model_mrp_bom_line,sf_base.group_sale_director,1,1,1,0 +access_mrp_bom_line_group_purchase_director,mrp_bom_line_group_purchase_director,mrp.model_mrp_bom_line,sf_base.group_purchase_director,1,1,1,0 + access_mrp_bom_byproduct_manager,mrp.bom.byproduct manager,mrp.model_mrp_bom_byproduct,sf_base.group_sf_mrp_user,1,1,1,0 access_mrp_production_stock_worker,mrp.production stock_worker,mrp.model_mrp_production,stock.group_stock_user,1,0,0,0 access_product_product_user,product.product user,product.model_product_product,sf_base.group_sf_mrp_user,1,0,0,0 diff --git a/sf_mrs_connect/models/sync_common.py b/sf_mrs_connect/models/sync_common.py index 334e6f8b..66bf6e14 100644 --- a/sf_mrs_connect/models/sync_common.py +++ b/sf_mrs_connect/models/sync_common.py @@ -382,7 +382,8 @@ class sfProcessingTechnology(models.Model): if result['status'] == 1: for item in result['processing_technology_yesterday_list']: if item: - processing_technology = self.search([("code", '=', item['process_encode']), ('active', 'in', [True, False])]) + processing_technology = self.search( + [("code", '=', item['process_encode']), ('active', 'in', [True, False])]) if processing_technology: processing_technology.name = item['name'] processing_technology.remark = item['remark'] @@ -408,7 +409,8 @@ class sfProcessingTechnology(models.Model): if result['status'] == 1: for item in result['processing_technology_all_list']: if item: - processing_technology = self.search([("code", '=', item['process_encode']), ('active', 'in', [True, False])]) + processing_technology = self.search( + [("code", '=', item['process_encode']), ('active', 'in', [True, False])]) if not processing_technology: self.create({ "name": item['name'], @@ -2092,7 +2094,7 @@ class CuttingWidthDepth(models.Model): result = json.loads(r['result']) if result['status'] == 1: for item in result['cutting_width_depth_yesterday_list']: - cutting_width_depth = self.search([("name", '=', item['name']), ('active', 'in', [True, False])]) + cutting_width_depth = self.search([("name", '=', item['name'])]) if not cutting_width_depth: self.create({ 'name': item['name'], @@ -2109,7 +2111,7 @@ class CuttingWidthDepth(models.Model): result = json.loads(r['result']) if result['status'] == 1: for item in result['cutting_width_depth_all_list']: - cutting_width_depth = self.search([("name", '=', item['name']), ('active', 'in', [True, False])]) + cutting_width_depth = self.search([("name", '=', item['name'])]) if not cutting_width_depth: self.create({ 'name': item['name'], @@ -2216,8 +2218,8 @@ class Cutting_tool_standard_library(models.Model): if result['status'] == 1: for item in result['cutting_tool_standard_library_yesterday_list']: cutting_tool_standard_library = self.search( - [("code", '=', item['code'].replace("JKM", result['factory_short_name']), - ('active', 'in', [True, False]))]) + [("code", '=', item['code'].replace("JKM", result['factory_short_name'])), + ('active', 'in', [True, False])]) cutting_tool_type = self.env['sf.cutting.tool.type'].search( [("code", '=', item['cutting_tool_type_code'])]) cutting_tool_material = self.env['sf.cutting.tool.material'].search( @@ -2323,8 +2325,8 @@ class Cutting_tool_standard_library(models.Model): if result['status'] == 1: for item in result['cutting_tool_standard_library_all_list']: cutting_tool_standard_library = self.search( - [("code", '=', item['code'].replace("JKM", result['factory_short_name']), - ('active', 'in', [True, False]))]) + [("code", '=', item['code'].replace("JKM", result['factory_short_name'])), + ("active", 'in', [True, False])]) cutting_tool_type = self.env['sf.cutting.tool.type'].search( [("code", '=', item['cutting_tool_type_code'])]) cutting_tool_material = self.env['sf.cutting.tool.material'].search( @@ -2434,394 +2436,39 @@ class CuttingToolBasicParameters(models.Model): r = r.json() result = json.loads(r['result']) if result['status'] == 1: - basic_parameters_integral_tool_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_integral_tool']) - if basic_parameters_integral_tool_list: - for integral_tool_item in basic_parameters_integral_tool_list: - integral_tool = self.search( - [('code', '=', integral_tool_item['code']), ('active', 'in', [True, False])]) - if not integral_tool: - self.create({ - 'name': integral_tool_item['name'], - 'code': integral_tool_item['code'], - '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, - 'total_length': integral_tool_item['total_length'], - 'blade_diameter': integral_tool_item['blade_diameter'], - 'blade_length': integral_tool_item['blade_length'], - 'blade_number': integral_tool_item['blade_number'], - 'neck_length': integral_tool_item['neck_length'], - 'neck_diameter': integral_tool_item['neck_diameter'], - 'handle_diameter': integral_tool_item['shank_diameter'], - 'handle_length': integral_tool_item['shank_length'], - 'blade_tip_diameter': integral_tool_item['tip_diameter'], - 'blade_tip_working_size': integral_tool_item['tip_handling_size'], - 'blade_tip_taper': integral_tool_item['knife_tip_taper'], - 'blade_helix_angle': integral_tool_item['blade_helix_angle'], - 'blade_width': integral_tool_item['blade_width'], - 'blade_depth': integral_tool_item['blade_depth'], - 'pitch': integral_tool_item['pitch'], - 'cutting_depth': integral_tool_item['cutting_depth_max'], - 'active': integral_tool_item['active'], - }) - else: - self.write({ - 'name': integral_tool_item['name'], - 'total_length': integral_tool_item['total_length'], - 'blade_diameter': integral_tool_item['blade_diameter'], - 'blade_length': integral_tool_item['blade_length'], - 'blade_number': integral_tool_item['blade_number'], - 'neck_length': integral_tool_item['neck_length'], - 'neck_diameter': integral_tool_item['neck_diameter'], - 'handle_diameter': integral_tool_item['shank_diameter'], - 'handle_length': integral_tool_item['shank_length'], - 'blade_tip_diameter': integral_tool_item['tip_diameter'], - 'blade_tip_working_size': integral_tool_item['tip_handling_size'], - 'blade_tip_taper': integral_tool_item['knife_tip_taper'], - 'blade_helix_angle': integral_tool_item['blade_helix_angle'], - 'blade_width': integral_tool_item['blade_width'], - 'blade_depth': integral_tool_item['blade_depth'], - 'pitch': integral_tool_item['pitch'], - 'cutting_depth': integral_tool_item['cutting_depth_max'], - 'active': integral_tool_item['active'], - }) - basic_parameters_blade_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_blade']) - if basic_parameters_blade_list: - for blade_item in basic_parameters_blade_list: - blade = self.search([('code', '=', blade_item['code']), ('active', 'in', [True, False])]) - if not blade: - self.create({ - 'name': blade_item['name'], - 'code': blade_item['code'], - 'cutting_tool_type': '刀片', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', blade_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'length': blade_item['length'], - 'thickness': blade_item['thickness'], - 'cutting_blade_length': blade_item['cutting_blade_length'], - 'relief_angle': blade_item['relief_angle'], - 'blade_tip_circular_arc_radius': blade_item['radius_tip_re'], - 'inscribed_circle_diameter': blade_item['diameter_inner_circle'], - 'install_aperture_diameter': blade_item['diameter_mounting_hole'], - 'pitch': blade_item['pitch'], - 'chip_breaker_groove': blade_item['is_chip_breaker'], - 'chip_breaker_type_code': blade_item['chip_breaker_type_code'], - 'blade_teeth_model': '无' if not blade_item['blade_profile'] else blade_item[ - 'blade_profile'], - 'blade_blade_number': blade_item['blade_number'], - 'cutting_depth': blade_item['cutting_depth_max'], - 'blade_width': blade_item['blade_width'], - 'main_included_angle': blade_item['edge_angle'], - 'top_angle': blade_item['top_angle'], - 'thread_model': '无' if not blade_item['thread_type'] else blade_item['thread_type'], - 'thread_num': blade_item['threads_per_inch'], - 'blade_tip_height_tolerance': blade_item['tip_height_tolerance'], - 'inscribed_circle_tolerance': blade_item['internal_circle_tolerance'], - 'thickness_tolerance': blade_item['thickness_tolerance'], - 'active': blade_item['active'], - }) - else: - self.write({ - 'name': integral_tool_item['name'], - 'length': blade_item['length'], - 'thickness': blade_item['thickness'], - 'cutting_blade_length': blade_item['cutting_blade_length'], - 'relief_angle': blade_item['relief_angle'], - 'blade_tip_circular_arc_radius': blade_item['radius_tip_re'], - 'inscribed_circle_diameter': blade_item['diameter_inner_circle'], - 'install_aperture_diameter': blade_item['diameter_mounting_hole'], - 'pitch': blade_item['pitch'], - 'chip_breaker_groove': blade_item['is_chip_breaker'], - 'chip_breaker_type_code': blade_item['chip_breaker_type_code'], - 'blade_teeth_model': '无' if not blade_item['blade_profile'] else blade_item[ - 'blade_profile'], - 'blade_blade_number': blade_item['blade_number'], - 'cutting_depth': blade_item['cutting_depth_max'], - 'blade_width': blade_item['blade_width'], - 'main_included_angle': blade_item['edge_angle'], - 'top_angle': blade_item['top_angle'], - 'thread_model': '无' if not blade_item['thread_type'] else blade_item['thread_type'], - 'thread_num': blade_item['threads_per_inch'], - 'blade_tip_height_tolerance': blade_item['tip_height_tolerance'], - 'inscribed_circle_tolerance': blade_item['internal_circle_tolerance'], - 'thickness_tolerance': blade_item['thickness_tolerance'], - 'active': blade_item['active'], - }) - basic_parameters_chuck_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_chuck']) - if basic_parameters_chuck_list: - for chuck_item in basic_parameters_chuck_list: - chuck = self.search([('code', '=', chuck_item['code']), ('active', 'in', [True, False])]) - if not chuck: - self.create({ - 'name': chuck_item['name'], - 'code': chuck_item['code'], - 'cutting_tool_type': '夹头', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', chuck_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'er_size_model': chuck_item['size_model'], - 'min_clamping_diameter': chuck_item['clamping_diameter_min'], - 'max_clamping_diameter': chuck_item['clamping_diameter_max'], - 'outer_diameter': chuck_item['outer_diameter'], - 'inner_diameter': chuck_item['inner_diameter'], - 'run_out_accuracy': chuck_item['run_out_accuracy'], - 'total_length': chuck_item['total_length'], - 'taper': chuck_item['taper'], - 'top_diameter': chuck_item['top_diameter'], - 'weight': chuck_item['weight'], - 'max_load_capacity': chuck_item['load_capacity_max'], - 'cooling_jacket': chuck_item['cooling_sleeve_model'], - 'active': chuck_item['active'], - }) - else: - self.write({ - 'name': integral_tool_item['name'], - 'er_size_model': chuck_item['size_model'], - 'min_clamping_diameter': chuck_item['clamping_diameter_min'], - 'max_clamping_diameter': chuck_item['clamping_diameter_max'], - 'outer_diameter': chuck_item['outer_diameter'], - 'inner_diameter': chuck_item['inner_diameter'], - 'run_out_accuracy': chuck_item['run_out_accuracy'], - 'total_length': chuck_item['total_length'], - 'taper': chuck_item['taper'], - 'top_diameter': chuck_item['top_diameter'], - 'weight': chuck_item['weight'], - 'max_load_capacity': chuck_item['load_capacity_max'], - 'cooling_jacket': chuck_item['cooling_sleeve_model'], - 'active': chuck_item['active'], - }) - basic_parameters_cutter_arbor_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_cutter_arbor']) - if basic_parameters_cutter_arbor_list: - for cutter_arbor_item in basic_parameters_cutter_arbor_list: - cutter_arbor = self.search( - [('code', '=', cutter_arbor_item['code']), ('active', 'in', [True, False])]) - if not cutter_arbor: - self.create({ - 'name': cutter_arbor_item['name'], - 'code': cutter_arbor_item['code'], - 'cutting_tool_type': '刀杆', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_arbor_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'height': cutter_arbor_item['height'], - 'width': cutter_arbor_item['width'], - 'total_length': cutter_arbor_item['total_length'], - 'knife_head_height': cutter_arbor_item['head_length'], - 'knife_head_width': cutter_arbor_item['head_width'], - 'knife_head_length': cutter_arbor_item['head_length'], - 'cutter_arbor_diameter': cutter_arbor_item['arbor_diameter'], - 'main_included_angle': cutter_arbor_item['edge_angle'], - 'relief_angle': cutter_arbor_item['relief_angle'], - 'cutting_depth': cutter_arbor_item['cutting_depth_max'], - 'min_machining_aperture': cutter_arbor_item['machining_aperture_min'], - 'install_blade_tip_num': cutter_arbor_item['number_blade_installed'], - 'is_cooling_hole': cutter_arbor_item['is_cooling_hole'], - 'locating_slot_code': cutter_arbor_item['locator_slot_code'], - 'installing_structure': cutter_arbor_item['mounting_structure'], - 'blade_id': False if not cutter_arbor_item['fit_blade_model_code'] else self.env[ - 'sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_arbor_item['fit_blade_model_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'tool_shim': cutter_arbor_item['fit_knife_pad_model'], - 'cotter_pin': cutter_arbor_item['fit_pin_model'], - 'pressing_plate': cutter_arbor_item['fit_plate_model'], - 'screw': cutter_arbor_item['fit_screw_model'], - 'spanner': cutter_arbor_item['fit_wrench_model'], - 'active': cutter_arbor_item['active'], - }) - else: - self.write({ - 'name': cutter_arbor_item['name'], - 'height': cutter_arbor_item['height'], - 'width': cutter_arbor_item['width'], - 'total_length': cutter_arbor_item['total_length'], - 'knife_head_height': cutter_arbor_item['head_length'], - 'knife_head_width': cutter_arbor_item['head_width'], - 'knife_head_length': cutter_arbor_item['head_length'], - 'cutter_arbor_diameter': cutter_arbor_item['arbor_diameter'], - 'main_included_angle': cutter_arbor_item['edge_angle'], - 'relief_angle': cutter_arbor_item['relief_angle'], - 'cutting_depth': cutter_arbor_item['cutting_depth_max'], - 'min_machining_aperture': cutter_arbor_item['machining_aperture_min'], - 'install_blade_tip_num': cutter_arbor_item['number_blade_installed'], - 'is_cooling_hole': cutter_arbor_item['is_cooling_hole'], - 'locating_slot_code': cutter_arbor_item['locator_slot_code'], - 'installing_structure': cutter_arbor_item['mounting_structure'], - 'blade_id': False if not cutter_arbor_item['fit_blade_model_code'] else self.env[ - 'sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_arbor_item['fit_blade_model_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'tool_shim': cutter_arbor_item['fit_knife_pad_model'], - 'cotter_pin': cutter_arbor_item['fit_pin_model'], - 'pressing_plate': cutter_arbor_item['fit_plate_model'], - 'screw': cutter_arbor_item['fit_screw_model'], - 'spanner': cutter_arbor_item['fit_wrench_model'], - 'active': cutter_arbor_item['active'], - }) - basic_parameters_cutter_head_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_cutter_head']) - if basic_parameters_cutter_head_list: - for cutter_head_item in basic_parameters_cutter_head_list: - cutter_head = self.search( - [('code', '=', cutter_head_item['code']), ('active', 'in', [True, False])]) - if not cutter_head: - self.create({ - 'name': cutter_head_item['name'], - 'code': cutter_head_item['code'], - 'cutting_tool_type': '刀盘', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_head_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'install_blade_tip_num': cutter_head_item['number_blade_installed'], - 'blade_diameter': cutter_head_item['blade_diameter'], - 'cutter_head_diameter': cutter_head_item['cutter_diameter'], - 'interface_diameter': cutter_head_item['interface_diameter'], - 'total_length': cutter_head_item['total_length'], - 'blade_length': cutter_head_item['blade_length'], - 'cutting_depth': cutter_head_item['cutting_depth_max'], - 'main_included_angle': cutter_head_item['edge_angle'], - 'installing_structure': cutter_head_item['mounting_structure'], - 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ - 'sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_head_item['fit_blade_model_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'screw': cutter_head_item['fit_screw_model'], - 'spanner': cutter_head_item['fit_wrench_model'], - 'is_cooling_hole': cutter_head_item['is_cooling_hole'], - 'locating_slot_code': cutter_head_item['locator_slot_code'], - 'active': cutter_head_item['active'], - }) - else: - self.write({ - 'name': cutter_head_item['name'], - 'install_blade_tip_num': cutter_head_item['number_blade_installed'], - 'blade_diameter': cutter_head_item['blade_diameter'], - 'cutter_head_diameter': cutter_head_item['cutter_diameter'], - 'interface_diameter': cutter_head_item['interface_diameter'], - 'total_length': cutter_head_item['total_length'], - 'blade_length': cutter_head_item['blade_length'], - 'cutting_depth': cutter_head_item['cutting_depth_max'], - 'main_included_angle': cutter_head_item['edge_angle'], - 'installing_structure': cutter_head_item['mounting_structure'], - 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ - 'sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_head_item['fit_blade_model_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'screw': cutter_head_item['fit_screw_model'], - 'spanner': cutter_head_item['fit_wrench_model'], - 'is_cooling_hole': cutter_head_item['is_cooling_hole'], - 'locating_slot_code': cutter_head_item['locator_slot_code'], - 'active': cutter_head_item['active'], - }) - basic_parameters_knife_handle_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_knife_handle']) - if basic_parameters_knife_handle_list: - for knife_handle_item in basic_parameters_knife_handle_list: - knife_handle = self.search( - [('code', '=', knife_handle_item['code']), ('active', 'in', [True, False])]) - if not knife_handle: - self.create({ - 'name': knife_handle_item['name'], - 'code': knife_handle_item['code'], - 'cutting_tool_type': '刀柄', - 'taper_shank_model': knife_handle_item['taper_shank_model'], - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', knife_handle_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'total_length': knife_handle_item['total_length'], - 'flange_shank_length': knife_handle_item['flange_length'], - 'flange_diameter': knife_handle_item['flange_diameter'], - 'shank_length': knife_handle_item['shank_length'], - 'shank_diameter': knife_handle_item['shank_diameter'], - 'min_clamping_diameter': knife_handle_item['clamping_diameter_min'], - 'max_clamping_diameter': knife_handle_item['clamping_diameter_max'], - 'clamping_mode': knife_handle_item['clamping_way'], - 'tool_changing_time': knife_handle_item['tool_changing_time'], - 'max_rotate_speed': knife_handle_item['rotate_speed_max'], - 'diameter_slip_accuracy': knife_handle_item['diameter_slip_accuracy'], - 'cooling_model': knife_handle_item['cooling_model'], - 'is_quick_cutting': knife_handle_item['is_quick_cutting'], - 'is_safe_lock': knife_handle_item['is_safe_lock'], - 'screw': knife_handle_item['fit_wrench_model'], - 'nut': knife_handle_item['fit_nut_model'], - 'dynamic_balance_class': knife_handle_item['dynamic_balance_class'], - 'active': knife_handle_item['active'], - }) - else: - self.write({ - 'name': knife_handle_item['name'], - 'taper_shank_model': knife_handle_item['taper_shank_model'], - 'total_length': knife_handle_item['total_length'], - 'flange_shank_length': knife_handle_item['flange_length'], - 'flange_diameter': knife_handle_item['flange_diameter'], - 'shank_length': knife_handle_item['shank_length'], - 'shank_diameter': knife_handle_item['shank_diameter'], - 'min_clamping_diameter': knife_handle_item['clamping_diameter_min'], - 'max_clamping_diameter': knife_handle_item['clamping_diameter_max'], - 'clamping_mode': knife_handle_item['clamping_way'], - 'tool_changing_time': knife_handle_item['tool_changing_time'], - 'max_rotate_speed': knife_handle_item['rotate_speed_max'], - 'diameter_slip_accuracy': knife_handle_item['diameter_slip_accuracy'], - 'cooling_model': knife_handle_item['cooling_model'], - 'is_quick_cutting': knife_handle_item['is_quick_cutting'], - 'is_safe_lock': knife_handle_item['is_safe_lock'], - 'screw': knife_handle_item['fit_wrench_model'], - 'nut': knife_handle_item['fit_nut_model'], - 'dynamic_balance_class': knife_handle_item['dynamic_balance_class'], - 'active': knife_handle_item['active'], - }) - else: - raise ValidationError("刀具物料基本参数认证未通过") - - def sync_cutting_tool_basic_parameters_yesterday(self): - config = self.env['res.config.settings'].get_values() - headers = Common.get_headers(self, config['token'], config['sf_secret_key']) - strUrl = config['sf_url'] + self.url - r = requests.post(strUrl, json={}, data=None, headers=headers) - r = r.json() - result = json.loads(r['result']) - if result['status'] == 1: - basic_parameters_integral_tool_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_integral_tool']) - if basic_parameters_integral_tool_list: - for integral_tool_item in basic_parameters_integral_tool_list: - integral_tool = self.search( - [('code', '=', integral_tool_item['code']), ('active', 'in', [True, False])]) - if not integral_tool: - self.create({ - 'name': integral_tool_item['name'], - 'code': integral_tool_item['code'], - '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, - 'total_length': integral_tool_item['total_length'], - 'blade_diameter': integral_tool_item['blade_diameter'], - 'blade_length': integral_tool_item['blade_length'], - 'blade_number': integral_tool_item['blade_number'], - 'neck_length': integral_tool_item['neck_length'], - 'neck_diameter': integral_tool_item['neck_diameter'], - 'handle_diameter': integral_tool_item['shank_diameter'], - 'handle_length': integral_tool_item['shank_length'], - 'blade_tip_diameter': integral_tool_item['tip_diameter'], - 'blade_tip_working_size': integral_tool_item['tip_handling_size'], - 'blade_tip_taper': integral_tool_item['knife_tip_taper'], - 'blade_helix_angle': integral_tool_item['blade_helix_angle'], - 'blade_width': integral_tool_item['blade_width'], - 'blade_depth': integral_tool_item['blade_depth'], - 'pitch': integral_tool_item['pitch'], - 'cutting_depth': integral_tool_item['cutting_depth_max'], - 'active': integral_tool_item['active'], - }) - else: - if integral_tool_item['active'] is False: - integral_tool.write({'active': False}) + if 'basic_parameters_integral_tool' in result['cutting_tool_basic_parameters_all_list']: + basic_parameters_integral_tool_list = json.loads( + result['cutting_tool_basic_parameters_all_list']['basic_parameters_integral_tool']) + if basic_parameters_integral_tool_list: + for integral_tool_item in basic_parameters_integral_tool_list: + integral_tool = self.search( + [('code', '=', integral_tool_item['code']), ('active', 'in', [True, False])]) + if not integral_tool: + self.create({ + 'name': integral_tool_item['name'], + 'code': integral_tool_item['code'], + '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, + 'total_length': integral_tool_item['total_length'], + 'blade_diameter': integral_tool_item['blade_diameter'], + 'blade_length': integral_tool_item['blade_length'], + 'blade_number': integral_tool_item['blade_number'], + 'neck_length': integral_tool_item['neck_length'], + 'neck_diameter': integral_tool_item['neck_diameter'], + 'handle_diameter': integral_tool_item['shank_diameter'], + 'handle_length': integral_tool_item['shank_length'], + 'blade_tip_diameter': integral_tool_item['tip_diameter'], + 'blade_tip_working_size': integral_tool_item['tip_handling_size'], + 'blade_tip_taper': integral_tool_item['knife_tip_taper'], + 'blade_helix_angle': integral_tool_item['blade_helix_angle'], + 'blade_width': integral_tool_item['blade_width'], + 'blade_depth': integral_tool_item['blade_depth'], + 'pitch': integral_tool_item['pitch'], + 'cutting_depth': integral_tool_item['cutting_depth_max'], + 'active': integral_tool_item['active'], + }) else: self.write({ 'name': integral_tool_item['name'], @@ -2843,49 +2490,20 @@ class CuttingToolBasicParameters(models.Model): 'cutting_depth': integral_tool_item['cutting_depth_max'], 'active': integral_tool_item['active'], }) - basic_parameters_blade_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_blade']) - if basic_parameters_blade_list: - for blade_item in basic_parameters_blade_list: - blade = self.search([('code', '=', blade_item['code']), ('active', 'in', [True, False])]) - if not blade: - self.create({ - 'name': blade_item['name'], - 'code': blade_item['code'], - 'cutting_tool_type': '刀片', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', blade_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'length': blade_item['length'], - 'thickness': blade_item['thickness'], - 'cutting_blade_length': blade_item['cutting_blade_length'], - 'relief_angle': blade_item['relief_angle'], - 'blade_tip_circular_arc_radius': blade_item['radius_tip_re'], - 'inscribed_circle_diameter': blade_item['diameter_inner_circle'], - 'install_aperture_diameter': blade_item['diameter_mounting_hole'], - 'pitch': blade_item['pitch'], - 'chip_breaker_groove': blade_item['is_chip_breaker'], - 'chip_breaker_type_code': blade_item['chip_breaker_type_code'], - 'blade_teeth_model': '无' if not blade_item['blade_profile'] else blade_item[ - 'blade_profile'], - 'blade_blade_number': blade_item['blade_number'], - 'cutting_depth': blade_item['cutting_depth_max'], - 'blade_width': blade_item['blade_width'], - 'main_included_angle': blade_item['edge_angle'], - 'top_angle': blade_item['top_angle'], - 'thread_model': '无' if not blade_item['thread_type'] else blade_item['thread_type'], - 'thread_num': blade_item['threads_per_inch'], - 'blade_tip_height_tolerance': blade_item['tip_height_tolerance'], - 'inscribed_circle_tolerance': blade_item['internal_circle_tolerance'], - 'thickness_tolerance': blade_item['thickness_tolerance'], - 'active': blade_item['active'], - }) - else: - if blade_item['active'] is False: - blade.write({'active': False}) - else: - self.write({ + if 'basic_parameters_blade' in result['cutting_tool_basic_parameters_all_list']: + basic_parameters_blade_list = json.loads( + result['cutting_tool_basic_parameters_all_list']['basic_parameters_blade']) + if basic_parameters_blade_list: + for blade_item in basic_parameters_blade_list: + blade = self.search([('code', '=', blade_item['code']), ('active', 'in', [True, False])]) + if not blade: + self.create({ 'name': blade_item['name'], + 'code': blade_item['code'], + 'cutting_tool_type': '刀片', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', blade_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'length': blade_item['length'], 'thickness': blade_item['thickness'], 'cutting_blade_length': blade_item['cutting_blade_length'], @@ -2908,40 +2526,49 @@ class CuttingToolBasicParameters(models.Model): 'blade_tip_height_tolerance': blade_item['tip_height_tolerance'], 'inscribed_circle_tolerance': blade_item['internal_circle_tolerance'], 'thickness_tolerance': blade_item['thickness_tolerance'], + 'active': blade_item['active'], }) - basic_parameters_chuck_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_chuck']) - if basic_parameters_chuck_list: - for chuck_item in basic_parameters_chuck_list: - chuck = self.search([('code', '=', chuck_item['code']), ('active', 'in', [True, False])]) - if not chuck: - self.create({ - 'name': chuck_item['name'], - 'code': chuck_item['code'], - 'cutting_tool_type': '夹头', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', chuck_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'er_size_model': chuck_item['size_model'], - 'min_clamping_diameter': chuck_item['clamping_diameter_min'], - 'max_clamping_diameter': chuck_item['clamping_diameter_max'], - 'outer_diameter': chuck_item['outer_diameter'], - 'inner_diameter': chuck_item['inner_diameter'], - 'run_out_accuracy': chuck_item['run_out_accuracy'], - 'total_length': chuck_item['total_length'], - 'taper': chuck_item['taper'], - 'top_diameter': chuck_item['top_diameter'], - 'weight': chuck_item['weight'], - 'max_load_capacity': chuck_item['load_capacity_max'], - 'cooling_jacket': chuck_item['cooling_sleeve_model'], - 'active': chuck_item['active'], - }) - else: - if chuck_item['active'] is False: - chuck.write({'active': False}) else: self.write({ + 'name': integral_tool_item['name'], + 'length': blade_item['length'], + 'thickness': blade_item['thickness'], + 'cutting_blade_length': blade_item['cutting_blade_length'], + 'relief_angle': blade_item['relief_angle'], + 'blade_tip_circular_arc_radius': blade_item['radius_tip_re'], + 'inscribed_circle_diameter': blade_item['diameter_inner_circle'], + 'install_aperture_diameter': blade_item['diameter_mounting_hole'], + 'pitch': blade_item['pitch'], + 'chip_breaker_groove': blade_item['is_chip_breaker'], + 'chip_breaker_type_code': blade_item['chip_breaker_type_code'], + 'blade_teeth_model': '无' if not blade_item['blade_profile'] else blade_item[ + 'blade_profile'], + 'blade_blade_number': blade_item['blade_number'], + 'cutting_depth': blade_item['cutting_depth_max'], + 'blade_width': blade_item['blade_width'], + 'main_included_angle': blade_item['edge_angle'], + 'top_angle': blade_item['top_angle'], + 'thread_model': '无' if not blade_item['thread_type'] else blade_item['thread_type'], + 'thread_num': blade_item['threads_per_inch'], + 'blade_tip_height_tolerance': blade_item['tip_height_tolerance'], + 'inscribed_circle_tolerance': blade_item['internal_circle_tolerance'], + 'thickness_tolerance': blade_item['thickness_tolerance'], + 'active': blade_item['active'], + }) + if 'basic_parameters_chuck' in result['cutting_tool_basic_parameters_all_list']: + basic_parameters_chuck_list = json.loads( + result['cutting_tool_basic_parameters_all_list']['basic_parameters_chuck']) + if basic_parameters_chuck_list: + for chuck_item in basic_parameters_chuck_list: + chuck = self.search([('code', '=', chuck_item['code']), ('active', 'in', [True, False])]) + if not chuck: + self.create({ 'name': chuck_item['name'], + 'code': chuck_item['code'], + 'cutting_tool_type': '夹头', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', chuck_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'er_size_model': chuck_item['size_model'], 'min_clamping_diameter': chuck_item['clamping_diameter_min'], 'max_clamping_diameter': chuck_item['clamping_diameter_max'], @@ -2954,50 +2581,66 @@ class CuttingToolBasicParameters(models.Model): 'weight': chuck_item['weight'], 'max_load_capacity': chuck_item['load_capacity_max'], 'cooling_jacket': chuck_item['cooling_sleeve_model'], + 'active': chuck_item['active'], + }) + else: + self.write({ + 'name': integral_tool_item['name'], + 'er_size_model': chuck_item['size_model'], + 'min_clamping_diameter': chuck_item['clamping_diameter_min'], + 'max_clamping_diameter': chuck_item['clamping_diameter_max'], + 'outer_diameter': chuck_item['outer_diameter'], + 'inner_diameter': chuck_item['inner_diameter'], + 'run_out_accuracy': chuck_item['run_out_accuracy'], + 'total_length': chuck_item['total_length'], + 'taper': chuck_item['taper'], + 'top_diameter': chuck_item['top_diameter'], + 'weight': chuck_item['weight'], + 'max_load_capacity': chuck_item['load_capacity_max'], + 'cooling_jacket': chuck_item['cooling_sleeve_model'], + 'active': chuck_item['active'], + }) + if 'basic_parameters_cutter_arbor' in result['cutting_tool_basic_parameters_all_list']: + basic_parameters_cutter_arbor_list = json.loads( + result['cutting_tool_basic_parameters_all_list']['basic_parameters_cutter_arbor']) + if basic_parameters_cutter_arbor_list: + for cutter_arbor_item in basic_parameters_cutter_arbor_list: + cutter_arbor = self.search( + [('code', '=', cutter_arbor_item['code']), ('active', 'in', [True, False])]) + if not cutter_arbor: + self.create({ + 'name': cutter_arbor_item['name'], + 'code': cutter_arbor_item['code'], + 'cutting_tool_type': '刀杆', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_arbor_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'height': cutter_arbor_item['height'], + 'width': cutter_arbor_item['width'], + 'total_length': cutter_arbor_item['total_length'], + 'knife_head_height': cutter_arbor_item['head_length'], + 'knife_head_width': cutter_arbor_item['head_width'], + 'knife_head_length': cutter_arbor_item['head_length'], + 'cutter_arbor_diameter': cutter_arbor_item['arbor_diameter'], + 'main_included_angle': cutter_arbor_item['edge_angle'], + 'relief_angle': cutter_arbor_item['relief_angle'], + 'cutting_depth': cutter_arbor_item['cutting_depth_max'], + 'min_machining_aperture': cutter_arbor_item['machining_aperture_min'], + 'install_blade_tip_num': cutter_arbor_item['number_blade_installed'], + 'is_cooling_hole': cutter_arbor_item['is_cooling_hole'], + 'locating_slot_code': cutter_arbor_item['locator_slot_code'], + 'installing_structure': cutter_arbor_item['mounting_structure'], + 'blade_id': False if not cutter_arbor_item['fit_blade_model_code'] else self.env[ + 'sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_arbor_item['fit_blade_model_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'tool_shim': cutter_arbor_item['fit_knife_pad_model'], + 'cotter_pin': cutter_arbor_item['fit_pin_model'], + 'pressing_plate': cutter_arbor_item['fit_plate_model'], + 'screw': cutter_arbor_item['fit_screw_model'], + 'spanner': cutter_arbor_item['fit_wrench_model'], + 'active': cutter_arbor_item['active'], }) - basic_parameters_cutter_arbor_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_cutter_arbor']) - if basic_parameters_cutter_arbor_list: - for cutter_arbor_item in basic_parameters_cutter_arbor_list: - cutter_arbor = self.search( - [('code', '=', cutter_arbor_item['code']), ('active', 'in', [True, False])]) - if not cutter_arbor: - self.create({ - 'name': cutter_arbor_item['name'], - 'code': cutter_arbor_item['code'], - 'cutting_tool_type': '刀杆', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_arbor_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'height': cutter_arbor_item['height'], - 'width': cutter_arbor_item['width'], - 'total_length': cutter_arbor_item['total_length'], - 'knife_head_height': cutter_arbor_item['head_length'], - 'knife_head_width': cutter_arbor_item['head_width'], - 'knife_head_length': cutter_arbor_item['head_length'], - 'cutter_arbor_diameter': cutter_arbor_item['arbor_diameter'], - 'main_included_angle': cutter_arbor_item['edge_angle'], - 'relief_angle': cutter_arbor_item['relief_angle'], - 'cutting_depth': cutter_arbor_item['cutting_depth_max'], - 'min_machining_aperture': cutter_arbor_item['machining_aperture_min'], - 'install_blade_tip_num': cutter_arbor_item['number_blade_installed'], - 'is_cooling_hole': cutter_arbor_item['is_cooling_hole'], - 'locating_slot_code': cutter_arbor_item['locator_slot_code'], - 'installing_structure': cutter_arbor_item['mounting_structure'], - 'blade_id': False if not cutter_arbor_item['fit_blade_model_code'] else self.env[ - 'sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_arbor_item['fit_blade_model_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'tool_shim': cutter_arbor_item['fit_knife_pad_model'], - 'cotter_pin': cutter_arbor_item['fit_pin_model'], - 'pressing_plate': cutter_arbor_item['fit_plate_model'], - 'screw': cutter_arbor_item['fit_screw_model'], - 'spanner': cutter_arbor_item['fit_wrench_model'], - 'active': cutter_arbor_item['active'], - }) - else: - if cutter_arbor_item['active'] is False: - cutter_arbor.write({'active': False}) else: self.write({ 'name': cutter_arbor_item['name'], @@ -3025,43 +2668,42 @@ class CuttingToolBasicParameters(models.Model): 'pressing_plate': cutter_arbor_item['fit_plate_model'], 'screw': cutter_arbor_item['fit_screw_model'], 'spanner': cutter_arbor_item['fit_wrench_model'], + 'active': cutter_arbor_item['active'], + }) + if 'basic_parameters_cutter_head' in result['cutting_tool_basic_parameters_all_list']: + basic_parameters_cutter_head_list = json.loads( + result['cutting_tool_basic_parameters_all_list']['basic_parameters_cutter_head']) + if basic_parameters_cutter_head_list: + for cutter_head_item in basic_parameters_cutter_head_list: + cutter_head = self.search( + [('code', '=', cutter_head_item['code']), ('active', 'in', [True, False])]) + if not cutter_head: + self.create({ + 'name': cutter_head_item['name'], + 'code': cutter_head_item['code'], + 'cutting_tool_type': '刀盘', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_head_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'install_blade_tip_num': cutter_head_item['number_blade_installed'], + 'blade_diameter': cutter_head_item['blade_diameter'], + 'cutter_head_diameter': cutter_head_item['cutter_diameter'], + 'interface_diameter': cutter_head_item['interface_diameter'], + 'total_length': cutter_head_item['total_length'], + 'blade_length': cutter_head_item['blade_length'], + 'cutting_depth': cutter_head_item['cutting_depth_max'], + 'main_included_angle': cutter_head_item['edge_angle'], + 'installing_structure': cutter_head_item['mounting_structure'], + 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ + 'sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_head_item['fit_blade_model_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'screw': cutter_head_item['fit_screw_model'], + 'spanner': cutter_head_item['fit_wrench_model'], + 'is_cooling_hole': cutter_head_item['is_cooling_hole'], + 'locating_slot_code': cutter_head_item['locator_slot_code'], + 'active': cutter_head_item['active'], }) - basic_parameters_cutter_head_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_cutter_head']) - if basic_parameters_cutter_head_list: - for cutter_head_item in basic_parameters_cutter_head_list: - cutter_head = self.search( - [('code', '=', cutter_head_item['code']), ('active', 'in', [True, False])]) - if not cutter_head: - self.create({ - 'name': cutter_head_item['name'], - 'code': cutter_head_item['code'], - 'cutting_tool_type': '刀盘', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_head_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'install_blade_tip_num': cutter_head_item['number_blade_installed'], - 'blade_diameter': cutter_head_item['blade_diameter'], - 'cutter_head_diameter': cutter_head_item['cutter_diameter'], - 'interface_diameter': cutter_head_item['interface_diameter'], - 'total_length': cutter_head_item['total_length'], - 'blade_length': cutter_head_item['blade_length'], - 'cutting_depth': cutter_head_item['cutting_depth_max'], - 'main_included_angle': cutter_head_item['edge_angle'], - 'installing_structure': cutter_head_item['mounting_structure'], - 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ - 'sf.cutting_tool.standard.library'].search( - [('code', '=', cutter_head_item['fit_blade_model_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'screw': cutter_head_item['fit_screw_model'], - 'spanner': cutter_head_item['fit_wrench_model'], - 'is_cooling_hole': cutter_head_item['is_cooling_hole'], - 'locating_slot_code': cutter_head_item['locator_slot_code'], - 'active': cutter_head_item['active'], - }) - else: - if cutter_head_item['active'] is False: - cutter_head.write({'active': False}) else: self.write({ 'name': cutter_head_item['name'], @@ -3082,47 +2724,394 @@ class CuttingToolBasicParameters(models.Model): 'spanner': cutter_head_item['fit_wrench_model'], 'is_cooling_hole': cutter_head_item['is_cooling_hole'], 'locating_slot_code': cutter_head_item['locator_slot_code'], + 'active': cutter_head_item['active'], + }) + if 'basic_parameters_knife_handle' in result['cutting_tool_basic_parameters_all_list']: + basic_parameters_knife_handle_list = json.loads( + result['cutting_tool_basic_parameters_all_list']['basic_parameters_knife_handle']) + if basic_parameters_knife_handle_list: + for knife_handle_item in basic_parameters_knife_handle_list: + knife_handle = self.search( + [('code', '=', knife_handle_item['code']), ('active', 'in', [True, False])]) + if not knife_handle: + self.create({ + 'name': knife_handle_item['name'], + 'code': knife_handle_item['code'], + 'cutting_tool_type': '刀柄', + 'taper_shank_model': knife_handle_item['taper_shank_model'], + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', knife_handle_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'total_length': knife_handle_item['total_length'], + 'flange_shank_length': knife_handle_item['flange_length'], + 'flange_diameter': knife_handle_item['flange_diameter'], + 'shank_length': knife_handle_item['shank_length'], + 'shank_diameter': knife_handle_item['shank_diameter'], + 'min_clamping_diameter': knife_handle_item['clamping_diameter_min'], + 'max_clamping_diameter': knife_handle_item['clamping_diameter_max'], + 'clamping_mode': knife_handle_item['clamping_way'], + 'tool_changing_time': knife_handle_item['tool_changing_time'], + 'max_rotate_speed': knife_handle_item['rotate_speed_max'], + 'diameter_slip_accuracy': knife_handle_item['diameter_slip_accuracy'], + 'cooling_model': knife_handle_item['cooling_model'], + 'is_quick_cutting': knife_handle_item['is_quick_cutting'], + 'is_safe_lock': knife_handle_item['is_safe_lock'], + 'screw': knife_handle_item['fit_wrench_model'], + 'nut': knife_handle_item['fit_nut_model'], + 'dynamic_balance_class': knife_handle_item['dynamic_balance_class'], + 'active': knife_handle_item['active'], }) - basic_parameters_knife_handle_list = json.loads( - result['cutting_tool_basic_parameters_all_list']['basic_parameters_knife_handle']) - if basic_parameters_knife_handle_list: - for knife_handle_item in basic_parameters_knife_handle_list: - knife_handle = self.search( - [('code', '=', knife_handle_item['code']), ('active', 'in', [True, False])]) - if not knife_handle: - self.create({ - 'name': knife_handle_item['name'], - 'code': knife_handle_item['code'], - 'cutting_tool_type': '刀柄', - 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( - [('code', '=', knife_handle_item['standard_library_code'].replace("JKM", result[ - 'factory_short_name']))]).id, - 'total_length': knife_handle_item['total_length'], - 'taper_shank_model': knife_handle_item['taper_shank_model'], - 'flange_shank_length': knife_handle_item['flange_length'], - 'flange_diameter': knife_handle_item['flange_diameter'], - 'shank_length': knife_handle_item['shank_length'], - 'shank_diameter': knife_handle_item['shank_diameter'], - 'min_clamping_diameter': knife_handle_item['clamping_diameter_min'], - 'max_clamping_diameter': knife_handle_item['clamping_diameter_max'], - 'clamping_mode': knife_handle_item['clamping_way'], - 'tool_changing_time': knife_handle_item['tool_changing_time'], - 'max_rotate_speed': knife_handle_item['rotate_speed_max'], - 'diameter_slip_accuracy': knife_handle_item['diameter_slip_accuracy'], - 'cooling_model': knife_handle_item['cooling_model'], - 'is_quick_cutting': knife_handle_item['is_quick_cutting'], - 'is_safe_lock': knife_handle_item['is_safe_lock'], - 'screw': knife_handle_item['fit_wrench_model'], - 'nut': knife_handle_item['fit_nut_model'], - 'dynamic_balance_class': knife_handle_item['dynamic_balance_class'], - 'active': knife_handle_item['active'], - }) - else: - if knife_handle_item['active'] is False: - knife_handle.write({'active': False}) else: self.write({ 'name': knife_handle_item['name'], + 'taper_shank_model': knife_handle_item['taper_shank_model'], + 'total_length': knife_handle_item['total_length'], + 'flange_shank_length': knife_handle_item['flange_length'], + 'flange_diameter': knife_handle_item['flange_diameter'], + 'shank_length': knife_handle_item['shank_length'], + 'shank_diameter': knife_handle_item['shank_diameter'], + 'min_clamping_diameter': knife_handle_item['clamping_diameter_min'], + 'max_clamping_diameter': knife_handle_item['clamping_diameter_max'], + 'clamping_mode': knife_handle_item['clamping_way'], + 'tool_changing_time': knife_handle_item['tool_changing_time'], + 'max_rotate_speed': knife_handle_item['rotate_speed_max'], + 'diameter_slip_accuracy': knife_handle_item['diameter_slip_accuracy'], + 'cooling_model': knife_handle_item['cooling_model'], + 'is_quick_cutting': knife_handle_item['is_quick_cutting'], + 'is_safe_lock': knife_handle_item['is_safe_lock'], + 'screw': knife_handle_item['fit_wrench_model'], + 'nut': knife_handle_item['fit_nut_model'], + 'dynamic_balance_class': knife_handle_item['dynamic_balance_class'], + 'active': knife_handle_item['active'], + }) + else: + raise ValidationError("刀具物料基本参数认证未通过") + + def sync_cutting_tool_basic_parameters_yesterday(self): + config = self.env['res.config.settings'].get_values() + headers = Common.get_headers(self, config['token'], config['sf_secret_key']) + strUrl = config['sf_url'] + self.url + r = requests.post(strUrl, json={}, data=None, headers=headers) + r = r.json() + result = json.loads(r['result']) + if result['status'] == 1: + if 'basic_parameters_integral_tool' in result['cutting_tool_basic_parameters_yesterday_list']: + basic_parameters_integral_tool_list = json.loads( + result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_integral_tool']) + if basic_parameters_integral_tool_list: + for integral_tool_item in basic_parameters_integral_tool_list: + integral_tool = self.search( + [('code', '=', integral_tool_item['code']), ('active', 'in', [True, False])]) + if not integral_tool: + self.create({ + 'name': integral_tool_item['name'], + 'code': integral_tool_item['code'], + '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, + 'total_length': integral_tool_item['total_length'], + 'blade_diameter': integral_tool_item['blade_diameter'], + 'blade_length': integral_tool_item['blade_length'], + 'blade_number': integral_tool_item['blade_number'], + 'neck_length': integral_tool_item['neck_length'], + 'neck_diameter': integral_tool_item['neck_diameter'], + 'handle_diameter': integral_tool_item['shank_diameter'], + 'handle_length': integral_tool_item['shank_length'], + 'blade_tip_diameter': integral_tool_item['tip_diameter'], + 'blade_tip_working_size': integral_tool_item['tip_handling_size'], + 'blade_tip_taper': integral_tool_item['knife_tip_taper'], + 'blade_helix_angle': integral_tool_item['blade_helix_angle'], + 'blade_width': integral_tool_item['blade_width'], + 'blade_depth': integral_tool_item['blade_depth'], + 'pitch': integral_tool_item['pitch'], + 'cutting_depth': integral_tool_item['cutting_depth_max'], + 'active': integral_tool_item['active'], + }) + else: + if integral_tool_item['active'] is False: + integral_tool.write({'active': False}) + else: + self.write({ + 'name': integral_tool_item['name'], + 'total_length': integral_tool_item['total_length'], + 'blade_diameter': integral_tool_item['blade_diameter'], + 'blade_length': integral_tool_item['blade_length'], + 'blade_number': integral_tool_item['blade_number'], + 'neck_length': integral_tool_item['neck_length'], + 'neck_diameter': integral_tool_item['neck_diameter'], + 'handle_diameter': integral_tool_item['shank_diameter'], + 'handle_length': integral_tool_item['shank_length'], + 'blade_tip_diameter': integral_tool_item['tip_diameter'], + 'blade_tip_working_size': integral_tool_item['tip_handling_size'], + 'blade_tip_taper': integral_tool_item['knife_tip_taper'], + 'blade_helix_angle': integral_tool_item['blade_helix_angle'], + 'blade_width': integral_tool_item['blade_width'], + 'blade_depth': integral_tool_item['blade_depth'], + 'pitch': integral_tool_item['pitch'], + 'cutting_depth': integral_tool_item['cutting_depth_max'], + 'active': integral_tool_item['active'], + }) + if 'basic_parameters_blade' in result['cutting_tool_basic_parameters_yesterday_list']: + basic_parameters_blade_list = json.loads( + result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_blade']) + if basic_parameters_blade_list: + for blade_item in basic_parameters_blade_list: + blade = self.search([('code', '=', blade_item['code']), ('active', 'in', [True, False])]) + if not blade: + self.create({ + 'name': blade_item['name'], + 'code': blade_item['code'], + 'cutting_tool_type': '刀片', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', blade_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'length': blade_item['length'], + 'thickness': blade_item['thickness'], + 'cutting_blade_length': blade_item['cutting_blade_length'], + 'relief_angle': blade_item['relief_angle'], + 'blade_tip_circular_arc_radius': blade_item['radius_tip_re'], + 'inscribed_circle_diameter': blade_item['diameter_inner_circle'], + 'install_aperture_diameter': blade_item['diameter_mounting_hole'], + 'pitch': blade_item['pitch'], + 'chip_breaker_groove': blade_item['is_chip_breaker'], + 'chip_breaker_type_code': blade_item['chip_breaker_type_code'], + 'blade_teeth_model': '无' if not blade_item['blade_profile'] else blade_item[ + 'blade_profile'], + 'blade_blade_number': blade_item['blade_number'], + 'cutting_depth': blade_item['cutting_depth_max'], + 'blade_width': blade_item['blade_width'], + 'main_included_angle': blade_item['edge_angle'], + 'top_angle': blade_item['top_angle'], + 'thread_model': '无' if not blade_item['thread_type'] else blade_item['thread_type'], + 'thread_num': blade_item['threads_per_inch'], + 'blade_tip_height_tolerance': blade_item['tip_height_tolerance'], + 'inscribed_circle_tolerance': blade_item['internal_circle_tolerance'], + 'thickness_tolerance': blade_item['thickness_tolerance'], + 'active': blade_item['active'], + }) + else: + if blade_item['active'] is False: + blade.write({'active': False}) + else: + self.write({ + 'name': blade_item['name'], + 'length': blade_item['length'], + 'thickness': blade_item['thickness'], + 'cutting_blade_length': blade_item['cutting_blade_length'], + 'relief_angle': blade_item['relief_angle'], + 'blade_tip_circular_arc_radius': blade_item['radius_tip_re'], + 'inscribed_circle_diameter': blade_item['diameter_inner_circle'], + 'install_aperture_diameter': blade_item['diameter_mounting_hole'], + 'pitch': blade_item['pitch'], + 'chip_breaker_groove': blade_item['is_chip_breaker'], + 'chip_breaker_type_code': blade_item['chip_breaker_type_code'], + 'blade_teeth_model': '无' if not blade_item['blade_profile'] else blade_item[ + 'blade_profile'], + 'blade_blade_number': blade_item['blade_number'], + 'cutting_depth': blade_item['cutting_depth_max'], + 'blade_width': blade_item['blade_width'], + 'main_included_angle': blade_item['edge_angle'], + 'top_angle': blade_item['top_angle'], + 'thread_model': '无' if not blade_item['thread_type'] else blade_item[ + 'thread_type'], + 'thread_num': blade_item['threads_per_inch'], + 'blade_tip_height_tolerance': blade_item['tip_height_tolerance'], + 'inscribed_circle_tolerance': blade_item['internal_circle_tolerance'], + 'thickness_tolerance': blade_item['thickness_tolerance'], + }) + if 'basic_parameters_chuck' in result['cutting_tool_basic_parameters_yesterday_list']: + basic_parameters_chuck_list = json.loads( + result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_chuck']) + if basic_parameters_chuck_list: + for chuck_item in basic_parameters_chuck_list: + chuck = self.search([('code', '=', chuck_item['code']), ('active', 'in', [True, False])]) + if not chuck: + self.create({ + 'name': chuck_item['name'], + 'code': chuck_item['code'], + 'cutting_tool_type': '夹头', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', chuck_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'er_size_model': chuck_item['size_model'], + 'min_clamping_diameter': chuck_item['clamping_diameter_min'], + 'max_clamping_diameter': chuck_item['clamping_diameter_max'], + 'outer_diameter': chuck_item['outer_diameter'], + 'inner_diameter': chuck_item['inner_diameter'], + 'run_out_accuracy': chuck_item['run_out_accuracy'], + 'total_length': chuck_item['total_length'], + 'taper': chuck_item['taper'], + 'top_diameter': chuck_item['top_diameter'], + 'weight': chuck_item['weight'], + 'max_load_capacity': chuck_item['load_capacity_max'], + 'cooling_jacket': chuck_item['cooling_sleeve_model'], + 'active': chuck_item['active'], + }) + else: + if chuck_item['active'] is False: + chuck.write({'active': False}) + else: + self.write({ + 'name': chuck_item['name'], + 'er_size_model': chuck_item['size_model'], + 'min_clamping_diameter': chuck_item['clamping_diameter_min'], + 'max_clamping_diameter': chuck_item['clamping_diameter_max'], + 'outer_diameter': chuck_item['outer_diameter'], + 'inner_diameter': chuck_item['inner_diameter'], + 'run_out_accuracy': chuck_item['run_out_accuracy'], + 'total_length': chuck_item['total_length'], + 'taper': chuck_item['taper'], + 'top_diameter': chuck_item['top_diameter'], + 'weight': chuck_item['weight'], + 'max_load_capacity': chuck_item['load_capacity_max'], + 'cooling_jacket': chuck_item['cooling_sleeve_model'], + }) + if 'basic_parameters_cutter_arbor' in result['cutting_tool_basic_parameters_yesterday_list']: + basic_parameters_cutter_arbor_list = json.loads( + result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_cutter_arbor']) + if basic_parameters_cutter_arbor_list: + for cutter_arbor_item in basic_parameters_cutter_arbor_list: + cutter_arbor = self.search( + [('code', '=', cutter_arbor_item['code']), ('active', 'in', [True, False])]) + if not cutter_arbor: + self.create({ + 'name': cutter_arbor_item['name'], + 'code': cutter_arbor_item['code'], + 'cutting_tool_type': '刀杆', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_arbor_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'height': cutter_arbor_item['height'], + 'width': cutter_arbor_item['width'], + 'total_length': cutter_arbor_item['total_length'], + 'knife_head_height': cutter_arbor_item['head_length'], + 'knife_head_width': cutter_arbor_item['head_width'], + 'knife_head_length': cutter_arbor_item['head_length'], + 'cutter_arbor_diameter': cutter_arbor_item['arbor_diameter'], + 'main_included_angle': cutter_arbor_item['edge_angle'], + 'relief_angle': cutter_arbor_item['relief_angle'], + 'cutting_depth': cutter_arbor_item['cutting_depth_max'], + 'min_machining_aperture': cutter_arbor_item['machining_aperture_min'], + 'install_blade_tip_num': cutter_arbor_item['number_blade_installed'], + 'is_cooling_hole': cutter_arbor_item['is_cooling_hole'], + 'locating_slot_code': cutter_arbor_item['locator_slot_code'], + 'installing_structure': cutter_arbor_item['mounting_structure'], + 'blade_id': False if not cutter_arbor_item['fit_blade_model_code'] else self.env[ + 'sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_arbor_item['fit_blade_model_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'tool_shim': cutter_arbor_item['fit_knife_pad_model'], + 'cotter_pin': cutter_arbor_item['fit_pin_model'], + 'pressing_plate': cutter_arbor_item['fit_plate_model'], + 'screw': cutter_arbor_item['fit_screw_model'], + 'spanner': cutter_arbor_item['fit_wrench_model'], + 'active': cutter_arbor_item['active'], + }) + else: + if cutter_arbor_item['active'] is False: + cutter_arbor.write({'active': False}) + else: + self.write({ + 'name': cutter_arbor_item['name'], + 'height': cutter_arbor_item['height'], + 'width': cutter_arbor_item['width'], + 'total_length': cutter_arbor_item['total_length'], + 'knife_head_height': cutter_arbor_item['head_length'], + 'knife_head_width': cutter_arbor_item['head_width'], + 'knife_head_length': cutter_arbor_item['head_length'], + 'cutter_arbor_diameter': cutter_arbor_item['arbor_diameter'], + 'main_included_angle': cutter_arbor_item['edge_angle'], + 'relief_angle': cutter_arbor_item['relief_angle'], + 'cutting_depth': cutter_arbor_item['cutting_depth_max'], + 'min_machining_aperture': cutter_arbor_item['machining_aperture_min'], + 'install_blade_tip_num': cutter_arbor_item['number_blade_installed'], + 'is_cooling_hole': cutter_arbor_item['is_cooling_hole'], + 'locating_slot_code': cutter_arbor_item['locator_slot_code'], + 'installing_structure': cutter_arbor_item['mounting_structure'], + 'blade_id': False if not cutter_arbor_item['fit_blade_model_code'] else self.env[ + 'sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_arbor_item['fit_blade_model_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'tool_shim': cutter_arbor_item['fit_knife_pad_model'], + 'cotter_pin': cutter_arbor_item['fit_pin_model'], + 'pressing_plate': cutter_arbor_item['fit_plate_model'], + 'screw': cutter_arbor_item['fit_screw_model'], + 'spanner': cutter_arbor_item['fit_wrench_model'], + }) + if 'basic_parameters_cutter_head' in result['cutting_tool_basic_parameters_yesterday_list']: + basic_parameters_cutter_head_list = json.loads( + result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_cutter_head']) + if basic_parameters_cutter_head_list: + for cutter_head_item in basic_parameters_cutter_head_list: + cutter_head = self.search( + [('code', '=', cutter_head_item['code']), ('active', 'in', [True, False])]) + if not cutter_head: + self.create({ + 'name': cutter_head_item['name'], + 'code': cutter_head_item['code'], + 'cutting_tool_type': '刀盘', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_head_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'install_blade_tip_num': cutter_head_item['number_blade_installed'], + 'blade_diameter': cutter_head_item['blade_diameter'], + 'cutter_head_diameter': cutter_head_item['cutter_diameter'], + 'interface_diameter': cutter_head_item['interface_diameter'], + 'total_length': cutter_head_item['total_length'], + 'blade_length': cutter_head_item['blade_length'], + 'cutting_depth': cutter_head_item['cutting_depth_max'], + 'main_included_angle': cutter_head_item['edge_angle'], + 'installing_structure': cutter_head_item['mounting_structure'], + 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ + 'sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_head_item['fit_blade_model_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'screw': cutter_head_item['fit_screw_model'], + 'spanner': cutter_head_item['fit_wrench_model'], + 'is_cooling_hole': cutter_head_item['is_cooling_hole'], + 'locating_slot_code': cutter_head_item['locator_slot_code'], + 'active': cutter_head_item['active'], + }) + else: + if cutter_head_item['active'] is False: + cutter_head.write({'active': False}) + else: + self.write({ + 'name': cutter_head_item['name'], + 'install_blade_tip_num': cutter_head_item['number_blade_installed'], + 'blade_diameter': cutter_head_item['blade_diameter'], + 'cutter_head_diameter': cutter_head_item['cutter_diameter'], + 'interface_diameter': cutter_head_item['interface_diameter'], + 'total_length': cutter_head_item['total_length'], + 'blade_length': cutter_head_item['blade_length'], + 'cutting_depth': cutter_head_item['cutting_depth_max'], + 'main_included_angle': cutter_head_item['edge_angle'], + 'installing_structure': cutter_head_item['mounting_structure'], + 'blade_id': False if not cutter_head_item['fit_blade_model_code'] else self.env[ + 'sf.cutting_tool.standard.library'].search( + [('code', '=', cutter_head_item['fit_blade_model_code'].replace("JKM", result[ + 'factory_short_name']))]).id, + 'screw': cutter_head_item['fit_screw_model'], + 'spanner': cutter_head_item['fit_wrench_model'], + 'is_cooling_hole': cutter_head_item['is_cooling_hole'], + 'locating_slot_code': cutter_head_item['locator_slot_code'], + }) + if 'basic_parameters_knife_handle' in result['cutting_tool_basic_parameters_yesterday_list']: + basic_parameters_knife_handle_list = json.loads( + result['cutting_tool_basic_parameters_yesterday_list']['basic_parameters_knife_handle']) + if basic_parameters_knife_handle_list: + for knife_handle_item in basic_parameters_knife_handle_list: + knife_handle = self.search( + [('code', '=', knife_handle_item['code']), ('active', 'in', [True, False])]) + if not knife_handle: + self.create({ + 'name': knife_handle_item['name'], + 'code': knife_handle_item['code'], + 'cutting_tool_type': '刀柄', + 'standard_library_id': self.env['sf.cutting_tool.standard.library'].search( + [('code', '=', knife_handle_item['standard_library_code'].replace("JKM", result[ + 'factory_short_name']))]).id, 'total_length': knife_handle_item['total_length'], 'taper_shank_model': knife_handle_item['taper_shank_model'], 'flange_shank_length': knife_handle_item['flange_length'], @@ -3141,6 +3130,32 @@ class CuttingToolBasicParameters(models.Model): 'screw': knife_handle_item['fit_wrench_model'], 'nut': knife_handle_item['fit_nut_model'], 'dynamic_balance_class': knife_handle_item['dynamic_balance_class'], + 'active': knife_handle_item['active'], }) + else: + if knife_handle_item['active'] is False: + knife_handle.write({'active': False}) + else: + self.write({ + 'name': knife_handle_item['name'], + 'total_length': knife_handle_item['total_length'], + 'taper_shank_model': knife_handle_item['taper_shank_model'], + 'flange_shank_length': knife_handle_item['flange_length'], + 'flange_diameter': knife_handle_item['flange_diameter'], + 'shank_length': knife_handle_item['shank_length'], + 'shank_diameter': knife_handle_item['shank_diameter'], + 'min_clamping_diameter': knife_handle_item['clamping_diameter_min'], + 'max_clamping_diameter': knife_handle_item['clamping_diameter_max'], + 'clamping_mode': knife_handle_item['clamping_way'], + 'tool_changing_time': knife_handle_item['tool_changing_time'], + 'max_rotate_speed': knife_handle_item['rotate_speed_max'], + 'diameter_slip_accuracy': knife_handle_item['diameter_slip_accuracy'], + 'cooling_model': knife_handle_item['cooling_model'], + 'is_quick_cutting': knife_handle_item['is_quick_cutting'], + 'is_safe_lock': knife_handle_item['is_safe_lock'], + 'screw': knife_handle_item['fit_wrench_model'], + 'nut': knife_handle_item['fit_nut_model'], + 'dynamic_balance_class': knife_handle_item['dynamic_balance_class'], + }) else: raise ValidationError("刀具物料基本参数认证未通过") diff --git a/sf_sale/views/quick_easy_order_view.xml b/sf_sale/views/quick_easy_order_view.xml index 063c119f..1654b890 100644 --- a/sf_sale/views/quick_easy_order_view.xml +++ b/sf_sale/views/quick_easy_order_view.xml @@ -119,6 +119,6 @@ + groups="sales_team.group_sale_salesman,sf_base.group_sale_salemanager,sf_base.group_sale_director"/> \ No newline at end of file diff --git a/sf_tool_management/__manifest__.py b/sf_tool_management/__manifest__.py index faf3927b..3eee245a 100644 --- a/sf_tool_management/__manifest__.py +++ b/sf_tool_management/__manifest__.py @@ -16,6 +16,7 @@ 'security/ir.model.access.csv', 'wizard/wizard_view.xml', 'views/tool_base_views.xml', + 'views/mrp_workcenter_views.xml', 'views/sf_maintenance_equipment.xml', 'views/menu_view.xml', 'views/tool_material_search.xml', diff --git a/sf_tool_management/models/__init__.py b/sf_tool_management/models/__init__.py index c942dcac..98c06d41 100644 --- a/sf_tool_management/models/__init__.py +++ b/sf_tool_management/models/__init__.py @@ -1,4 +1,5 @@ from . import base from . import tool_material_search from . import maintenance_equipment +from . import mrp_workorder diff --git a/sf_tool_management/models/maintenance_equipment.py b/sf_tool_management/models/maintenance_equipment.py index 1f42430c..4b5fe89e 100644 --- a/sf_tool_management/models/maintenance_equipment.py +++ b/sf_tool_management/models/maintenance_equipment.py @@ -1,4 +1,5 @@ from odoo import models, api, fields +from odoo.exceptions import ValidationError class SfMaintenanceEquipmentTool(models.Model): @@ -26,3 +27,68 @@ class SfMaintenanceEquipmentTool(models.Model): 'cutter_spacing_code_id': tool.id }) return tools + + +class StockLot(models.Model): + _inherit = 'stock.lot' + + tool_material_search_id = fields.Many2one('sf.tool.material.search', string='刀具物料搜索') + tool_material_status = fields.Selection([('可用', '可用'), ('在用', '在用'), ('报废', '报废')], string='状态', + compute='_compute_tool_material_status') + + @api.depends('quant_ids') + def _compute_tool_material_status(self): + for record in self: + if record: + if record.quant_ids[-1].location_id.name == '刀具组装位置': + record.tool_material_status = '在用' + else: + record.tool_material_status = '可用' + + @api.model + def name_search(self, name='', args=None, operator='ilike', limit=100): + # 调用父类的name_search方法 + records = super(StockLot, self).name_search(name=name, args=args, operator=operator, limit=limit) + if records: + return records + else: + # 在调用父类方法之后执行自定义逻辑 + self.tool_verify(args, name) + return records + + def tool_verify(self, args, name): + # 刀具物料验证 + if 5 >= len(args) > 3: + objs = self.search([('name', '=', name), ('quant_ids.location_id.name', 'in', ['刀具房']), + ('quant_ids.quantity', '>', 0)]) + if args[2][2] in ['整体式刀具', '刀片', '刀杆', '刀盘', '刀柄', '夹头']: + if objs.product_id.categ_id.name == '刀具': + raise ValidationError('这是【%s】物料,请扫入正确的【%s】物料!!!' % ( + objs.product_id.cutting_tool_material_id.name, args[2][2])) + + @api.model_create_multi + def create(self, vals_list): + records = super(StockLot, self).create(vals_list) + for record in records: + if record.product_id.categ_id.name == '刀具': + tool_material_search = self.env['sf.tool.material.search'].sudo().search( + [('cutting_tool_material_id', '=', record.product_id.cutting_tool_material_id.id), + ('cutting_tool_standard_library_id', '=', record.product_id.cutting_tool_model_id.id), + ('specification_id', '=', record.product_id.specification_id.id)]) + if tool_material_search: + record.tool_material_search_id = tool_material_search + return records + + +class ProductProduct(models.Model): + _inherit = 'product.product' + + @api.model_create_multi + def create(self, vals_list): + records = super(ProductProduct, self).create(vals_list) + for record in records: + if record.categ_id.name == '刀具': + self.env['sf.tool.material.search'].sudo().create({ + 'product_id': record.id + }) + return records diff --git a/sf_tool_management/models/mrp_workorder.py b/sf_tool_management/models/mrp_workorder.py index 63dd1029..7e424c96 100644 --- a/sf_tool_management/models/mrp_workorder.py +++ b/sf_tool_management/models/mrp_workorder.py @@ -36,3 +36,12 @@ class CNCprocessing(models.Model): # 调用CAM工单程序用刀计划创建方法 self.env['sf.cam.work.order.program.knife.plan'].create_cam_work_plan(obj) return obj + + +class MrpWorkCenter(models.Model): + _inherit = 'mrp.workcenter' + + def action_tool_order(self): + action = self.env.ref('sf_tool_management.sf_functional_tool_assembly_view_act') + result = action.read()[0] + return result diff --git a/sf_tool_management/models/tool_material_search.py b/sf_tool_management/models/tool_material_search.py index 99ff6419..a5498c80 100644 --- a/sf_tool_management/models/tool_material_search.py +++ b/sf_tool_management/models/tool_material_search.py @@ -5,7 +5,7 @@ from odoo import fields, models, api, SUPERUSER_ID # from odoo.exceptions import ValidationError -# 刀具物料搜索 +# 刀具物料搜索(待删除) class SfToolMaterialSearch(models.Model): _name = 'sf.tool.material.search' _description = '刀具物料搜索' @@ -302,3 +302,55 @@ class SfToolMaterialSearch(models.Model): warehouse_area = fields.Char('库区') warehouse_location = fields.Char('库位') three_d_model = fields.Many2one('ir.attachment', '3D模型') + + +class ToolMaterial(models.Model): + _name = 'sf.tool.material.search' + _description = '刀具物料搜索' + + product_id = fields.Many2one('product.product', string='刀具物料产品') + + name = fields.Char('名称', related='product_id.name') + cutting_tool_material_id = fields.Many2one('sf.cutting.tool.material', '刀具物料', + related='product_id.cutting_tool_material_id', + store=True, + group_expand='_read_group_cutting_tool_material_id') + tool_material_name = fields.Char('物料名称', related='product_id.cutting_tool_material_id.name') + cutting_tool_standard_library_id = fields.Many2one('sf.cutting_tool.standard.library', '刀具型号', + related='product_id.cutting_tool_model_id') + specification_id = fields.Many2one('sf.tool.materials.basic.parameters', '规格', + related='product_id.specification_id') + image = fields.Binary('图片', related='product_id.image_1920') + number = fields.Integer('总数量', readonly=True, compute='_compute_number') + usable_num = fields.Integer('可用数量', readonly=True) + have_been_used_num = fields.Integer('在用数量', readonly=True) + scrap_num = fields.Integer('报废数量', readonly=True) + + barcode_ids = fields.One2many('stock.lot', 'tool_material_search_id', string='序列号', readonly=True) + + @api.depends('barcode_ids') + def _compute_number(self): + usable_num = 0 + have_been_used_num = 0 + scrap_num = 0 + for record in self: + if record.barcode_ids: + record.number = len(record.barcode_ids) + for barcode_id in record.barcode_ids: + if barcode_id.quant_ids[-1].location_id.name == '刀具组装位置': + have_been_used_num = have_been_used_num + 1 + else: + usable_num = usable_num + 1 + record.usable_num = usable_num + record.have_been_used_num = have_been_used_num + record.scrap_num = scrap_num + else: + record.number = 0 + record.usable_num = 0 + record.have_been_used_num = 0 + record.scrap_num = 0 + + @api.model + def _read_group_cutting_tool_material_id(self, categories, domain, order): + cutting_tool_material_id = categories._search([], order=order, access_rights_uid=SUPERUSER_ID) + return categories.browse(cutting_tool_material_id) diff --git a/sf_tool_management/views/mrp_workcenter_views.xml b/sf_tool_management/views/mrp_workcenter_views.xml new file mode 100644 index 00000000..dcc52f7b --- /dev/null +++ b/sf_tool_management/views/mrp_workcenter_views.xml @@ -0,0 +1,33 @@ + + + + mrp.workcenter.kanban.tool + mrp.workcenter + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sf_tool_management/views/tool_material_search.xml b/sf_tool_management/views/tool_material_search.xml index 92369fa8..158e83b9 100644 --- a/sf_tool_management/views/tool_material_search.xml +++ b/sf_tool_management/views/tool_material_search.xml @@ -6,116 +6,13 @@ sf.tool.material.search - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + @@ -128,221 +25,44 @@

- +

- - - - - - - - + + + + + - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - -
@@ -356,9 +76,10 @@ - + + - +