25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

145 satır
3.6 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. $.extend(wn.model, {
  4. docinfo: {},
  5. sync: function(r) {
  6. /* docs:
  7. extract doclist, docinfo (attachments, comments, assignments)
  8. from incoming request and set in `locals` and `wn.model.docinfo`
  9. */
  10. if(!r.docs && !r.docinfo) r = {docs:r};
  11. if(r.docs) {
  12. var doclist = r.docs;
  13. if(doclist._kl)
  14. doclist = wn.model.expand(doclist);
  15. if(doclist && doclist.length)
  16. wn.model.clear_doclist(doclist[0].doctype, doclist[0].name)
  17. var last_parent_name = null;
  18. var dirty = [];
  19. $.each(doclist, function(i, d) {
  20. if(!d.name && d.__islocal) { // get name (local if required)
  21. d.name = wn.model.get_new_name(d.doctype);
  22. wn.provide("wn.model.docinfo." + d.doctype + "." + d.name);
  23. if(!d.parenttype)
  24. last_parent_name = d.name;
  25. if(dirty.indexOf(d.parenttype || d.doctype)===-1) dirty.push(d.parenttype || d.doctype);
  26. }
  27. // set parent for subsequent orphans
  28. if(d.parenttype && !d.parent && d.__islocal) {
  29. d.parent = last_parent_name;
  30. }
  31. if(!locals[d.doctype])
  32. locals[d.doctype] = {};
  33. locals[d.doctype][d.name] = d;
  34. d.__last_sync_on = new Date();
  35. if(cur_frm && cur_frm.doctype==d.doctype && cur_frm.docname==d.name) {
  36. cur_frm.doc = d;
  37. }
  38. if(d.doctype=='DocField') wn.meta.add_field(d);
  39. if(d.doctype=='DocType') wn.meta.sync_messages(d);
  40. if(d.localname) {
  41. wn.model.new_names[d.localname] = d.name;
  42. $(document).trigger('rename', [d.doctype, d.localname, d.name]);
  43. delete locals[d.doctype][d.localname];
  44. // update docinfo to new dict keys
  45. if(i===0) {
  46. wn.model.docinfo[d.doctype][d.name] = wn.model.docinfo[d.doctype][d.localname];
  47. wn.model.docinfo[d.doctype][d.localname] = undefined;
  48. }
  49. }
  50. });
  51. if(cur_frm && dirty.indexOf(cur_frm.doctype)!==-1) cur_frm.dirty();
  52. }
  53. // set docinfo
  54. if(r.docinfo) {
  55. if(doclist) {
  56. var doc = doclist[0];
  57. } else {
  58. var doc = cur_frm.doc;
  59. }
  60. if(!wn.model.docinfo[doc.doctype])
  61. wn.model.docinfo[doc.doctype] = {};
  62. wn.model.docinfo[doc.doctype][doc.name] = r.docinfo;
  63. }
  64. return doclist;
  65. },
  66. expand: function(data) {
  67. function zip(k,v) {
  68. var obj = {};
  69. for(var i=0;i<k.length;i++) {
  70. obj[k[i]] = v[i];
  71. }
  72. return obj;
  73. }
  74. var l = [];
  75. for(var i=0;i<data._vl.length;i++) {
  76. l.push(zip(data._kl[data._vl[i][0]], data._vl[i]));
  77. }
  78. return l;
  79. },
  80. compress: function(doclist) {
  81. var all_keys = {}; var values = [];
  82. function get_key_list(doctype) {
  83. // valid standard keys
  84. var key_list = ['doctype', 'name', 'docstatus', 'owner', 'parent',
  85. 'parentfield', 'parenttype', 'idx', 'creation', 'modified',
  86. 'modified_by', '__islocal', '__newname', '__modified',
  87. '_user_tags', '__temp', '_comments'];
  88. for(key in wn.meta.docfield_map[doctype]) { // all other values
  89. if(!in_list(key_list, key)
  90. && !in_list(wn.model.no_value_type, wn.meta.docfield_map[doctype][key].fieldtype)
  91. && !wn.meta.docfield_map[doctype][key].no_column) {
  92. key_list[key_list.length] = key
  93. }
  94. }
  95. return key_list;
  96. }
  97. for(var i=0; i<doclist.length;i++) {
  98. var doc = doclist[i];
  99. // make keys
  100. if(!all_keys[doc.doctype]) {
  101. all_keys[doc.doctype] = get_key_list(doc.doctype);
  102. // doctype must be first
  103. }
  104. var row = []
  105. var key_list = all_keys[doc.doctype];
  106. // make data rows
  107. for(var j=0;j<key_list.length;j++) {
  108. row.push(doc[key_list[j]]);
  109. }
  110. values.push(row);
  111. }
  112. return JSON.stringify({'_vl':values, '_kl':all_keys});
  113. }
  114. });
  115. // legacy
  116. compress_doclist = wn.model.compress;