#!/usr/bin/perl

$| = 1;                 # Para que Perl no utilize su buffer

use DBI;                # Usar el DataBase Interface
use CGI qw/:standard/;  # Usar el GCI.pm module
use strict 'vars';

###############################################################################

my($script_url) = url(-absolute=>1);        # direccion absoluta del script
use vars '$dbh';                            # Database handler
use vars '$sth';                            # Statement handlers
my ($dbuser, $dbpasswd);                    # User y Passwd p/ Base de Datos
my ($id) = param('id');                     # ID obtenido despues del login

###############################################################################

&delete_old_files;
($id, $dbuser, $dbpasswd) = &get_id();

$dbh = DBI->connect("DBI:mysql:accesnot_sanchezm",  $dbuser, $dbpasswd);

if (!defined $dbh) {
    print redirect(-uri=>'/adm/');
    &exit_script;
}
else { &save_user_file($dbuser, $dbpasswd); }

# si se preciono el botton cancel
if ( (param('cancel')) || (param('back')) ) {
    print redirect(-uri=>'http://www.notariasanchezmanrique.com/index.htm');
    &exit_script;
}

print header(-expires=>'-10m');
print start_html(-title=>"Mantenimiento del Web", 
                 -style=>{'src'=>"/consultas/style-det.css"},
                 -BGCOLOR=>'FFFFFF' );
print "\n\n";

### debug #####################################################################
#my ($key_form);
#foreach $key_form (param()) { print ( "$key_form\=", param($key_form), "<br>\n" ); }
#print "id\=$id<br>\n";
###############################################################################

if    (param('save')    ne "")  { &process     }
elsif (param('process') ne "")  { &save_data;  }
else                            { &show_form   }

print end_html;         # Fin de HTML
&exit_script;

###############################################################################

sub exit_script {       # Desconecta de la base de datos y sale del script
    if (defined $dbh) { $dbh->disconnect; }
    exit;
}

###############################################################################

sub show_form {

    print qq~

<TABLE ALIGN="center" BORDER="0" WIDTH="100%" height="90%">
<TR><TD BGCOLOR="#FFFFFF" ALIGN=center valign="middle" CLASS=small_font><BR>
<B>Transferencia de Datos</B><BR><BR>
<FORM NAME="form" METHOD="post" ACTION="$script_url" ENCTYPE="multipart/form-data">
<INPUT TYPE="HIDDEN" NAME="id" VALUE=$id>
Archivo de Datos: <INPUT TYPE=file NAME="datafile" SIZE=25><BR><BR>
<INPUT TYPE="submit" name="save" value="Transferir">
</FORM></TD></TR></TABLE>

    ~;
}

###############################################################################

sub process {

    my ($fname, @time, $data, $bytes, $total_bytes);
    my (@tmp, $err_found, $err_line, $records, $line);
    
    print "<table width=100% border=0 height=90%>\n",
          "<tr><td align=center class=small_font>\n";

    (@time) = (localtime)[0..5];
    $time[4] += 1; $time[5] += 1900;
    $fname = $time[5] . sprintf("%.2d", $time[4]) . sprintf("%.2d", $time[3]) .
             sprintf("%.2d", $time[2]) . sprintf("%.2d", $time[1]) . 
             sprintf("%.2d", $time[0]) . ".csv";

    open UPLOADFILE, ">./var/$fname" || die "Error transferiendo archivos";
    $total_bytes = 0;
    while ($bytes = read(param("datafile"),$data,1024)) {
	print UPLOADFILE $data;
	$total_bytes += $bytes;
    }
    close UPLOADFILE;
    print "Archivo recibido - $total_bytes bytes.<BR>\n";

    $err_found = 0; $records=0; $line = 1;
    open (DATA, "./var/$fname") || die("No se puede abrir archivo de datos");
    while (<DATA>) {
        $line++; chomp $_;
        if ($_ ne "") {
	    @tmp = split(",", $_);
	    if ($tmp[3]) { $records++;     }
	    else         { 
                print "\n<!--\nERROR linea $line\n$_\n-->\n\n";
                $err_found = 1;
                if (!$err_line) { $err_line = $line; }
	    }
        }
    }
    close DATA;

    if ($err_found == 1) {
        print qq~
        <BR><B><FONT COLOR=red>Inconsistencia de datos encontrada ($err_line)<BR>
        Revise el archivo de datos<BR>
        <FORM NAME="form" METHOD="post" ACTION="/cgi-bin/transfer">
        <INPUT TYPE="HIDDEN" NAME="id" VALUE=79982679>
        <INPUT TYPE="submit" name="process" value="OK">
        </FORM>
	~;
    }
    else {
        print qq~
        <BR><B>$records registros encontrados</B><br>
        Desea cargar la informacion en la BD ?<br><br>
        <FORM NAME="form" METHOD="post" ACTION="/cgi-bin/transfer">
        <INPUT TYPE="HIDDEN" NAME="id" VALUE=$id>
        <INPUT TYPE="HIDDEN" NAME="fname" VALUE=$fname>
        <INPUT TYPE="submit" name="process" value="OK">
        <input type="submit" name="cancel" value="Cancel">
        </FORM>
        ~;
    }

    print "</TD></TR>\n</TABLE>\n";
}

###############################################################################

