diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 2a7aedc382..2ffa1bf364 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -29,7 +29,7 @@ class Task(Document): def validate(self): self.validate_dates() self.validate_depends_on() - self.reschedule_depending_task() + self.reschedule_dependent_task() 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): @@ -87,14 +87,16 @@ class Task(Document): task_list.append(task) return frappe.db.get_value("Task", task, "depends_on") - def reschedule_depending_task(self): - for task_name in frappe.db.sql("select name from `tabTask` where depends_on = %s", self.name, as_dict=1): - task = frappe.get_doc("Task", task_name.name) - if task.exp_start_date and task.exp_end_date and (self.exp_end_date or self.act_end_date): - task_duration = date_diff(task.exp_end_date, task.exp_start_date) - task.exp_start_date = add_days(self.act_end_date if self.act_end_date else self.exp_end_date, 1) - task.exp_end_date = add_days(task.exp_start_date, task_duration) - task.save() + def reschedule_dependent_task(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` where depends_on = %s", 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 < 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.save() @frappe.whitelist() def get_events(start, end, filters=None): diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py index 30a64f26c2..bc5ee14598 100644 --- a/erpnext/projects/doctype/task/test_task.py +++ b/erpnext/projects/doctype/task/test_task.py @@ -39,7 +39,7 @@ class TestTask(unittest.TestCase): }) self.assertRaises(CircularReferenceError, task1.save) - def test_reschedule_depending_task(self): + def test_reschedule_dependent_task(self): task1 = frappe.new_doc('Task') task1.update({ "status": "Open",