From 05893bef4232cbc22c719aa2eee947ee0badce53 Mon Sep 17 00:00:00 2001 From: gavin Date: Wed, 21 Jun 2023 15:46:09 +0530 Subject: [PATCH] fix: Rename document/update title via toolbar (update_document_title API) (#21404) * fix: update_document_title * Fix broken socket event * Fix broken title + name doc update * fix: if only title updated then dont enqueue --------- Co-authored-by: Ankush Menat --- frappe/model/rename_doc.py | 36 ++++++++++++++++--------- frappe/public/js/frappe/form/toolbar.js | 6 ++--- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index e3ca6de739..e8f5626af4 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -53,6 +53,7 @@ def update_document_title( # handle bad API usages merge = sbool(merge) enqueue = sbool(enqueue) + action_enqueued = enqueue and not is_scheduler_inactive() doc = frappe.get_doc(doctype, docname) doc.check_permission(permtype="write") @@ -65,7 +66,7 @@ def update_document_title( name_updated = updated_name and (updated_name != doc.name) if name_updated: - if enqueue and not is_scheduler_inactive(): + if action_enqueued: current_name = doc.name # before_name hook may have DocType specific validations or transformations @@ -90,18 +91,27 @@ def update_document_title( doc.rename(updated_name, merge=merge) if title_updated: - try: - setattr(doc, title_field, updated_title) - doc.save() - frappe.msgprint(_("Saved"), alert=True, indicator="green") - except Exception as e: - if frappe.db.is_duplicate_entry(e): - frappe.throw( - _("{0} {1} already exists").format(doctype, frappe.bold(docname)), - title=_("Duplicate Name"), - exc=frappe.DuplicateEntryError, - ) - raise + if action_enqueued and name_updated: + frappe.enqueue( + "frappe.client.set_value", + doctype=doc.doctype, + name=updated_name, + fieldname=title_field, + value=updated_title, + ) + else: + try: + setattr(doc, title_field, updated_title) + doc.save() + frappe.msgprint(_("Saved"), alert=True, indicator="green") + except Exception as e: + if frappe.db.is_duplicate_entry(e): + frappe.throw( + _("{0} {1} already exists").format(doctype, frappe.bold(docname)), + title=_("Duplicate Name"), + exc=frappe.DuplicateEntryError, + ) + raise return doc.name diff --git a/frappe/public/js/frappe/form/toolbar.js b/frappe/public/js/frappe/form/toolbar.js index dbe88f2306..6d9a3365c4 100644 --- a/frappe/public/js/frappe/form/toolbar.js +++ b/frappe/public/js/frappe/form/toolbar.js @@ -109,6 +109,7 @@ frappe.ui.form.Toolbar = class Toolbar { } let rename_document = () => { + if (input_name != docname) frappe.socketio.doctype_subscribe(doctype, input_name); return frappe .xcall("frappe.model.rename_doc.update_document_title", { doctype, @@ -129,9 +130,8 @@ frappe.ui.form.Toolbar = class Toolbar { }; // handle document renaming queued action - if (input_name && new_docname == docname) { - frappe.socketio.doc_subscribe(doctype, input_name); - frappe.realtime.on("doc_update", (data) => { + if (input_name != docname) { + frappe.realtime.on("list_update", (data) => { if (data.doctype == doctype && data.name == input_name) { reload_form(input_name); frappe.show_alert({