From 7fa039f15ceb5ee79a4edb0e6293fb06c201ce2e Mon Sep 17 00:00:00 2001 From: mbauskar Date: Mon, 23 Jan 2017 11:27:47 +0530 Subject: [PATCH] [fixes] delete company transaction and other minor fixes --- .../company/delete_company_transactions.py | 14 ++++++++++---- erpnext/utilities/address_and_contact.py | 18 ++++++++++++------ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/erpnext/setup/doctype/company/delete_company_transactions.py b/erpnext/setup/doctype/company/delete_company_transactions.py index eb5c043b50..9b157c3a1c 100644 --- a/erpnext/setup/doctype/company/delete_company_transactions.py +++ b/erpnext/setup/doctype/company/delete_company_transactions.py @@ -73,11 +73,17 @@ def delete_bins(company_name): def delete_lead_addresses(company_name): """Delete addresses to which leads are linked""" - for lead in frappe.get_all("Lead", filters={"company": company_name}): - frappe.db.sql("""delete from `tabAddress` - where lead=%s and (customer='' or customer is null) and (supplier='' or supplier is null)""", lead.name) + leads = frappe.get_all("Lead", filters={"company": company_name}) + leads = [ "'%s'"%row.get("name") for row in leads ] + if leads: + frappe.db.sql("""delete from tabAddress where name not in (select parent + from `tabDynamic Link` dl where dl.link_doctype<>'Lead' and + dl.parenttype='Address')""", debug=True) - frappe.db.sql("""update `tabAddress` set lead=null, lead_name=null where lead=%s""", lead.name) + frappe.db.sql("""delete from `tabDynamic Link` where link_doctype='Lead' and parenttype='Address' + and link_name in ({leads})""".format(leads=",".join(leads)), debug=True) + + frappe.db.sql("""update tabCustomer set lead_name='' where lead_name in ({leads})""".format(leads=",".join(leads)), debug=True) def delete_communications(doctype, company_name, company_fieldname): frappe.db.sql(""" diff --git a/erpnext/utilities/address_and_contact.py b/erpnext/utilities/address_and_contact.py index 12ceb5b61b..22910c9a97 100644 --- a/erpnext/utilities/address_and_contact.py +++ b/erpnext/utilities/address_and_contact.py @@ -8,9 +8,12 @@ def load_address_and_contact(doc, key): """Loads address list and contact list in `__onload`""" from frappe.geo.doctype.address.address import get_address_display - address_list = [frappe.get_value('Address', a.parent, '*') - for a in frappe.get_all('Dynamic Link', fields='parent', - filters=dict(parenttype='Address', link_doctype=doc.doctype, link_name=doc.name))] + filters = [ + ["Dynamic Link", "link_doctype", "=", doc.doctype], + ["Dynamic Link", "link_name", "=", doc.name], + ["Dynamic Link", "parenttype", "=", "Address"], + ] + address_list = frappe.get_all("Address", filters=filters, fields=["*"]) address_list = [a.update({"display": get_address_display(a)}) for a in address_list] @@ -23,9 +26,12 @@ def load_address_and_contact(doc, key): doc.set_onload('addr_list', address_list) if doc.doctype != "Lead": - contact_list = [frappe.get_value('Contact', a.parent, '*') - for a in frappe.get_all('Dynamic Link', fields='parent', - filters=dict(parenttype='Contact', link_doctype=doc.doctype, link_name=doc.name))] + filters = [ + ["Dynamic Link", "link_doctype", "=", doc.doctype], + ["Dynamic Link", "link_name", "=", doc.name], + ["Dynamic Link", "parenttype", "=", "Contact"], + ] + contact_list = frappe.get_all("Contact", filters=filters, fields=["*"]) contact_list = sorted(contact_list, lambda a, b: