336 lines
10 KiB
JavaScript
336 lines
10 KiB
JavaScript
// //
|
|
// JavaScript Functions //
|
|
// //
|
|
//////////////////////////////////////
|
|
// Función para convertir un nro. en letra
|
|
//
|
|
// La llamada a esta función es del modo siguiente:
|
|
//
|
|
// nro_letra(nro, cod_len, cod_gen, cod_mon, car_pad, lon_l1, lon_l2)
|
|
// return num_let
|
|
//
|
|
// (*) nro es el float que contiene el nro. a transcribir.
|
|
// (*) cod_len es el código de la lengua en la que se transcribe nro
|
|
// (3 dígitos) ej: "spa" para nuestra lengua.
|
|
// (*) cod_gen es el género "m" masculino o "f" femenino.
|
|
// cod_mon es el código de la moneda ( 4 dígitos). [ej: "pts"]
|
|
// car_pad es el caracter que se usa para relleno ( caso de cheques)
|
|
// lon_l1 es la longitud de la primera cadena de caracteres que se
|
|
// concatena con la segunda en una para el return
|
|
// lon_l2 es la longitud de la segunda cadena que se prepara para
|
|
// el programa que llama a este módulo
|
|
// num_let es la cadena que se manipula y devuelve con el texto del
|
|
// nro transcrito y las manipulaciones solicitadas por el
|
|
// resto de los argumentos.
|
|
//
|
|
|
|
function nro_letra(nro_i, cod_len, cod_gen, cod_mon, car_pad, lon_l1, lon_l2) {
|
|
// var nro_i=0; // Nro. a escribir
|
|
// var cod_len=""; // Código de lengua
|
|
// var cod_gen=""; // Código ( m / f) género para cientos
|
|
// var cod_mon=""; // Código de moneda
|
|
// var car_pad=""; // Caracter para usar de relleno
|
|
// var lon_l1=0; // Long de la línea uno
|
|
// var lon_l2=0; // Long de la línea dos
|
|
var nro_let="";
|
|
var nro=parseFloat(nro_i);
|
|
//car_pad="*"
|
|
//lon_l1=80
|
|
//cod_len="spa"
|
|
//cod_gen="m"
|
|
tx_cent="";
|
|
tx_dece="";
|
|
tx_und="";
|
|
tx_mll="";
|
|
txletmll="";
|
|
txletmil="";
|
|
if ( nro+0 == 0 ) {
|
|
return false;
|
|
}
|
|
var s_nro=nro+"";
|
|
var lonNro=s_nro.length;
|
|
var pos=s_nro.indexOf(car_dec);
|
|
// if (pos == -1) {
|
|
// var s_entera=s_nro;
|
|
// var s_decimal="0";
|
|
// } else {
|
|
// var s_entera = s_nro.substring(0,pos);
|
|
// var s_decimal = s_nro.substring(pos+1,longNro);
|
|
// }
|
|
//debug(s_entera);
|
|
// if ( parseInt(s_entera) > 0 )
|
|
analiza_num(s_nro,cod_mon,car_pad, lon_l1, lon_l2); // Análisis nro y trad.
|
|
// if ( parseInt(s_decimal) > 0 && pos > 0 ) {
|
|
// nro_let=num_let;
|
|
// analiza_num(s_decimal); // Análisis del nro y trad.
|
|
// num_let=nro_let+" con "+num_let;
|
|
// }
|
|
if (num_let.length == 0 ) { return "" }
|
|
// num_let=num_let+cod_mon; // pone moneda y mayuscula
|
|
return true
|
|
}
|
|
|
|
function analiza_num(s_num,cod_mon,car_pad, lon_l1, lon_l2) {
|
|
var nro_let="";
|
|
var s_nro="";
|
|
var s_numero=s_num+"";
|
|
var lonNro=s_numero.length;
|
|
if ( lonNro < 3 ) {
|
|
parseCent(s_numero,1,1);
|
|
num_let=tx_cent+" "+tx_dece+tx_und+" ";
|
|
return;
|
|
}
|
|
var n_centenas=parseInt(lonNro/3);
|
|
var n_ope=n_centenas*3;
|
|
var n_ini=0;
|
|
if (n_centenas == 0 )
|
|
n_centenas=1;
|
|
if ( n_ope < lonNro ) {
|
|
n_centenas++;
|
|
n_fin=lonNro-n_ope;
|
|
} else
|
|
n_fin=n_ini+3;
|
|
for ( var i=0; i < n_centenas ; i++ ) {
|
|
s_nro=s_numero.substring(n_ini,n_fin);
|
|
parseCent(s_nro,n_centenas,n_centenas-i);
|
|
if ( n_centenas-i == 2 && s_nro != "000")
|
|
txletmil=" "+let_mil;
|
|
else
|
|
txletmil="";
|
|
nro_let=nro_let+" "+tx_cent+" "+tx_dece+tx_und+txletmil;
|
|
if (parseInt(s_nro) > 0 ) {
|
|
parseMil(n_centenas-i,s_nro)
|
|
if (s_nro == "1" )
|
|
nro_let=let_un+" "+txletmll;
|
|
else {
|
|
nro_let=nro_let+" "+txletmll;
|
|
}
|
|
}
|
|
n_ini=n_fin;
|
|
n_fin=n_ini+3;
|
|
}
|
|
num_let=nro_let+" ";
|
|
num_let=num_let+" "+cod_mon;
|
|
nro_let=num_let;
|
|
num_let=num_let+linPad;
|
|
num_let2=linPad;
|
|
lonNro=nro_let.length;
|
|
if ( lonNro > LongLine) {
|
|
var pos=LongLine;
|
|
while (pos > 0) {
|
|
var s_char=nro_let.substring(pos-1,pos)
|
|
if ( s_char == " " )
|
|
break;
|
|
pos--;
|
|
}
|
|
if ( pos > 0 ) {
|
|
num_let=nro_let.substring(0,pos)+linPad;
|
|
num_let2=nro_let.substring(pos,lonNro)+linPad;
|
|
}
|
|
}
|
|
num_let=num_let.substring(0,lon_l1);
|
|
num_let2=num_let2.substring(0,lon_l2);
|
|
return;
|
|
}
|
|
|
|
function parseCent(s_nro,n_cents,p_cents) {
|
|
var nro_flt=parseFloat(s_nro);
|
|
var cad_nro = nro_flt+"";
|
|
var lon = cad_nro.length;
|
|
var cadena="";
|
|
var n_c=0;
|
|
tx_cent="";
|
|
tx_dece="";
|
|
tx_und="";
|
|
if (cad_nro == "000" ) return
|
|
if (cad_nro == "100" ) {
|
|
tx_cent = mat_ce_1;
|
|
return
|
|
}
|
|
if ( lon == 3 ) { // Centenas
|
|
var n_c=cad_nro.substring(0,1);
|
|
var n_d=cad_nro.substring(1,2);
|
|
var n_u=cad_nro.substring(2,3);
|
|
}
|
|
if ( lon == 2 ) { // Decenas
|
|
var n_c="0";
|
|
var n_d=cad_nro.substring(0,1);
|
|
var n_u=cad_nro.substring(1,2);
|
|
}
|
|
if ( lon == 1 ) { // Unidades
|
|
var n_c="0";
|
|
var n_d="0";
|
|
var n_u=cad_nro.substring(0,1);
|
|
}
|
|
if ( n_c > 0 ) {
|
|
eval("tx_cent = mat_ce_"+n_c);
|
|
if ( n_c > 1 && n_c != 5 )
|
|
tx_cent= tx_cent+let_ciens
|
|
}
|
|
if ( n_c == 1 ) { tx_cent = tx_cent+let_plus100; };
|
|
if ( n_d > 0 ) {
|
|
if ( n_d == 1 && n_u > 0 )
|
|
eval("tx_dece=mat_ud_"+n_u);
|
|
if ( n_d == 1 && n_u == 0 )
|
|
eval("tx_dece=mat_de_"+1);
|
|
if ( n_d == 2 ) {
|
|
eval("tx_dece=mat_de_"+n_d);
|
|
if ( n_u > 0 )
|
|
tx_dece=tx_dece+"I";
|
|
}
|
|
if ( n_d > 2 ) {
|
|
eval("tx_dece=mat_de_"+n_d);
|
|
if ( n_u > 0 )
|
|
tx_dece=tx_dece+" Y ";
|
|
}
|
|
}
|
|
if ( n_d == 2 && n_u == 0 ) { tx_dece=tx_dece+"E" }
|
|
if ( s_nro.length == 1 && n_d == 0 )
|
|
eval("tx_und=mat_un_"+n_u);
|
|
if ( parseInt(s_nro) != 1 ) {
|
|
if ( p_cents%2 != 0 && p_cents != 1 && n_d != 1 && n_u == 1 ) { tx_dece=tx_dece+"UN" }
|
|
if ( p_cents%2 == 0 && p_cents != 1 && n_d != 1 ) { eval("tx_und=mat_un_"+n_u) }
|
|
// if ( p_cents == 1 ) { eval("tx_und=mat_un_"+n_u) }
|
|
if ( s_nro.length > 1 && n_d != 1 )
|
|
eval("tx_und=mat_un_"+n_u)
|
|
} else {
|
|
if ( p_cents == 1 ) { eval("tx_und=mat_un_"+n_u) }
|
|
// if ( p_cents > 1 && nd != 1 ) { tx_und=let_un }
|
|
}
|
|
// nro_let=num_let+tx_cent+" "+tx_dece+tx_und+txletmil;
|
|
//lin=" Ce: "+n_c+" De: "+n_d+" Un: "+n_u+" Nro: "+cad_nro
|
|
//debug(lin)
|
|
//debug(nro_let)
|
|
}
|
|
function parseMil(cen,s_nro) {
|
|
tx_mll="";
|
|
txletmll=""
|
|
if ( cen < 2 ) {
|
|
return "";
|
|
}
|
|
if ( cen%2 == 0 ) {
|
|
if ( s_nro != "000" ) {
|
|
return ""; // let_mil;
|
|
}
|
|
}
|
|
// Los millones y más ... too much !!!
|
|
if ( cen == 3 )
|
|
tx_mll=mat_mll_1;
|
|
if ( cen == 5 )
|
|
tx_mll=mat_mll_2;
|
|
if ( cen == 7 )
|
|
tx_mll=mat_mll_3;
|
|
if ( cen == 9 )
|
|
tx_mll=mat_mll_4;
|
|
if ( cen == 11 )
|
|
tx_mll=mat_mll_5;
|
|
if ( cen == 13 )
|
|
tx_mll=mat_mll_6;
|
|
if ( cen == 15 )
|
|
tx_mll=mat_mll_7;
|
|
if ( cen == 17 )
|
|
tx_mll=mat_mll_8;
|
|
if ( cen == 19 )
|
|
tx_mll=mat_mll_9;
|
|
var lonNro=s_nro.length;
|
|
if ( parseInt(s_nro) == 1 ) {
|
|
txletmll=tx_mll+let_mill;
|
|
// return ""; // let_un; // +" "+tx_mll+let_mill;
|
|
} else {
|
|
txletmll=tx_mll+let_mills;
|
|
// return ""; //tx_mll+let_mills;
|
|
}
|
|
return "";
|
|
}
|
|
function preparamat(cod_len,cod_gen) {
|
|
if ( cod_gen == "f" )
|
|
let_fin="as"
|
|
else if ( cod_gen == "m" )
|
|
let_fin="os"
|
|
else if (cod_gen != "f" || cod_gen != "m") {
|
|
alert (" Genero : "+cod_gen+" de la lengua : "+cod_len+" Desconocido");
|
|
return false;
|
|
}
|
|
if ( cod_len == "spa" ) {
|
|
mat_un_0="";
|
|
if (cod_gen=="m")
|
|
mat_un_1="UNO";
|
|
else
|
|
mat_un_1="UNA";
|
|
mat_un_2="DOS";
|
|
mat_un_3="TRES";
|
|
mat_un_4="CUATRO";
|
|
mat_un_5="CINCO";
|
|
mat_un_6="SEIS";
|
|
mat_un_7="SIETE";
|
|
mat_un_8="OCHO";
|
|
mat_un_9="NUEVE";
|
|
|
|
mat_ud_0="";
|
|
mat_ud_1="ONCE";
|
|
mat_ud_2="DOCE";
|
|
mat_ud_3="TRECE";
|
|
mat_ud_4="CATORCE";
|
|
mat_ud_5="QUINCE";
|
|
mat_ud_6="DIECISEIS";
|
|
mat_ud_7="DIECISIETE";
|
|
mat_ud_8="DIECIOCHO";
|
|
mat_ud_9="DIECINUEVE";
|
|
|
|
mat_de_1="DIEZ";
|
|
mat_de_2="VEINT";
|
|
mat_de_3="TREINTA";
|
|
mat_de_4="CUARENTA";
|
|
mat_de_5="CINCUENTA";
|
|
mat_de_6="SESENTA";
|
|
mat_de_7="SETENTA";
|
|
mat_de_8="OCHENTA";
|
|
mat_de_9="NOVENTA";
|
|
|
|
if (cod_gen=="m")
|
|
let_ciens="CENTOS";
|
|
else
|
|
let_ciens="CIENTAS";
|
|
|
|
let_plus100="TO";
|
|
mat_ce_1="CIEN";
|
|
mat_ce_2="DOS";
|
|
mat_ce_3="TRES";
|
|
mat_ce_4="CUATRO";
|
|
if (cod_gen=="m")
|
|
mat_ce_5="QUINIENTOS";
|
|
else
|
|
mat_ce_5="QUINIENTAS";
|
|
mat_ce_6="SEIS";
|
|
mat_ce_7="SETE";
|
|
mat_ce_8="OCHO";
|
|
mat_ce_9="NOVE";
|
|
|
|
let_un="UN";
|
|
let_cien="CIEN";
|
|
let_cient="CIENTO";
|
|
let_mil ="MIL";
|
|
let_mills="LLONES";
|
|
let_mill="LLON";
|
|
let_con="CON";
|
|
car_dec=",";
|
|
|
|
mat_mll_1="MI";
|
|
mat_mll_2="BI";
|
|
mat_mll_3="TRI";
|
|
mat_mll_4="CUATRI";
|
|
mat_mll_5="QUINTI";
|
|
mat_mll_6="SESTI";
|
|
mat_mll_7="SEPTI";
|
|
mat_mll_8="OCTI";
|
|
mat_mll_9="NOVI";
|
|
for ( var i=1; i < LongLine; i++ )
|
|
linPad=linPad+CarPad;
|
|
} else {
|
|
alert(" Código de Lengua "+cod_len+" No definido !!");
|
|
return false;
|
|
}
|
|
return true
|
|
}
|
|
|