Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

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