Move target warehouse validation to submit
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 742f0fa..ca133b4 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -64,6 +64,13 @@
 		self.calculate_rate_and_amount(update_finished_item_rate=False)
 
 	def on_submit(self):
+		for d in self.items:
+			if self.purpose == "Subcontract" and not d.t_warehouse:
+				if self.to_warehouse:
+					d.t_warehouse = self.to_warehouse
+				else:
+					frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx))
+
 		self.update_stock_ledger()
 
 		from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit
@@ -126,11 +133,7 @@
 		"""perform various (sometimes conditional) validations on warehouse"""
 
 		source_mandatory = ["Material Issue", "Material Transfer", "Subcontract", "Material Transfer for Manufacture"]
-		#Allow creation of draft subcontract entries without target warehouse
-		if self.purpose == "Subcontract" and not frappe.db.exists("Stock Entry",{"name": self.name}):
-			target_mandatory = ["Material Receipt", "Material Transfer", "Material Transfer for Manufacture"]
-		else:
-			target_mandatory = ["Material Receipt", "Material Transfer", "Subcontract", "Material Transfer for Manufacture"]
+		target_mandatory = ["Material Receipt", "Material Transfer", "Subcontract", "Material Transfer for Manufacture"]
 
 		validate_for_manufacture_repack = any([d.bom_no for d in self.get("items")])
 
@@ -161,7 +164,9 @@
 				if self.to_warehouse:
 					d.t_warehouse = self.to_warehouse
 				else:
-					frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx))
+					#move validation for sub contract to submit
+					if self.purpose != "Subcontract":
+						frappe.throw(_("Target warehouse is mandatory for row {0}").format(d.idx))
 
 			if self.purpose in ["Manufacture", "Repack"]:
 				if validate_for_manufacture_repack: