From 5fb331f8e5d39e57c64d404a3672bb1ea322a0e7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 2 May 2016 13:28:01 +0530 Subject: [PATCH] [ux] fixes and rememeber_selected in hooks to set default link values --- frappe/boot.py | 19 +++++++------- .../doctype/communication/communication.json | 2 +- frappe/public/js/frappe/defaults.js | 2 +- frappe/public/js/frappe/desk.js | 5 +++- frappe/public/js/frappe/form/control.js | 9 +++++++ frappe/public/js/frappe/form/quick_entry.js | 5 +++- frappe/public/js/frappe/form/save.js | 21 ++++++++++++++++ frappe/public/js/frappe/model/create_new.js | 3 +++ frappe/public/js/legacy/form.js | 25 ------------------- 9 files changed, 53 insertions(+), 38 deletions(-) diff --git a/frappe/boot.py b/frappe/boot.py index eeb9a1be4a..fe7bd1f556 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -24,12 +24,12 @@ def get_bootinfo(): get_user(bootinfo) # system info - bootinfo['sysdefaults'] = frappe.defaults.get_defaults() - bootinfo['server_date'] = frappe.utils.nowdate() + bootinfo.sysdefaults = frappe.defaults.get_defaults() + bootinfo.server_date = frappe.utils.nowdate() if frappe.session['user'] != 'Guest': - bootinfo['user_info'] = get_fullnames() - bootinfo['sid'] = frappe.session['sid']; + bootinfo.user_info = get_fullnames() + bootinfo.sid = frappe.session['sid']; bootinfo.modules = {} bootinfo.module_list = [] @@ -47,22 +47,23 @@ def get_bootinfo(): bootinfo.home_folder = frappe.db.get_value("File", {"is_home_folder": 1}) # ipinfo - if frappe.session['data'].get('ipinfo'): - bootinfo['ipinfo'] = frappe.session['data']['ipinfo'] + if frappe.session.data.get('ipinfo'): + bootinfo.ipinfo = frappe.session['data']['ipinfo'] # add docs - bootinfo['docs'] = doclist + bootinfo.docs = doclist for method in hooks.boot_session or []: frappe.get_attr(method)(bootinfo) + bootinfo.remember_selected = hooks.remember_selected if bootinfo.lang: bootinfo.lang = unicode(bootinfo.lang) - bootinfo['versions'] = {k: v['version'] for k, v in get_versions().items()} + bootinfo.versions = {k: v['version'] for k, v in get_versions().items()} bootinfo.error_report_email = frappe.get_hooks("error_report_email") bootinfo.calendars = sorted(frappe.get_hooks("calendars")) - bootinfo["lang_dict"] = get_lang_dict() + bootinfo.lang_dict = get_lang_dict() return bootinfo diff --git a/frappe/core/doctype/communication/communication.json b/frappe/core/doctype/communication/communication.json index ee9b1622a1..efff2627e6 100644 --- a/frappe/core/doctype/communication/communication.json +++ b/frappe/core/doctype/communication/communication.json @@ -939,7 +939,7 @@ "issingle": 0, "istable": 0, "max_attachments": 0, - "modified": "2016-04-29 08:35:56.180787", + "modified": "2016-05-02 11:00:53.679033", "modified_by": "Administrator", "module": "Core", "name": "Communication", diff --git a/frappe/public/js/frappe/defaults.js b/frappe/public/js/frappe/defaults.js index 5789162fcf..6e671f07ed 100644 --- a/frappe/public/js/frappe/defaults.js +++ b/frappe/public/js/frappe/defaults.js @@ -19,7 +19,7 @@ frappe.defaults = { // Use User Permission value when only when it has a single value d = d[0]; } else { - d = defaults[frappe.model.scrub(key)]; + d = defaults[key] || defaults[frappe.model.scrub(key)]; } } if(!$.isArray(d)) d = [d]; diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index b3ce5fac34..500667bff2 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -252,7 +252,10 @@ frappe.Application = Class.extend({ }) .keydown("meta+s ctrl+s", function(e) { e.preventDefault(); - if(cur_frm) { + if(cur_dialog) { + // trigger primary + cur_dialog.get_primary_btn().trigger("click"); + } else if(cur_frm) { cur_frm.save_or_update(); } else if(frappe.container.page.save_action) { frappe.container.page.save_action(); diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index f97b0840f1..c8530937b4 100644 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -377,6 +377,8 @@ frappe.ui.form.ControlData = frappe.ui.form.ControlInput.extend({ html_element: "input", input_type: "text", make_input: function() { + if(this.$input) return; + this.$input = $("<"+ this.html_element +">") .attr("type", this.input_type) .attr("autocomplete", "off") @@ -1258,6 +1260,13 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({ ui.item.action.apply(me); } + // if remember_selected hook is set, add this value + // to defaults so you do not need to set it again + // unless it is changed. + if(frappe.boot.remember_selected && frappe.boot.remember_selected.indexOf(me.df.options)!==-1) { + frappe.boot.user.defaults[me.df.options] = ui.item.value; + } + if(me.frm && me.frm.doc) { me.selected = true; me.parse_validate_and_set_in_model(ui.item.value); diff --git a/frappe/public/js/frappe/form/quick_entry.js b/frappe/public/js/frappe/form/quick_entry.js index 15b7143b1b..0d8ddb4a0b 100644 --- a/frappe/public/js/frappe/form/quick_entry.js +++ b/frappe/public/js/frappe/form/quick_entry.js @@ -66,7 +66,10 @@ frappe.ui.form.quick_entry = function(doctype, success) { // delete the old doc frappe.model.clear_doc(dialog.doc.doctype, dialog.doc.name); var doc = r.message; - if(success) success(doc); + if(success) { + success(doc); + } + frappe.ui.form.update_calling_link(doc.name); }, error: function() { open_doc(); diff --git a/frappe/public/js/frappe/form/save.js b/frappe/public/js/frappe/form/save.js index 765cbdc983..e324dca640 100644 --- a/frappe/public/js/frappe/form/save.js +++ b/frappe/public/js/frappe/form/save.js @@ -178,6 +178,7 @@ frappe.ui.form.save = function(frm, action, callback, btn) { }, always: function() { frappe.ui.form.is_saving = false; + frappe.ui.form.update_calling_link(opts.args.doc.name); } }) }; @@ -188,3 +189,23 @@ frappe.ui.form.save = function(frm, action, callback, btn) { save(); } } + +frappe.ui.form.update_calling_link = function(name) { + if(frappe._from_link) { + // set value + frappe.model.set_value(frappe._from_link.doctype, + frappe._from_link.docname, frappe._from_link.df.fieldname, name); + + // refresh field + frappe._from_link.refresh(); + + // if from form, switch + if(frappe._from_link.frm) { + frappe.set_route("Form", frappe._from_link.frm.doctype, frappe._from_link.frm.docname); + setTimeout(function() { frappe.utils.scroll_to(frappe._from_link_scrollY); }, 100); + } + + frappe._from_link = null; + } +} + diff --git a/frappe/public/js/frappe/model/create_new.js b/frappe/public/js/frappe/model/create_new.js index 324ce626be..1e2e2a524d 100644 --- a/frappe/public/js/frappe/model/create_new.js +++ b/frappe/public/js/frappe/model/create_new.js @@ -121,6 +121,9 @@ $.extend(frappe.model, { // 2 - look in user defaults var user_default = frappe.defaults.get_user_default(df.fieldname); + if(!user_default && df.fieldtype==='Link') { + user_default = frappe.defaults.get_user_default(df.options); + } var is_allowed_user_default = user_default && (!has_user_permissions || user_permissions[df.options].indexOf(user_default)!==-1); diff --git a/frappe/public/js/legacy/form.js b/frappe/public/js/legacy/form.js index 8cfb8c5a12..e5cdb397be 100644 --- a/frappe/public/js/legacy/form.js +++ b/frappe/public/js/legacy/form.js @@ -404,9 +404,6 @@ _f.Frm.prototype.refresh = function(docname) { // read only (workflow) this.read_only = frappe.workflow.is_read_only(this.doctype, this.docname); - // set new doc name if created via link field - this.set_new_docname_from_link(); - // check if doctype is already open if (!this.opendocs[this.docname]) { this.check_doctype_conflict(this.docname); @@ -464,18 +461,6 @@ _f.Frm.prototype.refresh = function(docname) { } } -_f.Frm.prototype.set_new_docname_from_link = function() { - if(frappe._from_link && frappe._new_docname_from_link) { - frappe.model.set_value(frappe._from_link.doctype, - frappe._from_link.docname, frappe._from_link.df.fieldname, frappe._new_docname_from_link); - - frappe._from_link.refresh(); - - frappe._from_link = null; - frappe._new_docname_from_link = null; - } -} - _f.Frm.prototype.show_if_needs_refresh = function() { if(this.doc.__needs_refresh) { if(this.doc.__unsaved) { @@ -715,16 +700,6 @@ _f.Frm.prototype._save = function(save_action, callback, btn, on_error) { on_error(); } callback && callback(r); - - if(frappe._from_link) { - if(me.doctype===frappe._from_link.df.options) { - frappe.set_route("Form", frappe._from_link.frm.doctype, frappe._from_link.frm.docname); - - frappe._new_docname_from_link = me.docname; - - setTimeout(function() { frappe.utils.scroll_to(frappe._from_link_scrollY); }, 100); - } - } } if(save_action != "Update") {