fix: scheduling bug if out of bussiness hours
diff --git a/erpnext/support/doctype/issue/issue.py b/erpnext/support/doctype/issue/issue.py
index 3fe8ca0..b8d213c 100644
--- a/erpnext/support/doctype/issue/issue.py
+++ b/erpnext/support/doctype/issue/issue.py
@@ -7,7 +7,7 @@
 from frappe import _
 from frappe import utils
 from frappe.model.document import Document
-from frappe.utils import now, time_diff_in_hours, now_datetime, getdate, get_weekdays, add_to_date, today, get_time, get_datetime
+from frappe.utils import now, time_diff_in_hours, now_datetime, getdate, get_weekdays, add_to_date, today, get_time, get_datetime, get_time_in_timedelta
 from datetime import datetime, timedelta
 from frappe.model.mapper import get_mapped_doc
 from frappe.utils.user import is_website_user
@@ -217,7 +217,9 @@
 		current_weekday = weekdays[current_date_time.weekday()]
 
 		if not is_holiday(current_date_time, holidays) and current_weekday in support_days:
-			start_time = current_date_time - datetime(current_date_time.year, current_date_time.month, current_date_time.day) if getdate(current_date_time) == getdate(start_date_time) else support_days[current_weekday].start_time
+			start_time = current_date_time - datetime(current_date_time.year, current_date_time.month, current_date_time.day) \
+				if getdate(current_date_time) == getdate(start_date_time) and get_time_in_timedelta(current_date_time.time()) > support_days[current_weekday].start_time \
+				else support_days[current_weekday].start_time
 			end_time = support_days[current_weekday].end_time
 			time_left_today = time_diff_in_hours(end_time, start_time)
 
diff --git a/erpnext/support/doctype/issue/test_issue.py b/erpnext/support/doctype/issue/test_issue.py
index 1a793a6..519c107 100644
--- a/erpnext/support/doctype/issue/test_issue.py
+++ b/erpnext/support/doctype/issue/test_issue.py
@@ -5,7 +5,7 @@
 import frappe
 import unittest
 from erpnext.support.doctype.service_level_agreement.test_service_level_agreement import create_service_level_agreements_for_issues
-from frappe.utils import now_datetime
+from frappe.utils import now_datetime, get_datetime
 import datetime
 from datetime import timedelta
 from frappe.desk.form import assign_to
@@ -20,38 +20,65 @@
 	def test_response_time_and_resolution_time_based_on_different_sla(self):
 		create_service_level_agreements_for_issues()
 
-		creation = "2019-03-04 12:00:00"
-
-		# make issue with customer specific SLA
+		creation = datetime.datetime(2019, 3, 4, 12, 0)
+		"""
+			make issue with customer specific SLA
+		"""
 		customer = create_customer("_Test Customer", "__Test SLA Customer Group", "__Test SLA Territory")
-		issue = make_issue(creation, "_Test Customer")
+		issue = make_issue(creation, "_Test Customer", 1)
 
 		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
 		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
 
-		# make issue with customer_group specific SLA
+		"""
+			make issue with customer_group specific SLA
+		"""
 		customer = create_customer("__Test Customer", "_Test SLA Customer Group", "__Test SLA Territory")
-		issue = make_issue(creation, "__Test Customer")
+		issue = make_issue(creation, "__Test Customer", 2)
 
 		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
 		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
 
-		# make issue with territory specific SLA
+		"""
+			make issue with territory specific SLA
+		"""
 		customer = create_customer("___Test Customer", "__Test SLA Customer Group", "_Test SLA Territory")
-		issue = make_issue(creation, "___Test Customer")
+		issue = make_issue(creation, "___Test Customer", 3)
 
 		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
 		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 15, 0))
 
-		# make issue with default SLA
-		issue = make_issue(creation)
+		"""
+			make issue with default SLA
+		"""
+		issue = make_issue(creation=creation, index=4)
 
 		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 16, 0))
 		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 18, 0))
 
-		creation = "2019-03-04 14:00:00"
-		# make issue with default SLA next day
-		issue = make_issue(creation)
+		"""
+			make issue with default SLA before working hours
+		"""
+		creation = datetime.datetime(2019, 3, 4, 7, 0)
+		issue = make_issue(creation=creation, index=5)
+
+		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 14, 0))
+		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 4, 16, 0))
+
+		"""
+			make issue with default SLA after working hours
+		"""
+		creation = datetime.datetime(2019, 3, 4, 20, 0)
+		issue = make_issue(creation, index=6)
+
+		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 6, 14, 0))
+		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 6, 16, 0))
+
+		"""
+			make issue with default SLA next day
+		"""
+		creation = datetime.datetime(2019, 3, 4, 14, 0)
+		issue = make_issue(creation=creation, index=7)
 
 		self.assertEquals(issue.response_by, datetime.datetime(2019, 3, 4, 18, 0))
 		self.assertEquals(issue.resolution_by, datetime.datetime(2019, 3, 6, 12, 0))
@@ -63,11 +90,11 @@
 
 		self.assertEqual(issue.agreement_fulfilled, 'Fulfilled')
 
-def make_issue(creation=None, customer=None):
+def make_issue(creation=None, customer=None, index=0):
 
 	issue = frappe.get_doc({
 		"doctype": "Issue",
-		"subject": "Service Level Agreement Issue",
+		"subject": "Service Level Agreement Issue {0}".format(index),
 		"customer": customer,
 		"raised_by": "test@example.com",
 		"description": "Service Level Agreement Issue",
diff --git a/erpnext/support/doctype/service_level_agreement/service_level_agreement.json b/erpnext/support/doctype/service_level_agreement/service_level_agreement.json
index 17ccb5c..f91a80c 100644
--- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.json
+++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.json
@@ -31,8 +31,7 @@
    "depends_on": "eval: !doc.customer;",
    "fieldname": "default_service_level_agreement",
    "fieldtype": "Check",
-   "label": "Default Service Level Agreement",
-   "set_only_once": 1
+   "label": "Default Service Level Agreement"
   },
   {
    "fieldname": "service_level",
@@ -41,8 +40,7 @@
    "in_standard_filter": 1,
    "label": "Service Level",
    "options": "Service Level",
-   "reqd": 1,
-   "set_only_once": 1
+   "reqd": 1
   },
   {
    "fetch_from": "service_level.holiday_list",
@@ -153,7 +151,7 @@
    "options": "\nCustomer\nCustomer Group\nTerritory"
   }
  ],
- "modified": "2019-06-20 10:34:58.634693",
+ "modified": "2019-06-20 18:04:14.293378",
  "modified_by": "Administrator",
  "module": "Support",
  "name": "Service Level Agreement",
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 6231812..b804581 100644
--- a/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
+++ b/erpnext/support/doctype/service_level_agreement/service_level_agreement.py
@@ -21,6 +21,10 @@
 				if self.end_date < frappe.utils.getdate():
 					frappe.throw(_("End Date of Agreement can't be less than today."))
 
+		if self.entity_type and self.entity:
+			if frappe.db.exists("Service Level Agreement", {"entity_type": self.entity_type, "entity": self.entity, "name": ["!=", self.name]}):
+				frappe.throw(_("Service Level Agreement with Entity Type {0} and Entity {1} already exists.").format(self.entity_type, self.entity))
+
 	def get_service_level_agreement_priority(self, priority):
 		priority = frappe.get_doc("Service Level Priority", {"priority": priority, "parent": self.name})