143 lines
3.9 KiB
JavaScript
143 lines
3.9 KiB
JavaScript
function compress_doclist(list) {
|
|
var kl = {}; var vl = []; var flx = {};
|
|
for(var i=0; i<list.length;i++) {
|
|
var o = list[i];
|
|
var fl = [];
|
|
if(!kl[o.doctype]) { // make key only once # doctype must be first
|
|
var tfl = ['doctype', 'name', 'docstatus', 'owner', 'parent', 'parentfield', 'parenttype', 'idx', 'creation', 'modified', 'modified_by', '__islocal', '__deleted','__newname', '__modified', '_user_tags']; // for text
|
|
var fl = ['doctype', 'name', 'docstatus', 'owner', 'parent', 'parentfield', 'parenttype', 'idx', 'creation', 'modified', 'modified_by', '__islocal', '__deleted','__newname', '__modified', '_user_tags']; // for unique
|
|
|
|
for(key in fields[o.doctype]) { // all other values
|
|
if(!in_list(fl, key)
|
|
&& !in_list(no_value_fields, fields[o.doctype][key].fieldtype)
|
|
&& !fields[o.doctype][key].no_column) {
|
|
fl[fl.length] = key; // save value list
|
|
tfl[tfl.length] = key //.replace(/'/g, "\\'").replace(/\n/g, "\\n");
|
|
}
|
|
}
|
|
flx[o.doctype] = fl;
|
|
kl[o.doctype] = tfl
|
|
}
|
|
var nl = [];
|
|
var fl = flx[o.doctype];
|
|
// check all
|
|
for(var j=0;j<fl.length;j++) {
|
|
var v = o[fl[j]];
|
|
nl.push(v);
|
|
}
|
|
vl.push(nl);
|
|
}
|
|
|
|
return JSON.stringify({'_vl':vl, '_kl':kl});
|
|
}
|
|
|
|
function expand_doclist(docs) {
|
|
var l = [];
|
|
for(var i=0;i<docs._vl.length;i++)
|
|
l[l.length] = zip(docs._kl[docs._vl[i][0]], docs._vl[i]);
|
|
return l;
|
|
}
|
|
function zip(k,v) {
|
|
var obj = {};
|
|
for(var i=0;i<k.length;i++) {
|
|
obj[k[i]] = v[i];
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
function save_doclist(dt, dn, save_action, onsave, onerr) {
|
|
var doc = locals[dt][dn];
|
|
var doctype = locals['DocType'][dt];
|
|
|
|
var tmplist = [];
|
|
|
|
// make doc list
|
|
var doclist = make_doclist(dt, dn, 1);
|
|
var all_clear = true;
|
|
|
|
if(save_action!='Cancel') {
|
|
for(var n in doclist) {
|
|
// type / mandatory checking
|
|
var tmp = check_required(doclist[n].doctype, doclist[n].name, doclist[0].doctype);
|
|
if(doclist[n].docstatus+''!='2'&&all_clear) // if not deleted
|
|
all_clear = tmp;
|
|
}
|
|
}
|
|
|
|
var f = frms[dt];
|
|
if(f && !all_clear) { // has errors
|
|
if(f)f.savingflag = false;
|
|
return 'Error';
|
|
}
|
|
|
|
var _save = function() {
|
|
//if(user=='Administrator')errprint(out);
|
|
page_body.set_status('Saving...')
|
|
|
|
$c('webnotes.widgets.form.savedocs', {'docs':compress_doclist(doclist), 'docname':dn, 'action': save_action, 'user':user },
|
|
function(r, rtxt) {
|
|
if(f){ f.savingflag = false;}
|
|
if(r.saved) {
|
|
if(onsave)onsave(r);
|
|
} else {
|
|
if(onerr)onerr(r);
|
|
}
|
|
}, function() {
|
|
if(f){ f.savingflag = false; } /*time out*/
|
|
},0,(f ? 'Saving...' : '')
|
|
);
|
|
}
|
|
|
|
// ask for name
|
|
if(doc.__islocal && (doctype && doctype.autoname && doctype.autoname.toLowerCase()=='prompt')) {
|
|
var newname = prompt('Enter the name of the new '+ dt, '');
|
|
if(newname) {
|
|
doc.__newname = strip(newname); _save();
|
|
} else {
|
|
msgprint('Not Saved'); onerr();
|
|
}
|
|
} else {
|
|
_save();
|
|
}
|
|
}
|
|
|
|
function check_required(dt, dn, parent_dt) {
|
|
var doc = locals[dt][dn];
|
|
if(doc.docstatus>1)return true;
|
|
var fl = fields_list[dt];
|
|
|
|
if(!fl)return true; // no doctype loaded
|
|
|
|
var all_clear = true;
|
|
var errfld = [];
|
|
for(var i=0;i<fl.length;i++) {
|
|
var key = fl[i].fieldname;
|
|
var v = doc[key];
|
|
|
|
if(fl[i].reqd && is_null(v) && fl[i].fieldname) {
|
|
errfld[errfld.length] = fl[i].label;
|
|
|
|
// Bring to front "Section"
|
|
if(cur_frm) {
|
|
// show as red
|
|
var f = cur_frm.fields_dict[fl[i].fieldname];
|
|
if(f) {
|
|
// in form
|
|
if(f.set_as_error) f.set_as_error(1);
|
|
|
|
// switch to section
|
|
if(!cur_frm.error_in_section && f.parent_section) {
|
|
cur_frm.set_section(f.parent_section.sec_id);
|
|
cur_frm.error_in_section = 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
if(all_clear)all_clear = false;
|
|
}
|
|
}
|
|
if(errfld.length)msgprint('<b>Mandatory fields required in '+
|
|
(doc.parenttype ? (fields[doc.parenttype][doc.parentfield].label + ' (Table)') : get_doctype_label(doc.doctype)) +
|
|
':</b>\n' + errfld.join('\n'));
|
|
return all_clear;
|
|
}
|