refactor(rename_doc): update_document_title API

* Remove redundant API arguments
* Check for permission on specified document
* Maintain backwards compatibility - test_update_document_title_api
  checks for this
* Update desk client usage ;)
This commit is contained in:
Gavin D'souza 2022-02-23 17:19:43 +05:30
parent 8aedf6410a
commit 91da5f0363
2 changed files with 21 additions and 16 deletions

View file

@ -19,32 +19,39 @@ if TYPE_CHECKING:
def update_document_title(
doctype: str,
docname: str,
title_field: Optional[str] = None,
old_title: Optional[str] = None,
new_title: Optional[str] = None,
new_name: Optional[str] = None,
title: Optional[str] = None,
name: Optional[str] = None,
merge: bool = False,
**kwargs
) -> str:
"""
Update title from header in form view
"""
# to maintain backwards API compatibility
updated_title = kwargs.get("new_title") or title
updated_name = kwargs.get("new_name") or name
# TODO: omit this after runtime type checking (ref: https://github.com/frappe/frappe/pull/14927)
for obj in [docname, new_name, new_title, old_title]:
for obj in [docname, updated_title, updated_name]:
if not isinstance(obj, (str, type(None))):
frappe.throw(f"{obj} must be of type str or None")
frappe.throw(f"{obj=} must be of type str or None")
frappe.has_permission(doctype, ptype="write", throw=True)
doc = frappe.get_doc(doctype, docname)
doc.has_permission(permtype="write")
title_updated = old_title and new_title and (old_title != new_title)
name_updated = new_name and docname and (docname != new_name)
title_field = doc.meta.get_title_field()
title_updated = (title_field != "name") and (updated_title != doc.get(title_field))
name_updated = updated_name != doc.name
if name_updated:
docname = rename_doc(doctype=doctype, old=docname, new=new_name, merge=merge)
docname = rename_doc(doctype=doctype, old=docname, new=updated_name, merge=merge)
if title_updated:
try:
frappe.db.set_value(doctype, docname, title_field, new_title)
frappe.msgprint(_('Saved'), alert=True, indicator='green')
frappe.db.set_value(doctype, docname, title_field, updated_title)
frappe.msgprint(_("Saved"), alert=True, indicator="green")
except Exception as e:
if frappe.db.is_duplicate_entry(e):
frappe.throw(

View file

@ -101,10 +101,8 @@ frappe.ui.form.Toolbar = class Toolbar {
return frappe.xcall("frappe.model.rename_doc.update_document_title", {
doctype,
docname,
new_name,
title_field,
old_title: this.frm.doc[title_field],
new_title,
name: new_name,
title: new_title,
merge
}).then(new_docname => {
if (new_name != docname) {