#!/perl/bin/perl.exe
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# Information Software SA
# Date In: 2016-03-02
# Updates: 2016-03-02
# Author:Rodolfo Machon
# File Name: solvencias_p.pl
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#Perl Modules
use Win32::ODBC;
use CGI;
use Date::Calc qw(Add_Delta_YMD);
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#HTML printing activation
print "Content-type: text/html\n\n";
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#Getting parameters
$form			= new CGI;
$lan			= $form->param('lan');
$appid			= $form->param('appid');
$clase			= $form->param('clase');
$id				= $form->param('id');
$dt_emision 	= $form->param('dt_emision');
$dt_vencimiento = $form->param('dt_vencimiento');
$generador_id	= $form->param('gen_id');
$emisor_id		= $form->param('emi_id');
$user_id		= $form->param('use_id');
$nic_id			= $form->param('nic_id');
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# GLOBAL VARIABLES
$PATH 	= "../".$lan."/";
$FILE 	= $lan."_solvencia_p.html";
$campo  = substr($clase,0,length($clase)-1);
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# Open Data Base Connections
if (!($dbh  = new Win32::ODBC($appid))){connect_fail($appid)}
#-------------------------------------------------------------------
#-------------------------------------------------------------------
# MAIN-PROGRAM
%expediente 			= get_expediente();
%expediente_direccion	= get_expediente_direccion();
%solvencia				= get_solvencia();
$tipo_solvencia			= get_tipo_solvencia();

