#!/perl/bin/perl.exe
$|=1;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# Information Software SA
# Date In: 2013-02-05
# Updates: 2013-02-05
# Author:Rodolfo Machon
# File Name: verificar_cobal_abonos_PUERTO DE LA LIBERTAD.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');
$clase            = $cgiparms->param('clase');
$i8_periodo       = $cgiparms->param('i8_periodo');
#-------------------------------------------------------------------------
$lan              = "es";
$appid            = "SIM_v20";
$clase            = "inmueble";
if($i8_periodo eq ""){$i8_periodo = "201301";}
#-------------------------------------------------------------------------
# CHECK PARAMETERS
if ($lan eq ""){print "Your are not passing LAN parameter<br>";}
if ($appid eq ""){print "Your are not passing APPID parameter<br>";}
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# GET CLASE SCHEMA AND VARIABLES
if (!($dbh = new Win32::ODBC($appid))){print "Error connecting to $appid <br>";print "Error: " . Win32::ODBC::Error() . "<br>";exit;}
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# MAIN-PROGRAM
$expedientes   = get_expedientes();
$no_insertados = get_no_insertados();
%cobales       = get_cobales();
insert_abonos();
if ($lan eq "es"){print "PERIODO => $i8_periodo <br>EXPEDIENTES EN COBAL => $expedientes <br> NO INSERTADO EN ABONOS => $no_insertados<br>";}
exit;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
sub get_expedientes {
      my $exp   = 0;
      my $query = "
                  SELECT COUNT(*) FROM (
                                    SELECT a.i8_expediente_id
                                    FROM sdr_cobales a
                                    WHERE a.i8_periodo='$i8_periodo'
                                    GROUP by a.i8_expediente_id
                                    ORDER BY a.i8_expediente_id
                  )AS CUENTA;
                  ";
      if ( $dbh->Sql($query) ) {SQL_fail($query,$dbh,'get expedientes')}
      while($dbh->FetchRow()){
          my @row = $dbh->Data();
          $exp = $row[0];
      }
      return $exp;
}
sub get_no_insertados {
      my $exp   = 0;
      my $query = "
                  SELECT COUNT(*) FROM (
                                    SELECT a.i8_expediente_id,b.i8_".$clase."_id
                                    FROM sdr_cobales a
                                    LEFT JOIN sdd_".$clase."_abonos b ON a.i8_expediente_id=b.i8_".$clase."_id and b.i8_periodo='$i8_periodo'
                                    WHERE a.i8_periodo='$i8_periodo' and b.i8_inmueble_id is null
                                    GROUP by a.i8_expediente_id
                                    ORDER BY a.i8_expediente_id
                  )AS CUENTA;
                  ";
      if ( $dbh->Sql($query) ) {SQL_fail($query,$dbh,'get no_insertados')}
      while($dbh->FetchRow()){
          my @row = $dbh->Data();
          $exp = $row[0];
      }
      return $exp;
}
sub get_cobales {
      my %hash  = ();
      my $query = "
                  SELECT
                        i8_expediente_id,
                        i8_periodo,
                        c8_tributo_id,
                        d82_pago,
                        c4_lugar_id,
                        c3_tipo_generador_id,
                        dt_pago
                  FROM sdr_cobales
                  WHERE i8_periodo='$i8_periodo'
                  ";
      if ( $dbh->Sql($query) ) {SQL_fail($query,$dbh,'get cobales')}
      while($dbh->FetchRow()){
          my @row = $dbh->Data();
          $hash{$row[0]."_".$row[1]."_".$row[2]}=[@row];
      }
      return %hash;
}
sub insert_abonos {
    foreach $k(sort keys %cobales){
        $i8_inmueble_id   = $cobales{$k}[0];
        $i8_periodo       = $cobales{$k}[1];            
        $c8_tributo_id    = $cobales{$k}[2];
        $pago             = $cobales{$k}[3]/100;
        $sucursal         = $cobales{$k}[4];
        $dt_abono         = $cobales{$k}[6];
        $pago             = sprintf("%.2f",$pago);
        $pago             = $pago/1.05;
        $pago_fie         = $pago*0.05;
        $pago             = sprintf("%.2f",$pago);
        $pago_fie         = sprintf("%.2f",$pago_fie);
        $lugar            = "CAE";
        $existe_abono = verificar_abono($i8_inmueble_id,$i8_periodo,$c8_tributo_id);
        if ($existe_abono==0){
            if($c8_tributo_id eq "TSINMOTR"){
                if($pago>0){
                    my $pago_barrido     = get_pago_barrido($i8_inmueble_id,$i8_periodo);
                    $pago_barrido        = sprintf("%.2f",$pago_barrido/1.05);
                    my $pago_barrido_fie = sprintf("%.2f",$pago_barrido*0.05);
                    #print "$pago_barrido<br>";
                    if($pago_barrido>0){
                        $pago     = sprintf("%.2f",($pago)-$pago_barrido);
                        $pago_fie = sprintf("%.2f",$pago*0.05);
                        $c16_tarifa_id= get_tarifa('TSINMBAR',$i8_inmueble_id);                              
                        $sql="insert into sdd_inmueble_abonos (i8_inmueble_id,c8_tributo_id,c16_tarifa_id,i8_periodo,dt_abono,d82_abono,c3_tipo_abono_id,c16_recibo_id,c2_tipo_recibo_id,v64_abono_agencia,v64_abono_sucursal,ts_in,ts_update,c1_balance_type)
                        values($i8_inmueble_id,'TSINMBAR','$c16_tarifa_id',$i8_periodo,'$dt_abono','$pago_barrido','VAL','123','CS','$lugar','$sucursal',now(),now(),'S')";
                        #print "<br>".$sql;
                        if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'insert_abonos')}
                        $sql="insert into sdd_inmueble_abonos (i8_inmueble_id,c8_tributo_id,c16_tarifa_id,i8_periodo,dt_abono,d82_abono,c3_tipo_abono_id,c16_recibo_id,c2_tipo_recibo_id,v64_abono_agencia,v64_abono_sucursal,ts_in,ts_update,c1_balance_type)
                        values($i8_inmueble_id,'TSINMBAR','$c16_tarifa_id',$i8_periodo,'$dt_abono','$pago_barrido_fie','FIE','123','CS','$lugar','$sucursal',now(),now(),'S')";
                        #print "<br>".$sql;
                        if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'insert_abonos')}
                    }
                    if($pago>0){
                        $pago     = sprintf("%.2f",($pago));
                        $pago_fie = sprintf("%.2f",$pago*0.05);                        
                        $c16_tarifa_id=get_tarifa('TSINMCAL',$i8_inmueble_id);
                        $sql="insert into sdd_inmueble_abonos (i8_inmueble_id,c8_tributo_id,c16_tarifa_id,i8_periodo,dt_abono,d82_abono,c3_tipo_abono_id,c16_recibo_id,c2_tipo_recibo_id,v64_abono_agencia,v64_abono_sucursal,ts_in,ts_update,c1_balance_type)
                        values($i8_inmueble_id,'TSINMCAL','$c16_tarifa_id',$i8_periodo,'$dt_abono','$pago','VAL','123','CS','$lugar','$sucursal',now(),now(),'S')";
                        #print "<br>".$sql;
                        if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'insert_abonos')}
                        $sql="insert into sdd_inmueble_abonos (i8_inmueble_id,c8_tributo_id,c16_tarifa_id,i8_periodo,dt_abono,d82_abono,c3_tipo_abono_id,c16_recibo_id,c2_tipo_recibo_id,v64_abono_agencia,v64_abono_sucursal,ts_in,ts_update,c1_balance_type)
                        values($i8_inmueble_id,'TSINMCAL','$c16_tarifa_id',$i8_periodo,'$dt_abono','$pago_fie','FIE','123','CS','$lugar','$sucursal',now(),now(),'S')";
                        #print "<br>".$sql;
                        if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'insert_abonos')}
                    }
                }
            }elsif($c8_tributo_id eq "TSINMCUP"){
            
            }else{
                $c16_tarifa_id=get_tarifa($c8_tributo_id,$i8_inmueble_id);
                $sql="insert into sdd_inmueble_abonos (i8_inmueble_id,c8_tributo_id,c16_tarifa_id,i8_periodo,dt_abono,d82_abono,c3_tipo_abono_id,c16_recibo_id,c2_tipo_recibo_id,v64_abono_agencia,v64_abono_sucursal,ts_in,ts_update,c1_balance_type)
                values($i8_inmueble_id,'$c8_tributo_id','$c16_tarifa_id',$i8_periodo,'$dt_abono','$pago','VAL','123','CS','$lugar','$sucursal',now(),now(),'S')";
                #print "<br>".$sql;
                if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'insert_abonos')}
                $sql="insert into sdd_inmueble_abonos (i8_inmueble_id,c8_tributo_id,c16_tarifa_id,i8_periodo,dt_abono,d82_abono,c3_tipo_abono_id,c16_recibo_id,c2_tipo_recibo_id,v64_abono_agencia,v64_abono_sucursal,ts_in,ts_update,c1_balance_type)
                values($i8_inmueble_id,'$c8_tributo_id','$c16_tarifa_id',$i8_periodo,'$dt_abono','$pago_fie','FIE','123','CS','$lugar','$sucursal',now(),now(),'S')";
                #print "<br>".$sql;
                if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'insert_abonos')}
            }
        }            
    }
}
#-------------------------------------------------------------------------
sub get_pago_barrido{
      my($i8_inmueble_id,$i8_periodo)=@_;
      $cargo_barrido=0;
      $sql="select sum(d82_cargo) from sdd_inmueble_cargos where i8_inmueble_id='$i8_inmueble_id' and c8_tributo_id='TSINMBAR' and i8_periodo='$i8_periodo'";
      #print "$sql<br>";
      if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'verificar abono')}
      while($dbh->FetchRow()){
            undef @row2;
            @row2=$dbh->Data();
            $cargo_barrido=$row2[0];
      }
      return $cargo_barrido;
}
sub verificar_abono{
      my($inmueble_id,$periodo,$tributo)=@_;
      $counter=0;
      $sql="select count(*) from sdd_inmueble_abonos where i8_inmueble_id='$inmueble_id' and i8_periodo='$periodo' and c8_tributo_id='$tributo'";
      #print "<br>".$sql;
      if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'verificar abono')}
      while($dbh->FetchRow()){
                  undef @row2;
                  #print @row2."<br>";
                  @row2=$dbh->Data();
                  $counter=$row2[0];
      }
      return $counter;
      ###modificacion realizada 19/03
      #return 0;
}
sub get_tarifa{
      ($tributo_id,$inmueble)=@_;
      $tarifa="";
      $sql="select c1_tipo_tarifa_id,c2_codigo_id from sdd_inmueble_servicios where c8_tributo_id='$tributo_id' and i8_inmueble_id='$inmueble' order by dt_desde desc limit 1";
      #print "<br>$sql";
      if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'get_tarifa')}
      if($dbh->FetchRow()){
                  undef @row2;
                  #print @row2."<br>";
                  @row2=$dbh->Data();
                  $tipo_tarifa=$row2[0];
                  $codigo=$row2[1];                  
      }      
      $sql="select c16_tarifa_id from sdm_tarifas where c8_tributo_id='$tributo_id' and c1_tipo_tarifa_id='$tipo_tarifa' and c2_codigo_id='$codigo' order by dt_desde desc limit 1";
      #print "<br>$sql";
      if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'get_tarifa')}
      while($dbh->FetchRow()){
                  undef @row2;
                  #print @row2."<br>";
                  @row2=$dbh->Data();
                  $tarifa=$row2[0];
      }
      return $tarifa;
}

#-------------------------------------------------------------------------
#AUXILIAR-SUBROUTINES
sub SQL_fail {
    my ($query,$db,$section)= @_;
    print "SQL failed in Section $section<br>";
    print "Error: ".$db->Error()."\n<br>";
    print "Query: ".$query."<br>";
    $db->Close();
    exit;
}
sub connect_fail {
    my ($DSN)=@_;
    print "Error connecting to $DSN<br>";
    print "Error:".Win32::ODBC::Error()."<br>";
    exit;
}
#-------------------------------------------------------------------------