您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 
 

272 行
6.8 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. get_server_fields = function(method, arg, table_field, doc, dt, dn, allow_edit, call_back) {
  4. wn.dom.freeze();
  5. return $c('runserverobj',
  6. args={'method':method,
  7. 'docs':wn.model.compress(make_doclist(doc.doctype, doc.name)),
  8. 'arg':arg
  9. },
  10. function(r, rt) {
  11. wn.dom.unfreeze();
  12. if (r.message) {
  13. var d = locals[dt][dn];
  14. var field_dict = r.message;
  15. for(var key in field_dict) {
  16. d[key] = field_dict[key];
  17. if (table_field)
  18. refresh_field(key, d.name, table_field);
  19. else
  20. refresh_field(key);
  21. }
  22. }
  23. if(call_back){
  24. doc = locals[doc.doctype][doc.name];
  25. call_back(doc, dt, dn);
  26. }
  27. }
  28. );
  29. }
  30. set_multiple = function (dt, dn, dict, table_field) {
  31. var d = locals[dt][dn];
  32. for(var key in dict) {
  33. d[key] = dict[key];
  34. if (table_field)
  35. refresh_field(key, d.name, table_field);
  36. else
  37. refresh_field(key);
  38. }
  39. }
  40. refresh_many = function (flist, dn, table_field) {
  41. for(var i in flist) {
  42. if (table_field)
  43. refresh_field(flist[i], dn, table_field);
  44. else
  45. refresh_field(flist[i]);
  46. }
  47. }
  48. set_field_tip = function(n,txt) {
  49. var df = wn.meta.get_docfield(cur_frm.doctype, n, cur_frm.docname);
  50. if(df)df.description = txt;
  51. if(cur_frm && cur_frm.fields_dict) {
  52. if(cur_frm.fields_dict[n])
  53. cur_frm.fields_dict[n].comment_area.innerHTML = replace_newlines(txt);
  54. else
  55. console.log('[set_field_tip] Unable to set field tip: ' + n);
  56. }
  57. }
  58. refresh_field = function(n, docname, table_field) {
  59. // multiple
  60. if(typeof n==typeof [])
  61. refresh_many(n, docname, table_field);
  62. if(table_field && cur_frm.fields_dict[table_field].grid.grid_rows_by_docname) { // for table
  63. cur_frm.fields_dict[table_field].grid.grid_rows_by_docname[docname].refresh_field(n);
  64. } else if(cur_frm) {
  65. cur_frm.refresh_field(n)
  66. }
  67. }
  68. set_field_options = function(n, txt) {
  69. cur_frm.set_df_property(n, 'options', txt)
  70. }
  71. set_field_permlevel = function(n, level) {
  72. cur_frm.set_df_property(n, 'permlevel', level)
  73. }
  74. toggle_field = function(n, hidden) {
  75. var df = wn.meta.get_docfield(cur_frm.doctype, n, cur_frm.docname);
  76. if(df) {
  77. df.hidden = hidden;
  78. refresh_field(n);
  79. }
  80. else {
  81. console.log((hidden ? "hide_field" : "unhide_field") + " cannot find field " + n);
  82. }
  83. }
  84. hide_field = function(n) {
  85. if(cur_frm) {
  86. if(n.substr) toggle_field(n, 1);
  87. else { for(var i in n) toggle_field(n[i], 1) }
  88. }
  89. }
  90. unhide_field = function(n) {
  91. if(cur_frm) {
  92. if(n.substr) toggle_field(n, 0);
  93. else { for(var i in n) toggle_field(n[i], 0) }
  94. }
  95. }
  96. get_field_obj = function(fn) {
  97. return cur_frm.fields_dict[fn];
  98. }
  99. // set missing values in given doc
  100. set_missing_values = function(doc, dict) {
  101. // dict contains fieldname as key and "default value" as value
  102. var fields_to_set = {};
  103. $.each(dict, function(i, v) { if (!doc[i]) { fields_to_set[i] = v; } });
  104. if (fields_to_set) { set_multiple(doc.doctype, doc.name, fields_to_set); }
  105. }
  106. _f.Frm.prototype.get_doc = function() {
  107. return locals[this.doctype][this.docname];
  108. }
  109. _f.Frm.prototype.get_doclist = function(filters) {
  110. return wn.model.get_doclist(this.doctype, this.docname, filters);
  111. }
  112. _f.Frm.prototype.field_map = function(fnames, fn) {
  113. if(typeof fnames==='string') {
  114. if(fnames == '*') {
  115. fnames = keys(this.fields_dict);
  116. } else {
  117. fnames = [fnames];
  118. }
  119. }
  120. $.each(fnames, function(i,fieldname) {
  121. //var field = cur_frm.fields_dict[f]; - much better design
  122. var field = wn.meta.get_docfield(cur_frm.doctype, fieldname, cur_frm.docname);
  123. if(field) {
  124. fn(field);
  125. cur_frm.refresh_field(fieldname);
  126. };
  127. })
  128. }
  129. _f.Frm.prototype.set_df_property = function(fieldname, property, value) {
  130. var field = wn.meta.get_docfield(cur_frm.doctype, fieldname, cur_frm.docname)
  131. if(field) {
  132. field[property] = value;
  133. cur_frm.refresh_field(fieldname);
  134. };
  135. }
  136. _f.Frm.prototype.toggle_enable = function(fnames, enable) {
  137. cur_frm.field_map(fnames, function(field) {
  138. field.read_only = enable ? 0 : 1; });
  139. }
  140. _f.Frm.prototype.toggle_reqd = function(fnames, mandatory) {
  141. cur_frm.field_map(fnames, function(field) { field.reqd = mandatory ? true : false; });
  142. }
  143. _f.Frm.prototype.toggle_display = function(fnames, show) {
  144. cur_frm.field_map(fnames, function(field) { field.hidden = show ? 0 : 1; });
  145. }
  146. _f.Frm.prototype.call_server = function(method, args, callback) {
  147. return $c_obj(cur_frm.get_doclist(), method, args, callback);
  148. }
  149. _f.Frm.prototype.get_files = function() {
  150. return cur_frm.attachments
  151. ? keys(cur_frm.attachments.get_attachments()).sort()
  152. : [] ;
  153. }
  154. _f.Frm.prototype.set_query = function(fieldname, opt1, opt2) {
  155. var func = (typeof opt1=="function") ? opt1 : opt2;
  156. if(opt2) {
  157. this.fields_dict[opt1].grid.get_field(fieldname).get_query = func;
  158. } else {
  159. this.fields_dict[fieldname].get_query = func;
  160. }
  161. }
  162. _f.Frm.prototype.set_value_if_missing = function(field, value) {
  163. this.set_value(field, value, true);
  164. }
  165. _f.Frm.prototype.set_value = function(field, value, if_missing) {
  166. var me = this;
  167. var _set = function(f, v) {
  168. var fieldobj = me.fields_dict[f];
  169. if(fieldobj) {
  170. if(!if_missing || !wn.model.has_value(me.doctype, me.doc.name, f)) {
  171. if(fieldobj.df.fieldtype==="Table" && $.isArray(v)) {
  172. wn.model.clear_table(fieldobj.df.options, me.doctype,
  173. me.doc.name, fieldobj.df.fieldname);
  174. $.each(v, function(i, d) {
  175. var child = wn.model.add_child(me.doc, fieldobj.df.options,
  176. fieldobj.df.fieldname, i+1);
  177. $.extend(child, d);
  178. });
  179. me.refresh_field(f);
  180. } else {
  181. wn.model.set_value(me.doctype, me.doc.name, f, v);
  182. }
  183. }
  184. }
  185. }
  186. if(typeof field=="string") {
  187. _set(field, value)
  188. } else if($.isPlainObject(field)) {
  189. $.each(field, function(f, v) {
  190. _set(f, v);
  191. })
  192. }
  193. }
  194. _f.Frm.prototype.call = function(opts) {
  195. var me = this;
  196. if(!opts.doc) {
  197. if(opts.method.indexOf(".")===-1)
  198. opts.method = wn.model.get_server_module_name(me.doctype) + "." + opts.method;
  199. opts.original_callback = opts.callback;
  200. opts.callback = function(r) {
  201. if($.isPlainObject(r.message)) {
  202. if(opts.child) {
  203. // update child doc
  204. opts.child = locals[opts.child.doctype][opts.child.name];
  205. $.extend(opts.child, r.message);
  206. me.fields_dict[opts.child.parentfield].refresh();
  207. } else {
  208. // update parent doc
  209. me.set_value(r.message);
  210. }
  211. }
  212. opts.original_callback && opts.original_callback(r);
  213. }
  214. } else {
  215. opts.original_callback = opts.callback;
  216. opts.callback = function(r) {
  217. if(!r.exc) me.refresh_fields();
  218. opts.original_callback && opts.original_callback(r);
  219. }
  220. }
  221. return wn.call(opts);
  222. }
  223. _f.Frm.prototype.get_field = function(field) {
  224. return cur_frm.fields_dict[field];
  225. };
  226. _f.Frm.prototype.set_read_only = function() {
  227. var perm = [];
  228. $.each(wn.perm.get_perm(cur_frm.doc.doctype, cur_frm.doc.name), function(i, permlevel) {
  229. if(permlevel!=null) perm[permlevel] = {read:1};
  230. });
  231. cur_frm.perm = perm;
  232. }