diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index 0196c31..e374b3b 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -5,7 +5,7 @@
 import frappe
 import frappe.defaults
 
-from frappe.utils import cstr, cint, flt, comma_or, nowdate, get_datetime
+from frappe.utils import cstr, cint, flt, comma_or, get_datetime
 
 from frappe import _
 from erpnext.stock.utils import get_incoming_rate
@@ -185,11 +185,16 @@
 
 	def validate_production_order(self):
 		if self.purpose in ("Manufacture", "Material Transfer for Manufacture"):
+			if not self.bom_no:
+				frappe.throw(_("BOM No is mandatory"))
+				
 			# check if production order is entered
 			if not self.production_order:
 				frappe.throw(_("Production order number is mandatory for stock entry purpose manufacture"))
 			# check for double entry
 			if self.purpose=="Manufacture":
+				if not self.fg_completed_qty:
+					frappe.throw(_("For Quantity (Manufactured Qty) is mandatory"))
 				self.check_if_operations_completed()
 				self.check_duplicate_entry_for_production_order()
 		elif self.purpose != "Material Transfer":
@@ -378,10 +383,21 @@
 
 	def validate_finished_goods(self):
 		"""validation: finished good quantity should be same as manufacturing quantity"""
+		items_with_target_warehouse = []
 		for d in self.get('items'):
 			if d.bom_no and flt(d.transfer_qty) != flt(self.fg_completed_qty):
 				frappe.throw(_("Quantity in row {0} ({1}) must be same as manufactured quantity {2}"). \
 					format(d.idx, d.transfer_qty, self.fg_completed_qty))
+					
+			if self.production_order and self.purpose == "Manufacture" and d.t_warehouse:
+				items_with_target_warehouse.append(d.item_code)
+				
+		if self.production_order and self.purpose == "Manufacture":
+			production_item = frappe.db.get_value("Production Order", 
+				self.production_order, "production_item")
+			if production_item not in items_with_target_warehouse:
+				frappe.throw(_("Finished Item {0} must be entered for Manufacture type entry")
+					.format(production_item))
 
 	def validate_return_reference_doc(self):
 		"""validate item with reference doc"""
@@ -399,7 +415,6 @@
 
 			# posting date check
 			ref_posting_datetime = "%s %s" % (ref.doc.posting_date, ref.doc.posting_time or "00:00:00")
-			this_posting_datetime = "%s %s" % (self.posting_date, self.posting_time)
 
 			if get_datetime(ref_posting_datetime) < get_datetime(ref_posting_datetime):
 				from frappe.utils.dateutils import datetime_in_user_format
@@ -474,9 +489,10 @@
 			pro_doc = frappe.get_doc("Production Order", self.production_order)
 			_validate_production_order(pro_doc)
 			pro_doc.run_method("update_status")
-			pro_doc.run_method("update_production_order_qty")
-			if self.purpose == "Manufacture":
-				self.update_planned_qty(pro_doc)
+			if self.fg_completed_qty:
+				pro_doc.run_method("update_production_order_qty")
+				if self.purpose == "Manufacture":
+					self.update_planned_qty(pro_doc)
 
 	def update_planned_qty(self, pro_doc):
 		from erpnext.stock.utils import update_bin
@@ -546,9 +562,6 @@
 		return ret
 
 	def get_items(self):
-		if not self.fg_completed_qty or not self.bom_no:
-			frappe.throw(_("BOM and Manufacturing Quantity are required"))
-
 		self.set('items', [])
 		self.validate_production_order()
 
@@ -638,17 +651,16 @@
 		issued_item_qty = self.get_issued_qty()
 
 		max_qty = flt(self.pro_doc.qty)
-		only_pending_fetched = []
-
 		for item in item_dict:
 			pending_to_issue = (max_qty * item_dict[item]["qty"]) - issued_item_qty.get(item, 0)
 			desire_to_transfer = flt(self.fg_completed_qty) * item_dict[item]["qty"]
+
 			if desire_to_transfer <= pending_to_issue:
 				item_dict[item]["qty"] = desire_to_transfer
-			else:
+			elif pending_to_issue > 0:
 				item_dict[item]["qty"] = pending_to_issue
-				if pending_to_issue:
-					only_pending_fetched.append(item)
+			else:
+				item_dict[item]["qty"] = 0
 
 		# delete items with 0 qty
 		for item in item_dict.keys():
@@ -659,9 +671,6 @@
 		if not len(item_dict):
 			frappe.msgprint(_("""All items have already been transferred for this Production Order."""))
 
-		elif only_pending_fetched:
-			frappe.msgprint(_("Pending Items {0} updated").format(only_pending_fetched))
-
 		return item_dict
 
 	def get_issued_qty(self):
