110 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			3.5 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
 |