Esempio n. 1
0
def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=False):
	"""
		Renames a doc(dt, old) to doc(dt, new) and
		updates all linked fields of type "Link"
	"""
	if not frappe.db.exists(doctype, old):
		return

	force = cint(force)
	merge = cint(merge)

	meta = frappe.get_meta(doctype)

	# call before_rename
	old_doc = frappe.get_doc(doctype, old)
	out = old_doc.run_method("before_rename", old, new, merge) or {}
	new = (out.get("new") or new) if isinstance(out, dict) else (out or new)

	if doctype != "DocType":
		new = validate_rename(doctype, new, meta, merge, force, ignore_permissions)

	if not merge:
		rename_parent_and_child(doctype, old, new, meta)

	# update link fields' values
	link_fields = get_link_fields(doctype)
	update_link_field_values(link_fields, old, new, doctype)

	rename_dynamic_links(doctype, old, new)

	if doctype=='DocType':
		rename_doctype(doctype, old, new, force)

	update_attachments(doctype, old, new)

	if merge:
		frappe.delete_doc(doctype, old)

	# call after_rename
	new_doc = frappe.get_doc(doctype, new)

	# copy any flags if required
	new_doc._local = getattr(old_doc, "_local", None)

	new_doc.run_method("after_rename", old, new, merge)

	rename_versions(doctype, old, new)

	if not merge:
		rename_password(doctype, old, new)

	# update user_permissions
	frappe.db.sql("""update tabDefaultValue set defvalue=%s where parenttype='User Permission'
		and defkey=%s and defvalue=%s""", (new, doctype, old))
	frappe.clear_cache()

	return new
Esempio n. 2
0
def rename_doc(doctype,
               old,
               new,
               force=False,
               merge=False,
               ignore_permissions=False,
               ignore_if_exists=False,
               show_alert=True):
    """
		Renames a doc(dt, old) to doc(dt, new) and
		updates all linked fields of type "Link"
	"""
    if not frappe.db.exists(doctype, old):
        return

    if ignore_if_exists and frappe.db.exists(doctype, new):
        return

    if old == new:
        frappe.msgprint(_('Please select a new name to rename'))
        return

    force = cint(force)
    merge = cint(merge)

    meta = frappe.get_meta(doctype)

    # call before_rename
    old_doc = frappe.get_doc(doctype, old)
    out = old_doc.run_method("before_rename", old, new, merge) or {}
    new = (out.get("new") or new) if isinstance(out, dict) else (out or new)

    if doctype != "DocType":
        new = validate_rename(doctype, new, meta, merge, force,
                              ignore_permissions)

    if not merge:
        rename_parent_and_child(doctype, old, new, meta)

    # update link fields' values
    link_fields = get_link_fields(doctype)
    update_link_field_values(link_fields, old, new, doctype)

    rename_dynamic_links(doctype, old, new)

    # save the user settings in the db
    update_user_settings(old, new, link_fields)

    if doctype == 'DocType':
        rename_doctype(doctype, old, new, force)

    update_attachments(doctype, old, new)

    rename_versions(doctype, old, new)

    # call after_rename
    new_doc = frappe.get_doc(doctype, new)

    # copy any flags if required
    new_doc._local = getattr(old_doc, "_local", None)

    new_doc.run_method("after_rename", old, new, merge)

    if not merge:
        rename_password(doctype, old, new)

    # update user_permissions
    frappe.db.sql(
        """UPDATE `tabDefaultValue` SET `defvalue`=%s WHERE `parenttype`='User Permission'
		AND `defkey`=%s AND `defvalue`=%s""", (new, doctype, old))

    if merge:
        new_doc.add_comment(
            'Edit',
            _("merged {0} into {1}").format(frappe.bold(old),
                                            frappe.bold(new)))
    else:
        new_doc.add_comment(
            'Edit',
            _("renamed from {0} to {1}").format(frappe.bold(old),
                                                frappe.bold(new)))

    if merge:
        frappe.delete_doc(doctype, old)

    frappe.clear_cache()
    frappe.enqueue('frappe.utils.global_search.rebuild_for_doctype',
                   doctype=doctype)

    if show_alert:
        frappe.msgprint(_('Document renamed from {0} to {1}').format(
            bold(old), bold(new)),
                        alert=True,
                        indicator='green')

    return new
Esempio n. 3
0
def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=False, ignore_if_exists=False):
	"""
		Renames a doc(dt, old) to doc(dt, new) and
		updates all linked fields of type "Link"
	"""
	if not frappe.db.exists(doctype, old):
		return

	if ignore_if_exists and frappe.db.exists(doctype, new):
		return

	if old==new:
		frappe.msgprint(_('Please select a new name to rename'))
		return

	force = cint(force)
	merge = cint(merge)

	meta = frappe.get_meta(doctype)

	# call before_rename
	old_doc = frappe.get_doc(doctype, old)
	out = old_doc.run_method("before_rename", old, new, merge) or {}
	new = (out.get("new") or new) if isinstance(out, dict) else (out or new)

	if doctype != "DocType":
		new = validate_rename(doctype, new, meta, merge, force, ignore_permissions)

	if not merge:
		rename_parent_and_child(doctype, old, new, meta)

	# update link fields' values
	link_fields = get_link_fields(doctype)
	update_link_field_values(link_fields, old, new, doctype)

	rename_dynamic_links(doctype, old, new)

	# save the user settings in the db
	update_user_settings(old, new, link_fields)

	if doctype=='DocType':
		rename_doctype(doctype, old, new, force)

	update_attachments(doctype, old, new)

	rename_versions(doctype, old, new)

	# call after_rename
	new_doc = frappe.get_doc(doctype, new)

	# copy any flags if required
	new_doc._local = getattr(old_doc, "_local", None)

	new_doc.run_method("after_rename", old, new, merge)

	if not merge:
		rename_password(doctype, old, new)

	# update user_permissions
	frappe.db.sql("""update tabDefaultValue set defvalue=%s where parenttype='User Permission'
		and defkey=%s and defvalue=%s""", (new, doctype, old))

	if merge:
		new_doc.add_comment('Edit', _("merged {0} into {1}").format(frappe.bold(old), frappe.bold(new)))
	else:
		new_doc.add_comment('Edit', _("renamed from {0} to {1}").format(frappe.bold(old), frappe.bold(new)))

	if merge:
		frappe.delete_doc(doctype, old)

	frappe.clear_cache()
	frappe.enqueue('frappe.utils.global_search.rebuild_for_doctype', doctype=doctype)

	return new