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.

datatype.js 7.3 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. var startup_list = [];
  2. wn.utils.full_name = function(fn, ln) { return fn + (ln ? ' ' : '') + (ln ? ln : '') }
  3. function fmt_money(v){
  4. if(v==null || v=='')return '0.00'; // no nulls
  5. v = (v+'').replace(/,/g, ''); // remove existing commas
  6. v = parseFloat(v);
  7. if(isNaN(v)) {
  8. return ''; // not a number
  9. } else {
  10. var cp = locals['Control Panel']['Control Panel'];
  11. var val = 2; // variable used to differentiate other values from Millions
  12. if(cp.currency_format == 'Millions') val = 3;
  13. v = v.toFixed(2);
  14. var delimiter = ","; // replace comma if desired
  15. amount = v+'';
  16. var a = amount.split('.',2)
  17. var d = a[1];
  18. var i = parseInt(a[0]);
  19. if(isNaN(i)) { return ''; }
  20. var minus = '';
  21. if(v < 0) { minus = '-'; }
  22. i = Math.abs(i);
  23. var n = new String(i);
  24. var a = [];
  25. if(n.length > 3)
  26. {
  27. var nn = n.substr(n.length-3);
  28. a.unshift(nn);
  29. n = n.substr(0,n.length-3);
  30. while(n.length > val)
  31. {
  32. var nn = n.substr(n.length-val);
  33. a.unshift(nn);
  34. n = n.substr(0,n.length-val);
  35. }
  36. }
  37. if(n.length > 0) { a.unshift(n); }
  38. n = a.join(delimiter);
  39. if(d.length < 1) { amount = n; }
  40. else { amount = n + '.' + d; }
  41. amount = minus + amount;
  42. return amount;
  43. }
  44. }
  45. // to title case
  46. function toTitle(str){
  47. var word_in = str.split(" ");
  48. var word_out = [];
  49. for(w in word_in){
  50. word_out[w] = word_in[w].charAt(0).toUpperCase() + word_in[w].slice(1);
  51. }
  52. return word_out.join(" ");
  53. }
  54. function is_null(v) {
  55. if(v==null) {
  56. return 1
  57. } else if(v==0) {
  58. if((v+'').length>=1) return 0;
  59. else return 1;
  60. } else {
  61. return 0
  62. }
  63. }
  64. function $s(ele, v, ftype, fopt) {
  65. if(v==null)v='';
  66. if(ftype =='Text'|| ftype =='Small Text') {
  67. ele.innerHTML = v?v.replace(/\n/g, '<br>'):'';
  68. } else if(ftype =='Date') {
  69. v = dateutil.str_to_user(v);
  70. if(v==null)v=''
  71. ele.innerHTML = v;
  72. } else if(ftype =='Link' && fopt) {
  73. ele.innerHTML = '';
  74. doc_link(ele, fopt, v);
  75. } else if(ftype =='Currency') {
  76. ele.style.textAlign = 'right';
  77. if(is_null(v))
  78. ele.innerHTML = '';
  79. else
  80. ele.innerHTML = fmt_money(v);
  81. } else if(ftype =='Int') {
  82. ele.style.textAlign = 'right';
  83. ele.innerHTML = v;
  84. } else if(ftype == 'Check') {
  85. if(v) ele.innerHTML = '<img src="images/ui/tick.gif">';
  86. else ele.innerHTML = '';
  87. } else {
  88. ele.innerHTML = v;
  89. }
  90. }
  91. function clean_smart_quotes(s) {
  92. if(s) {
  93. s = s.replace( /\u2018/g, "'" );
  94. s = s.replace( /\u2019/g, "'" );
  95. s = s.replace( /\u201c/g, '"' );
  96. s = s.replace( /\u201d/g, '"' );
  97. s = s.replace( /\u2013/g, '-' );
  98. s = s.replace( /\u2014/g, '--' );
  99. }
  100. return s;
  101. }
  102. function copy_dict(d) {
  103. var n = {};
  104. for(var k in d) n[k] = d[k];
  105. return n;
  106. }
  107. function $p(ele,top,left) {
  108. ele.style.position = 'absolute';
  109. ele.style.top = top+'px';
  110. ele.style.left = left+'px';
  111. }
  112. function replace_newlines(t) {
  113. return t?t.replace(/\n/g, '<br>'):'';
  114. }
  115. function cstr(s) {
  116. if(s==null)return '';
  117. return s+'';
  118. }
  119. function flt(v,decimals) {
  120. if(v==null || v=='')return 0;
  121. v=(v+'').replace(/,/g,'');
  122. v=parseFloat(v);
  123. if(isNaN(v))
  124. v=0;
  125. if(decimals!=null)
  126. return v.toFixed(decimals);
  127. return v;
  128. }
  129. function esc_quotes(s) { if(s==null)s=''; return s.replace(/'/, "\'");}
  130. var crop = function(s, len) {
  131. if(s.length>len)
  132. return s.substr(0, len-3) + '...';
  133. else
  134. return s;
  135. }
  136. var strip = function(s, chars) {
  137. var s= lstrip(s, chars)
  138. s = rstrip(s, chars);
  139. return s;
  140. }
  141. var lstrip = function(s, chars) {
  142. if(!chars) chars = ['\n', '\t', ' '];
  143. // strip left
  144. var first_char = s.substr(0,1);
  145. while(in_list(chars, first_char)) {
  146. var s = s.substr(1);
  147. first_char = s.substr(0,1);
  148. }
  149. return s;
  150. }
  151. var rstrip = function(s, chars) {
  152. if(!chars) chars = ['\n', '\t', ' '];
  153. var last_char = s.substr(s.length-1);
  154. while(in_list(chars, last_char)) {
  155. var s = s.substr(0, this.length-1);
  156. last_char = s.substr(this.length-1);
  157. }
  158. return s;
  159. }
  160. function repl_all(s, s1, s2) {
  161. var idx = s.indexOf(s1);
  162. while (idx != -1){
  163. s = s.replace(s1, s2);
  164. idx = s.indexOf(s1);
  165. }
  166. return s;
  167. }
  168. function repl(s, dict) {
  169. if(s==null)return '';
  170. for(key in dict) s = repl_all(s, '%('+key+')s', dict[key]);
  171. return s;
  172. }
  173. ///// dict type
  174. function keys(obj) { var mykeys=[];for (key in obj) mykeys[mykeys.length]=key;return mykeys;}
  175. function values(obj) { var myvalues=[];for (key in obj) myvalues[myvalues.length]=obj[key];return myvalues;}
  176. function seval(s) { return eval('var a='+s+';a'); }
  177. function in_list(list, item) {
  178. for(var i=0; i<list.length; i++)
  179. if(list[i]==item) return true;
  180. return false;
  181. }
  182. function has_common(list1, list2) {
  183. if(!list1 || !list2) return false;
  184. for(var i=0; i<list1.length; i++) {
  185. if(in_list(list2, list1[i]))return true;
  186. }
  187. return false;
  188. }
  189. var inList = in_list; // bc
  190. function add_lists(l1, l2) {
  191. var l = [];
  192. for(var k in l1) l.push(l1[k]);
  193. for(var k in l2) l.push(l2[k]);
  194. return l;
  195. }
  196. function docstring(obj) {
  197. var l = [];
  198. for(key in obj) {
  199. var v = obj[key];
  200. if(v!=null) {
  201. if(typeof(v)==typeof(1)) {
  202. l[l.length] = "'"+ key + "':" + (v + '');
  203. } else {
  204. v = v+''; // convert to string
  205. l[l.length] = "'"+ key + "':'" + v.replace(/'/g, "\\'").replace(/\n/g, "\\n") + "'";
  206. }
  207. }
  208. }
  209. return "{" + l.join(',') + '}';
  210. }
  211. function ie_refresh(e) { $dh(e); $ds(e); }
  212. function DocLink(p, doctype, name, onload) {
  213. var a = $a(p,'span','link_type'); a.innerHTML = a.dn = name; a.dt = doctype;
  214. a.onclick=function() { loaddoc(this.dt,this.dn,onload) }; return a;
  215. }
  216. var doc_link = DocLink;
  217. // in words
  218. var known_numbers = {
  219. 0: 'zero',
  220. 1: 'one',
  221. 2: 'two',
  222. 3: 'three',
  223. 4: 'four',
  224. 5: 'five',
  225. 6: 'six',
  226. 7: 'seven',
  227. 8: 'eight',
  228. 9: 'nine',
  229. 10: 'ten',
  230. 11: 'eleven',
  231. 12: 'twelve',
  232. 13: 'thirteen',
  233. 14: 'fourteen',
  234. 15: 'fifteen',
  235. 16: 'sixteen',
  236. 17: 'seventeen',
  237. 18: 'eighteen',
  238. 19: 'nineteen',
  239. 20: 'twenty',
  240. 30: 'thirty',
  241. 40: 'forty',
  242. 50: 'fifty',
  243. 60: 'sixty',
  244. 70: 'seventy',
  245. 80: 'eighty',
  246. 90: 'ninety'
  247. }
  248. function in_words(n) {
  249. var is_million = locals['Control Panel']['Control Panel'].currency_format == 'Millions' ? 1 : 0;
  250. n=cint(n)
  251. if(known_numbers[n]) return known_numbers[n];
  252. var bestguess = n + '';
  253. var remainder = 0
  254. if(n<=20)
  255. alert('Error while converting to words');
  256. else if(n<100) {
  257. return in_words(Math.floor(n/10)*10) + '-' + in_words(n%10);
  258. } else if(n<1000) {
  259. bestguess= in_words(Math.floor(n/100)) + ' ' + 'hundred';
  260. remainder = n%100;
  261. } else if(!is_million) {
  262. if(n<100000) {
  263. bestguess= in_words(Math.floor(n/1000)) + ' ' + 'thousand';
  264. remainder = n%1000;
  265. } else if(n < 10000000) {
  266. bestguess= in_words(Math.floor(n/100000)) + ' ' + 'lakh';
  267. remainder = n%100000;
  268. } else {
  269. bestguess= in_words(Math.floor(n/10000000)) + ' ' + 'crore'
  270. remainder = n%10000000
  271. }
  272. } else {
  273. if(n<1000000) {
  274. bestguess= in_words(Math.floor(n/1000)) + ' ' + 'thousand';
  275. remainder = n%1000;
  276. } else if(n < 1000000000) {
  277. bestguess= in_words(Math.floor(n/1000000)) + ' ' + 'million';
  278. remainder = n%1000000;
  279. } else {
  280. bestguess= in_words(Math.floor(n/1000000000)) + ' ' + 'billion'
  281. remainder = n%1000000000
  282. }
  283. }
  284. if(remainder) {
  285. if(remainder >= 100) comma = ','
  286. else comma = ''
  287. return bestguess + comma + ' ' + in_words(remainder);
  288. } else {
  289. return bestguess;
  290. }
  291. }