From 8806eae1b2c3a888f31888001cdcbc398db84224 Mon Sep 17 00:00:00 2001 From: Faris Ansari Date: Tue, 18 Oct 2022 01:23:37 +0530 Subject: [PATCH] fix(frappe.client): delete child doc via parent so that parent's on_update is called no change for deletion of normal doctype (cherry picked from commit 55bc60433fe6a7b0919e074f3acaddf1667f8811) --- frappe/client.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/frappe/client.py b/frappe/client.py index 3c0ce8ea8a..6a4deaffa0 100644 --- a/frappe/client.py +++ b/frappe/client.py @@ -270,7 +270,7 @@ def delete(doctype, name): :param doctype: DocType of the document to be deleted :param name: name of the document to be deleted""" - frappe.delete_doc(doctype, name, ignore_missing=False) + delete_doc(doctype, name) @frappe.whitelist(methods=["POST", "PUT"]) @@ -462,3 +462,23 @@ def insert_doc(doc) -> "Document": return parent return frappe.get_doc(doc).insert() + + +def delete_doc(doctype, name): + """Deletes document + if doctype is a child table, then deletes the child record using the parent doc + so that the parent doc's `on_update` is called + """ + + if frappe.is_table(doctype): + parenttype, parent, parentfield = frappe.db.get_value( + doctype, name, ["parenttype", "parent", "parentfield"] + ) + parent = frappe.get_doc(parenttype, parent) + for row in parent.get(parentfield): + if row.name == name: + parent.remove(row) + parent.save() + break + else: + frappe.delete_doc(doctype, name, ignore_missing=False)