From ecb1460440ee1657bb2cd8d4ae29d056b235fe1b Mon Sep 17 00:00:00 2001 From: Afshan <33727827+AfshanKhan@users.noreply.github.com> Date: Fri, 24 Jul 2020 10:48:16 +0530 Subject: [PATCH] =?UTF-8?q?fix:=20update=20the=20project=20after=20task=20?= =?UTF-8?q?deletion=20so=20that=20the=20%=20completed=20s=E2=80=A6=20(#225?= =?UTF-8?q?91)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: update the project after task deletion so that the % completed shows correct value * fix: patch to correct % complete of previous projects * fix: for version-13 * fix: removed patch from v13 Co-authored-by: Marica Co-authored-by: Anurag Mishra <32095923+Anurag810@users.noreply.github.com> Co-authored-by: Nabin Hait --- erpnext/patches.txt | 1 + .../v12_0/fix_percent_complete_for_projects.py | 14 ++++++++++++++ erpnext/projects/doctype/task/task.py | 3 +++ 3 files changed, 18 insertions(+) create mode 100644 erpnext/patches/v12_0/fix_percent_complete_for_projects.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 2fb9d7f8701..a24f5f76c8d 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -713,6 +713,7 @@ erpnext.patches.v13_0.move_payroll_setting_separately_from_hr_settings #22-06-20 erpnext.patches.v13_0.check_is_income_tax_component #22-06-2020 erpnext.patches.v13_0.loyalty_points_entry_for_pos_invoice #22-07-2020 erpnext.patches.v12_0.add_taxjar_integration_field +erpnext.patches.v12_0.fix_percent_complete_for_projects erpnext.patches.v13_0.delete_report_requested_items_to_order erpnext.patches.v12_0.update_item_tax_template_company erpnext.patches.v13_0.move_branch_code_to_bank_account diff --git a/erpnext/patches/v12_0/fix_percent_complete_for_projects.py b/erpnext/patches/v12_0/fix_percent_complete_for_projects.py new file mode 100644 index 00000000000..3622df6bc81 --- /dev/null +++ b/erpnext/patches/v12_0/fix_percent_complete_for_projects.py @@ -0,0 +1,14 @@ +import frappe +from frappe.utils import flt + +def execute(): + for project in frappe.get_all("Project", fields=["name", "percent_complete_method"]): + total = frappe.db.count('Task', dict(project=project.name)) + if project.percent_complete_method == "Task Completion" and total > 0: + completed = frappe.db.sql("""select count(name) from tabTask where + project=%s and status in ('Cancelled', 'Completed')""", project.name)[0][0] + percent_complete = flt(flt(completed) / total * 100, 2) + if project.percent_complete != percent_complete: + frappe.db.set_value("Project", project.name, "percent_complete", percent_complete) + if percent_complete == 100: + frappe.db.set_value("Project", project.name, "status", "Completed") diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 4bdda68b693..cf2fd26e57c 100755 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -175,6 +175,9 @@ class Task(NestedSet): self.update_nsm_model() + def after_delete(self): + self.update_project() + def update_status(self): if self.status not in ('Cancelled', 'Completed') and self.exp_end_date: from datetime import datetime