@@ -190,35 +190,42 @@ def delete_lead_addresses(self):
190190 """Delete addresses to which leads are linked"""
191191 self .validate_doc_status ()
192192 if not self .delete_leads_and_addresses :
193- leads = frappe .get_all ("Lead" , filters = {"company" : self .company })
194- leads = ["'%s'" % row .get ("name" ) for row in leads ]
193+ leads = frappe .db .get_all ("Lead" , filters = {"company" : self .company }, pluck = "name" )
195194 addresses = []
196195 if leads :
197- addresses = frappe .db .sql_list (
198- """select parent from `tabDynamic Link` where link_name
199- in ({leads})""" .format (leads = "," .join (leads ))
196+ addresses = frappe .db .get_all (
197+ "Dynamic Link" , filters = {"link_name" : ("in" , leads )}, pluck = "parent"
200198 )
201-
202199 if addresses :
203200 addresses = ["%s" % frappe .db .escape (addr ) for addr in addresses ]
204201
205- frappe .db .sql (
206- """delete from `tabAddress` where name in ({addresses}) and
207- name not in (select distinct dl1.parent from `tabDynamic Link` dl1
208- inner join `tabDynamic Link` dl2 on dl1.parent=dl2.parent
209- and dl1.link_doctype<>dl2.link_doctype)""" .format (addresses = "," .join (addresses ))
210- )
202+ address = qb .DocType ("Address" )
203+ dl1 = qb .DocType ("Dynamic Link" )
204+ dl2 = qb .DocType ("Dynamic Link" )
205+
206+ qb .from_ (address ).delete ().where (
207+ (address .name .isin (addresses ))
208+ & (
209+ address .name .notin (
210+ qb .from_ (dl1 )
211+ .join (dl2 )
212+ .on ((dl1 .parent == dl2 .parent ) & (dl1 .link_doctype != dl2 .link_doctype ))
213+ .select (dl1 .parent )
214+ .distinct ()
215+ )
216+ )
217+ ).run ()
211218
212- frappe .db .sql (
213- """delete from `tabDynamic Link` where link_doctype='Lead'
214- and parenttype='Address' and link_name in ({leads})""" .format (leads = "," .join (leads ))
215- )
219+ dynamic_link = qb .DocType ("Dynamic Link" )
220+ qb .from_ (dynamic_link ).delete ().where (
221+ (dynamic_link .link_doctype == "Lead" )
222+ & (dynamic_link .parenttype == "Address" )
223+ & (dynamic_link .link_name .isin (leads ))
224+ ).run ()
225+
226+ customer = qb .DocType ("Customer" )
227+ qb .update (customer ).set (customer .lead_name , None ).where (customer .lead_name .isin (leads )).run ()
216228
217- frappe .db .sql (
218- """update `tabCustomer` set lead_name=NULL where lead_name in ({leads})""" .format (
219- leads = "," .join (leads )
220- )
221- )
222229 self .db_set ("delete_leads_and_addresses" , 1 )
223230 self .enqueue_task (task = "Reset Company Values" )
224231
0 commit comments