From b74db6f2b8070f0ab79258faa533ce12d12ee851 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 12 Aug 2021 17:37:38 +0530 Subject: [PATCH 1/2] fix: Cascade deletion for Company --- erpnext/hooks.py | 3 +++ erpnext/regional/india/utils.py | 15 ++++++++++++++- erpnext/setup/doctype/company/company.py | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/erpnext/hooks.py b/erpnext/hooks.py index 1ba752a1464..7e0e70924fd 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -300,6 +300,9 @@ doc_events = { }, ('Quotation', 'Sales Order', 'Sales Invoice'): { 'validate': ["erpnext.erpnext_integrations.taxjar_integration.set_sales_tax"] + }, + "Company": { + "on_trash": "erpnext.regional.india.utils.delete_gst_settings_for_company" } } diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py index a4466e78f28..62c0187268b 100644 --- a/erpnext/regional/india/utils.py +++ b/erpnext/regional/india/utils.py @@ -849,4 +849,17 @@ def get_depreciation_amount(asset, depreciable_value, row): depreciation_amount = flt(depreciable_value * (flt(rate_of_depreciation) / 100)) - return depreciation_amount \ No newline at end of file + return depreciation_amount + +def delete_gst_settings_for_company(doc, method): + if doc.country != 'India': + return + + gst_settings = frappe.get_doc("GST Settings") + + for d in reversed(gst_settings.get('gst_accounts')): + if d.company == doc.name: + gst_settings.remove(d) + + gst_settings.save() + diff --git a/erpnext/setup/doctype/company/company.py b/erpnext/setup/doctype/company/company.py index 8755125c810..34ee1a50f9f 100644 --- a/erpnext/setup/doctype/company/company.py +++ b/erpnext/setup/doctype/company/company.py @@ -393,6 +393,10 @@ class Company(NestedSet): frappe.db.sql("delete from `tabPurchase Taxes and Charges Template` where company=%s", self.name) frappe.db.sql("delete from `tabItem Tax Template` where company=%s", self.name) + # delete Process Deferred Accounts if no GL Entry found + if not frappe.db.get_value('GL Entry', {'company': self.name}): + frappe.db.sql("delete from `tabProcess Deferred Accounting` where company=%s", self.name) + @frappe.whitelist() def enqueue_replace_abbr(company, old, new): kwargs = dict(queue="long", company=company, old=old, new=new) From 3d039d0fac0830bc630a2f998dc44a3baa576907 Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Thu, 12 Aug 2021 18:18:03 +0530 Subject: [PATCH 2/2] fix: Store records to delete in a separate list --- erpnext/regional/india/utils.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/regional/india/utils.py b/erpnext/regional/india/utils.py index 62c0187268b..746e5bf5911 100644 --- a/erpnext/regional/india/utils.py +++ b/erpnext/regional/india/utils.py @@ -856,10 +856,14 @@ def delete_gst_settings_for_company(doc, method): return gst_settings = frappe.get_doc("GST Settings") + records_to_delete = [] for d in reversed(gst_settings.get('gst_accounts')): if d.company == doc.name: - gst_settings.remove(d) + records_to_delete.append(d) + + for d in records_to_delete: + gst_settings.remove(d) gst_settings.save()