94 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2018, Frappe and Contributors
 | |
| # License: GNU General Public License v3. See license.txt
 | |
| 
 | |
| 
 | |
| import frappe
 | |
| 
 | |
| 
 | |
| def execute():
 | |
| 	# add holiday list and employee group fields in SLA
 | |
| 	# change response and resolution time in priorities child table
 | |
| 	if frappe.db.exists('DocType', 'Service Level Agreement'):
 | |
| 		sla_details = frappe.db.get_all('Service Level Agreement', fields=['name', 'service_level'])
 | |
| 		priorities = frappe.db.get_all('Service Level Priority', fields=['*'], filters={
 | |
| 			'parenttype': ('in', ['Service Level Agreement', 'Service Level'])
 | |
| 		})
 | |
| 
 | |
| 		frappe.reload_doc('support', 'doctype', 'service_level_agreement')
 | |
| 		frappe.reload_doc('support', 'doctype', 'pause_sla_on_status')
 | |
| 		frappe.reload_doc('support', 'doctype', 'service_level_priority')
 | |
| 		frappe.reload_doc('support', 'doctype', 'service_day')
 | |
| 
 | |
| 		for entry in sla_details:
 | |
| 			values = frappe.db.get_value('Service Level', entry.service_level, ['holiday_list', 'employee_group'])
 | |
| 			if values:
 | |
| 				holiday_list = values[0]
 | |
| 				employee_group = values[1]
 | |
| 				frappe.db.set_value('Service Level Agreement', entry.name, {
 | |
| 					'holiday_list': holiday_list,
 | |
| 					'employee_group': employee_group
 | |
| 				})
 | |
| 
 | |
| 		priority_dict = {}
 | |
| 
 | |
| 		for priority in priorities:
 | |
| 			if priority.parenttype == 'Service Level Agreement':
 | |
| 				response_time = convert_to_seconds(priority.response_time, priority.response_time_period)
 | |
| 				resolution_time = convert_to_seconds(priority.resolution_time, priority.resolution_time_period)
 | |
| 				frappe.db.set_value('Service Level Priority', priority.name, {
 | |
| 					'response_time': response_time,
 | |
| 					'resolution_time': resolution_time
 | |
| 				})
 | |
| 			if priority.parenttype == 'Service Level':
 | |
| 				if not priority.parent in priority_dict:
 | |
| 					priority_dict[priority.parent] = []
 | |
| 				priority_dict[priority.parent].append(priority)
 | |
| 
 | |
| 
 | |
| 		# copy Service Levels to Service Level Agreements
 | |
| 		sl = [entry.service_level for entry in sla_details]
 | |
| 		if frappe.db.exists('DocType', 'Service Level'):
 | |
| 			service_levels = frappe.db.get_all('Service Level', filters={'service_level': ('not in', sl)}, fields=['*'])
 | |
| 			for entry in service_levels:
 | |
| 				sla = frappe.new_doc('Service Level Agreement')
 | |
| 				sla.service_level = entry.service_level
 | |
| 				sla.holiday_list = entry.holiday_list
 | |
| 				sla.employee_group = entry.employee_group
 | |
| 				sla.flags.ignore_validate = True
 | |
| 				sla = sla.insert(ignore_mandatory=True)
 | |
| 
 | |
| 				frappe.db.sql("""
 | |
| 					UPDATE
 | |
| 						`tabService Day`
 | |
| 					SET
 | |
| 						parent = %(new_parent)s , parentfield = 'support_and_resolution', parenttype = 'Service Level Agreement'
 | |
| 					WHERE
 | |
| 						parent = %(old_parent)s
 | |
| 				""", {'new_parent': sla.name, 'old_parent': entry.name}, as_dict = 1)
 | |
| 
 | |
| 				priority_list = priority_dict.get(entry.name)
 | |
| 				if priority_list:
 | |
| 					sla = frappe.get_doc('Service Level Agreement', sla.name)
 | |
| 					for priority in priority_list:
 | |
| 						row = sla.append('priorities', {
 | |
| 							'priority': priority.priority,
 | |
| 							'default_priority': priority.default_priority,
 | |
| 							'response_time': convert_to_seconds(priority.response_time, priority.response_time_period),
 | |
| 							'resolution_time': convert_to_seconds(priority.resolution_time, priority.resolution_time_period)
 | |
| 						})
 | |
| 						row.db_update()
 | |
| 					sla.db_update()
 | |
| 
 | |
| 	frappe.delete_doc_if_exists('DocType', 'Service Level')
 | |
| 
 | |
| 
 | |
| def convert_to_seconds(value, unit):
 | |
| 	seconds = 0
 | |
| 	if unit == "Hour":
 | |
| 		seconds = value * 3600
 | |
| 	if unit == "Day":
 | |
| 		seconds = value * 3600 * 24
 | |
| 	if unit == "Week":
 | |
| 		seconds = value * 3600 * 24 * 7
 | |
| 	return seconds
 |