From 7d1d9aa46bbcb9e50774cb4f90adac12f6536683 Mon Sep 17 00:00:00 2001 From: Himanshu Date: Fri, 12 Jul 2019 06:49:35 +0000 Subject: [PATCH] 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 --- erpnext/config/support.py | 8 +--- erpnext/support/doctype/issue/issue.js | 42 +++++++++++++++++++ erpnext/support/doctype/issue/issue.json | 23 ++++++++-- erpnext/support/doctype/issue/issue.py | 21 +++++++++- erpnext/support/doctype/issue/test_issue.py | 3 +- .../test_service_level_agreement.py | 1 + .../support_settings/support_settings.json | 9 +++- 7 files changed, 93 insertions(+), 14 deletions(-) diff --git a/erpnext/config/support.py b/erpnext/config/support.py index 36b42141963..151c4f743e1 100644 --- a/erpnext/config/support.py +++ b/erpnext/config/support.py @@ -21,13 +21,7 @@ def get_data(): "type": "doctype", "name": "Issue Priority", "description": _("Issue Priority."), - }, - { - "type": "doctype", - "name": "Communication", - "description": _("Communication log."), - "onboard": 1, - }, + } ] }, { diff --git a/erpnext/support/doctype/issue/issue.js b/erpnext/support/doctype/issue/issue.js index 2d9650c5a4d..aec9db9d4ac 100644 --- a/erpnext/support/doctype/issue/issue.js +++ b/erpnext/support/doctype/issue/issue.js @@ -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')) { diff --git a/erpnext/support/doctype/issue/issue.json b/erpnext/support/doctype/issue/issue.json index 72153dcdea3..41fe380e757 100644 --- a/erpnext/support/doctype/issue/issue.json +++ b/erpnext/support/doctype/issue/issue.json @@ -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 -} +} \ No newline at end of file diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py index 226676fec33..ce9fb121459 100644 --- a/erpnext/support/doctype/issue/issue.py +++ b/erpnext/support/doctype/issue/issue.py @@ -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 diff --git a/erpnext/support/doctype/issue/test_issue.py b/erpnext/support/doctype/issue/test_issue.py index eb1736e6c98..7a5e3e300db 100644 --- a/erpnext/support/doctype/issue/test_issue.py +++ b/erpnext/support/doctype/issue/test_issue.py @@ -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 diff --git a/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py b/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py index 68b82d10eca..4a741ea4e18 100644 --- a/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py +++ b/erpnext/support/doctype/service_level_agreement/test_service_level_agreement.py @@ -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, diff --git a/erpnext/support/doctype/support_settings/support_settings.json b/erpnext/support/doctype/support_settings/support_settings.json index 2dced15d4e6..be9e0645915 100644 --- a/erpnext/support/doctype/support_settings/support_settings.json +++ b/erpnext/support/doctype/support_settings/support_settings.json @@ -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",