diff --git a/crm/api/doc.py b/crm/api/doc.py index 2d27d1fc..6abf86e0 100644 --- a/crm/api/doc.py +++ b/crm/api/doc.py @@ -759,7 +759,7 @@ def getLinkedDocs(doctype, docname): @frappe.whitelist() def removeLinkedDocReference(doctype=None, docname=None,removeAll=False,removeContact=None): - + if (not doctype or not docname) and not removeAll: return "Invalid doctype or docname" @@ -768,10 +768,11 @@ def removeLinkedDocReference(doctype=None, docname=None,removeAll=False,removeCo ref_doc = getLinkedDocs(doctype, docname) for linked_doc in ref_doc: removeContactLink(linked_doc["reference_doctype"], linked_doc["reference_docname"]) - return "success" + linked_docs = getLinkedDocs(doctype, docname) + for linked_doc in linked_docs: removeDocLink(linked_doc["reference_doctype"], linked_doc["reference_docname"]) return "success" @@ -798,4 +799,17 @@ def removeContactLink(doctype, docname): "contacts": [], }) linked_doc_data.save(ignore_permissions=True) - \ No newline at end of file + +@frappe.whitelist() +def deleteBulkDocs(doctype, items): + from frappe.desk.reportview import delete_bulk + + items = frappe.parse_json(items) + for doc in items: + removeLinkedDocReference(doctype, doc, removeAll=True,removeContact=doctype=="Contact") + + if len(items) > 10: + frappe.enqueue("frappe.desk.reportview.delete_bulk", doctype=doctype, items=items) + else: + delete_bulk(doctype, items) + return "success" \ No newline at end of file diff --git a/frontend/src/components/ListBulkActions.vue b/frontend/src/components/ListBulkActions.vue index 76b41650..227b1ec0 100644 --- a/frontend/src/components/ListBulkActions.vue +++ b/frontend/src/components/ListBulkActions.vue @@ -102,7 +102,7 @@ function deleteValues(selections, unselectAll) { theme: 'red', onClick: (close) => { capture('bulk_delete') - call('frappe.desk.reportview.delete_items', { + call('crm.api.doc.deleteBulkDocs', { items: JSON.stringify(Array.from(selections)), doctype: props.doctype, }).then(() => {