added is_item_table_empty validation in submit event of purchase common
diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py
index 7d858a9..dc17071 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -482,6 +482,9 @@
 
 
 	def on_submit(self):
+		purchase_controller = webnotes.get_obj("Purchase Common")
+		purchase_controller.is_item_table_empty(self)
+
 		self.check_prev_docstatus()
 		
 		# Check for Approving Authority
@@ -492,8 +495,7 @@
 		self.make_gl_entries()
 				
 		self.update_against_document_in_jv()
-		
-		get_obj(dt = 'Purchase Common').update_prevdoc_detail(self, is_submit = 1)
+		purchase_controller.update_prevdoc_detail(self, is_submit = 1)
 
 
 	def make_gl_entries(self, is_cancel = 0):
diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index f4cfc29..519905a 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -280,21 +280,8 @@
 	cur_frm.cscript.calc_amount(doc, 5);
 }
 
-//==================== check if item table is blank ==============================================
-var is_item_table = function(doc,cdt,cdn) {
-	// Step 1 :=>Get all childrens/ rows from Detail Table
-	var cl = getchildren(tname, doc.name, fname);
-	// Step 2 :=> If there are no rows then set validated = false, this will stop further execution of code.
-	if (cl.length == 0) {
-		alert("There is no item in table"); validated = false;
-	}
-}
-
 //==================== Validate ====================================================================
 cur_frm.cscript.validate = function(doc, cdt, cdn) {
-	// Step 1:=> check if item table is blank
-	is_item_table(doc,cdt,cdn);
-	// Step 2:=> Calculate Amount
 	cur_frm.cscript.calc_amount(doc, 1);
 
 	// calculate advances if pv
diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py
index e8b725e..bb34228 100644
--- a/buying/doctype/purchase_common/purchase_common.py
+++ b/buying/doctype/purchase_common/purchase_common.py
@@ -22,14 +22,14 @@
 from webnotes.model.doc import Document, addchild
 from webnotes.model.wrapper import getlist, copy_doclist
 from webnotes.model.code import get_obj
-from webnotes import form, msgprint
+from webnotes import form, msgprint, _
 
 sql = webnotes.conn.sql
 	
 from utilities.transaction_base import TransactionBase
 
 class DocType(TransactionBase):
-	def __init__(self, doc, doclist=[]):
+	def __init__(self, doc, doclist=None):
 		self.doc = doc
 		self.doclist = doclist
 
@@ -64,6 +64,11 @@
 
 		self.msg = []
 
+	def is_item_table_empty(self, obj):
+		if not len(obj.doclist.get({"parentfield": obj.fname})):
+			msgprint(_("Hey there! You need to put at least one item in \
+				the item table."), raise_exception=True)
+
 
 	def get_default_schedule_date( self, obj):
 		for d in getlist( obj.doclist, obj.fname):
diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py
index 812f59c..85a11ed 100644
--- a/buying/doctype/purchase_order/purchase_order.py
+++ b/buying/doctype/purchase_order/purchase_order.py
@@ -220,10 +220,11 @@
 
 	# On Submit
 	def on_submit(self):
-		pc_obj = get_obj(dt ='Purchase Common')
+		purchase_controller = webnotes.get_obj("Purchase Common")
+		purchase_controller.is_item_table_empty(self)
 		
 		# Step 1 :=> Update Previous Doc i.e. update pending_qty and Status accordingly
-		pc_obj.update_prevdoc_detail(self, is_submit = 1)
+		purchase_controller.update_prevdoc_detail(self, is_submit = 1)
 
 		# Step 2 :=> Update Bin 
 		self.update_bin(is_submit = 1, is_stopped = 0)
@@ -236,7 +237,7 @@
 			"last_purchase_order", self.doc.name)
 
 		# Step 5 :=> Update last purchase rate
-		pc_obj.update_last_purchase_rate(self, is_submit = 1)
+		purchase_controller.update_last_purchase_rate(self, is_submit = 1)
 
 		# Step 6 :=> Set Status
 		webnotes.conn.set(self.doc,'status','Submitted')
