Check credit limit in Delivery Note / Sales Invoice, only if not created against Sales Order
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 92e3c0d..2ebe25d 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -88,13 +88,13 @@
 		self.update_status_updater_args()
 		self.update_prevdoc_status()
 
+		# this sequence because outstanding may get -ve
+		self.make_gl_entries()
+		
 		if not self.is_return:
 			self.update_billing_status_for_zero_amount_refdoc("Sales Order")
 			self.check_credit_limit()
 
-		# this sequence because outstanding may get -ve
-		self.make_gl_entries()
-
 		if not cint(self.is_pos) == 1 and not self.is_return:
 			self.update_against_document_in_jv()
 
@@ -161,6 +161,17 @@
 				'extra_cond': """ and exists (select name from `tabSales Invoice` where name=`tabSales Invoice Item`.parent and update_stock=1 and is_return=1)"""
 			}
 		])
+		
+	def check_credit_limit(self):
+		from erpnext.selling.doctype.customer.customer import check_credit_limit
+		
+		validate_against_credit_limit = False
+		for d in self.get("items"):
+			if not (d.sales_order or d.delivery_note):
+				validate_against_credit_limit = True
+				break
+		if validate_against_credit_limit:
+			check_credit_limit(self.customer, self.company)
 
 	def set_missing_values(self, for_validate=False):
 		pos = self.set_pos_fields(for_validate)
diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py
index 569bb82..4b44932 100644
--- a/erpnext/controllers/selling_controller.py
+++ b/erpnext/controllers/selling_controller.py
@@ -32,10 +32,6 @@
 		self.validate_max_discount()
 		check_active_sales_items(self)
 
-	def check_credit_limit(self):
-		from erpnext.selling.doctype.customer.customer import check_credit_limit
-		check_credit_limit(self.customer, self.company)
-
 	def set_missing_values(self, for_validate=False):
 		super(SellingController, self).set_missing_values(for_validate)
 
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 065d329..8fcff10 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -175,6 +175,10 @@
 		self.update_prevdoc_status('cancel')
 
 		frappe.db.set(self, 'status', 'Cancelled')
+		
+	def check_credit_limit(self):
+		from erpnext.selling.doctype.customer.customer import check_credit_limit
+		check_credit_limit(self.customer, self.company)
 
 	def check_nextdoc_docstatus(self):
 		# Checks Delivery Note
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py
index c8f995c..51d4e40 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.py
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.py
@@ -214,6 +214,17 @@
 		self.cancel_packing_slips()
 
 		self.make_gl_entries_on_cancel()
+		
+	def check_credit_limit(self):
+		from erpnext.selling.doctype.customer.customer import check_credit_limit
+		
+		validate_against_credit_limit = False
+		for d in self.get("items"):
+			if not (d.against_sales_order or d.against_sales_invoice):
+				validate_against_credit_limit = True
+				break
+		if validate_against_credit_limit:
+			check_credit_limit(self.customer, self.company)
 
 	def validate_packed_qty(self):
 		"""