Improved task weight calc (#15170)

* Improved task weight calc

Removed the requirement to have total of task weights to be exactly 1.

* Update project.py
diff --git a/erpnext/projects/doctype/project/project.py b/erpnext/projects/doctype/project/project.py
index 94436a8..b231ee1 100644
--- a/erpnext/projects/doctype/project/project.py
+++ b/erpnext/projects/doctype/project/project.py
@@ -83,13 +83,10 @@
 				frappe.throw(_("Expected End Date can not be less than Expected Start Date"))
 
 	def validate_weights(self):
-		sum = 0
 		for task in self.tasks:
-			if task.task_weight > 0:
-				sum = flt(sum + task.task_weight, task.precision('task_weight'))
-		if sum > 0 and sum != 1:
-			frappe.throw(
-				_("Total of all task weights should be 1. Please adjust weights of all Project tasks accordingly"))
+			if task.task_weight is not None:
+				if task.task_weight > 0:
+					frappe.throw(_("Task weight cannot be negative"))
 
 	def sync_tasks(self):
 		"""sync tasks and remove table"""
@@ -206,13 +203,12 @@
 		if (self.percent_complete_method == "Task Weight" and total > 0):
 			weight_sum = frappe.db.sql("""select sum(task_weight) from tabTask where
 				project=%s""", self.name)[0][0]
-			if weight_sum == 1:
-				weighted_progress = frappe.db.sql("""select progress,task_weight from tabTask where
-					project=%s""", self.name, as_dict=1)
-				pct_complete = 0
-				for row in weighted_progress:
-					pct_complete += row["progress"] * row["task_weight"]
-				self.percent_complete = flt(flt(pct_complete), 2)
+			weighted_progress = frappe.db.sql("""select progress,task_weight from tabTask where
+				project=%s""", self.name, as_dict=1)
+			pct_complete = 0
+			for row in weighted_progress:
+				pct_complete += row["progress"] * row["task_weight"] / weight_sum
+			self.percent_complete = flt(flt(pct_complete), 2)
 		if self.percent_complete == 100:
 			self.status = "Completed"
 		elif not self.status == "Cancelled":