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)]