Merge pull request #3459 from neilLasrado/po

Multiple Fixes.
diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py
index 9064754..c14990a 100644
--- a/erpnext/accounts/doctype/c_form/c_form.py
+++ b/erpnext/accounts/doctype/c_form/c_form.py
@@ -54,7 +54,7 @@
 			frappe.throw(_("Please enter atleast 1 invoice in the table"))
 
 	def set_total_invoiced_amount(self):
-		total = sum([flt(d.base_grand_total) for d in self.get('invoices')])
+		total = sum([flt(d.grand_total) for d in self.get('invoices')])
 		frappe.db.set(self, 'total_invoiced_amount', total)
 
 	def get_invoice_details(self, invoice_no):
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 37a8b1b..05e4038 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -13,19 +13,25 @@
 	def get_feed(self):
 		return '{0}: {1}'.format(_(self.status), self.project_name)
 
-	def __setup__(self):
+	def onload(self):
 		"""Load project tasks for quick view"""
-		self.tasks = []
-		for task in frappe.get_all("Task", "*", {"project": self.name}, order_by="exp_start_date asc"):
-			self.append("tasks", {
-				"title": task.subject,
-				"status": task.status,
-				"start_date": task.exp_start_date,
-				"end_date": task.exp_end_date,
-				"description": task.description,
-				"task_id": task.name
-			})
-
+		if not self.get("tasks"):
+			for task in self.get_tasks():
+				self.append("tasks", {
+					"title": task.subject,
+					"status": task.status,
+					"start_date": task.exp_start_date,
+					"end_date": task.exp_end_date,
+					"description": task.description,
+					"task_id": task.name
+				})
+			
+	def __setup__(self):
+		self.onload()
+	
+	def get_tasks(self):
+		return frappe.get_all("Task", "*", {"project": self.name}, order_by="exp_start_date asc")
+		
 	def validate(self):
 		self.validate_dates()
 		self.sync_tasks()
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py
index da86432..d823e7e 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.py
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.py
@@ -185,9 +185,6 @@
 
 	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"))