diff --git a/buying/doctype/purchase_request/purchase_request.js b/buying/doctype/purchase_request/purchase_request.js
index 510762a..f46518f 100644
--- a/buying/doctype/purchase_request/purchase_request.js
+++ b/buying/doctype/purchase_request/purchase_request.js
@@ -50,22 +50,19 @@
 	erpnext.hide_naming_series();
 
 	if(doc.docstatus == 1 && doc.status != 'Stopped'){
+		cur_frm.add_custom_button("Make Supplier Quotation", cur_frm.cscript.make_supplier_quotation);
 		if(flt(doc.per_ordered, 2) < 100) {
 			cur_frm.add_custom_button('Make Purchase Order', cur_frm.cscript['Make Purchase Order']);
 			cur_frm.add_custom_button('Stop Purchase Request', cur_frm.cscript['Stop Purchase Request']);
 		}
 		cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms);
-		cur_frm.add_custom_button("Make Supplier Quotation", cur_frm.cscript.make_supplier_quotation);
+		
 	}
  
 	if(doc.docstatus == 1 && doc.status == 'Stopped')
 		cur_frm.add_custom_button('Unstop Purchase Request', cur_frm.cscript['Unstop Purchase Request'])
 }
 
-//======================= validation ===================================
-cur_frm.cscript.validate = function(doc,cdt,cdn){
-	is_item_table(doc,cdt,cdn);
-}
 //======================= transaction date =============================
 cur_frm.cscript.transaction_date = function(doc,cdt,cdn){
 	if(doc.__islocal){ 
diff --git a/buying/doctype/purchase_request/purchase_request.py b/buying/doctype/purchase_request/purchase_request.py
index 7d0e08e..3f7f932 100644
--- a/buying/doctype/purchase_request/purchase_request.py
+++ b/buying/doctype/purchase_request/purchase_request.py
@@ -178,6 +178,9 @@
 				get_obj('Warehouse', d.warehouse).update_bin(args)		
 		
 	def on_submit(self):
+		purchase_controller = webnotes.get_obj("Purchase Common")
+		purchase_controller.is_item_table_empty(self)
+		
 		webnotes.conn.set(self.doc,'status','Submitted')
 		self.update_bin(is_submit = 1, is_stopped = 0)
 	
diff --git a/buying/doctype/supplier_quotation/supplier_quotation.py b/buying/doctype/supplier_quotation/supplier_quotation.py
index e5861e5..cac4bab 100644
--- a/buying/doctype/supplier_quotation/supplier_quotation.py
+++ b/buying/doctype/supplier_quotation/supplier_quotation.py
@@ -36,6 +36,9 @@
 		self.doc.status = "Draft"
 
 	def on_submit(self):
+		purchase_controller = webnotes.get_obj("Purchase Common")
+		purchase_controller.is_item_table_empty(self)
+		
 		webnotes.conn.set(self.doc, "status", "Submitted")
 
 	def on_cancel(self):
diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py
index e5e1fe1..5e60753 100644
--- a/stock/doctype/purchase_receipt/purchase_receipt.py
+++ b/stock/doctype/purchase_receipt/purchase_receipt.py
@@ -284,15 +284,17 @@
 
 	# on submit
 	def on_submit(self):
+		purchase_controller = webnotes.get_obj("Purchase Common")
+		purchase_controller.is_item_table_empty(self)
+
 		# Check for Approving Authority
 		get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total)
 
 		# Set status as Submitted
 		webnotes.conn.set(self.doc,'status', 'Submitted')
-		pc_obj = get_obj('Purchase Common')
 
 		# Update Previous Doc i.e. update pending_qty and Status accordingly
-		pc_obj.update_prevdoc_detail(self, is_submit = 1)
+		purchase_controller.update_prevdoc_detail(self, is_submit = 1)
 
 		# Update Serial Record
 		get_obj('Stock Ledger').update_serial_record(self, 'purchase_receipt_details', is_submit = 1, is_incoming = 1)
@@ -301,7 +303,7 @@
 		self.update_stock(is_submit = 1)
 
 		# Update last purchase rate
-		pc_obj.update_last_purchase_rate(self, 1)
+		purchase_controller.update_last_purchase_rate(self, 1)