num2Word.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. (function(){
  2. "use strict";
  3. openerp.web.num2word = function () {
  4. function Unidades(num){
  5. switch(num)
  6. {
  7. case 1: return "UN";
  8. case 2: return "DOS";
  9. case 3: return "TRES";
  10. case 4: return "CUATRO";
  11. case 5: return "CINCO";
  12. case 6: return "SEIS";
  13. case 7: return "SIETE";
  14. case 8: return "OCHO";
  15. case 9: return "NUEVE";
  16. }
  17. return "";
  18. }//Unidades()
  19. function Decenas(num){
  20. var decena = Math.floor(num/10);
  21. var unidad = num - (decena * 10);
  22. switch(decena)
  23. {
  24. case 1:
  25. switch(unidad)
  26. {
  27. case 0: return "DIEZ";
  28. case 1: return "ONCE";
  29. case 2: return "DOCE";
  30. case 3: return "TRECE";
  31. case 4: return "CATORCE";
  32. case 5: return "QUINCE";
  33. default: return "DIECI" + Unidades(unidad);
  34. }
  35. case 2:
  36. switch(unidad)
  37. {
  38. case 0: return "VEINTE";
  39. default: return "VEINTI" + Unidades(unidad);
  40. }
  41. case 3: return DecenasY("TREINTA", unidad);
  42. case 4: return DecenasY("CUARENTA", unidad);
  43. case 5: return DecenasY("CINCUENTA", unidad);
  44. case 6: return DecenasY("SESENTA", unidad);
  45. case 7: return DecenasY("SETENTA", unidad);
  46. case 8: return DecenasY("OCHENTA", unidad);
  47. case 9: return DecenasY("NOVENTA", unidad);
  48. case 0: return Unidades(unidad);
  49. }
  50. }//Unidades()
  51. function DecenasY(strSin, numUnidades) {
  52. if (numUnidades > 0)
  53. return strSin + " Y " + Unidades(numUnidades)
  54. return strSin;
  55. }//DecenasY()
  56. function Centenas(num) {
  57. var centenas = Math.floor(num / 100);
  58. var decenas = num - (centenas * 100);
  59. switch(centenas)
  60. {
  61. case 1:
  62. if (decenas > 0)
  63. return "CIENTO " + Decenas(decenas);
  64. return "CIEN";
  65. case 2: return "DOSCIENTOS " + Decenas(decenas);
  66. case 3: return "TRESCIENTOS " + Decenas(decenas);
  67. case 4: return "CUATROCIENTOS " + Decenas(decenas);
  68. case 5: return "QUINIENTOS " + Decenas(decenas);
  69. case 6: return "SEISCIENTOS " + Decenas(decenas);
  70. case 7: return "SETECIENTOS " + Decenas(decenas);
  71. case 8: return "OCHOCIENTOS " + Decenas(decenas);
  72. case 9: return "NOVECIENTOS " + Decenas(decenas);
  73. }
  74. return Decenas(decenas);
  75. }//Centenas()
  76. function Seccion(num, divisor, strSingular, strPlural) {
  77. var cientos = Math.floor(num / divisor)
  78. var resto = num - (cientos * divisor)
  79. var letras = "";
  80. if (cientos > 0)
  81. if (cientos > 1)
  82. letras = Centenas(cientos) + " " + strPlural;
  83. else
  84. letras = strSingular;
  85. if (resto > 0)
  86. letras += "";
  87. return letras;
  88. }//Seccion()
  89. function Miles(num) {
  90. var divisor = 1000;
  91. var cientos = Math.floor(num / divisor)
  92. var resto = num - (cientos * divisor)
  93. var strMiles = Seccion(num, divisor, "UN MIL", "MIL");
  94. var strCentenas = Centenas(resto);
  95. if(strMiles == "")
  96. return strCentenas;
  97. return strMiles + " " + strCentenas;
  98. }//Miles()
  99. function Millones(num) {
  100. var divisor = 1000000;
  101. var cientos = Math.floor(num / divisor)
  102. var resto = num - (cientos * divisor)
  103. var strMillones = Seccion(num, divisor, "UN MILLON ", "MILLONES ");
  104. var strMiles = Miles(resto);
  105. if(strMillones == "")
  106. return strMiles;
  107. return strMillones + " " + strMiles;
  108. }//Millones()
  109. return function (num) {
  110. var data = {
  111. numero: num,
  112. enteros: Math.floor(num),
  113. centavos: (((Math.round(num * 100)) - (Math.floor(num) * 100))),
  114. letrasCentavos: "",
  115. letrasMonedaPlural: '',//"PESOS", 'Dólares', 'Bolívares', 'etcs'
  116. letrasMonedaSingular: '', //"PESO", 'Dólar', 'Bolivar', 'etc'
  117. letrasMonedaCentavoPlural: "CENTAVOS",
  118. letrasMonedaCentavoSingular: "CENTAVO"
  119. };
  120. if (data.centavos > 0) {
  121. data.letrasCentavos = "CON " + (function (){
  122. if (data.centavos == 1)
  123. return Millones(data.centavos) + " " + data.letrasMonedaCentavoSingular;
  124. else
  125. return Millones(data.centavos) + " " + data.letrasMonedaCentavoPlural;
  126. })();
  127. };
  128. if(data.enteros == 0)
  129. return "CERO " + data.letrasMonedaPlural + " " + data.letrasCentavos;
  130. if (data.enteros == 1)
  131. return Millones(data.enteros) + " " + data.letrasMonedaSingular + " " + data.letrasCentavos;
  132. else
  133. return Millones(data.enteros) + " " + data.letrasMonedaPlural + " " + data.letrasCentavos;
  134. }
  135. }()
  136. })();