From af0d6eeae8fdcc7f033e8378fbbca73ee5998e4c Mon Sep 17 00:00:00 2001 From: venkat102 Date: Mon, 17 Mar 2025 16:13:42 +0530 Subject: [PATCH] fix(Transaction Deletion Record): sql syntax error while fetching lead address --- .../transaction_deletion_record.py | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py index ce3f918f7eb..edb55f5dc46 100644 --- a/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py +++ b/erpnext/setup/doctype/transaction_deletion_record/transaction_deletion_record.py @@ -220,35 +220,42 @@ class TransactionDeletionRecord(Document): """Delete addresses to which leads are linked""" self.validate_doc_status() if not self.delete_leads_and_addresses: - leads = frappe.get_all("Lead", filters={"company": self.company}) - leads = ["'%s'" % row.get("name") for row in leads] + leads = frappe.db.get_all("Lead", filters={"company": self.company}, pluck="name") addresses = [] if leads: - addresses = frappe.db.sql_list( - """select parent from `tabDynamic Link` where link_name - in ({leads})""".format(leads=",".join(leads)) + addresses = frappe.db.get_all( + "Dynamic Link", filters={"link_name": ("in", leads)}, pluck="parent" ) - if addresses: addresses = ["%s" % frappe.db.escape(addr) for addr in addresses] - frappe.db.sql( - """delete from `tabAddress` where name in ({addresses}) and - name not in (select distinct dl1.parent from `tabDynamic Link` dl1 - inner join `tabDynamic Link` dl2 on dl1.parent=dl2.parent - and dl1.link_doctype<>dl2.link_doctype)""".format(addresses=",".join(addresses)) - ) + address = qb.DocType("Address") + dl1 = qb.DocType("Dynamic Link") + dl2 = qb.DocType("Dynamic Link") - frappe.db.sql( - """delete from `tabDynamic Link` where link_doctype='Lead' - and parenttype='Address' and link_name in ({leads})""".format(leads=",".join(leads)) - ) + qb.from_(address).delete().where( + (address.name.isin(addresses)) + & ( + address.name.notin( + qb.from_(dl1) + .join(dl2) + .on((dl1.parent == dl2.parent) & (dl1.link_doctype != dl2.link_doctype)) + .select(dl1.parent) + .distinct() + ) + ) + ).run() + + dynamic_link = qb.DocType("Dynamic Link") + qb.from_(dynamic_link).delete().where( + (dynamic_link.link_doctype == "Lead") + & (dynamic_link.parenttype == "Address") + & (dynamic_link.link_name.isin(leads)) + ).run() + + customer = qb.DocType("Customer") + qb.update(customer).set(customer.lead_name, None).where(customer.lead_name.isin(leads)).run() - frappe.db.sql( - """update `tabCustomer` set lead_name=NULL where lead_name in ({leads})""".format( - leads=",".join(leads) - ) - ) self.db_set("delete_leads_and_addresses", 1) self.enqueue_task(task="Reset Company Values")