#!/perl/bin/perl.exe
$|=1;
#--------------------------------------------------------------------------------
#--------------------------------------------------------------------------------
# WebSoftw SA
# Date In: 2015-05-07
# Updates: 2015-05-07, 2016-03-30
# Author:Rodolfo Machon
# File Name: empresas_avisos_cobros_rept.pl
#------------------------------------------------------------------------- 
#-------------------------------------------------------------------------
# PERL MODULES
use CGI;
use Win32::ODBC;
#------------------------------------------------------------------------- 
#-------------------------------------------------------------------------
# HTML PRINTING ACTIVATION
print "Content-type: text/html\n\n";
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#GET PARAMETERS
$cgiparms   	= new CGI;
$lan	    	= $cgiparms->param('lan');
$appid	    	= $cgiparms->param('appid');
$c11_sector_id 	= $cgiparms->param('c11_sector_id');
$v64_sector    	= $cgiparms->param('v64_sector');
$ubi_id     	= $cgiparms->param('ubi_id');
$ubi_tipo   	= $cgiparms->param('ubi_tipo');
$i8_periodo   	= $cgiparms->param('i8_periodo');
#-------------------------------------------------------------------------
#$i8_periodo = "201505";
#-------------------------------------------------------------------------
# CHECK PARAMETERS
if ($lan eq ""){print "Your are not passing LAN parameter<br>";}
if ($appid eq ""){print "Your are not passing APPID parameter<br>";}
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# GLBAL VARIABLES
$PATH 		= "../".$lan."/";
$file       = $lan."_empresas_avisos_cobros_rept.html";
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# GET CLASE SCHEMA AND VARIABLES
if (!($dbh  = new Win32::ODBC($appid))){connect_fail($appid)}
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# PROGRAM DESCRIPTION
# PROCUREMENT
$dt_vencimiento			= get_vencimiento();
$mes_letras				= get_mes_letras(substr($dt_vencimiento,5,2)*1);
$dt_vencimiento_letras  = get_fecha_letras($dt_vencimiento);
if ($i8_periodo eq "") {$i8_periodo = substr($dt_vencimiento,0,4).substr($dt_vencimiento,5,2)}
$ubi_field				= get_ubi_field($ubi_tipo);
%tarifas				= get_tarifas();
%expedientes			= get_expedientes();
%expedientes_direccion	= get_expedientes_direccion();
%expedientes_servicios	= get_expedientes_servicios();
%expedientes_bases		= get_expedientes_bases();
# INTEGRATION
%expedientes_tributos   = get_expedientes_tributos();
%expedientes_direccion_servicios = get_expedientes_direccion_servicios();
# PRESENTATION
$boletas 		   		= construct_boletas();
construct_page();
exit;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#SUB-ROUTINES -> LEVEL 1
sub get_vencimiento {
    my $str  = "";
    my $query = "SELECT a.dt_generado
				 FROM sdd_empresa_estados_mensuales a
				 GROUP BY a.dt_generado
				 ";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_vencimiento')};
		while($dbh->FetchRow()){
		my @row = $dbh->Data();
		$str = $row[0];
    }
    return $str;	
}
sub get_ubi_field {
	my ($ubit)=@_;
	$ubif{'calles'}   = "d.c4_calle_id";
	$ubif{'avenidas'} = "d.c4_avenida_id";
	$ubif{'pasajes'}  = "d.c2_pasaje_id";
	$ubif{'sendas'}   = "d.c2_senda_id";
	$ubif{'poligonos'}= "d.c2_poligono_id";
	$ubif{'blocks'}   = "d.c2_block_id";	
	return $ubif{$ubit};
}
sub get_tarifas {
    my %hash   = ();
	my $query = "SELECT a.c8_tributo_id,
						a.c1_tipo_tarifa_id,
						a.c2_codigo_id,
					    b. c2_tipo_base_imponible_id
				 FROM sdm_tarifas a
				 INNER JOIN sdd_tarifas b ON a.c16_tarifa_id=b.c16_tarifa_id
				 ORDER BY a.c16_tarifa_id
				 ";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_tarifas')};
    while($dbh->FetchRow()){
		my @row = $dbh->Data();
		$hash{$row[0]}{$row[1]}{$row[2]} = $row[3];
    }
    return %hash;
}
sub get_expedientes {
    my %hash   = ();
	if($ubi_id ne "" && $ubi_tipo ne ""){$filtro = "AND a.$ubi_field='$ubi_id'"}else{$filtro = ""}	
	my $query = "SELECT a.i8_empresa_id,c.v64_apellidos,c.v64_nombres,a.c8_base_empresa,a.c16_tarjeta,a.c16_nic,a.c16_cliente
				FROM sdm_empresas a
				LEFT JOIN sdd_empresa_contribuyentes b ON a.i8_empresa_id=b.i8_empresa_id and b.i2_tipo_contribuyente_id='1'
				LEFT JOIN sdm_contribuyentes c ON b.i8_contribuyente_id=c.i8_contribuyente_id
				LEFT JOIN sdd_empresa_ubicacion d on  a.i8_empresa_id=d.i8_empresa_id
				WHERE a.c16_estado='ACEPTADO' AND d.c11_sector_id='$c11_sector_id' $filtro
				GROUP BY a.i8_empresa_id";
	#print "$query <br>";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_expedientes')};
    while($dbh->FetchRow()){
		my @row = $dbh->Data();
		$hash{$row[0]} = [@row];
    }
    return %hash;
}
sub get_nis {
    my %hash   = ();
    my $exps   = "'0',";
    foreach my $k (sort numeros keys %expedientes){$exps .= "'".$k."',";}
    $exps = substr($exps,0,length($exps)-1);	
	my $query = "SELECT a.i8_empresa_id,b.i8_nic_id,b.c8_estado
				FROM sdm_empresas a
				LEFT JOIN sdd_empresa_suministro_nics b ON a.i8_empresa_id=b.i8_empresa_id
				WHERE a.i8_empresa_id in ($exps)
				GROUP BY a.i8_empresa_id";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_nis')};
    while($dbh->FetchRow()){
		my @row = $dbh->Data();
		$hash{$row[0]} = [@row];
    }
    return %hash;
}
sub get_expedientes_direccion {
    my %hash   = ();
    my $tabla  = "";
    my $exps   = "'0',";
    foreach my $k (sort numeros keys %expedientes){$exps .= "'".$k."',";}
    $exps = substr($exps,0,length($exps)-1);
    my $query = "SELECT a.i8_empresa_id,
						j.v64_tipo_sector,
						i.v64_sector,
						b.v64_barrio,
						c.v64_poligono,
						d.v64_block,
						e.v64_calle,
						f.v64_avenida,
						g.v64_pasaje,
						h.v64_senda,
						a.c4_casa,
                        a.txt_referencia	                        
				FROM sdd_empresa_ubicacion a
				LEFT JOIN sdd_sector_barrios b ON a.c11_sector_id=b.c11_sector_id and a.c2_barrio_id=b.c2_barrio_id
				LEFT JOIN sdd_sector_poligonos c ON a.c11_sector_id=c.c11_sector_id and a.c2_poligono_id=c.c2_poligono_id
				LEFT JOIN sdd_sector_blocks d ON a.c11_sector_id=d.c11_sector_id and a.c2_block_id=d.c2_block_id
				LEFT JOIN sdd_sector_calles e ON a.c11_sector_id=e.c11_sector_id and a.c4_calle_id=e.c4_calle_id
				LEFT JOIN sdd_sector_avenidas f ON a.c11_sector_id=f.c11_sector_id and a.c4_avenida_id=f.c4_avenida_id
				LEFT JOIN sdd_sector_pasajes g ON  a.c11_sector_id=g.c11_sector_id and a.c2_pasaje_id=g.c2_pasaje_id
				LEFT JOIN sdd_sector_sendas h ON  a.c11_sector_id=h.c11_sector_id and a.c2_senda_id=h.c2_senda_id
				LEFT JOIN sdm_sectores i ON a.c11_sector_id=i.c11_sector_id
				LEFT JOIN sdm_tipo_sectores j ON a.i2_tipo_sector_id=j.i2_tipo_sector_id
				WHERE a.i8_empresa_id in ($exps)
				ORDER BY a.i8_empresa_id
				";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_expedientes_direccion')};
    while($dbh->FetchRow()){
		my @row   = $dbh->Data();
		my $dir   = "";
		#if($row[1] ne ""){$dir .= " ".$row[1].""}
		#if($row[2] ne ""){$dir .= " ".$row[2].","}
		if($row[3] ne ""){$dir .= " ".$row[3].","}
		if($row[4] ne ""){$dir .= " ".$row[4].","}
		if($row[5] ne ""){$dir .= " ".$row[5].","}
		if($row[6] ne ""){$dir .= " ".$row[6].","}
		if($row[7] ne ""){$dir .= " ".$row[7].","}
		if($row[8] ne ""){$dir .= " ".$row[8].","}
		if($row[9] ne ""){$dir .= " ".$row[9].","}			
		if($row[10] ne ""){$dir .= " No. ".$row[10].","}
		if($row[11] ne ""){$dir .= " ".$row[11].","}	        
		$dir = substr($dir,0,length($dir)-1);	
		$hash{$row[0]} = $dir;
    }
    return %hash;
}
sub get_expedientes_servicios {
     my %hash  = ();
    my $exps   = "'0',";
    foreach my $k (sort numeros keys %expedientes){$exps .= "'".$k."',";}
    $exps = substr($exps,0,length($exps)-1);	
    my $query  = "SELECT a.i8_empresa_id,
						 b.c8_tributo_id,
						 b.c1_tipo_tarifa_id,
						 b.c2_codigo_id,
						 b.c2_gravable,
						 b.i2_grupo_id	 
				  FROM sdm_empresas a
				  INNER JOIN sdd_empresa_servicios b on a.i8_empresa_id=b.i8_empresa_id
				  WHERE a.i8_empresa_id in ($exps)
				 ";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_servicios');}
    while($dbh->FetchRow()){
        undef my @row;
        @row = $dbh->Data();
        $hash{$row[0]}{$row[1]}{$row[5]}= [@row];
    }
 	return %hash;
}
sub get_expedientes_bases {
     my %hash  = ();
    my $exps   = "'0',";
    foreach my $k (sort numeros keys %expedientes){$exps .= "'".$k."',";}
    $exps = substr($exps,0,length($exps)-1);
    my $query  = "SELECT a.i8_empresa_id,
						 b.c2_tipo_base_imponible_id,
						 (b.f4_total-b.f4_deducible),
						 b.i2_grupo_id						 
				  FROM sdm_empresas a
				  INNER JOIN sdd_empresa_bases_imponibles b ON a.i8_empresa_id=b.i8_empresa_id
				  WHERE a.i8_empresa_id in ($exps)
				  ";
	#print "$query";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_bases');}
    while($dbh->FetchRow()){
        undef my @row;
        @row = $dbh->Data();
        $hash{$row[0]}{$row[1]}{$row[3]}= [@row];
    }
 	return %hash;
}
sub get_expedientes_tributos {
    my %hash  = ();
    foreach my $k (sort keys %expedientes_servicios){
		foreach my $kk (sort keys %{$expedientes_servicios{$k}}){
			foreach my $kkk (sort keys %{$expedientes_servicios{$k}{$kk}}){		
				my $bit 				  = $tarifas{$kk}{$expedientes_servicios{$k}{$kk}{$kkk}[2]}{$expedientes_servicios{$k}{$kk}{$kkk}[3]};
				$hash{$k}{$kk}{'tributo'} = $kk;
				$hash{$k}{$kk}{'tip_tar'} = $expedientes_servicios{$k}{$kk}{$kkk}[2];
				$hash{$k}{$kk}{'codigo'}  = $expedientes_servicios{$k}{$kk}{$kkk}[3];
				$hash{$k}{$kk}{'gravable'}= $expedientes_servicios{$k}{$kk}{$kkk}[4];			
				$hash{$k}{$kk}{'tip_bas'} = $bit;
				$hash{$k}{$kk}{'medida'}  = $expedientes_bases{$k}{$bit}{$kkk}[2];
			}
		}	
    }
    return %hash;
}
sub get_expedientes_direccion_servicios {
    my %hash  = ();
    foreach my $k (sort keys %expedientes){
		$hash{$k}{'apellidos'}  = $expedientes{$k}[1];
		$hash{$k}{'nombres'}	= $expedientes{$k}[2];	
		$hash{$k}{'direccion'}	= $expedientes_direccion{$k};
		$hash{$k}{'ficha'}		= $expedientes{$k}[3];
		$hash{$k}{'tarjeta'}	= $expedientes{$k}[4];
		$hash{$k}{'nic'}		= $expedientes{$k}[5];
		$hash{$k}{'cliente'}	= $expedientes{$k}[6];		
    }
    return %hash;
}
sub construct_boletas {
	my $boletas		= "";
    my $boleta  	= get_boleta();	
    foreach my $k (sort keys %expedientes_direccion_servicios){
		my ($cobro,$ttasas)		= get_cobro($k);
		if ($ttasas>0) {
			my $bol					= $boleta;
			my $ultima_fecha_pago	= get_ultima_fecha_pago($k);
			my $dt_ultima_fecha_pago_letras  = get_fecha_letras($ultima_fecha_pago);		
			my $saldo_pendiente		= get_saldo_pendiente($k,$ttasas);
			my $total_pago			= sprintf("%.2f",$saldo_pendiente+$ttasas);
			$bol	  =~ s/\{v128_contribuyente}/$expedientes_direccion_servicios{$k}{'nombres'} $expedientes_direccion_servicios{$k}{'apellidos'}/g;
			$bol	  =~ s/\{i8_empresa_id}/$k/g;
			$bol	  =~ s/\{direccion}/$expedientes_direccion_servicios{$k}{'direccion'}/g;
			$bol	  =~ s/\{v16_tarjeta}/$expedientes_direccion_servicios{$k}{'tarjeta'}/g;
			$bol	  =~ s/\{v16_nic}/$expedientes_direccion_servicios{$k}{'nic'}/g;
			$bol	  =~ s/\{v16_cliente}/$expedientes_direccion_servicios{$k}{'cliente'}/g;
			$bol	  =~ s/\{cobro}/$cobro/g;
			$bol	  =~ s/\{dt_vencimiento}/$dt_vencimiento_letras/g;
			$bol	  =~ s/\{mes_letras}/$mes_letras/g;
			$bol	  =~ s/\{ultima_fecha_pago}/$dt_ultima_fecha_pago_letras/g;
			$bol	  =~ s/\{saldo_pendiente}/$saldo_pendiente/g;
			$bol	  =~ s/\{total_pago}/$total_pago/g;
			$bol	  = convertir_tildes($bol);		  
			$boletas .= "<DIV>".$bol."</DIV><DIV id='centro'></DIV>";	
		}
    }
    return $boletas;
}
sub construct_page {
    open (DATA, "$PATH$file");
    while ($line = <DATA>) {	
        $line =~ s/\{lan}/$lan/g;
        $line =~ s/\{appid}/$appid/g;
        $line =~ s/\{boletas}/$boletas/g;
        $line =~ s/\{c11_sector_id}/$c11_sector_id/g;
        $line =~ s/\{v64_sector}/$v64_sector/g;
		$line = convertir_tildes($line);
        print "$line";
    }
}
#-----------------------------------------------------------------------
# LEVEL 2
sub get_boleta {
	my $boleta ="<DIV ID='encabezado'>    
					<TABLE>
						<TR>
							<TD align='center'><p class=grande><img src='/icons/RTM_v30/logo.jpg' width='80' height='80'></p></TD>
							<TD align='center'><p class=grande>ALCALDIA DE QUEZALTEPEQUE</p>
								<p class=mediana>AVISO DE COBRO DEL MES DE {mes_letras}</p>
								<p class=regular>VENCE EL {dt_vencimiento}</p>
								<p>Todas las Cifras en Dolares de los Estados Unidos de Am&eacute;rica</p>
                            </TD>
                            <TD align='center'><p class=grande><img src='/icons/RTM_v30/escudo.jpg' width='80' height='80'></p></TD>
						</TR>
					</TABLE>
				</DIV>
	            <DIV ID='empleado'>
					<TABLE>
						<TR>
							<TH width=10%>Nombre</TH>
							<TD>{v128_contribuyente}</TD>
							<TH width=10%>ID empresa</TH>
							<TD>{i8_empresa_id}</TD>
							<TH width=10%>Tarjeta</TH>
							<TD>{v16_tarjeta}</TD>                            
						</TR>
						<TR>
							<TH width=10%>Direccion</TH>
							<TD>{direccion}</TD>
							<TH width=10%>Cliente</TH>
							<TD>{v16_cliente}</TD>
							<TH width=10%>NIC</TH>
							<TD>{v16_nic}</TD>
						</TR>
					</TABLE>
			    </DIV>
				<DIV ID='remuneraciones-descuentos'>
					{cobro}
				</DIV>				
				<DIV ID='resumen'>
					<TABLE>
						<TR> 
							<TH align=left width=40%>Ultima Fecha que Realizo Pago</TH>
							<TH align=left width=40%>Saldo Pendiente de Pago</TH>
							<TH align=center>TOTAL A PAGAR</TH>							
						</TR>
						<TR> 
							<TD>{ultima_fecha_pago}</TD>
							<TD>\$ {saldo_pendiente}</TD>
							<TH align=center>\$ {total_pago}</TH>							
						</TR>						
					</TABLE>
				</DIV>
				<DIV ID='nota'>
					<TABLE>
						<TR> 
							<TD>
								<p class=pequena align=justify>La Alcald&iacute;a se encuentra en proceso de modernizaci&oacute;n del sistema de facturaci&oacute;n de tasas e impuestos, el objetivo es brindarle un mejor servicio y control en el pago
									de sus tributos. A partir del mes de Octubre la entrega de avisos de cobro se normalizara y mejorara, ya que tendremos en completa operaci&oacute;n el nuevo sistema adquirido por esta administraci&oacute;n.<br>								
									Le sugerimos que pase a nuestras oficinas para verificar su estado de cuenta, y ponerse al d&iacute;a en el pago de sus tasas. Recuerde que la Alcald&iacute;a esta facultada para
									brindarle facilidades de pago si existe mora en sus tributos.<br>
								</p>
								<p class=regular>* Si al momento de recibir este Aviso de Cobro, usted ya efectuo el pago, favor hacer caso omiso de esta notificaci&oacute;n.</p>
							</TD>
						</TR>						
					</TABLE>
				</DIV>				
				";
	return $boleta;
}
sub get_cobro {
    my ($id)= @_;
	my $ttas  = 0;
	my $tab	  = "";
	my $tfie  = 0;
	my $cfie  = "";
	my $nrows = "5";
	my $body  = "<tr><td width=10%>{cuenta}</td><td>{cantidad}</td><td>{descripcion}</td><td align=right>\$ {monto}</td></tr>";
	my $query = "SELECT	 a.i8_periodo
						,a.c16_tarifa_id
						,a.i4_dias_mora
						,a.d82_val
						,a.d82_fie
						,a.d82_int
						,a.d82_mul
						,b.v128_tarifa
						,b.c16_cuenta_ingreso_id
				 FROM sdd_empresa_estados_mensuales a
				 INNER JOIN sdm_tarifas b ON a.c16_tarifa_id=b.c16_tarifa_id
				 WHERE a.i8_empresa_id='$id' and a.i8_periodo='$i8_periodo'
				 ORDER BY a.c16_tarifa_id
				 ";
	#print "$query<br>";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_cobro')};
    while($dbh->FetchRow()){
		my @row = $dbh->Data();
		my $rb  = $body;
        my $cn  = $expedientes_tributos{$id}{substr($row[1],0,8)}{'medida'};
        if (substr($row[1],0,6) eq "IMEMPA") {$cn=1}
        
        $rb 	=~ s/\{cuenta}/$row[8]/g;
        $rb 	=~ s/\{cantidad}/$cn/g;
        $rb 	=~ s/\{descripcion}/$row[7]/g;
        $rb 	=~ s/\{monto}/$row[3]/g;
		$tab   .= $rb;
		$ttas  += sprintf("%.2f",$row[3]);
		$tfie  += sprintf("%.2f",$row[4]);
		$nrows--;
    }
	$tab .= "<tr><td width=10%>12114</td><td></td><td>FIESTAS</td><td align=right>\$ ".sprintf("%.2f",$tfie)."</td></tr>";
	for (my $i=0;$i<$nrows;$i++){
		$tab  .= "<tr><td width=10%>&nbsp;</td><td></td><td></td><td align=right></td></tr>";
	}
    my $str   = "<table>
					<thead><tr><th align=left>CODIGO</th><th align=left>CANT</th><th align=left>SERVICIO PRESTADO</th><th align=right>TASA</th></tr>
					<tbody>$tab</tbody>
					<tfoot><tr><td colspan=3 align=right>TOTAL TASAS DEL MES</td><td align=right>\$ ".sprintf("%.2f",$ttas+$tfie)."</td></tfoot>
				</table>";
    return ($str,sprintf("%.2f",$ttas+$tfie));	
}
sub get_ultima_fecha_pago {
    my ($id)= @_;	
    my $str  = "";
    my $query = "SELECT a.dt_abono
				 FROM sdd_empresa_abonos a
				 WHERE a.i8_empresa_id='$id'
				 ORDER BY a.dt_abono DESC
				 LIMIT 1
				 ";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_vencimiento')};
		while($dbh->FetchRow()){
		my @row = $dbh->Data();
		$str = $row[0];
    }
    return $str;	
}
sub get_saldo_pendiente {
    my ($id,$ttas)= @_;
	my $saldo = 0;
	my $query = "SELECT	 SUM(a.d82_val),SUM(a.d82_fie),SUM(a.d82_int),SUM(a.d82_mul)
				 FROM sdd_empresa_estados_mensuales a
				 WHERE a.i8_empresa_id='$id'
				 GROUP BY a.i8_empresa_id
				 ";
	#print "$query<br>";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_cobro')};
    while($dbh->FetchRow()){
		my @row = $dbh->Data();
		if ($row[3]>0.01 && $row[3]<2.857) {
			$row[3] = 2.86;
		}
		
		$saldo = $row[0]+$row[1]+$row[2]+$row[3];
		#print "$id $row[0]  $row[1]  $row[2] $row[3] <br>";
    }
    return sprintf("%.2f",$saldo-$ttas);	
}
#-------------------------------------------------------------------------
#AUXILIAR-SUBROUTINES
sub numeros {$a<=>$b}
sub SQL_fail {
    my ($query,$dbh,$section)= @_;
    print "SQL failed in Section $section<br>";
    print "Error: ".$dbh->Error()."\n<br>";
    print "Query: ".$query."<br>";    
    $dbh->Close();
    exit;
}
sub connect_fail {
    my ($DSN)=@_;
    print "Error connecting to $DSN<br>";
    print "Error:".Win32::ODBC::Error()."<br>";
    exit;
}
sub convertir_tildes{
      my ($str) = @_;
      $str =~ s/\Ã±/ñ/g;
      $str =~ s/\Ã/Ñ/g;
      $str =~ s/\Ã¡/á/g;
      $str =~ s/\Ã©/é/g;
      $str =~ s/\Ã­/í/g;
      $str =~ s/\Ã³/ó/g;
      $str =~ s/\Ãº/ú/g;
      return $str;
}
sub get_fecha_letras {
	my ($fecha) = @_;
	my $fec  	= "";
	my $cloc 	= "";
	my $country = "SV";
	my @fec_a   = split(/\-/,$fecha);
	my @meses	= ('','enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre');
	my @dias	= ('','uno','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez','once','doce','trece','catorce','quince','dieciseis','diecisiete','dieciocho','diecinueve','veinte','veitiuno','veintidos','veintitres','veiticuatro','veinticinco','veintiseis','veintisiete','veintiocho','veintinueve','treinta','treinta y uno');	
	my $dia 	= $dias[$fec_a[2]*1];
	my $mes 	= $meses[$fec_a[1]*1];
	my $ano 	= get_entero_letras($fec_a[0]*1);
	
	#$fec = $dia." de ".$mes." de ".$ano;
	$fec = ($fec_a[2]*1)." de ".$mes." de ".($fec_a[0]*1);	
	$fec =~ s/un mil/mil/g;
	
	return uc($fec);	
}
sub get_entero_letras {
	my ($cant)  = @_;
	my $cl		= "";
	my $millones= ($cant - ($cant % 1000000))/1000000;
	$cant 	   -= $millones * 1000000;
	my $miles   = ($cant - ($cant % 1000))/1000;
	$cant 	   -= $miles * 1000;
	my $cientos = ($cant - ($cant % 100))/100;
	$cant 	   -= $cientos * 100;
	
	if ($millones>0){$cl .= get_letras($millones,'m');$cl .= " millones "}
	if ($miles>0){$cl .= get_letras($miles,'t');$cl .= " mil "}	
	if ($cientos>0){$cl .= get_letras($cientos,'h');$cl .= " "}
	$cl .= get_letras($cant,'u');

	return $cl;
}
sub get_letras {
	my ($cant,$mul)  = @_;
	my $cl		= "";
	my @ns		= ('','un','dos','tres','cuatro','cinco','seis','siete','ocho','nueve','diez','once','doce','trece','catorce','quince','dieciseis','diecisiete','dieciocho','diecinueve','veinte');
	my @ns10  	= ('','diez','veinte','treinta','cuarenta','cincuenta','sesenta','setenta','ochenta','noventa');
	my @ns20  	= ('','diez','veinti','treinta','cuarenta','cincuenta','sesenta','setenta','ochenta','noventa');
	my @ns100 	= ('','cien','doscientos','trescientos','cuatrocientos','quinientos','seiscientos','setecientos','ochocientos','novecientos');
	my @Ns100 	= ('','ciento','','','','','','','','');
	my $centenas= 0;
	my $decenas = ($cant - ($cant % 10))/10;
	my $unidades= $cant -($cant - ($cant % 10));
	if ($cant<=20) {
		if($mul eq "t"){$cl = $ns[$cant]}		
		if($mul eq "h"){$cl = $ns100[$cant]}
		if($mul eq "u"){$cl = $ns[$cant]}
	}
	if ($cant>20 && $cant<30) {
		$cl      = $ns20[$decenas].$ns[$unidades];
	}
	if ($cant>30 && $cant<100) {
		$cl      = $ns10[$decenas];
		if($decenas>0 && $unidades>0 ){$cl .= " y ".$ns[$unidades]}else{$cl .= $ns[$unidades]}
	}
	if ($cant>=100) {
		$centenas = substr($cant,0,1);
		$decenas  = substr($cant,1,1);
		$unidades = substr($cant,2,1);		
		$cl       = $ns100[$decenas];
		if($centenas>0 && $decenas>0 ){$cl .= " ".$ns10[$decenas]}else{$cl .= $ns10[$decenas]}
		if($decenas>0 && $unidades>0 ){$cl .= " y ".$ns[$unidades]}else{$cl .= $ns[$unidades]}		
	}	
	return $cl;
}
sub get_mes_letras {
	my ($mes) = @_;
	my $fec  	= "";
	my @meses	= ('','enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre');
	
	$fec = $meses[$mes];	
	
	return uc($fec);		
}
#-------------------------------------------------------------------------