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
|