You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

144 lines
3.9 KiB

  1. function compress_doclist(list) {
  2. var kl = {}; var vl = []; var flx = {};
  3. for(var i=0; i<list.length;i++) {
  4. var o = list[i];
  5. var fl = [];
  6. if(!kl[o.doctype]) { // make key only once # doctype must be first
  7. var tfl = ['doctype', 'name', 'docstatus', 'owner', 'parent', 'parentfield', 'parenttype', 'idx', 'creation', 'modified', 'modified_by', '__islocal', '__deleted','__newname', '__modified', '_user_tags']; // for text
  8. var fl = ['doctype', 'name', 'docstatus', 'owner', 'parent', 'parentfield', 'parenttype', 'idx', 'creation', 'modified', 'modified_by', '__islocal', '__deleted','__newname', '__modified', '_user_tags']; // for unique
  9. for(key in fields[o.doctype]) { // all other values
  10. if(!in_list(fl, key)
  11. && !in_list(no_value_fields, fields[o.doctype][key].fieldtype)
  12. && !fields[o.doctype][key].no_column) {
  13. fl[fl.length] = key; // save value list
  14. tfl[tfl.length] = key //.replace(/'/g, "\\'").replace(/\n/g, "\\n");
  15. }
  16. }
  17. flx[o.doctype] = fl;
  18. kl[o.doctype] = tfl
  19. }
  20. var nl = [];
  21. var fl = flx[o.doctype];
  22. // check all
  23. for(var j=0;j<fl.length;j++) {
  24. var v = o[fl[j]];
  25. nl.push(v);
  26. }
  27. vl.push(nl);
  28. }
  29. return JSON.stringify({'_vl':vl, '_kl':kl});
  30. }
  31. function expand_doclist(docs) {
  32. var l = [];
  33. for(var i=0;i<docs._vl.length;i++)
  34. l[l.length] = zip(docs._kl[docs._vl[i][0]], docs._vl[i]);
  35. return l;
  36. }
  37. function zip(k,v) {
  38. var obj = {};
  39. for(var i=0;i<k.length;i++) {
  40. obj[k[i]] = v[i];
  41. }
  42. return obj;
  43. }
  44. function save_doclist(dt, dn, save_action, onsave, onerr) {
  45. var doc = locals[dt][dn];
  46. var doctype = locals['DocType'][dt];
  47. var tmplist = [];
  48. // make doc list
  49. var doclist = make_doclist(dt, dn, 1);
  50. var all_clear = true;
  51. if(save_action!='Cancel') {
  52. for(var n in doclist) {
  53. // type / mandatory checking
  54. var tmp = check_required(doclist[n].doctype, doclist[n].name, doclist[0].doctype);
  55. if(doclist[n].docstatus+''!='2'&&all_clear) // if not deleted
  56. all_clear = tmp;
  57. }
  58. }
  59. var f = frms[dt];
  60. if(f && !all_clear) { // has errors
  61. if(f)f.savingflag = false;
  62. return 'Error';
  63. }
  64. var _save = function() {
  65. //if(user=='Administrator')errprint(out);
  66. page_body.set_status('Saving...')
  67. $c('webnotes.widgets.form.savedocs', {'docs':compress_doclist(doclist), 'docname':dn, 'action': save_action, 'user':user },
  68. function(r, rtxt) {
  69. if(f){ f.savingflag = false;}
  70. if(r.saved) {
  71. if(onsave)onsave(r);
  72. } else {
  73. if(onerr)onerr(r);
  74. }
  75. }, function() {
  76. if(f){ f.savingflag = false; } /*time out*/
  77. },0,(f ? 'Saving...' : '')
  78. );
  79. }
  80. // ask for name
  81. if(doc.__islocal && (doctype && doctype.autoname && doctype.autoname.toLowerCase()=='prompt')) {
  82. var newname = prompt('Enter the name of the new '+ dt, '');
  83. if(newname) {
  84. doc.__newname = strip(newname); _save();
  85. } else {
  86. msgprint('Not Saved'); onerr();
  87. }
  88. } else {
  89. _save();
  90. }
  91. }
  92. function check_required(dt, dn, parent_dt) {
  93. var doc = locals[dt][dn];
  94. if(doc.docstatus>1)return true;
  95. var fl = fields_list[dt];
  96. if(!fl)return true; // no doctype loaded
  97. var all_clear = true;
  98. var errfld = [];
  99. for(var i=0;i<fl.length;i++) {
  100. var key = fl[i].fieldname;
  101. var v = doc[key];
  102. if(fl[i].reqd && is_null(v) && fl[i].fieldname) {
  103. errfld[errfld.length] = fl[i].label;
  104. // Bring to front "Section"
  105. if(cur_frm) {
  106. // show as red
  107. var f = cur_frm.fields_dict[fl[i].fieldname];
  108. if(f) {
  109. // in form
  110. if(f.set_as_error) f.set_as_error(1);
  111. // switch to section
  112. if(!cur_frm.error_in_section && f.parent_section) {
  113. cur_frm.set_section(f.parent_section.sec_id);
  114. cur_frm.error_in_section = 1;
  115. }
  116. }
  117. }
  118. if(all_clear)all_clear = false;
  119. }
  120. }
  121. if(errfld.length)msgprint('<b>Mandatory fields required in '+
  122. (doc.parenttype ? (fields[doc.parenttype][doc.parentfield].label + ' (Table)') : get_doctype_label(doc.doctype)) +
  123. ':</b>\n' + errfld.join('\n'));
  124. return all_clear;
  125. }