From 6ab6d35f92497fac99a26539f3997e070892651f Mon Sep 17 00:00:00 2001 From: scmmishra Date: Sun, 24 Mar 2019 18:17:13 +0530 Subject: [PATCH 1/5] fix: Task Overdue status propagates to project - Used ORM instead of a SQL for set_task_as_overdue - update_status function compares the time and marks the appropriate task as overdue - The on_update hook makes the changes in project as well --- erpnext/projects/doctype/task/task.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index fffa9c1657..ca78e5eace 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -159,6 +159,13 @@ class Task(NestedSet): self.update_nsm_model() + def update_status(self): + if self.status not in ('Cancelled', 'Closed'): + from datetime import datetime + if self.exp_end_date < datetime.now().date(): + self.date = 'Overdue' + self.save() + @frappe.whitelist() def check_if_child_exists(name): child_tasks = frappe.get_all("Task", filters={"parent_task": name}) @@ -186,10 +193,9 @@ def set_multiple_status(names, status): task.save() def set_tasks_as_overdue(): - frappe.db.sql("""update tabTask set `status`='Overdue' - where exp_end_date is not null - and exp_end_date < CURDATE() - and `status` not in ('Closed', 'Cancelled')""") + tasks = frappe.get_all("Task") + for task in tasks: + frappe.get_doc("Task", task.name).update_status() @frappe.whitelist() def get_children(doctype, parent, task=None, project=None, is_root=False): From f7f32634c873572391d7f7f19cb35e92a67bcb3f Mon Sep 17 00:00:00 2001 From: scmmishra Date: Sun, 24 Mar 2019 20:43:15 +0530 Subject: [PATCH 2/5] feat: Added check for no end date and refactored query --- erpnext/projects/doctype/task/task.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index ca78e5eace..221df41a01 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -160,7 +160,7 @@ class Task(NestedSet): self.update_nsm_model() def update_status(self): - if self.status not in ('Cancelled', 'Closed'): + if self.status not in ('Cancelled', 'Closed') and self.exp_end_date: from datetime import datetime if self.exp_end_date < datetime.now().date(): self.date = 'Overdue' @@ -193,7 +193,7 @@ def set_multiple_status(names, status): task.save() def set_tasks_as_overdue(): - tasks = frappe.get_all("Task") + tasks = frappe.get_all("Task", filters={'status':['not in',['Cancelled', 'Closed']]}) for task in tasks: frappe.get_doc("Task", task.name).update_status() From 1af3c41da38a756000f5735898f93aca8b1c560c Mon Sep 17 00:00:00 2001 From: scmmishra Date: Mon, 25 Mar 2019 11:34:33 +0530 Subject: [PATCH 3/5] fix: Typo in update_status --- erpnext/projects/doctype/task/task.py | 3 ++- erpnext/projects/doctype/task/test_task.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 221df41a01..4a8d34eaf9 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -163,7 +163,8 @@ class Task(NestedSet): if self.status not in ('Cancelled', 'Closed') and self.exp_end_date: from datetime import datetime if self.exp_end_date < datetime.now().date(): - self.date = 'Overdue' + print(self.subject) + self.status = 'Overdue' self.save() @frappe.whitelist() diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py index 9971946cb4..32a0340054 100644 --- a/erpnext/projects/doctype/task/test_task.py +++ b/erpnext/projects/doctype/task/test_task.py @@ -104,7 +104,7 @@ def create_task(subject, start=None, end=None, depends_on=None, project=None, sa task.subject = subject task.exp_start_date = start or nowdate() task.exp_end_date = end or nowdate() - task.project = project or "_Test Project" + # task.project = project or "_Test Project" if save: task.save() else: From ec56122876d4992f4c89cfa249f3007b5e0689d9 Mon Sep 17 00:00:00 2001 From: Shivam Mishra Date: Mon, 25 Mar 2019 11:36:43 +0530 Subject: [PATCH 4/5] fix: minor fix in test --- erpnext/projects/doctype/task/test_task.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py index 32a0340054..b733f67a98 100644 --- a/erpnext/projects/doctype/task/test_task.py +++ b/erpnext/projects/doctype/task/test_task.py @@ -104,7 +104,7 @@ def create_task(subject, start=None, end=None, depends_on=None, project=None, sa task.subject = subject task.exp_start_date = start or nowdate() task.exp_end_date = end or nowdate() - # task.project = project or "_Test Project" + task.project = project or "_Test Project" if save: task.save() else: @@ -117,4 +117,4 @@ def create_task(subject, start=None, end=None, depends_on=None, project=None, sa if save: task.save() - return task \ No newline at end of file + return task From 36824cf7fbbc10ed68c7f726b53d8e4e3f211fba Mon Sep 17 00:00:00 2001 From: scmmishra Date: Wed, 27 Mar 2019 15:01:40 +0530 Subject: [PATCH 5/5] feat: refactored update status --- erpnext/projects/doctype/task/task.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 4a8d34eaf9..12302789a9 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -163,9 +163,8 @@ class Task(NestedSet): if self.status not in ('Cancelled', 'Closed') and self.exp_end_date: from datetime import datetime if self.exp_end_date < datetime.now().date(): - print(self.subject) - self.status = 'Overdue' - self.save() + self.db_set('status', 'Overdue') + self.update_project() @frappe.whitelist() def check_if_child_exists(name):