test: issue closing after being on hold
diff --git a/erpnext/support/doctype/issue/test_issue.py b/erpnext/support/doctype/issue/test_issue.py
index ab9a444b..0559b15 100644
--- a/erpnext/support/doctype/issue/test_issue.py
+++ b/erpnext/support/doctype/issue/test_issue.py
@@ -142,6 +142,32 @@
issue.reload()
self.assertEqual(flt(issue.total_hold_time, 2), 2700)
+ def test_issue_close_after_on_hold(self):
+ creation = get_datetime("2021-11-01 19:00")
+
+ issue = make_issue(creation, index=1)
+ create_communication(issue.name, "test@example.com", "Received", creation)
+
+ # send a reply within SLA
+ creation = get_datetime("2021-11-02 11:00")
+ create_communication(issue.name, "test@admin.com", "Sent", creation)
+
+ frappe.flags.current_time = creation
+ issue.reload()
+ issue.status = 'Replied'
+ issue.save()
+
+ self.assertEqual(issue.on_hold_since, frappe.flags.current_time)
+
+ # close the issue after being on hold for 20 days
+ frappe.flags.current_time = get_datetime("2021-11-22 01:00")
+ issue.status = 'Closed'
+ issue.save()
+
+ self.assertEqual(issue.resolution_by, get_datetime('2021-11-22 06:00:00'))
+ self.assertEqual(issue.resolution_date, get_datetime('2021-11-22 01:00:00'))
+ self.assertEqual(issue.agreement_status, 'Fulfilled')
+
class TestFirstResponseTime(TestSetUp):
# working hours used in all cases: Mon-Fri, 10am to 6pm
# all dates are in the mm-dd-yyyy format
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 565f050..9c1e536 100644
--- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
+++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
@@ -642,7 +642,7 @@
def set_response_by_and_variance(doc, start_date_time, priority):
if doc.meta.has_field("response_by"):
doc.response_by = get_expected_time_for(parameter="response", service_level=priority, start_date_time=start_date_time)
- if doc.meta.has_field("total_hold_time") and doc.get('total_hold_time'):
+ if doc.meta.has_field("total_hold_time") and doc.get('total_hold_time') and not doc.get('first_responded_on'):
doc.response_by = add_to_date(doc.response_by, seconds=round(doc.get('total_hold_time')))
if doc.meta.has_field("response_by_variance") and not doc.get('first_responded_on'):