ctasapagar/nroletra.js

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
}