fix: handle hold time for custom statuses
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 883e603..976aa8e 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -79,7 +79,7 @@
def handle_hold_time(self, status):
if self.service_level_agreement:
- # set response and resolution variance as None as the issue is on Hold for status as Replied
+ # set response and resolution variance as None as the issue is on Hold
pause_sla_on = frappe.db.get_all("Pause SLA On Status", fields=["status"],
filters={"parent": self.service_level_agreement})
hold_statuses = [entry.status for entry in pause_sla_on]
@@ -93,15 +93,14 @@
update_values['resolution_by'] = None
update_values['resolution_by_variance'] = 0
- # calculate hold time when status is changed from Replied to any other status
+ # calculate hold time when status is changed from any hold status to any non-hold status
if self.status not in hold_statuses and status in hold_statuses:
hold_time = self.total_hold_time if self.total_hold_time else 0
now_time = frappe.flags.current_time or now_datetime()
update_values['total_hold_time'] = hold_time + time_diff_in_seconds(now_time, self.on_hold_since)
- # re-calculate SLA variables after issue changes from Replied to Open
- # add hold time to SLA variables
- if self.status == "Open" and status in hold_statuses:
+ # re-calculate SLA variables after issue changes from any hold status to any non-hold status
+ # add hold time to SLA variables
start_date_time = get_datetime(self.service_level_agreement_creation)
priority = get_priority(self)
now_time = frappe.flags.current_time or now_datetime()
@@ -109,13 +108,15 @@
if not self.first_responded_on:
response_by = get_expected_time_for(parameter="response", service_level=priority, start_date_time=start_date_time)
- update_values['response_by'] = add_to_date(response_by, seconds=round(hold_time))
- response_by_variance = round(time_diff_in_hours(self.response_by, now_time))
+ response_by = add_to_date(response_by, seconds=round(hold_time))
+ response_by_variance = round(time_diff_in_hours(response_by, now_time))
+ update_values['response_by'] = response_by
update_values['response_by_variance'] = response_by_variance + (hold_time // 3600)
resolution_by = get_expected_time_for(parameter="resolution", service_level=priority, start_date_time=start_date_time)
- update_values['resolution_by'] = add_to_date(resolution_by, seconds=round(hold_time))
- resolution_by_variance = round(time_diff_in_hours(self.resolution_by, now_time))
+ resolution_by = add_to_date(resolution_by, seconds=round(hold_time))
+ resolution_by_variance = round(time_diff_in_hours(resolution_by, now_time))
+ update_values['resolution_by'] = resolution_by
update_values['resolution_by_variance'] = resolution_by_variance + (hold_time // 3600)
update_values['on_hold_since'] = None