Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
12 роки тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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;