#!/perl/bin/perl.exe
$|=1;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# Information Software SA
# Date In: 2009-11-21
# Updates: 2009-11-21
# Author:Rodolfo Machon
# File Name: insert_cobal_abonos.pl
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#PERL MODULES
#use CGI;
use Win32::ODBC;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#HTML printing activation
print "Content-type: text/html\n\n";
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#GET PARAMETERS
#foreach my $arg(@ARGV) {printf "$arg";}
$lan              = $ARGV[0];
$appid            = $ARGV[1];
$clase            = $ARGV[2];
$custom_fields    = $ARGV[3];
$custom_values    = $ARGV[4];
$nombre_archivo   = $ARGV[5];
#-------------------------------------------------------------------------
#$lan              = "es";
#$appid            = "RTM_v30";
#$clase            = "inmuebles";
#$custom_fields    = "c3_tipo_generador_id,c3_facturador_id,dt_cobal";
#$custom_values    = "INM,CAE,20110829";
#$nombre_archivo   = "";
#-------------------------------------------------------------------------
# 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
%cobales = ();
get_cobales();
insert_abonos();
if ($lan eq "es"){print "El Programa insertar_cobal_abonos() se ejecuto adecuadamente";}
if ($lan eq "en"){print "The program insertar_cobal_abonos() was succesfully executed";}
#construct_page();
exit;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
sub get_cobales {
      my %wfv = ();
      my @cf  = split(/\,/,$custom_fields);
      my @cv  = split(/\,/,$custom_values);
      for (my $i=0;$i<=$#cf;$i++){
            if($cf[$i] eq "c3_facturador_id" || $cf[$i] eq "i8_periodo" || $cf[$i] eq "dt_cobal"){
                  $wfv{$cf[$i]} = $cv[$i];
            }
      }      
      #$sql="select i8_expediente_id,i8_periodo,c8_tributo_id,d82_pago,c4_lugar_id,c3_tipo_generador_id,dt_pago from sdr_cobales where c3_facturador_id=\"$wfv{'c3_facturador_id'}\" and v128_nombre_archivo=\"$wfv{'i8_periodo'}\" and dt_cobal=\"$wfv{'dt_cobal'}\"";
      #$sql="select i8_expediente_id,i8_periodo,c8_tributo_id,d82_pago,c4_lugar_id,c3_tipo_generador_id,dt_pago from sdr_cobales where c3_facturador_id=\"$wfv{'c3_facturador_id'}\" and v128_nombre_archivo=\"$nombre_archivo\"";
      $sql="select i8_expediente_id,i8_periodo,c8_tributo_id,d82_pago,c4_lugar_id,c3_tipo_generador_id,dt_pago from sdr_cobales where c3_facturador_id=\"$wfv{'c3_facturador_id'}\" and dt_cobal=\"$wfv{'dt_cobal'}\"";
      #print "$sql<br>";
      if ( $dbh->Sql($sql) ) {SQL_fail($sql,$dbh,'ge cobales')}
      while($dbh->FetchRow()){
          undef my @row;
          @row = $dbh->Data();
          $cobales{$row[0]."_".$row[1]."_".$row[2]}=[@row];
      }
}
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 "TSINMCAL"){
                        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')}
                        }
                  }
                  $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;
}
sub construct_page{
      open (DATA, "$PATH$FILE");
      while ($line = <DATA>){
	    $line =~ s/{lan}/$lan/g;
	    $line =~ s/{appid}/$appid/g;
	    $line =~ s/{periodo}/$i8_periodo/g;
            $line =~ s/{directorio}/$dir/g;
	    print "$line";
      }
}
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#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;
}
#-------------------------------------------------------------------------