chore: delete comments and unlink attachments on company transactions deletion

This commit is contained in:
anandbaburajan 2023-11-13 18:03:33 +05:30
parent ffd171a26b
commit 2f9e96e324

View File

@ -108,7 +108,16 @@ class TransactionDeletionRecord(Document):
if no_of_docs > 0:
self.delete_version_log(docfield["parent"], docfield["fieldname"])
self.delete_communications(docfield["parent"], docfield["fieldname"])
reference_docs = frappe.get_all(
docfield["parent"], filters={docfield["fieldname"]: self.company}
)
reference_doc_names = [r.name for r in reference_docs]
self.delete_communications(docfield["parent"], reference_doc_names)
self.delete_comments(docfield["parent"], reference_doc_names)
self.unlink_attachments(docfield["parent"], reference_doc_names)
self.populate_doctypes_table(tables, docfield["parent"], no_of_docs)
self.delete_child_tables(docfield["parent"], docfield["fieldname"])
@ -197,19 +206,49 @@ class TransactionDeletionRecord(Document):
(versions.ref_doctype == doctype) & (versions.docname.isin(batch))
).run()
def delete_communications(self, doctype, company_fieldname):
reference_docs = frappe.get_all(doctype, filters={company_fieldname: self.company})
reference_doc_names = [r.name for r in reference_docs]
def delete_communications(self, doctype, reference_doc_names):
communications = frappe.get_all(
"Communication",
filters={"reference_doctype": doctype, "reference_name": ["in", reference_doc_names]},
)
communication_names = [c.name for c in communications]
if not communication_names:
return
for batch in create_batch(communication_names, self.batch_size):
frappe.delete_doc("Communication", batch, ignore_permissions=True)
def delete_comments(self, doctype, reference_doc_names):
comments = frappe.get_all(
"Comment",
filters={"reference_doctype": doctype, "reference_name": ["in", reference_doc_names]},
)
comment_names = [c.name for c in comments]
if not comment_names:
return
for batch in create_batch(comment_names, self.batch_size):
frappe.delete_doc("Comment", batch, ignore_permissions=True)
def unlink_attachments(self, doctype, reference_doc_names):
files = frappe.get_all(
"File",
filters={"attached_to_doctype": doctype, "attached_to_name": ["in", reference_doc_names]},
)
file_names = [c.name for c in files]
if not file_names:
return
file = qb.DocType("File")
for batch in create_batch(file_names, self.batch_size):
qb.update(file).set(file.attached_to_doctype, None).set(file.attached_to_name, None).where(
file.name.isin(batch)
).run()
@frappe.whitelist()
def get_doctypes_to_be_ignored():