#!/usr/bin/perl -w
use Net::FTP;
use File::chdir;
use DBI;
use DBD::Pg;
use utf8;
use Encode;
# variables globales usadas para localización de directorio y archivos
my $log1= "/home/rocco/hcm/log_retorno_error.txt";
my $log2= "/home/rocco/proyecto/log_retorno_exitoso.txt";
my $directorio_local="/home/rocco/hcm/";
my $directorio_remoto="/";
my $archivo_hcm="/home/rocco//proyecto/hcm.txt";
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon++;
my $fecha= "$mday-$mon-$year $hour:$min:$sec\n";
my $regis="Inicio de conexión FTP:$fecha";
my $regis2="Cierre correcto de la conexión FTP: $fecha";
my $regis3="Inicio correcto de la base datos: $fecha";
my $regis4="Cierre correcto de la base datos: $fecha";
my $regis5="Insert exisotos a las base de datos tabla hcm: $fecha";
# Abrimos el log
open my $LOG,">>$log1" or die "ERROR: No pude escribir en el log.txt: $!\n";
open my $LOGG,">>$log2" or die "ERROR: No pude escribir en el log.txt: $!\n";
my $username = "xxxxxxx";
my $pwd = "xxxxxxx";
# Generando conexión con el servidor remoto
exitoso ($regis);
my $ftp = Net::FTP->new("xxx.xxx.xxx.xxx");
$ftp->login($username,$pwd);
if (not defined $ftp)
{
my $msl = "No se pude conectar al servidor: $fecha";
registra($msl);
die "$msl\n";
}
# nos colocamos en el directorio donde dejaremos los archivos
chdir "$directorio_local";
# directorio en el servidor remoto
$ftp->cwd("$directorio_remoto");
# lista completa del directorio remoto
my @linea_listado = $ftp->ls("/");
# Guardando mi lista en la variable listado
my $linea_listado="@linea_listado";
# Comenzando bucle para descartar archivos y extraer los necesarios
foreach $linea_listado(@linea_listado)
{
if($linea_listado =~ m/(hcm\.txt$)/)
{
$ftp->get ("$linea_listado");
if (not defined $ftp)
{
$msl ="filtrado de archivos fallo: $fecha ", $ftp->message;
registra($msl);
die "$msl\n";
}
exitoso($linea_listado);
}
}
$ftp->quit;
$msg="$regis2";
exitoso($msg);
$dirname = "$directorio_local";
opendir ( DIR, $dirname );
#Abriendo conexion a la base de datos
my $dbh= DBI->connect('DBI:Pg:dbname=xxx;host=xxx.xxx.xxx.xxx','xxx','xxxxx');
if ( not defined $dbh )
{
$msl = "ERROR CONEXION A LA BASE DE DATOS : $fecha " . $DBI::errstr;
registra($msl);
die "$msl\n";
}
my $msg="$regis3";
exitoso($msg);
#Seleccionando archivo hcm
while (my $archivo = glob "$archivo_hcm")
{
open my $RE, '<', $archivo;
#Separando cada valor de los archivos y guardándolos en variables
while (my $linea = readline $RE)
{
my @cadena = split /\|\s*/, $linea;
$cadena[7] = decode("iso-8859-1", my $octets);
$octets = encode("iso-8859-1", $cadena[7]);
#Aplicando el insert into
$sth ="insert into conversion.conv_compensa_sap_fi(nu_acreedor,nu_doc_sap,nu_factura,nu_doc_comp,fe_factura,fe_pago,mt_factura,mt_sin_imp)
values ('$cadena[0]','$cadena[1]','$cadena[2]','$cadena[3]','$cadena[4]','$cadena[5]','$cadena[6]','$octets')";
#Ejecutando query
$subir= $dbh-> prepare($sth);
$subir->execute();
$subir->finish;
}
#desconectando del bucle
close $RE;
}
$msg="$regis5";
exitoso($msg);
#Desconectándose de la base de datos
$dbh->disconnect;
$msg="$regis4";
exitoso($msg);
#Cerrando el directorio local
closedir(DIR);
#Borrar archivos de compensación y rechazo del directorio local
$rootdir= "$directorio_local";
chdir $rootdir;
unlink <*.*>;
close $LOG;
exit 0;
close $LOGG;
exit 0;
# Subrutinas
sub registra
{
my $msl = shift;
print $LOG "$msl\n";
}
sub exitoso
{
my $msg = shift;
print $LOGG "$msg\n";
}
print"exitoso";