Merge pull request #7869 from KanchanChauhan/dependent-tasks

Dependent task dates gets updated with parent dates
diff --git a/erpnext/projects/doctype/task/task.js b/erpnext/projects/doctype/task/task.js
index 7c4eb80..df38cfe 100644
--- a/erpnext/projects/doctype/task/task.js
+++ b/erpnext/projects/doctype/task/task.js
@@ -6,6 +6,18 @@
 cur_frm.add_fetch("project", "company", "company");
 
 frappe.ui.form.on("Task", {
+	onload: function(frm) {
+		frm.set_query("task", "depends_on", function() {
+			var filters = {
+				name: ["!=", frm.doc.name]
+			};
+			if(frm.doc.project) filters["project"] = frm.doc.project;
+			return {
+				filters: filters
+			};
+		})
+	},
+
 	refresh: function(frm) {
 		var doc = frm.doc;
 		if(doc.__islocal) {
@@ -14,7 +26,6 @@
 			}
 		}
 
-
 		if(!doc.__islocal) {
 			if(frappe.model.can_read("Timesheet")) {
 				frm.add_custom_button(__("Timesheet"), function() {
@@ -67,12 +78,5 @@
 
 });
 
-cur_frm.fields_dict['depends_on'].grid.get_field('task').get_query = function(doc) {
-	if(doc.project) {
-		return {
-			filters: {'project': doc.project}
-		}
-	}
-}
-
 cur_frm.add_fetch('task', 'subject', 'subject');
+cur_frm.add_fetch('task', 'project', 'project');
diff --git a/erpnext/projects/doctype/task/task.json b/erpnext/projects/doctype/task/task.json
index 6c8c14d..f9485e9 100644
--- a/erpnext/projects/doctype/task/task.json
+++ b/erpnext/projects/doctype/task/task.json
@@ -496,7 +496,7 @@
    "collapsible": 0, 
    "columns": 0, 
    "fieldname": "depends_on_tasks", 
-   "fieldtype": "Read Only", 
+   "fieldtype": "Data", 
    "hidden": 1, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
@@ -504,14 +504,14 @@
    "in_global_search": 0, 
    "in_list_view": 0, 
    "in_standard_filter": 0, 
-   "label": "depends_on_tasks", 
+   "label": "Depends on Tasks", 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
-   "read_only": 0, 
+   "read_only": 1, 
    "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 0, 
@@ -976,7 +976,7 @@
  "istable": 0, 
  "max_attachments": 5, 
  "menu_index": 0, 
- "modified": "2017-02-17 17:24:21.786060", 
+ "modified": "2017-02-24 01:47:05.438887", 
  "modified_by": "Administrator", 
  "module": "Projects", 
  "name": "Task", 
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index 2bdcaf9..44c81a6 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -105,16 +105,18 @@
 	def reschedule_dependent_tasks(self):
 		end_date = self.exp_end_date or self.act_end_date
 		if end_date:
-			for task_name in frappe.db.sql("select name from `tabTask` as parent where %s in \
-				(select task from `tabTask Depends On` as child where parent.name = child.parent )", self.name, as_dict=1):
+			for task_name in frappe.db.sql("""select name from `tabTask` as parent where parent.project = %(project)s and parent.name in \
+				(select parent from `tabTask Depends On` as child where child.task = %(task)s and child.project = %(project)s)""",
+				{'project': self.project, 'task':self.name }, as_dict=1):
+
 				task = frappe.get_doc("Task", task_name.name)
-				if task.exp_start_date and task.exp_end_date and task.exp_start_date < getdate(end_date) and task.status == "Open" :
+				if task.exp_start_date and task.exp_end_date and task.exp_start_date < getdate(end_date) and task.status == "Open":
 					task_duration = date_diff(task.exp_end_date, task.exp_start_date)
 					task.exp_start_date = add_days(end_date, 1)
 					task.exp_end_date = add_days(task.exp_start_date, task_duration)
 					task.flags.ignore_recursion_check = True
 					task.save()
-					
+
 	def has_webform_permission(doc):
 		project_user = frappe.db.get_value("Project User", {"parent": doc.project, "user":frappe.session.user} , "user")
 		if project_user:
diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py
index 45bcd82..2e64b73 100644
--- a/erpnext/projects/doctype/task/test_task.py
+++ b/erpnext/projects/doctype/task/test_task.py
@@ -16,6 +16,7 @@
 		task1.update({
 			"status": "Open",
 			"subject": "_Test Task 1",
+			"project": "_Test Project",
 			"exp_start_date": "2015-1-1",
 			"exp_end_date": "2015-1-10"
 		})
@@ -25,6 +26,7 @@
 		task2.update({
 			"status": "Open",
 			"subject": "_Test Task 2",
+			"project": "_Test Project",
 			"exp_start_date": "2015-1-11",
 			"exp_end_date": "2015-1-15",
 			"depends_on":[
@@ -39,6 +41,7 @@
 		task3.update({
 			"status": "Open",
 			"subject": "_Test Task 2",
+			"project": "_Test Project",
 			"exp_start_date": "2015-1-11",
 			"exp_end_date": "2015-1-15",
 			"depends_on":[
@@ -80,6 +83,7 @@
 		task1.update({
 			"status": "Open",
 			"subject": "_Test Task 1",
+			"project": "_Test Project",
 			"exp_start_date": "2015-1-1",
 			"exp_end_date": "2015-1-10"
 		})
@@ -89,11 +93,13 @@
 		task2.update({
 			"status": "Open",
 			"subject": "_Test Task 2",
+			"project": "_Test Project",
 			"exp_start_date": "2015-1-11",
 			"exp_end_date": "2015-1-15",
 			"depends_on":[
 				{
-					"task": task1.name
+					"task": task1.name,
+					"project": "_Test Project"
 				}
 			]
 		})
@@ -103,11 +109,13 @@
 		task3.update({
 			"status": "Open",
 			"subject": "_Test Task 3",
+			"project": "_Test Project",
 			"exp_start_date": "2015-1-16",
 			"exp_end_date": "2015-1-18",
 			"depends_on":[
 				{
-					"task": task2.name
+					"task": task2.name,
+					"project": "_Test Project"
 				}
 			]
 		})
diff --git a/erpnext/projects/doctype/task_depends_on/task_depends_on.json b/erpnext/projects/doctype/task_depends_on/task_depends_on.json
index ad6869b..25657af 100644
--- a/erpnext/projects/doctype/task_depends_on/task_depends_on.json
+++ b/erpnext/projects/doctype/task_depends_on/task_depends_on.json
@@ -14,13 +14,16 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "task", 
    "fieldtype": "Link", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 1, 
+   "in_standard_filter": 0, 
    "label": "Task", 
    "length": 0, 
    "no_copy": 0, 
@@ -30,6 +33,7 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 0, 
    "search_index": 0, 
@@ -40,13 +44,16 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "column_break_2", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 0, 
+   "in_standard_filter": 0, 
    "length": 0, 
    "no_copy": 0, 
    "permlevel": 0, 
@@ -54,6 +61,7 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 0, 
    "search_index": 0, 
@@ -64,13 +72,16 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "columns": 0, 
    "fieldname": "subject", 
    "fieldtype": "Text", 
    "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
+   "in_global_search": 0, 
    "in_list_view": 1, 
+   "in_standard_filter": 0, 
    "label": "Subject", 
    "length": 0, 
    "no_copy": 0, 
@@ -80,6 +91,36 @@
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 1, 
+   "remember_last_selected_value": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "columns": 0, 
+   "fieldname": "project", 
+   "fieldtype": "Text", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_global_search": 0, 
+   "in_list_view": 0, 
+   "in_standard_filter": 0, 
+   "label": "Project", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "remember_last_selected_value": 0, 
    "report_hide": 0, 
    "reqd": 0, 
    "search_index": 0, 
@@ -97,7 +138,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2016-07-11 03:28:09.329158", 
+ "modified": "2017-02-24 04:56:04.862502", 
  "modified_by": "Administrator", 
  "module": "Projects", 
  "name": "Task Depends On", 
@@ -107,7 +148,9 @@
  "quick_entry": 0, 
  "read_only": 0, 
  "read_only_onload": 0, 
+ "show_name_in_global_search": 0, 
  "sort_field": "modified", 
  "sort_order": "DESC", 
+ "track_changes": 0, 
  "track_seen": 0
 }
\ No newline at end of file