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 <ankush@frappe.io>
This commit is contained in:
gavin 2023-06-21 15:46:09 +05:30 committed by GitHub
parent 1b0c2f03fa
commit 05893bef42
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 26 additions and 16 deletions

View file

@ -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

View file

@ -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({