diff --git a/public/js/wn/form/control.js b/public/js/wn/form/control.js index cae6b30fff..af8842c819 100644 --- a/public/js/wn/form/control.js +++ b/public/js/wn/form/control.js @@ -726,36 +726,9 @@ wn.ui.form.ControlLink = wn.ui.form.ControlData.extend({ callback(value); return; } - - var fetch = ''; - if(me.frm && me.frm.fetch_dict[me.df.fieldname]) - fetch = me.frm.fetch_dict[me.df.fieldname].columns.join(', '); - - wn.call({ - method:'webnotes.widgets.form.utils.validate_link', - type: "GET", - args: { - 'value': value, - 'options':me.df.options, - 'fetch': fetch - }, - callback: function(r) { - if(r.message=='Ok') { - callback(value); - if(r.fetch_values) - me.set_fetch_values(r.fetch_values); - } else { - callback("") - } - } - }); + + this.frm.script_manager.validate_link_and_fetch(this.df, this.docname, value, callback); }, - set_fetch_values: function(fetch_values) { - var fl = this.frm.fetch_dict[this.df.fieldname].fields; - for(var i=0; i < fl.length; i++) { - wn.model.set_value(this.doctype, this.docname, fl[i], fetch_values[i]); - } - } }); wn.ui.form.ControlCode = wn.ui.form.ControlInput.extend({ diff --git a/public/js/wn/form/grid.js b/public/js/wn/form/grid.js index 997427914d..34be1c0be7 100644 --- a/public/js/wn/form/grid.js +++ b/public/js/wn/form/grid.js @@ -18,9 +18,7 @@ wn.ui.form.Grid = Class.extend({ ').appendTo(this.parent); $(this.wrapper).find(".grid-add-row").click(function() { - wn.model.add_child(me.frm.doc, me.df.options, me.df.fieldname); - me.refresh(); - me.wrapper.find(".grid-row:last").data("grid_row").toggle_view(true); + me.add_new_row(); return false; }) @@ -137,12 +135,17 @@ wn.ui.form.Grid = Class.extend({ this.grid_rows_by_docname[doc.name].refresh_field(fieldname); }, add_new_row: function(idx, callback) { - wn.model.add_child(this.frm.doc, this.df.options, this.df.fieldname, idx); + var d = wn.model.add_child(this.frm.doc, this.df.options, this.df.fieldname, idx); + this.frm.script_manager.trigger(this.df.fieldname + "_add", d.doctype, d.name); this.refresh(); // show - this.wrapper.find("[data-idx='"+idx+"']").data("grid_row") - .toggle_view(true, callback); + if(idx) { + this.wrapper.find("[data-idx='"+idx+"']").data("grid_row") + .toggle_view(true, callback); + } else { + this.wrapper.find(".grid-row:last").data("grid_row").toggle_view(true, callback); + } } }); diff --git a/public/js/wn/form/script_manager.js b/public/js/wn/form/script_manager.js index 4e3627e5e7..aab84db940 100644 --- a/public/js/wn/form/script_manager.js +++ b/public/js/wn/form/script_manager.js @@ -36,5 +36,44 @@ wn.ui.form.ScriptManager = Class.extend({ console.trace && console.trace(); console.log("----- end of error message -----"); console.group && console.groupEnd(); + }, + validate_link_and_fetch: function(df, docname, value, callback) { + var me = this; + var fetch = ''; + if(this.frm && this.frm.fetch_dict[df.fieldname]) + fetch = this.frm.fetch_dict[df.fieldname].columns.join(', '); + + wn.call({ + method:'webnotes.widgets.form.utils.validate_link', + type: "GET", + args: { + 'value': value, + 'options': df.options, + 'fetch': fetch + }, + callback: function(r) { + if(r.message=='Ok') { + if(callback) callback(value); + if(r.fetch_values) + me.set_fetch_values(df, docname, r.fetch_values); + } else { + if(callback) callback(""); + } + } + }); + }, + 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++) { + wn.model.set_value(df.parent, docname, fl[i], fetch_values[i]); + } + }, + copy_from_first_row: function(parentfield, current_row, fieldnames) { + var doclist = wn.model.get_doclist(this.frm.doc.doctype, this.frm.doc.name, {parentfield: parentfield}); + if(doclist.length===1 || doclist[0]===current_row) return; + + $.each(fieldnames, function(i, fieldname) { + current_row[fieldname] = doclist[0][fieldname]; + }); } -}) \ No newline at end of file +}); \ No newline at end of file diff --git a/public/js/wn/model/create_new.js b/public/js/wn/model/create_new.js index c853a607dd..e4d25c269a 100644 --- a/public/js/wn/model/create_new.js +++ b/public/js/wn/model/create_new.js @@ -107,7 +107,7 @@ $.extend(wn.model, { idx !== cint(idx) && wn.model.get_children(doctype, parent_doc.name, parentfield, parent_doc.doctype); - + return d; },