feat: update sla using custom script
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 773e61a..3fe8ca0 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -76,8 +76,6 @@
self.resolution_date = None
def update_agreement_status(self):
- current_time = frappe.flags.current_time or now_datetime()
-
if self.service_level_agreement and self.agreement_fulfilled == "Ongoing":
if frappe.db.get_value("Issue", self.name, "response_by_variance") < 0 or \
frappe.db.get_value("Issue", self.name, "resolution_by_variance") < 0:
@@ -86,6 +84,19 @@
else:
self.agreement_fulfilled = "Fulfilled"
+ def update_agreement_fulfilled_on_custom_status(self):
+ """
+ Update Agreement Fulfilled status using Custom Scripts for Custom Issue Status
+ """
+ if not self.first_responded_on: # first_responded_on set when first reply is sent to customer
+ self.response_by_variance = round(time_diff_in_hours(self.response_by, now_datetime()), 2)
+
+ if not self.resolution_date: # resolution_date set when issue has been closed
+ self.resolution_by_variance = round(time_diff_in_hours(self.resolution_by, now_datetime()), 2)
+
+ self.agreement_fulfilled = "Fulfilled" if self.response_by_variance > 0 and self.resolution_by_variance > 0 else "Failed"
+ self.save(ignore_permissions=True)
+
def create_communication(self):
communication = frappe.new_doc("Communication")
communication.update({
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 5d71e1f..6231812 100644
--- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
+++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
@@ -71,14 +71,16 @@
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]
- ]
-
+def get_valid_service_level_agreements(customer=None):
if not customer:
- or_filters = ["Service Level Agreement", "default_service_level_agreement", "=", 1]
+ or_filters = [
+ ["Service Level Agreement", "default_service_level_agreement", "=", 1]
+ ]
+ else:
+ 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]
+ ]
return [d.name for d in frappe.get_list("Service Level Agreement", or_filters=or_filters)]