fix(Transaction Deletion Record): sql syntax error while fetching lead address

(cherry picked from commit af0d6eeae8)
This commit is contained in:
venkat102
2025-03-17 16:13:42 +05:30
committed by Mergify
parent 5c1f6f0107
commit 20b43b4d93

View File

@@ -190,35 +190,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")