sub save_data {

    my (@data, @fields, $fname, $insert_sth, $count, $str, $errors, $records);

    @fields = qw(
    CLAVE                         CLAVE_PRINCIPAL                CLAVE_ESPECIAL
    N_KARDEX                      CLIENTE                        CONTRATO
    OTORGANTES                    BENEFICIARIOS                  HISTORICO_ESTADOS
    N_ESCRITURA                   N_MINUTA                       F_ESCRITURA
    F_FIRMAS                      N_TITULO                       F_REGISTROS
    ESTADO_REGISTROS              OBSERVACIONES                  F_ACTUALIZACION
    CLAVE_ADICIONAL               NULL                           FORMAL_MINUTA
    FORMAL_ESCRITURA              FORMALIZAR                     TIPO_GARANTIA
    F_NOTARIA                     F_MINUTA                       F_FIRMA_MINUTA
    F_ESTIM_BLOQUEO               F_BLOQUEO                      F_INGRESO_RRPP
    F_INSCRIPCION_RRPP            TASACION                       REP_CREDITO
    AUTORIZACION_GASTOS           FEC_DOC_RECIBIDA               FEC_ENTREGA_DOC
    FEC_OBTENCION_DOC             FEC_ENT_DOC_TASADOR            FEC_RECIB_TASACION
    NOMBRE_TASADOR                VALOR_REALIZACION              FEC_COMUNICACION_OF
    CONFORME                      NO_CONFORME                    NO_RESPONDIO
    FEC_CONFORMIDAD_OF            FEC_SOLICITUD_2DA_TASACION     FEC_ENT_DOC_TASADOR_2 
    FEC_RECIB_TASACION_2          NOMBRE_TASADOR_2               VALOR_REALIZACION_2
    CONFORME_2                    NO_CONFORME_2                  FEC_CONF_INMUEBLES
    FEC_COMUNICACION_OF_2         FEC_SOLICITUD_3RA_TASACION     FEC_RECIB_TASACION_3
    NOMBRE_TASADOR_3              VALOR_REALIZACION_3            FEC_CONF_INMUEBLES_2
    FEC_COMUNICACION_OF_3         FEC_FORMALIZACION
    );

    $fname = param('fname');
    print "<table width=100% border=0 height=90%>\n",
          "<tr><td align=center class=small_font>\n";
    
    $records = 0; $errors = 0;
    $str = open (DATA, "./var/$fname");
    if (!$str) { 
        print "No se puede abrir archivo de datos";
        exit;
    }
    
    # borramos los registros actuales
    $sth = $dbh->do("DELETE FROM dato");
    if ($sth = 0) {
        print "ERROR borrando registros...";
        exit;
    }

    while (<DATA>)  {
        chomp $_;                          # quitamos el \n y \r 
	s/\r//g; 
        @data = split(",", $_);
        if ($data[3]) {                    # No de Kardex not null 

            $insert_sth = "INSERT dato SET ";
            for ($count=0; $count<=(@fields-1); $count++) {
              if ($fields[$count] ne 'NULL') { 
                if ($count > 0) { $insert_sth .= ", "; }
                $insert_sth .= $fields[$count] . "=";
                if ($data[$count] ne "") {
                    # reemplazamos * con \n y los caracteres peligrosos
                    $str = $data[$count];
                    $str =~ s/\*/\\n/g;
                    $str =~ s/\'/\\'/g;  $str =~ s/\"/\\"/g;
	            $insert_sth .= "'" . $str . "' ";
                }
                else {
                    $insert_sth .= "NULL ";
                }
              }
            }

            $sth = $dbh->do($insert_sth);
            if ($sth <= 0) { 
                $errors++;  
                print "<!--\n\n$DBI::errstr\n$insert_sth\n\n-->\n";
            }
            else           { $records++; }
        }
    }

    print qq~
    <B>$records registros transferidos</B><br>
    $errors errores encontrados<BR><BR>
    <INPUT TYPE=button NAME=back VALUE=OK onClick=parent.location='/adm'>
    </FORM>
    ~;

    print "</TD></TR>\n</TABLE>\n";
}

###############################################################################

sub get_id {            # Define $id, $dbuser y $dbpasswd para conectar a la DB
                        # Devuelve $id, $user y $password
    my ($user, $passwd);
    $id = param('id');

    if (!$id) {
	$user   = param('user');
	$passwd = param('passwd');
	$id = int(rand(99999999));
    }
    else {                # Seleccionamos del archivo de texto var/event_$id.usr

	if (-e "var/event_$id.usr" && -r "var/event_$id.usr") {
	    open (USERFILE, "var/event_$id.usr");
	    ($user, $passwd) = split(/\|/, <USERFILE>);
	    close(USERFILE);
	}
	else {
            print "redirect...";
	    print redirect(-uri=>'/adm');
	    exit;
	}
    }
    return ($id, $user, $passwd);
}

###############################################################################

sub save_user_file {

   my ($user, $passwd) = @_;

   open (USERFILE, ">var/event_$id.usr") ||
       die("No se puede crear archivo var/event_$id.usr");
    print USERFILE "$user|$passwd";
    close(USERFILE);
}

###############################################################################

sub delete_old_files {      # borra todos los ./var/*.usr viejos >= 1 dia
                            # -M file test - age of file in days
    my (@files, $file_name);

    opendir (VAR, "./var");
    @files = grep(/\.usr/, readdir(VAR));
    closedir (VAR);

    foreach $file_name (@files) {
	if (-M "./var/$file_name" > 1) { unlink("./var/$file_name"); }
    }
}
