feat: change SLA as well as priorities
This commit is contained in:
parent
f38486b22c
commit
323ea2d33a
@ -128,9 +128,7 @@ class Issue(Document):
|
|||||||
return replicated_issue.name
|
return replicated_issue.name
|
||||||
|
|
||||||
def before_insert(self):
|
def before_insert(self):
|
||||||
if not self.priority:
|
self.set_response_and_resolution_time()
|
||||||
self.priority = frappe.db.get_value("Issue Priority", {"default_priority": 1})
|
|
||||||
self.set_response_and_resolution_time(priority=self.priority)
|
|
||||||
|
|
||||||
def set_response_and_resolution_time(self, priority=None, service_level_agreement=None):
|
def set_response_and_resolution_time(self, priority=None, service_level_agreement=None):
|
||||||
service_level_agreement = get_active_service_level_agreement_for(priority=priority,
|
service_level_agreement = get_active_service_level_agreement_for(priority=priority,
|
||||||
@ -143,12 +141,13 @@ class Issue(Document):
|
|||||||
frappe.throw(_("This Service Level Agreement is specific to Customer {0}".format(service_level_agreement.customer)))
|
frappe.throw(_("This Service Level Agreement is specific to Customer {0}".format(service_level_agreement.customer)))
|
||||||
|
|
||||||
self.service_level_agreement = service_level_agreement.name
|
self.service_level_agreement = service_level_agreement.name
|
||||||
|
self.priority = service_level_agreement.default_priority if not priority else priority
|
||||||
|
|
||||||
service_level = frappe.get_doc("Service Level", service_level_agreement.service_level)
|
service_level_agreement = frappe.get_doc("Service Level Agreement", service_level_agreement.name)
|
||||||
priority = service_level.get_service_level_priority(priority)
|
priority = service_level_agreement.get_service_level_agreement_priority(self.priority)
|
||||||
priority.update({
|
priority.update({
|
||||||
"support_and_resolution": service_level.support_and_resolution,
|
"support_and_resolution": service_level_agreement.support_and_resolution,
|
||||||
"holiday_list": service_level.holiday_list
|
"holiday_list": service_level_agreement.holiday_list
|
||||||
})
|
})
|
||||||
|
|
||||||
if not self.creation:
|
if not self.creation:
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
"employee_group",
|
"employee_group",
|
||||||
"column_break_2",
|
"column_break_2",
|
||||||
"holiday_list",
|
"holiday_list",
|
||||||
|
"default_priority",
|
||||||
"response_and_resoution_time",
|
"response_and_resoution_time",
|
||||||
"priorities",
|
"priorities",
|
||||||
"section_break_01",
|
"section_break_01",
|
||||||
@ -65,9 +66,16 @@
|
|||||||
"label": "Priorities",
|
"label": "Priorities",
|
||||||
"options": "Service Level Priority",
|
"options": "Service Level Priority",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldname": "default_priority",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Default Priority",
|
||||||
|
"options": "Issue Priority",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"modified": "2019-05-05 19:29:56.975951",
|
"modified": "2019-05-21 20:53:11.731727",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Service Level",
|
"name": "Service Level",
|
||||||
@ -84,6 +92,18 @@
|
|||||||
"role": "System Manager",
|
"role": "System Manager",
|
||||||
"share": 1,
|
"share": 1,
|
||||||
"write": 1
|
"write": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"create": 1,
|
||||||
|
"delete": 1,
|
||||||
|
"email": 1,
|
||||||
|
"export": 1,
|
||||||
|
"print": 1,
|
||||||
|
"read": 1,
|
||||||
|
"report": 1,
|
||||||
|
"role": "All",
|
||||||
|
"share": 1,
|
||||||
|
"write": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"sort_field": "modified",
|
"sort_field": "modified",
|
||||||
|
|||||||
@ -12,7 +12,6 @@ from frappe.utils import get_weekdays
|
|||||||
class ServiceLevel(Document):
|
class ServiceLevel(Document):
|
||||||
|
|
||||||
def validate(self):
|
def validate(self):
|
||||||
self.check_default_priority()
|
|
||||||
self.check_priorities()
|
self.check_priorities()
|
||||||
self.check_support_and_resolution()
|
self.check_support_and_resolution()
|
||||||
|
|
||||||
@ -26,7 +25,9 @@ class ServiceLevel(Document):
|
|||||||
frappe.throw(_("Set Response Time and Resolution for Priority {0} at index {1}.".format(priority.priority, priority.idx)))
|
frappe.throw(_("Set Response Time and Resolution for Priority {0} at index {1}.".format(priority.priority, priority.idx)))
|
||||||
|
|
||||||
priorities.append(priority.priority)
|
priorities.append(priority.priority)
|
||||||
#priorities.append(priority.priority)
|
|
||||||
|
if priority.default_priority:
|
||||||
|
default_priority.append(priority.default_priority)
|
||||||
|
|
||||||
if priority.response_time_period == "Hour":
|
if priority.response_time_period == "Hour":
|
||||||
response = priority.response_time * 0.0416667
|
response = priority.response_time * 0.0416667
|
||||||
@ -50,6 +51,13 @@ class ServiceLevel(Document):
|
|||||||
repeated_priority = get_repeated(priorities)
|
repeated_priority = get_repeated(priorities)
|
||||||
frappe.throw(_("Priority {0} has been repeated.".format(repeated_priority)))
|
frappe.throw(_("Priority {0} has been repeated.".format(repeated_priority)))
|
||||||
|
|
||||||
|
# Check if repeated default priority
|
||||||
|
if not len(set(default_priority)) == len(default_priority):
|
||||||
|
frappe.throw(_("Select only one Priority as Default."))
|
||||||
|
|
||||||
|
# set default priority from priorities
|
||||||
|
self.default_priority = next(d.priority for d in self.priorities if d.default_priority)
|
||||||
|
|
||||||
def check_support_and_resolution(self):
|
def check_support_and_resolution(self):
|
||||||
week = get_weekdays()
|
week = get_weekdays()
|
||||||
support_days = []
|
support_days = []
|
||||||
@ -72,27 +80,13 @@ class ServiceLevel(Document):
|
|||||||
repeated_days = get_repeated(support_days)
|
repeated_days = get_repeated(support_days)
|
||||||
frappe.throw(_("Workday {0} has been repeated.".format(repeated_days)))
|
frappe.throw(_("Workday {0} has been repeated.".format(repeated_days)))
|
||||||
|
|
||||||
def get_service_level_priority(self, priority):
|
|
||||||
priority = frappe.get_doc("Service Level Priority", {"priority": priority, "parent": self.name})
|
|
||||||
|
|
||||||
if priority:
|
|
||||||
return frappe._dict({
|
|
||||||
"priority": priority.priority,
|
|
||||||
"response_time": priority.response_time,
|
|
||||||
"response_time_period": priority.response_time_period,
|
|
||||||
"resolution_time": priority.resolution_time,
|
|
||||||
"resolution_time_period": priority.resolution_time_period
|
|
||||||
})
|
|
||||||
else:
|
|
||||||
frappe.throw(_("Service Level {0} doesn't have Priority {1}.".format(self.name, priority)))
|
|
||||||
|
|
||||||
def get_repeated(values):
|
def get_repeated(values):
|
||||||
unique_list = []
|
unique_list = []
|
||||||
diff = []
|
diff = []
|
||||||
for value in values:
|
for value in values:
|
||||||
if value not in unique_list:
|
if value not in unique_list:
|
||||||
unique_list.append(value)
|
unique_list.append(str(value))
|
||||||
else:
|
else:
|
||||||
if value not in diff:
|
if value not in diff:
|
||||||
diff.append(value)
|
diff.append(str(value))
|
||||||
return " ".join(diff)
|
return " ".join(diff)
|
||||||
|
|||||||
@ -8,10 +8,12 @@
|
|||||||
"service_level_agreement_name",
|
"service_level_agreement_name",
|
||||||
"customer",
|
"customer",
|
||||||
"default_service_level_agreement",
|
"default_service_level_agreement",
|
||||||
|
"ignore_customer_and_default_sla",
|
||||||
"holiday_list",
|
"holiday_list",
|
||||||
"column_break_2",
|
"column_break_2",
|
||||||
"service_level",
|
"service_level",
|
||||||
"employee_group",
|
"employee_group",
|
||||||
|
"default_priority",
|
||||||
"agreement_details_section",
|
"agreement_details_section",
|
||||||
"start_date",
|
"start_date",
|
||||||
"agreement_status",
|
"agreement_status",
|
||||||
@ -25,7 +27,7 @@
|
|||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"depends_on": "eval: !doc.default_service_level_agreement",
|
"depends_on": "eval: !doc.default_service_level_agreement;\neval: !doc.ignore_customer_and_default_sla;",
|
||||||
"fieldname": "customer",
|
"fieldname": "customer",
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
@ -35,7 +37,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
"depends_on": "eval: !doc.customer",
|
"depends_on": "eval: !doc.customer;\neval: !doc.ignore_customer_and_default_sla;",
|
||||||
"fieldname": "default_service_level_agreement",
|
"fieldname": "default_service_level_agreement",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
@ -139,9 +141,23 @@
|
|||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Ignore Start and End Date",
|
"label": "Ignore Start and End Date",
|
||||||
"set_only_once": 1
|
"set_only_once": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fetch_from": "service_level.default_priority",
|
||||||
|
"fieldname": "default_priority",
|
||||||
|
"fieldtype": "Link",
|
||||||
|
"label": "Default Priority",
|
||||||
|
"options": "Issue Priority",
|
||||||
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "ignore_customer_and_default_sla",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Ignore Customer and Default SLA"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"modified": "2019-05-20 15:36:00.326471",
|
"modified": "2019-05-21 21:53:12.686806",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Service Level Agreement",
|
"name": "Service Level Agreement",
|
||||||
|
|||||||
@ -23,6 +23,17 @@ class ServiceLevelAgreement(Document):
|
|||||||
if not self.ignore_start_and_end_date and self.end_date < frappe.utils.getdate():
|
if not self.ignore_start_and_end_date and self.end_date < frappe.utils.getdate():
|
||||||
frappe.throw(_("End Date of Agreement can't be less than today."))
|
frappe.throw(_("End Date of Agreement can't be less than today."))
|
||||||
|
|
||||||
|
def get_service_level_agreement_priority(self, priority):
|
||||||
|
priority = frappe.get_doc("Service Level Priority", {"priority": priority, "parent": self.name})
|
||||||
|
|
||||||
|
return frappe._dict({
|
||||||
|
"priority": priority.priority,
|
||||||
|
"response_time": priority.response_time,
|
||||||
|
"response_time_period": priority.response_time_period,
|
||||||
|
"resolution_time": priority.resolution_time,
|
||||||
|
"resolution_time_period": priority.resolution_time_period
|
||||||
|
})
|
||||||
|
|
||||||
def check_agreement_status():
|
def check_agreement_status():
|
||||||
service_level_agreements = frappe.get_list("Service Level Agreement", filters=[
|
service_level_agreements = frappe.get_list("Service Level Agreement", filters=[
|
||||||
{"agreement_status": "Active"},
|
{"agreement_status": "Active"},
|
||||||
@ -34,17 +45,25 @@ def check_agreement_status():
|
|||||||
frappe.db.set_value("Service Level Agreement", service_level_agreement.name,
|
frappe.db.set_value("Service Level Agreement", service_level_agreement.name,
|
||||||
"agreement_status", "Expired")
|
"agreement_status", "Expired")
|
||||||
|
|
||||||
@frappe.whitelist()
|
|
||||||
def get_active_service_level_agreement_for(priority, customer=None, service_level_agreement=None):
|
def get_active_service_level_agreement_for(priority, customer=None, service_level_agreement=None):
|
||||||
|
filters = [
|
||||||
|
["Service Level Agreement", "agreement_status", "=", "Active"]
|
||||||
|
]
|
||||||
|
|
||||||
if customer and frappe.db.exists("Service Level Agreement", {"customer": customer}) and not service_level_agreement:
|
if priority:
|
||||||
or_filter = {"customer": customer}
|
filters.append(["Service Level Priority", "priority", "=", priority])
|
||||||
elif service_level_agreement:
|
|
||||||
or_filter = {"name": service_level_agreement}
|
|
||||||
else:
|
|
||||||
or_filter = {"default_service_level_agreement": 1}
|
|
||||||
|
|
||||||
agreement = frappe.get_list("Service Level Agreement", filters={"agreement_status": "Active"},
|
or_filters = [
|
||||||
or_filters=or_filter, fields=["name", "service_level", "customer"])
|
["Service Level Agreement", "customer", "=", customer],
|
||||||
|
]
|
||||||
|
if service_level_agreement:
|
||||||
|
or_filters = [
|
||||||
|
["Service Level Agreement", "name", "=", service_level_agreement],
|
||||||
|
]
|
||||||
|
|
||||||
|
or_filters.append(["Service Level Agreement", "default_service_level_agreement", "=", 1])
|
||||||
|
|
||||||
|
agreement = frappe.get_list("Service Level Agreement", filters=filters, or_filters=or_filters,
|
||||||
|
fields=["name", "default_priority", "customer"], debug=True)
|
||||||
|
|
||||||
return agreement[0] if agreement else None
|
return agreement[0] if agreement else None
|
||||||
@ -28,14 +28,14 @@
|
|||||||
"fieldtype": "Section Break"
|
"fieldtype": "Section Break"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"columns": 2,
|
"columns": 1,
|
||||||
"fieldname": "response_time",
|
"fieldname": "response_time",
|
||||||
"fieldtype": "Int",
|
"fieldtype": "Int",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Response Time"
|
"label": "Response Time"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"columns": 2,
|
"columns": 1,
|
||||||
"fieldname": "resolution_time",
|
"fieldname": "resolution_time",
|
||||||
"fieldtype": "Int",
|
"fieldtype": "Int",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
@ -69,11 +69,12 @@
|
|||||||
"default": "0",
|
"default": "0",
|
||||||
"fieldname": "default_priority",
|
"fieldname": "default_priority",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
|
"in_list_view": 1,
|
||||||
"label": "Default Priority"
|
"label": "Default Priority"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"istable": 1,
|
"istable": 1,
|
||||||
"modified": "2019-05-20 17:10:43.687547",
|
"modified": "2019-05-21 06:54:42.674377",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Service Level Priority",
|
"name": "Service Level Priority",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user