#!/perl/bin/perl.exe
$|=1;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# Author:Rodolfo Machon
# Company:WebSoft, SA de CV 
# Nombre del archivo: recibo.s.pl
# Created: 2022-10-02
# Updates: 2022-10-02
# Copyright - All Rights Reserved
#------------------------------------------------------------------------- 
#-------------------------------------------------------------------------
#PERL MODULES
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use DBI;
use JSON;
use XML::Simple;
use Data::Dumper;
use Encode;
use Encode qw/is_utf8 decode/;
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# HTML PRINTING ACTIVATION
print "Content-type: text/html; charset=utf-8\n\n";
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
#GET PARAMETERS
%params = get_params();
$mandamientoID 	= $params{'mandamientoID'};
$reciboID 	    = $params{'reciboID'};
$cajaID 	    = $params{'cajaID'};
$cajeroID 	    = $params{'cajeroID'};
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# CHECK PARAMETERS
#$mandamientoID 	= "40482019";
#$reciboID 	    = "L-138735";
#$cajaID 	    = "1";
#$cajeroID 	    = "9999";
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# GET CLASE SCHEMA AND VARIABLES
get_app_data();
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
# OPEN DATABASE CONNECTIONS - ODBCs
$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;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#MAIN PROGRAM
$i8_user_id = get_user();
%data= ('reciboID' => $reciboID);
%man = get_mandamiento();
%det = get_mandamientoDetalle();
insert_master();
insert_detail();
insert_abonos();    
$json	= encode_json \%data;
$json	=~ s/\=>/:/g;	
print $json;
exit;
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#SUB-ROUTINES
sub get_user {
   my $str = "";    
	local($username) = $ENV{"REMOTE_USER"};
	local($identify) = $ENV{"REMOTE_IDENT"};
	local($user) = $username || $identify;
    my $sql="select a.i8_user_id,concat(a.v32_fname,' ',a.v32_lname),a.v16_login from sdm_users a where a.v16_login='$user'";
    #print "$sql";
    my $sth = $dbh->prepare($sql);
    $sth->execute or die SQL_fail($sql,$dbh,'sub get_user');
	if (@row = $sth->fetchrow_array) {
		$str = $row[0];
	}
	return $str;
}
sub get_mandamiento {
	my %hash	= ();
	my @fields	= split(/\,/,"i8_mandamiento_id,i8_contribuyente_id,i8_expediente_id,i2_tipo_pago_id,i2_tipo_departamento_id,c3_tipo_generador_id,c2_tipo_mandamiento_id,c14_nit_id,c11_dui_id,c14_iva_id,v128_contribuyente,v16_fax,v16_telefono,dt_emision,dt_vencimiento,txt_direccion,txt_email,txt_concepto,txt_expediente_direccion,txt_expediente_propietarios,i2_cajero_id,c4_status_mandamiento_id,ts_update,ts_in,c8_cuenta_id,i8_emisor_id,i8_financiamiento_id,dt_cuota,d82_pago,v64_tipo_departamento,v64_tipo_pago,v64_tipo_generador,v16_login_emisor");
	my $sql	 = "SELECT   m.i8_mandamiento_id
						,m.i8_contribuyente_id
						,m.i8_expediente_id
						,m.i2_tipo_pago_id
						,m.i2_tipo_departamento_id
						,m.c3_tipo_generador_id
						,m.c2_tipo_mandamiento_id
						,m.c14_nit_id
						,m.c11_dui_id
						,m.c14_iva_id
						,m.v128_contribuyente
						,m.v16_fax
						,m.v16_telefono
						,m.dt_emision
						,m.dt_vencimiento
						,m.txt_direccion
						,m.txt_email
						,m.txt_concepto
						,m.txt_expediente_direccion
						,m.txt_expediente_propietarios
						,m.i2_cajero_id
						,m.c4_status_mandamiento_id
						,m.ts_update
						,m.ts_in
						,m.c8_cuenta_id
						,m.i8_emisor_id
						,m.i8_financiamiento_id
						,m.dt_cuota
						,m.d82_pago
						,d.v64_tipo_departamento
						,p.v64_tipo_pago
						,g.v64_tipo_generador
						,u.v16_login
				FROM sdm_mandamientos m
				LEFT JOIN sdm_tipo_departamentos d ON d.i2_tipo_departamento_id=m.i2_tipo_departamento_id
				LEFT JOIN sdm_tipo_pagos p ON p.i2_tipo_pago_id=m.i2_tipo_pago_id
				LEFT JOIN sdm_tipo_generadores g ON g.c3_tipo_generador_id=m.c3_tipo_generador_id
				LEFT JOIN sdm_users u ON u.i8_user_id=m.i8_user_id
				WHERE m.i8_mandamiento_id='$mandamientoID'
			  ";
	#print "$sql";
    my $sth = $dbh->prepare($sql);
    $sth->execute or die 'sub get_user';
    if (@row = $sth->fetchrow_array) {
		for(my $i;$i<=$#row;$i++){
			$hash{$fields[$i]} = $row[$i];
		}
	}
    return %hash;
}
sub get_mandamientoDetalle {
	my $count = 0;
	my %hash	= ();
	my $sql	 = "SELECT   m.c16_cuenta_ingreso_id
						,m.c16_tarifa_id
						,m.v128_tarifa
                        ,m.d82_cantidad
						,m.d82_tarifa
						,m.txt_periodos
				FROM sdd_mandamientos m
				LEFT JOIN sdm_tarifas t ON t.c16_tarifa_id=m.c16_tarifa_id
				WHERE m.i8_mandamiento_id='$mandamientoID'
				ORDER BY SUBSTRING(m.c16_tarifa_id,1,2) desc
			  ";
	#print "$sql";
    my $sth = $dbh->prepare($sql);
    $sth->execute or die 'sub get_user';
    while (my @row = $sth->fetchrow_array) {
		$hash{$count}= [@row];
		$count++;
	}
    return %hash;
}
sub insert_master {
    my $expedienteID = $man{'i8_expediente_id'};
    if($expedienteID eq ""){$expedienteID=0}
    my $columns= "c16_recibo_id,i8_mandamiento_id,i8_contribuyente_id,i8_expediente_id,i2_tipo_pago_id,i2_tipo_departamento_id,c3_tipo_generador_id,c14_nit_id,c11_dui_id,c14_iva_id,v128_contribuyente,v16_fax,v16_telefono,dt_emision,dt_vencimiento,txt_direccion,txt_email,txt_expediente_direccion,txt_expediente_propietarios,txt_concepto,i2_cajero_id,c8_cuenta_id,i8_emisor_id,i8_cajero_id,i8_user_id,i8_financiamiento_id,dt_cuota,d82_pago,ts_in";
    my $values = "\"$reciboID\",\"$mandamientoID\",\"$man{'i8_contribuyente_id'}\",\"$expedienteID\",\"$man{'i2_tipo_pago_id'}\",\"$man{'i2_tipo_departamento_id'}\",\"$man{'c3_tipo_generador_id'}\",\"$man{'c14_nit_id'}\",\"$man{'c11_dui_id'}\",\"$man{'c14_iva_id'}\",\"$man{'v128_contribuyente'}\",\"$man{'v16_fax'}\",\"$man{'v16_telefono'}\",\"$man{'dt_emision'}\",\"$man{'dt_vencimiento'}\",\"$man{'txt_direccion'}\",\"$man{'txt_email'}\",\"$man{'txt_expediente_direccion'}\",\"$man{'txt_expediente_propietarios'}\",\"$man{'txt_concepto'}\",\"$man{'i2_cajero_id'}\",\"$man{'c8_cuenta_id'}\",\"$man{'i8_emisor_id'}\",\"$cajeroID\",\"$i8_user_id\",\"$man{'i8_financiamiento_id'}\",\"$man{'dt_cuota'}\",$man{d82_pago},now()";    
    my $sql = "INSERT INTO sdm_recibos($columns) VALUES($values)";
    #print $sql."<br>";
    $dbh->do($sql);    
}
sub insert_detail {
    my $columns = "c16_recibo_id,c16_cuenta_ingreso_id,c16_tarifa_id,v128_tarifa,d82_cantidad,d82_tarifa,txt_periodos";
    foreach my $k (keys %det){
        my $values = "'$reciboID','$det{$k}[0]','$det{$k}[1]','$det{$k}[2]',$det{$k}[3],$det{$k}[4],'$det{$k}[5]'";
        my $sql = "INSERT INTO sdd_recibos($columns) VALUES($values)";
        #print $sql."<br>";
        $dbh->do($sql);  
    }
}
sub insert_abonos {
    my $clase = "inmueble";
    my $tipo = "A";
    my $expediente = $man{'i8_expediente_id'};
    my $emision = $man{'dt_emision'};    
    if($man{'c3_tipo_generador_id'} eq "EMP"){$clase="empresa";$tipo="S";}
    if($man{'c3_tipo_generador_id'} eq "AGU"){$clase="agua";$tipo="S";}    
    my $columns = "i8_".$clase."_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,c1_balance_type,ts_in";
    foreach my $k (keys %det){
        if($det{$k}[5] ne ""){
            my @periodos = split(/\~/,$det{$k}[5]);
            foreach my $i (@periodos) {
                my @array   = split(/\,/,$i);
                my $periodo = $array[0];
                my $dias    = $array[1];
                my $tarifa  = $array[2];
                my $valor   = $array[3];
                my $fiestas = $array[4];
                my $interes = $array[5];
                my $multa   = $array[6];
                my $tributo = substr($tarifa,0,8);
                my $dim = "INSERT INTO sdd_".$clase."_abonos($columns) VALUES('$expediente','$tributo','$tarifa','$periodo','$emision',$dias,'DIM','$reciboID','IS','$agencia','$sucursal','$tipo',now())";
                my $val = "INSERT INTO sdd_".$clase."_abonos($columns) VALUES('$expediente','$tributo','$tarifa','$periodo','$emision',$valor,'VAL','$reciboID','IS','$agencia','$sucursal','$tipo',now())";
                my $fie = "INSERT INTO sdd_".$clase."_abonos($columns) VALUES('$expediente','$tributo','$tarifa','$periodo','$emision',$fiestas,'FIE','$reciboID','IS','$agencia','$sucursal','$tipo',now())";
                my $int = "INSERT INTO sdd_".$clase."_abonos($columns) VALUES('$expediente','$tributo','$tarifa','$periodo','$emision',$interes,'INT','$reciboID','IS','$agencia','$sucursal','$tipo',now())";
                my $mul = "INSERT INTO sdd_".$clase."_abonos($columns) VALUES('$expediente','$tributo','$tarifa','$periodo','$emision',$multa,'MUL','$reciboID','IS','$agencia','$sucursal','$tipo',now())";
                #print $dim."<br>";
                #print $val."<br>";
                #print $fie."<br>";
                #print $int."<br>";
                #print $mul."<br>";
                $dbh->do($dim);
                $dbh->do($val);
                $dbh->do($fie);
                $dbh->do($int);
                $dbh->do($mul);            
            }    
        }
    }
}
#-------------------------------------------------------------------------
#-------------------------------------------------------------------------
#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};
    $agencia    = $data->{portal}->{agencia};
    $sucursal   = $data->{portal}->{sucursal};     
}
sub get_params {
	my $buffer;
	my %hash = ();
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
	} else {
		$buffer = $ENV{'QUERY_STRING'};
	}
	$buffer	=~ s/\{//g;
	$buffer	=~ s/\}//g;
	$buffer	=~ s/\"//g;
	@pairs = split(/\,/, $buffer);
	for($i=0;$i<@pairs;$i++){
		@arr = split(":", $pairs[$i]);
		$hash{$arr[0]}=$arr[1];
	}
	return %hash;
}
#-------------------------------------------------------------------------