94 lines
3.5 KiB
Python
94 lines
3.5 KiB
Python
# Copyright (c) 2018, Frappe and Contributors
|
|
# License: GNU General Public License v3. See license.txt
|
|
|
|
from __future__ import unicode_literals
|
|
|
|
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
|