diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index be94b5b1a7..d25b4616ca 100755 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -100,7 +100,7 @@ frappe.ui.form.Control = Class.extend({ set_value: function(value) { this.parse_validate_and_set_in_model(value); }, - parse_validate_and_set_in_model: function(value) { + parse_validate_and_set_in_model: function(value, e) { var me = this; if(this.inside_change_event) return; this.inside_change_event = true; @@ -110,6 +110,11 @@ frappe.ui.form.Control = Class.extend({ me.set_model_value(value); me.inside_change_event = false; me.set_mandatory && me.set_mandatory(value); + + if(me.df.change || me.df.onchange) { + // onchange event specified in df + (me.df.change || me.df.onchange).apply(me, [e]); + } } this.validate ? this.validate(value, set) : set(value); @@ -333,39 +338,8 @@ frappe.ui.form.ControlInput = frappe.ui.form.Control.extend({ bind_change_event: function() { var me = this; - this.$input && this.$input.on("change", this.change || function(e) { - if(me.df.change || me.df.onchange) { - // onchange event specified in df - (me.df.change || me.df.onchange).apply(this, [e]); - return; - } - if(me.doctype && me.docname && me.get_value) { - me.parse_validate_and_set_in_model(me.get_value()); - } else { - // inline - var value = me.get_value(); - var parsed = me.parse ? me.parse(value) : value; - var set_input = function(before, after) { - if(before !== after) { - me.set_input(after); - } - if(me.doc) { - me.doc[me.df.fieldname] = value; - } - me.set_mandatory && me.set_mandatory(after); - if(me.after_validate) { - me.after_validate(after, me.$input); - } - } - if(me.validate) { - me.validate(parsed, function(validated) { - set_input(value, validated); - }); - } else { - set_input(value, parsed); - } - } + me.parse_validate_and_set_in_model(me.get_value(), e); }); }, bind_focusout: function() { @@ -1430,22 +1404,8 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({ return; } var value = me.get_value(); - if(me.doctype && me.docname) { - if(value!==me.last_value) { - me.parse_validate_and_set_in_model(value); - } - } else { - var cache_list = me.$input.cache[me.get_options()]; - if (cache_list && cache_list[""]) { - var docs = cache_list[""].map(item => item.label); - if(docs.includes(value)) { - me.set_mandatory(value); - } else { - me.$input.val(""); - } - } else { - me.$input.val(value); - } + if(value!==me.last_value) { + me.parse_validate_and_set_in_model(value); } }); @@ -1487,17 +1447,7 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({ frappe.boot.user.last_selected_values[me.df.options] = item.value; } - if(me.frm && me.frm.doc) { - me.selected = true; - me.parse_validate_and_set_in_model(item.value); - setTimeout(function() { - me.selected = false; - }, 100); - } else { - me.$input.val(item.value); - me.$input.trigger("change"); - me.set_mandatory(item.value); - } + me.parse_validate_and_set_in_model(item.value); }); this.$input.on("awesomplete-selectcomplete", function(e) { @@ -1585,11 +1535,49 @@ frappe.ui.form.ControlLink = frappe.ui.form.ControlData.extend({ return; } - if(this.frm) { - this.frm.script_manager.validate_link_and_fetch(this.df, this.get_options(), - this.docname, value, callback); + this.validate_link_and_fetch(this.df, this.get_options(), + this.docname, value, callback); + }, + validate_link_and_fetch: function(df, doctype, docname, value, callback) { + var me = this; + + if(value) { + var fetch = ''; + + if(this.frm && this.frm.fetch_dict[df.fieldname]) { + fetch = this.frm.fetch_dict[df.fieldname].columns.join(', '); + } + + return frappe.call({ + method:'frappe.desk.form.utils.validate_link', + type: "GET", + args: { + 'value': value, + 'options': doctype, + 'fetch': fetch + }, + no_spinner: true, + callback: function(r) { + if(r.message=='Ok') { + if(r.fetch_values && docname) { + me.set_fetch_values(df, docname, r.fetch_values); + } + if(callback) callback(r.valid_value); + } else { + if(callback) callback(""); + } + } + }); + } else if(callback) { + callback(value); } }, + set_fetch_values: function(df, docname, fetch_values) { + var fl = this.frm.fetch_dict[df.fieldname].fields; + for(var i=0; i < fl.length; i++) { + frappe.model.set_value(df.parent, docname, fl[i], fetch_values[i], df.fieldtype); + } + } }); if(Awesomplete) { diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index cc9de2587c..8aa7abfef1 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -169,7 +169,7 @@ frappe.ui.form.Grid = Class.extend({ this.truncate_rows(data); this.grid_rows_by_docname = {}; - for(var ri=0;ri < data.length; ri++) { + for(var ri=0; ri < data.length; ri++) { var d = data[ri]; if(d.idx===undefined) { @@ -951,7 +951,6 @@ frappe.ui.form.GridRow = Class.extend({ parent = column.field_area, df = column.df; - // no text editor in grid if (df.fieldtype=='Text Editor') { df.fieldtype = 'Text'; @@ -966,6 +965,8 @@ frappe.ui.form.GridRow = Class.extend({ doctype: this.doc.doctype, docname: this.doc.name, frm: this.grid.frm, + grid: this.grid, + grid_row: this, value: this.doc[df.fieldname] }); diff --git a/frappe/public/js/frappe/form/script_manager.js b/frappe/public/js/frappe/form/script_manager.js index ad34dcc6a7..be79a38c88 100644 --- a/frappe/public/js/frappe/form/script_manager.js +++ b/frappe/public/js/frappe/form/script_manager.js @@ -150,44 +150,6 @@ frappe.ui.form.ScriptManager = Class.extend({ console.log("----- end of error message -----"); console.group && console.groupEnd(); }, - validate_link_and_fetch: function(df, doctype, docname, value, callback) { - var me = this; - - if(value) { - var fetch = ''; - - if(this.frm && this.frm.fetch_dict[df.fieldname]) - fetch = this.frm.fetch_dict[df.fieldname].columns.join(', '); - - return frappe.call({ - method:'frappe.desk.form.utils.validate_link', - type: "GET", - args: { - 'value': value, - 'options': doctype, - 'fetch': fetch - }, - no_spinner: true, - callback: function(r) { - if(r.message=='Ok') { - if(r.fetch_values) - me.set_fetch_values(df, docname, r.fetch_values); - if(callback) callback(r.valid_value); - } else { - if(callback) callback(""); - } - } - }); - } else if(callback) { - callback(value); - } - }, - set_fetch_values: function(df, docname, fetch_values) { - var fl = this.frm.fetch_dict[df.fieldname].fields; - for(var i=0; i < fl.length; i++) { - frappe.model.set_value(df.parent, docname, fl[i], fetch_values[i], df.fieldtype); - } - }, copy_from_first_row: function(parentfield, current_row, fieldnames) { var data = this.frm.doc[parentfield]; if(data.length===1 || data[0]===current_row) return;