From 41bf0c6855d11b863f012ca4cc5d60ca0019203a Mon Sep 17 00:00:00 2001 From: Himanshu Warekar Date: Thu, 20 Jun 2019 10:00:11 +0530 Subject: [PATCH] feat: filter sla based on customer in issue --- .../v12_0/move_parameters_to_priority.py | 38 ------------------- erpnext/support/doctype/issue/issue.js | 19 ++++++++++ .../service_level_agreement.py | 12 ++++++ 3 files changed, 31 insertions(+), 38 deletions(-) delete mode 100644 erpnext/patches/v12_0/move_parameters_to_priority.py diff --git a/erpnext/patches/v12_0/move_parameters_to_priority.py b/erpnext/patches/v12_0/move_parameters_to_priority.py deleted file mode 100644 index 310bfe2572..0000000000 --- a/erpnext/patches/v12_0/move_parameters_to_priority.py +++ /dev/null @@ -1,38 +0,0 @@ -# Copyright (c) 2017, Frappe and Contributors -# License: GNU General Public License v3. See license.txt - -from __future__ import unicode_literals -import frappe - -def execute(): - priority = ["Low", "Medium", "High"] - - service_levels = frappe.get_list("Service Level") - for service_level in service_levels: - doc = frappe.get_doc("Service Level", service_level) - for value in priority: - doc.append("priorities", - { - "priority": "{0}".format(value), - "response_time": doc.response_time, - "response_time_period": doc.response_time_period, - "resolution_time": doc.resolution_time, - "resolution_time_period": doc.resolution_time_period, - } - ) - doc.save(ignore_permissions=True) - - service_level_agreements = frappe.get_list("Service Level Agreement") - for service_level_agreement in service_level_agreements: - doc = frappe.get_doc("Service Level Agreement", service_level_agreement) - for value in priority: - doc.append("priorities", - { - "priority": "{0}".format(value), - "response_time": doc.response_time, - "response_time_period": doc.response_time_period, - "resolution_time": doc.resolution_time, - "resolution_time_period": doc.resolution_time_period, - } - ) - doc.save(ignore_permissions=True) \ No newline at end of file diff --git a/erpnext/support/doctype/issue/issue.js b/erpnext/support/doctype/issue/issue.js index 7c939737ed..05bfe97c3d 100644 --- a/erpnext/support/doctype/issue/issue.js +++ b/erpnext/support/doctype/issue/issue.js @@ -1,6 +1,7 @@ frappe.ui.form.on("Issue", { onload: function(frm) { frm.email_field = "raised_by"; + if (frm.doc.service_level_agreement) { frappe.call({ method: "erpnext.support.doctype.service_level_agreement.service_level_agreement.get_service_level_agreement_priorities", @@ -19,6 +20,24 @@ frappe.ui.form.on("Issue", { } } }); + + frappe.call({ + method: "erpnext.support.doctype.service_level_agreement.service_level_agreement.get_valid_service_level_agreements", + args: { + customer: frm.doc.customer, + }, + callback: function (r) { + if (r && r.message) { + frm.set_query('service_level_agreement', function() { + return { + filters: { + "name": ["in", r.message], + } + }; + }); + } + } + }); } }, diff --git a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py index aeeb86dec5..5d71e1fa43 100644 --- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py +++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py @@ -70,6 +70,18 @@ def get_active_service_level_agreement_for(priority, customer=None, service_leve def get_service_level_agreement_priorities(name): return [priority.priority for priority in frappe.get_list("Service Level Priority", filters={"parent": name}, fields=["priority"])] +@frappe.whitelist() +def get_valid_service_level_agreements(customer): + or_filters = [ + ["Service Level Agreement", "entity", "in", [customer, get_customer_group(customer), get_customer_territory(customer), "IS NULL"]], + ["Service Level Agreement", "default_service_level_agreement", "=", 1] + ] + + if not customer: + or_filters = ["Service Level Agreement", "default_service_level_agreement", "=", 1] + + return [d.name for d in frappe.get_list("Service Level Agreement", or_filters=or_filters)] + def get_customer_group(customer): if customer: return frappe.db.get_value("Customer", customer, "customer_group")