From 6c9adf95a3f81caefea7e3232ff3972fce22ff0e Mon Sep 17 00:00:00 2001 From: Gavin D'souza Date: Mon, 7 Oct 2019 16:01:39 +0530 Subject: [PATCH] fix: rename docname and title --- frappe/model/rename_doc.py | 3 +- frappe/public/js/frappe/form/toolbar.js | 92 ++++++++++++++++++++----- 2 files changed, 76 insertions(+), 19 deletions(-) diff --git a/frappe/model/rename_doc.py b/frappe/model/rename_doc.py index 12c57f2780..f13290d856 100644 --- a/frappe/model/rename_doc.py +++ b/frappe/model/rename_doc.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals, print_function import frappe -from frappe import _ +from frappe import _, bold from frappe.utils import cint from frappe.model.naming import validate_name from frappe.model.dynamic_links import get_dynamic_link_map @@ -83,6 +83,7 @@ def rename_doc(doctype, old, new, force=False, merge=False, ignore_permissions=F frappe.clear_cache() frappe.enqueue('frappe.utils.global_search.rebuild_for_doctype', doctype=doctype) + frappe.msgprint(_('Document renamed from {0} to {1}').format(bold(old), bold(new)), alert=True, indicator='green') return new diff --git a/frappe/public/js/frappe/form/toolbar.js b/frappe/public/js/frappe/form/toolbar.js index 7f5882f517..4957845499 100644 --- a/frappe/public/js/frappe/form/toolbar.js +++ b/frappe/public/js/frappe/form/toolbar.js @@ -64,27 +64,83 @@ frappe.ui.form.Toolbar = Class.extend({ can_rename: function() { return this.frm.perm[0].write && this.frm.meta.allow_rename && !this.frm.doc.__islocal; }, - setup_editable_title: function() { - var me = this; - this.page.$title_area.find(".title-text").on("click", function() { - if(me.is_title_editable()) { - frappe.prompt({fieldname: "title", fieldtype:"Data", - label: __("Title"), reqd: 1, "default": me.frm.doc.title }, - function(data) { - if(data.title) { - me.frm.set_value("title", data.title); - if(!me.frm.doc.__islocal) { - me.frm.save_or_update(); - } else { - me.set_title(); - } - } - }, __("Edit Title"), __("Update")); + setup_editable_title: function () { + let me = this; + + this.page.$title_area.find(".title-text").on("click", () => { + let fields = [] + + // check if title is updateable + if (me.is_title_editable()) { + fields.push({ + label: __("New {0}", [__(me.frm.meta.title_field)]), + fieldname: "title", + fieldtype: "Data", + reqd: 1, + default: me.frm.doc.title + }); } - if(me.can_rename()) { - me.frm.rename_doc(); + + // check if docname is updateable + if (me.can_rename()) { + fields.push(... + [{ + label: __("New Docname"), + fieldname: "name", + fieldtype: "Data", + reqd: 1, + default: me.frm.doc.name + }, { + label: __("Merge with existing"), + fieldname: "merge", + fieldtype: "Check", + default: 0 + }] + ); } + + // create dialog + let d = new frappe.ui.Dialog({ + title: __("Rename Fields"), + fields: fields + }); + d.show(); + + d.set_primary_action(__("Rename"), function () { + let args = d.get_values(); + + if (args.title && me.frm.doc[me.frm.meta.title_field] != args.title) { + me.frm.set_value(me.frm.meta.title_field, args.title); + me.frm.save_or_update(); + } + if (args.name && me.frm.doc.name != args.name) { + rename_doc(d, me.frm.doctype, me.frm.doc.name, args); + } + + d.hide(); + }); }); + + function rename_doc(d, doctype, docname, args) { + frappe.call({ + method: "frappe.model.rename_doc.rename_doc", + args: { + doctype: doctype, + old: docname, + new: args.name, + merge: args.merge + }, + btn: d.get_primary_btn(), + callback: function(r,rt) { + if(!r.exc) { + $(document).trigger('rename', [doctype, docname, + r.message || args.new_name]); + if(locals[doctype] && locals[doctype][docname]) + delete locals[doctype][docname]; + } + } + }); + } }, get_dropdown_menu: function(label) { return this.page.add_dropdown(label);