mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-21 05:59:18 +00:00
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:
@@ -21,13 +21,7 @@ def get_data():
|
|||||||
"type": "doctype",
|
"type": "doctype",
|
||||||
"name": "Issue Priority",
|
"name": "Issue Priority",
|
||||||
"description": _("Issue Priority."),
|
"description": _("Issue Priority."),
|
||||||
},
|
}
|
||||||
{
|
|
||||||
"type": "doctype",
|
|
||||||
"name": "Communication",
|
|
||||||
"description": _("Communication log."),
|
|
||||||
"onboard": 1,
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -2,6 +2,12 @@ frappe.ui.form.on("Issue", {
|
|||||||
onload: function(frm) {
|
onload: function(frm) {
|
||||||
frm.email_field = "raised_by";
|
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) {
|
if (frm.doc.service_level_agreement) {
|
||||||
frappe.call({
|
frappe.call({
|
||||||
method: "erpnext.support.doctype.service_level_agreement.service_level_agreement.get_service_level_agreement_filters",
|
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) {
|
timeline_refresh: function(frm) {
|
||||||
// create button for "Help Article"
|
// create button for "Help Article"
|
||||||
if(frappe.model.can_create('Help Article')) {
|
if(frappe.model.can_create('Help Article')) {
|
||||||
|
|||||||
@@ -22,10 +22,12 @@
|
|||||||
"service_level_agreement",
|
"service_level_agreement",
|
||||||
"response_by",
|
"response_by",
|
||||||
"response_by_variance",
|
"response_by_variance",
|
||||||
|
"reset_service_level_agreement",
|
||||||
"cb",
|
"cb",
|
||||||
"agreement_fulfilled",
|
"agreement_fulfilled",
|
||||||
"resolution_by",
|
"resolution_by",
|
||||||
"resolution_by_variance",
|
"resolution_by_variance",
|
||||||
|
"service_level_agreement_creation",
|
||||||
"response",
|
"response",
|
||||||
"mins_to_first_response",
|
"mins_to_first_response",
|
||||||
"first_responded_on",
|
"first_responded_on",
|
||||||
@@ -68,9 +70,9 @@
|
|||||||
"fieldname": "subject",
|
"fieldname": "subject",
|
||||||
"fieldtype": "Data",
|
"fieldtype": "Data",
|
||||||
"in_global_search": 1,
|
"in_global_search": 1,
|
||||||
|
"in_standard_filter": 1,
|
||||||
"label": "Subject",
|
"label": "Subject",
|
||||||
"reqd": 1,
|
"reqd": 1
|
||||||
"in_standard_filter": 1
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "customer",
|
"fieldname": "customer",
|
||||||
@@ -336,11 +338,24 @@
|
|||||||
"fieldtype": "Float",
|
"fieldtype": "Float",
|
||||||
"label": "Resolution By Variance",
|
"label": "Resolution By Variance",
|
||||||
"read_only": 1
|
"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",
|
"icon": "fa fa-ticket",
|
||||||
"idx": 7,
|
"idx": 7,
|
||||||
"modified": "2019-06-30 13:19:38.215525",
|
"modified": "2019-07-11 23:57:22.015881",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Issue",
|
"name": "Issue",
|
||||||
|
|||||||
@@ -121,6 +121,7 @@ class Issue(Document):
|
|||||||
|
|
||||||
# Reset SLA
|
# Reset SLA
|
||||||
if replicated_issue.service_level_agreement:
|
if replicated_issue.service_level_agreement:
|
||||||
|
replicated_issue.service_level_agreement_creation = now_datetime()
|
||||||
replicated_issue.service_level_agreement = None
|
replicated_issue.service_level_agreement = None
|
||||||
replicated_issue.agreement_fulfilled = "Ongoing"
|
replicated_issue.agreement_fulfilled = "Ongoing"
|
||||||
replicated_issue.response_by = None
|
replicated_issue.response_by = None
|
||||||
@@ -173,8 +174,9 @@ class Issue(Document):
|
|||||||
|
|
||||||
if not self.creation:
|
if not self.creation:
|
||||||
self.creation = now_datetime()
|
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.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)
|
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)
|
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))
|
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):
|
def get_expected_time_for(parameter, service_level, start_date_time):
|
||||||
current_date_time = start_date_time
|
current_date_time = start_date_time
|
||||||
expected_time = current_date_time
|
expected_time = current_date_time
|
||||||
|
|||||||
@@ -80,7 +80,8 @@ def make_issue(creation=None, customer=None, index=0):
|
|||||||
"customer": customer,
|
"customer": customer,
|
||||||
"raised_by": "test@example.com",
|
"raised_by": "test@example.com",
|
||||||
"description": "Service Level Agreement Issue",
|
"description": "Service Level Agreement Issue",
|
||||||
"creation": creation
|
"creation": creation,
|
||||||
|
"service_level_agreement_creation": creation
|
||||||
}).insert(ignore_permissions=True)
|
}).insert(ignore_permissions=True)
|
||||||
|
|
||||||
return issue
|
return issue
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ def create_service_level_agreement(default_service_level_agreement, service_leve
|
|||||||
|
|
||||||
service_level_agreement = frappe.get_doc({
|
service_level_agreement = frappe.get_doc({
|
||||||
"doctype": "Service Level Agreement",
|
"doctype": "Service Level Agreement",
|
||||||
|
"enable": 1,
|
||||||
"default_service_level_agreement": default_service_level_agreement,
|
"default_service_level_agreement": default_service_level_agreement,
|
||||||
"service_level": service_level,
|
"service_level": service_level,
|
||||||
"holiday_list": holiday_list,
|
"holiday_list": holiday_list,
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
"field_order": [
|
"field_order": [
|
||||||
"sb_00",
|
"sb_00",
|
||||||
"track_service_level_agreement",
|
"track_service_level_agreement",
|
||||||
|
"allow_resetting_service_level_agreement",
|
||||||
"issues_sb",
|
"issues_sb",
|
||||||
"close_issue_after_days",
|
"close_issue_after_days",
|
||||||
"portal_sb",
|
"portal_sb",
|
||||||
@@ -118,10 +119,16 @@
|
|||||||
"fieldname": "track_service_level_agreement",
|
"fieldname": "track_service_level_agreement",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Track Service Level Agreement"
|
"label": "Track Service Level Agreement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "allow_resetting_service_level_agreement",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Allow Resetting Service Level Agreement"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"issingle": 1,
|
"issingle": 1,
|
||||||
"modified": "2019-07-09 17:11:38.216732",
|
"modified": "2019-07-10 22:52:39.663873",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Support",
|
"module": "Support",
|
||||||
"name": "Support Settings",
|
"name": "Support Settings",
|
||||||
|
|||||||
Reference in New Issue
Block a user