diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json index fc604c264c..ad1ad01c4e 100644 --- a/erpnext/projects/doctype/task/task.json +++ b/erpnext/projects/doctype/task/task.json @@ -27,6 +27,14 @@ "options": "Project", "permlevel": 0 }, + { + "fieldname": "depends_on", + "fieldtype": "Link", + "label": "Depends on (Task)", + "options": "Task", + "permlevel": 0, + "precision": "" + }, { "fieldname": "column_break0", "fieldtype": "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 a03340f7de..589af2b92d 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -27,6 +27,7 @@ class Task(Document): 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 @@ class Task(Document): 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):