#!/perl/bin/perl.exe
$|=1;
#-------------------------------------------------------------------
#-------------------------------------------------------------------
#Perl Modules
use Win32::ODBC;
use Date::Calc qw(Add_Delta_Days);
use Date::Calc qw(Days_in_Month);
use CGI;
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;
#-------------------------------------------------------------------
#-------------------------------------------------------------------
#HTML printing activation
print "Content-type: text/html\n\n";
#-------------------------------------------------------------------
#-------------------------------------------------------------------
#Getting parameters
$form		= new CGI;
$id 		= $form->param('id');
$dir		= $form->param('dir');
$template_table = "<TABLE>{body}</TABLE>";
#--------------------------------------------------------------------------
# OPEN DATABASE CONNECTIONS - ODBCs
get_app_data();
open_database_connections();
#------------------------------------------------------------------
#------------------------------------------------------------------
#Define subdirectories and general variables
$PATH		= "../".$lan."/";
$file 		= $lan."_mora_notificacion_expedientes_ilo_rept.html";
#-------------------------------------------------------------------
#-------------------------------------------------------------------
# MAIN-PROGRAM
$option = substr($id,0,1);
if($option eq "1"){
	#verificar_estado('inmueble');
	$rowset = get_records($db_tes,'sdd_inmueble_estados_mensuales a,sdm_tributos b','b.v64_tributo,MIN(a.i8_periodo),MAX(a.i8_periodo),sum(a.d82_val),sum(a.d82_fie),sum(a.d82_int),sum(a.d82_mul),MAX(a.i4_dias_mora)');
	($nombre,$dui)=get_nombre($db_tes,'sdd_inmueble_contribuyentes a,sdm_contribuyentes b','b.v128_contribuyente,b.c11_dui_id');
	
}
if($option eq "2"){
	#verificar_estado('empresa');
	$rowset = get_records($db_tes,'sdd_empresa_estados_mensuales a,sdm_tributos b','b.v64_tributo,MIN(a.i8_periodo),MAX(a.i8_periodo),sum(a.d82_val),sum(a.d82_fie),sum(a.d82_int),sum(a.d82_mul),MAX(a.i4_dias_mora)');
	($nombre,$dui)=get_nombre($db_tes,'sdd_empresa_contribuyentes a,sdm_contribuyentes b','b.v128_contribuyente,b.c11_dui_id');
}
$direccion=get_direccion($id);
construct_page($rowset,$nombre);
exit;
#-------------------------------------------------------------------
#MAIN-SUBROUTINES
sub verificar_estado{
	my($clase)=@_;	
	$sql="select c16_estado from sdm_".$clase."s where i8_".$clase."_id=".$id;
	my $sth = $dbh->prepare($sql);
	$sth->execute or die 'sub get_';
	while (@row = $sth->fetchrow_array) {
		$c16_estado	= $row[0];
	}
	print "ESTADO:$c16_estado";
	if($c16_estado ne "ACEPTADO"){
		print "<script language='javascript'>alert(El estado de este expediente no es ACEPTADO);</script>";
		exit;
	}
}
sub get_records{
	my ($dbh,$tables,$fields)= @_;
	my $query = "";
	my $r	  = "";
	my $rs	  = "";
	my $suma_fila = "";
	my $suma_monto = "";
	my $suma_fiestas = "";
	my $suma_intereses = "";
	my $suma_multas = "";
	my $dias_mora = "";
	my $suma_mora = "";
	$suma_total = "";
	my $contador = "";
       
	if($option eq "1"){$query = "SELECT $fields FROM $tables WHERE i8_inmueble_id='$id' and substring(a.c16_tarifa_id,1,8)=b.c8_tributo_id and a.i4_dias_mora>0 GROUP BY substring(c16_tarifa_id,1,8) order by a.i8_periodo desc";}
	if($option eq "2"){$query = "SELECT $fields FROM $tables WHERE i8_empresa_id='$id' and substring(a.c16_tarifa_id,1,8)=b.c8_tributo_id GROUP BY substring(c16_tarifa_id,1,8) order by a.i8_periodo desc";}
	#print "$query<br>";
	
	#Aqui se le pone la primera fila de Título
	$template_rows="";
	$contador = 0;
	$template_rows=$template_rows."<TR><TD width=175px><b>DETALLE</b></TD><TD align=center><b>MORA</b></TD></TR>";
	$vv="\$";
	#print "$query";
	my $sth = $dbh->prepare($query);
	$sth->execute or die 'sub get_';
	while (@row = $sth->fetchrow_array) {
		$suma_fila="";
		$row[3] 	= sprintf("%.2f",$row[3]);
		$row[4] 	= sprintf("%.2f",$row[4]);
		$row[5] 	= sprintf("%.2f",$row[5]);
		$row[6] 	= sprintf("%.2f",$row[6]);
		$suma_fila	= $row[3]+$row[4];##sumando valor y fiesta
		$suma_fila	= sprintf("%.2f",$suma_fila);
		$valor_tributo	= $row[3];
		$suma_monto     += $row[3];
		$suma_monto	= sprintf("%.2f",$suma_monto);
		$suma_fiestas   += $row[4];
		$suma_fiesta	= sprintf("%.2f",$suma_fiesta);
		$suma_intereses += $row[5];
		$suma_multas    += $row[6];
		
		$suma_total+=$suma_fila;
		
		$suma_total+=$row[5];
		$suma_total+=$row[6];
		
		$r	= join('|',@row);
		$rs	.= $r."~~";
		$i8_periodo_desde=$row[1];
		$i8_periodo_hasta=$row[2];
		$dias_mora =$row[7];
		$template_rows=$template_rows."<TR><TD>$row[0]</TD><TD>$vv$valor_tributo</TD></TR>"; 
	}
	$contador++;
	if($suma_multas>0 && $suma_multas<2.86){$suma_total=$suma_total-$suma_multas+2.86;$suma_multas=2.86;}
	$template_rows	= $template_rows."<TR><TD>FIESTAS</TD><TD>$vv$suma_fiestas</TD></TR>";
	$template_rows	= $template_rows."<TR><TD>INTERESES</TD><TD>$vv$suma_intereses</TD></TR>";
	$template_rows	= $template_rows."<TR><TD>MULTAS</TD><TD>$vv$suma_multas</TD></TR>";
	
	$template_rows=$template_rows."<TR><TD><b>TOTAL</b></TD><TD>$vv$suma_total</TD></TR>";
	
	$table = $template_table;
	$table =~ s/{body}/$template_rows/g;
	
	
	if(substr($id,0,1) eq "1"){$clase="inmueble"}
	if(substr($id,0,1) eq "2"){$clase="empresa"}
	$sql="insert into sdd_".$clase."_administrativo (i8_".$clase."_id,dt_administrativo,ts_in,ts_update,c8_estado) values($id,now(),now(),now(),'EMITIDO')";
	#if ($dbh->Sql($sql)){print "Error al intentar insertar un registro.... $sql"};
	$sql="select v64_jefe_recuperacion_mora, v64_descripcion_puesto from sdm_parametros";
	$sth = $dbh->prepare($sql);
	$sth->execute or die 'sub get_';
	while (@row = $sth->fetchrow_array) {
		$v64_jefe_departamento  = $row[0];
		$v64_puesto		= $row[1];
	}
	return $rs;
}
sub get_direccion {
	my($expediente_id)=@_;
	my $direccion = "";
	$sql="select c11_sector_id,c4_calle_id,c4_avenida_id,c2_pasaje_id,c2_senda_id,c4_casa,c2_block_id,c2_poligono_id from sdm_".$clase."s where i8_".$clase."_id='$expediente_id'";
    if($clase eq "empresa"){$sql="select c11_sector_id,c4_calle_id,c4_avenida_id,c2_pasaje_id,c2_senda_id,c4_casa,c2_block_id,c2_poligono_id from sdd_".$clase."_ubicacion where i8_".$clase."_id='$expediente_id'";}
	#print "<br>get_direccion: $sql<br>";
	$sth = $dbh->prepare($sql);
	$sth->execute or die 'sub get_';
	while (@row = $sth->fetchrow_array) {
		$sector_id	= $row[0];
		$calle_id	= $row[1];
		$avenida_id	= $row[2];
		$pasaje_id	= $row[3];
		$senda_id	= $row[4];
		$casa		= $row[5];
		$block_id	= $row[6];
		$poligono_id	= $row[7];
		$sql="select a.i2_tipo_sector_id, a.v64_sector, b.v64_tipo_sector from sdm_sectores a left join sdm_tipo_sectores b on a.i2_tipo_sector_id=b.i2_tipo_sector_id where a.c11_sector_id='$sector_id'";
		$sth1 = $dbh->prepare($sql);
		$sth1->execute or die 'sub get_';
		if (@row1 = $sth1->fetchrow_array) {
			$sector     = $row1[1];
            $tipo_sector= $row1[2];
			$direccion  = $tipo_sector." ".$sector;
		}
		$sql="select v64_calle from sdd_sector_calles where c4_calle_id='$calle_id' and c11_sector_id='$sector_id'";
		$sth1 = $dbh->prepare($sql);
		$sth1->execute or die 'sub get_';
		if (@row2 = $sth1->fetchrow_array) {
			 $calle=$row2[0];$direccion=$direccion.", Calle ".$calle;
		}
		$sql="select v64_avenida from sdd_sector_avenidas where c4_avenida_id='$avenida_id' and c11_sector_id='$sector_id'";
		$sth1 = $dbh->prepare($sql);
		$sth1->execute or die 'sub get_';
		if (@row2 = $sth1->fetchrow_array) {
			$avenida=$row2[0];$direccion=$direccion.", Avenida ".$avenida;
		}
		$sql="select v64_pasaje from sdd_sector_pasajes where c2_pasaje_id='$pasaje_id' and c11_sector_id='$sector_id'";
		$sth1 = $dbh->prepare($sql);
		$sth1->execute or die 'sub get_';
		if (@row2 = $sth1->fetchrow_array) {
			$pasaje=$row2[0];$direccion=$direccion.", Pasaje ".$pasaje;
		}
		$sql="select v64_senda from sdd_sector_sendas where c2_senda_id='$senda_id' and c11_sector_id='$sector_id'";
		$sth1 = $dbh->prepare($sql);
		$sth1->execute or die 'sub get_';
		if (@row2 = $sth1->fetchrow_array) {
			$senda=$row2[0];$direccion=$direccion.", Senda ".$senda;
		}
        $sql="select v64_block from sdd_sector_blocks where c2_block_id='$block_id' and c11_sector_id='$sector_id'";
		$sth1 = $dbh->prepare($sql);
		$sth1->execute or die 'sub get_';
		if (@row2 = $sth1->fetchrow_array) {
			$block=$row2[0];$direccion=$direccion.",".$block;
		}
        $sql="select v64_poligono from sdd_sector_poligonos where c2_poligono_id='$poligono_id' and c11_sector_id='$sector_id'";
		$sth1 = $dbh->prepare($sql);
		$sth1->execute or die 'sub get_';
		if (@row2 = $sth1->fetchrow_array) {
			$poligono=$row2[0];$direccion=$direccion.",".$poligono;
		}
        if($direccion ne ""){
			$direccion=$direccion." ".$casa;
        }
	}
	return $direccion;
}
sub get_nombre{
	my ($dbh,$tables,$fields)= @_;
	my $query = "";
	my $r	  = "";
	my $rs	  = "";
	if($option eq "1"){$query = "SELECT $fields FROM $tables WHERE a.i8_inmueble_id='$id' and a.i8_contribuyente_id=b.i8_contribuyente_id  and i2_tipo_contribuyente_id='1'";}
	if($option eq "2"){$query = "SELECT $fields FROM $tables WHERE a.i8_empresa_id='$id' and a.i8_contribuyente_id=b.i8_contribuyente_id  and i2_tipo_contribuyente_id='1'";}
	#print "$query<br>";
	$sth = $dbh->prepare($query);
	$sth->execute or die 'sub get_';
	while (@row = $sth->fetchrow_array) {
		$r=$row[0];
		$dui=$row[1];
	}
	return ($r,$dui);
}
sub construct_page {
	my ($rowset)= @_;
    my $dias_mes = Days_in_Month(substr($i8_periodo_desde,0,4),substr($i8_periodo_desde,4,2))*1-1;
	my $desde=get_fecha_letras(substr($i8_periodo_desde,0,4)."-".substr($i8_periodo_desde,4,2)."-01");
	my $hasta=get_fecha_letras(substr($i8_periodo_hasta,0,4)."-".substr($i8_periodo_hasta,4,2)."-".$dias_mes);
	$arc	= $file;
	open (DATA, "$PATH$arc");
	while ($line = <DATA>) {	
		$line =~ s/\{lan}/$lan/g;
		$line =~ s/\{appid}/$appid/g;
		$line =~ s/\{city}/$city/g;		 
		$line =~ s/\{rowset}/$rowset/g;
		$line =~ s/\{nombre}/$nombre/g;
		$line =~ s/\{dir}/$dir/g;
		$line =~ s/\{id}/$id/g;
		$line =~ s/\{generador}/$clase/g;
		$line =~ s/\{i8_periodo_desde}/$desde/g;
		$line =~ s/\{i8_periodo_hasta}/$hasta/g;
		$line =~ s/\{table}/$table/g;
		$line =~ s/\{total}/$suma_total/g;
		$line =~ s/\{dui}/$dui/g;
		$line =~ s/\{v64_jefe_departamento}/$v64_jefe_departamento/g;
		$line =~ s/\{v64_puesto}/$v64_puesto/g;
		$line =~ s/\{direccion}/$direccion/g; 
		print "$line";
	}
}
#--------------------------------------------------------------------
#AUXILIAR-SUBROUTINES
sub get_app_data {
    my $schema  = "app.data.xml";
    my $xml     = new XML::Simple;
    my $data    = $xml->XMLin("../xml/".$schema);
    $appid      = $data->{portal}->{app};
    $lan        = $data->{portal}->{lang};
    $city       = $data->{portal}->{city};	
}
sub SQL_fail {
    my ($query,$dbh,$section)= @_;
    print "SQL failed in Section $section<br>";
    print "Query: ".$query."<br>";    
    exit;
}
sub open_database_connections {
	$dbh 	= DBI->connect("dbi:ODBC:$appid",'','',{PrintError => 1, RaiseError => 1});
	if (!$dbh) {print "error: connection: $DBI::err\n$DBI::errstr\n$DBI::state\n";}
	$dbh->{LongReadLen} = 512 * 1024;
	$dbh->{LongTruncOk} = 1;
	$dbh1 	= DBI->connect("dbi:ODBC:$appid",'','',{PrintError => 1, RaiseError => 1});
	if (!$dbh1) {print "error: connection: $DBI::err\n$DBI::errstr\n$DBI::state\n";}
	$dbh1->{LongReadLen} = 512 * 1024;
	$dbh1->{LongTruncOk} = 1;
	$dbh2 	= DBI->connect("dbi:ODBC:$appid",'','',{PrintError => 1, RaiseError => 1});
	if (!$dbh2) {print "error: connection: $DBI::err\n$DBI::errstr\n$DBI::state\n";}
	$dbh2->{LongReadLen} = 512 * 1024;
	$dbh2->{LongTruncOk} = 1;
}
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);
	return $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;
}
#--------------------------------------------------------------------