Browse Source

refactor(minor): update_document_title API

* Check for acceptable types
* Check for DocType permission
* Raise all exceptions if occured during document renaming
version-14
Gavin D'souza 3 years ago
parent
commit
a307767dd5
1 changed files with 25 additions and 5 deletions
  1. +25
    -5
      frappe/model/rename_doc.py

+ 25
- 5
frappe/model/rename_doc.py View File

@@ -1,5 +1,6 @@
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# Copyright (c) 2022, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
from typing import Optional
import frappe
from frappe import _, bold
from frappe.model.dynamic_links import get_dynamic_link_map
@@ -11,14 +12,32 @@ from frappe.query_builder import Field


@frappe.whitelist()
def update_document_title(doctype, docname, title_field=None, old_title=None, new_title=None, new_name=None, merge=False):
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,
merge: bool = False,
) -> str:
"""
Update title from header in form view
"""
if docname and new_name and not docname == new_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]:
if not isinstance(obj, (str, None)):
frappe.throw(f"{obj} must be of type str or None")

frappe.has_permission(doctype, ptype="write", throw=True)

title_updated = old_title and new_title and (old_title != new_title)
name_updated = new_name and docname and (docname != new_name)

if name_updated:
docname = rename_doc(doctype=doctype, old=docname, new=new_name, merge=merge)

if old_title and new_title and not old_title == new_title:
if title_updated:
try:
frappe.db.set_value(doctype, docname, title_field, new_title)
frappe.msgprint(_('Saved'), alert=True, indicator='green')
@@ -27,8 +46,9 @@ def update_document_title(doctype, docname, title_field=None, old_title=None, ne
frappe.throw(
_("{0} {1} already exists").format(doctype, frappe.bold(docname)),
title=_("Duplicate Name"),
exc=frappe.DuplicateEntryError
exc=frappe.DuplicateEntryError,
)
raise

return docname



Loading…
Cancel
Save