# 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