feat(Issue): Reset SLA (#18244)

* feat: reset sla

* fix: db.get_single_value

* feat: timeline entry for reset sla

* fix: remove communication from support config

* fix: reset sla on split_issue
This commit is contained in:
Himanshu 2019-07-12 06:49:35 +00:00 committed by Nabin Hait
parent 53e7df078e
commit 7d1d9aa46b
7 changed files with 93 additions and 14 deletions

View File

@ -21,13 +21,7 @@ def get_data():
"type": "doctype",
"name": "Issue Priority",
"description": _("Issue Priority."),
},
{
"type": "doctype",
"name": "Communication",
"description": _("Communication log."),
"onboard": 1,
},
}
]
},
{

View File

@ -2,6 +2,12 @@ frappe.ui.form.on("Issue", {
onload: function(frm) {
frm.email_field = "raised_by";
frappe.db.get_value("Support Settings", {name: "Support Settings"}, "allow_resetting_service_level_agreement", (r) => {
if (!r.allow_resetting_service_level_agreement) {
frm.set_df_property("reset_service_level_agreement", "hidden", 1) ;
}
});
if (frm.doc.service_level_agreement) {
frappe.call({
method: "erpnext.support.doctype.service_level_agreement.service_level_agreement.get_service_level_agreement_filters",
@ -73,6 +79,42 @@ frappe.ui.form.on("Issue", {
}
},
reset_service_level_agreement: function(frm) {
let reset_sla = new frappe.ui.Dialog({
title: __("Reset Service Level Agreement"),
fields: [
{
fieldtype: "Data",
fieldname: "reason",
label: __("Reason"),
reqd: 1
}
],
primary_action_label: __("Reset"),
primary_action: (values) => {
reset_sla.disable_primary_action();
reset_sla.hide();
reset_sla.clear();
frappe.show_alert({
indicator: 'green',
message: __('Resetting Service Level Agreement.')
});
frm.call("reset_service_level_agreement", {
reason: values.reason,
user: frappe.session.user_email
}, () => {
reset_sla.enable_primary_action();
frm.refresh();
frappe.msgprint(__("Service Level Agreement Reset."));
});
}
});
reset_sla.show();
},
timeline_refresh: function(frm) {
// create button for "Help Article"
if(frappe.model.can_create('Help Article')) {

View File

@ -22,10 +22,12 @@
"service_level_agreement",
"response_by",
"response_by_variance",
"reset_service_level_agreement",
"cb",
"agreement_fulfilled",
"resolution_by",
"resolution_by_variance",
"service_level_agreement_creation",
"response",
"mins_to_first_response",
"first_responded_on",
@ -68,9 +70,9 @@
"fieldname": "subject",
"fieldtype": "Data",
"in_global_search": 1,
"in_standard_filter": 1,
"label": "Subject",
"reqd": 1,
"in_standard_filter": 1
"reqd": 1
},
{
"fieldname": "customer",
@ -336,11 +338,24 @@
"fieldtype": "Float",
"label": "Resolution By Variance",
"read_only": 1
},
{
"fieldname": "service_level_agreement_creation",
"fieldtype": "Datetime",
"hidden": 1,
"label": "Service Level Agreement Creation",
"read_only": 1
},
{
"depends_on": "eval: doc.service_level_agreement",
"fieldname": "reset_service_level_agreement",
"fieldtype": "Button",
"label": "Reset Service Level Agreement"
}
],
"icon": "fa fa-ticket",
"idx": 7,
"modified": "2019-06-30 13:19:38.215525",
"modified": "2019-07-11 23:57:22.015881",
"modified_by": "Administrator",
"module": "Support",
"name": "Issue",
@ -365,4 +380,4 @@
"timeline_field": "customer",
"title_field": "subject",
"track_seen": 1
}
}

View File

@ -121,6 +121,7 @@ class Issue(Document):
# Reset SLA
if replicated_issue.service_level_agreement:
replicated_issue.service_level_agreement_creation = now_datetime()
replicated_issue.service_level_agreement = None
replicated_issue.agreement_fulfilled = "Ongoing"
replicated_issue.response_by = None
@ -173,8 +174,9 @@ class Issue(Document):
if not self.creation:
self.creation = now_datetime()
self.service_level_agreement_creation = now_datetime()
start_date_time = get_datetime(self.creation)
start_date_time = get_datetime(self.service_level_agreement_creation)
self.response_by = get_expected_time_for(parameter='response', service_level=priority, start_date_time=start_date_time)
self.resolution_by = get_expected_time_for(parameter='resolution', service_level=priority, start_date_time=start_date_time)
@ -193,6 +195,23 @@ class Issue(Document):
self.set_response_and_resolution_time(priority=self.priority, service_level_agreement=self.service_level_agreement)
frappe.msgprint(_("Service Level Agreement has been changed to {0}.").format(self.service_level_agreement))
def reset_service_level_agreement(self, reason, user):
if not frappe.db.get_single_value("Support Settings", "allow_resetting_service_level_agreement"):
frappe.throw(_("Allow Resetting Service Level Agreement from Support Settings."))
frappe.get_doc({
"doctype": "Comment",
"comment_type": "Info",
"reference_doctype": self.doctype,
"reference_name": self.name,
"comment_email": user,
"content": " resetted Service Level Agreement - {0}".format(_(reason)),
}).insert(ignore_permissions=True)
self.service_level_agreement_creation = now_datetime()
self.set_response_and_resolution_time(priority=self.priority, service_level_agreement=self.service_level_agreement)
self.save()
def get_expected_time_for(parameter, service_level, start_date_time):
current_date_time = start_date_time
expected_time = current_date_time

View File

@ -80,7 +80,8 @@ def make_issue(creation=None, customer=None, index=0):
"customer": customer,
"raised_by": "test@example.com",
"description": "Service Level Agreement Issue",
"creation": creation
"creation": creation,
"service_level_agreement_creation": creation
}).insert(ignore_permissions=True)
return issue

View File

@ -76,6 +76,7 @@ def create_service_level_agreement(default_service_level_agreement, service_leve
service_level_agreement = frappe.get_doc({
"doctype": "Service Level Agreement",
"enable": 1,
"default_service_level_agreement": default_service_level_agreement,
"service_level": service_level,
"holiday_list": holiday_list,

View File

@ -6,6 +6,7 @@
"field_order": [
"sb_00",
"track_service_level_agreement",
"allow_resetting_service_level_agreement",
"issues_sb",
"close_issue_after_days",
"portal_sb",
@ -118,10 +119,16 @@
"fieldname": "track_service_level_agreement",
"fieldtype": "Check",
"label": "Track Service Level Agreement"
},
{
"default": "0",
"fieldname": "allow_resetting_service_level_agreement",
"fieldtype": "Check",
"label": "Allow Resetting Service Level Agreement"
}
],
"issingle": 1,
"modified": "2019-07-09 17:11:38.216732",
"modified": "2019-07-10 22:52:39.663873",
"modified_by": "Administrator",
"module": "Support",
"name": "Support Settings",