construct_page();
$dbh->Close();
exit;
#-------------------------------------------------------------------
#MAIN-SUBROUTINES
sub get_expediente {
    my %hash   = ();
	my $query = "SELECT a.i8_".$campo."_id,b.i8_contribuyente_id,c.v128_contribuyente,d.v16_telefono,e.txt_email,f.txt_direccion
				 FROM sdm_".$clase." a
				 LEFT JOIN sdd_".$campo."_contribuyentes b ON a.i8_".$campo."_id=b.i8_".$campo."_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_contribuyente_telefonos d ON b.i8_contribuyente_id=d.i8_contribuyente_id
				 LEFT JOIN sdd_contribuyente_emails e ON b.i8_contribuyente_id=e.i8_contribuyente_id
				 LEFT JOIN sdd_contribuyente_direcciones f ON b.i8_contribuyente_id=f.i8_contribuyente_id				 
				 WHERE a.c16_estado='ACEPTADO' AND a.i8_".$campo."_id='$id'
				";
	#print "$query <br>";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_expedientes')};
    while($dbh->FetchRow()){
		my @row = $dbh->Data();
		$hash{$id} = [@row];
    }
    return %hash;
}
sub get_expediente_direccion {
    my %hash  = ();
	my $tabla = "sdm_$clase";
	if ($clase eq "empresas") {$tabla="sdd_".$campo."_ubicacion";}
    my $query = "SELECT	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 $tabla 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_".$campo."_id='$id'
				";
    #print "$query <br>";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_expedientes_direccion')};
    while($dbh->FetchRow()){
		my @row   = $dbh->Data();
		$hash{$id} = [@row];
    }
    return %hash;
}
sub get_solvencia {
    my %hash   	  	= ();
	my @vencimiento = split(/\-/,$dt_vencimiento);
	my ($y,$m,$d) 	= Add_Delta_YMD($vencimiento[0],$vencimiento[1],$vencimiento[2],0,1,0);
	my $dt_vigencia = "$y-$m-$d";
	my $query = "SELECT  a.i8_solvencia_id
						,a.v128_institucion
						,a.dt_vencimiento
						,a.dt_emision
						,a.i8_expediente_id						
						,a.txt_expediente_direccion
						,a.c3_tipo_generador_id
						,a.i8_contribuyente_id
						,a.v128_contribuyente
						,a.i8_user_id
						,a.i8_emisor_id
				 FROM sdm_solvencias a
				 WHERE a.i8_expediente_id='$id' and a.dt_vencimiento<='$dt_vigencia'
				 ORDER BY a.dt_vencimiento DESC LIMIT 1
				";
	#print "$query <br>";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_expedientes')};
    while($dbh->FetchRow()){
		my @row = $dbh->Data();
		$hash{$id} = [@row];
    }
    return %hash;
}
sub get_tipo_solvencia {
	my $tas	   = "";
	my $imp    = "";
	my $str    = "SOLVENCIA DE ";
    my $query  = "SELECT a.c8_tributo_id 
				  FROM sdd_".$campo."_servicios a
				  WHERE a.i8_".$campo."_id='$id' and a.c2_gravable='SI'
				 ";
    #print "$query <br>";
    if ( $dbh->Sql($query) ){SQL_fail($query,$dbh,'sub get_tipo_solvencias');}
    while($dbh->FetchRow()){
        my @row = $dbh->Data();
		if (substr($row[0],0,2) eq "TS") {$tas = "TASAS"}
		if (substr($row[0],0,2) eq "IM") {$imp = "IMPUESTOS"}		
    }
	if ($tas ne "" && $imp ne "") {$str .= $tas." E ".$imp}else{$str .= $tas.$imp}
	$str .= " MUNICIPALES";
 	return $str;
}
sub construct_page{
	my $sol_id      = "";
	my $exp_tip 	= uc($campo);
	my $articulo	= " el ";
	my $emision		= get_fecha_letras($dt_emision);
	my @vencimiento = split(/\-/,$dt_vencimiento);
	my $per_ven		= $vencimiento[0]."/".$vencimiento[1];
	if ($solvencia{$id}[0]>0) {$sol_id = Lzero($solvencia{$id}[0],9);}
	if ($nic_id ne "") {$nic = "NIC $nic_id"}
	if ($clase eq "empresas") {$articulo = " la ";}
	
	open (DATA, "$PATH$FILE");
	while ($line = <DATA>){
	  $line =~ s/{lan}/$lan/g;
	  $line =~ s/{appid}/$appid/g;
	  $line =~ s/{clase}/$exp_tip/g;	  
	  $line =~ s/{id}/$id/g;
	  $line =~ s/{i8_solvencia_id}/$sol_id/g;
	  $line =~ s/{v128_institucion}/$solvencia{$id}[1]/g;
	  $line =~ s/{nic}/$nic/g;	  
	  $line =~ s/{tipo_solvencia}/$tipo_solvencia/g;
	  $line =~ s/{campo}/$campo/g;
	  $line =~ s/{articulo}/$articulo/g;
	  $line =~ s/{dt_emision}/$dt_emision/g;	  
	  $line =~ s/{emision}/$emision/g;
	  $line =~ s/{dt_vencimiento}/$dt_vencimiento/g;
	  $line =~ s/{generador_id}/$generador_id/g;	  
	  $line =~ s/{emisor_id}/$emisor_id/g;
	  $line =~ s/{user_id}/$user_id/g;  
	  $line =~ s/{vencimiento}/$per_ven/g;
	  
	  $line =~ s/{i8_contribuyente_id}/$expediente{$id}[1]/g;
	  $line =~ s/{v128_contribuyente}/$expediente{$id}[2]/g;	  
	  $line =~ s/{txt_email}/$expediente{$id}[3]/g;
	  $line =~ s/{v16_telefono}/$expediente{$id}[4]/g;	  
	  $line =~ s/{txt_direccion}/$expediente{$id}[5]/g;
	  
	  $line =~ s/{v64_tipo_sector}/$expediente_direccion{$id}[0]/g;
	  $line =~ s/{v64_sector}/$expediente_direccion{$id}[1]/g;
	  $line =~ s/{v64_barrio}/$expediente_direccion{$id}[2]/g;
	  $line =~ s/{v64_poligono}/$expediente_direccion{$id}[3]/g;	  
	  $line =~ s/{v64_block}/$expediente_direccion{$id}[4]/g;
	  $line =~ s/{v64_calle}/$expediente_direccion{$id}[5]/g;
	  $line =~ s/{v64_avenida}/$expediente_direccion{$id}[6]/g;	  
	  $line =~ s/{v64_pasaje}/$expediente_direccion{$id}[7]/g;
	  $line =~ s/{v64_senda}/$expediente_direccion{$id}[8]/g; 
	  $line =~ s/{c4_casa}/$expediente_direccion{$id}[9]/g;
	  $line =~ s/{txt_referencia}/$expediente_direccion{$id}[10]/g;	  
	  
	  print "$line";
	}
}
#--------------------------------------------------------------------
#AUXILIAR-SUBROUTINES
sub SQL_fail {
    my ($dbh,$query,$section)= @_;
    print "SQL failed in Section $section<br>";
    print "Query: ".$query."<br>";    
    print "Error: ".$dbh->Error()."\n<br>";
    $dbh->Close();
    exit;
}
sub connect_fail {
    my ($DSN)=@_;
    print "Error connecting to $DSN<br>";
    print "Error:".Win32::ODBC::Error()."<br>";
    exit;
}
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 = ($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 Lzero {
    my ( $input, $padToLen ) = @_;
    substr( ( '0' x $padToLen ) . $input , -$padToLen );
}#--------------------------------------------------------------------