depends-on added to task, circular reference validation added
diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json
index fc604c2..ad1ad01 100644
--- a/erpnext/projects/doctype/task/task.json
+++ b/erpnext/projects/doctype/task/task.json
@@ -28,6 +28,14 @@
    "permlevel": 0
   }, 
   {
+   "fieldname": "depends_on", 
+   "fieldtype": "Link", 
+   "label": "Depends on (Task)", 
+   "options": "Task", 
+   "permlevel": 0, 
+   "precision": ""
+  }, 
+  {
    "fieldname": "column_break0", 
    "fieldtype": "Column Break", 
    "oldfieldtype": "Column Break", 
@@ -249,7 +257,7 @@
  "idx": 1, 
  "istable": 0, 
  "max_attachments": 5, 
- "modified": "2015-04-14 07:56:24.481667", 
+ "modified": "2015-04-22 04:58:30.865304", 
  "modified_by": "Administrator", 
  "module": "Projects", 
  "name": "Task", 
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index a03340f..589af2b 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -27,6 +27,7 @@
 
 	def validate(self):
 		self.validate_dates()
+		self.validate_depends_on()
 		
 	def validate_dates(self):
 		if self.exp_start_date and self.exp_end_date and getdate(self.exp_start_date) > getdate(self.exp_end_date):
@@ -68,6 +69,21 @@
 			project.flags.dont_sync_tasks = True
 			project.update_costing()
 			project.save()
+			
+	def validate_depends_on(self):
+		if not self.depends_on:
+			return
+		task_list = [self.name]
+		task = self.depends_on
+		while task:
+			task = self.check_recursion(task, task_list)
+			
+	def check_recursion(self, task, task_list):
+		if task in task_list:
+			frappe.throw("Circular Reference Error")
+		else :
+			task_list.append(task)
+			return frappe.db.get_value("Task", task, "depends_on")
 
 @frappe.whitelist()
 def get_events(start, end, filters=None):