diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py index 773e61a516e..3fe8ca0bc60 100644 --- a/erpnext/support/doctype/issue/issue.py +++ b/erpnext/support/doctype/issue/issue.py @@ -76,8 +76,6 @@ class Issue(Document): 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 @@ class Issue(Document): 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 5d71e1fa434..62318127445 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 @@ 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] - ] - +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)]