<?php
namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;

use Illuminate\Support\Facades\Response;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Request;

use Illuminate\Support\Facades\Input;
use DB;
use DateTime;
use stdClass;
use Oriceon\PdfMerger\Facades\PdfMerger;

use App\Http\Controllers\LEDEmailController;
use App\Http\Controllers\ReportsController;

use Exception;


class Masivos extends Controller {

    public static function altasMasivas() {

        $lista = DB::select("select TOP 20 LN_altas_masivas.*, ISNULL(LN_familias.modalidad_login, 'T') AS modalidad_login
                                        from LN_altas_masivas inner join LN_contrapartes 
                                        on LN_altas_masivas.contraparte = LN_contrapartes.contraparte
                                        inner join LN_contraparte_familias
                                        on LN_contrapartes.contraparte = LN_contraparte_familias.contraparte
                                        inner join LN_familias on LN_contraparte_familias.familia = LN_familias.familia
                                        where LN_altas_masivas.procesado = 1
                                        and isnull(LN_altas_masivas.mail_inicial,0) = 0", array());

        $hoy = new DateTime('today');
        $fecha_exp = date_format(date_add($hoy, date_interval_create_from_date_string("7 days")), 'd/m/Y');

        foreach ($lista as $x => $data) {
            $result = 0;

            if ($data->tipo_pago == 'PP') {
                //Trazabilidad Mail Pago.
                $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Se envió el mail de pago', $data->cliente, 'PAGO_INICIAL_CONTRAPARTE_BACK', 'BACK', $data->contraparte, 15342812), 'selectOne');
                /* 26/02/2021 Se cambio por el nuevo Controller 
                $result = LEDEmailController::enviarMailLED('PAGO-PENDIENTE', 'PAGO-PENDIENTE-SUBJECT', $data->contraparte, $fecha_exp, trim($data->email));*/
                $result = EmailController::enviarMail('PAGO-PENDIENTE', 'PAGO-PENDIENTE-SUBJECT', $data->contraparte, $fecha_exp, trim($data->email));
            } else {
                if ($data->modalidad_login == 'L') {
                    //Trazabilidad Mail Alta.                
                    $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Envío de link de acceso a la contraparte', $data->cliente, 'ENVIO_LINK_CONTRAPARTE', 'BACK', $data->contraparte, 15342812), 'selectOne');
                    /* 26/02/2021 Se cambio por el nuevo Controller 
                    $result = LEDEmailController::enviarMailLED('ALTA-LINK', 'ALTA-LINK-SUBJECT', $data->contraparte, $fecha_exp, trim($data->email));*/
                    $result = EmailController::enviarMail('ALTA', '', $data->contraparte, $fecha_exp, trim($data->email));
                } else {
                    //Trazabilidad Mail Alta.                
                    $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Envío de credenciales de acceso a la contraparte', $data->cliente, 'ENVIO_CREDENCIALES_CONTRAPARTE', 'BACK', $data->contraparte, 15342812), 'selectOne');
                    /* 26/02/2021 Se cambio por el nuevo Controller 
                    $result = LEDEmailController::enviarMailLED('ALTA-TAXID', 'ALTA-TAXID-SUBJECT', $data->contraparte, $fecha_exp, trim($data->email));*/
                    $result = EmailController::enviarMail('ALTA', '', $data->contraparte, $fecha_exp, trim($data->email));
                }

            }

            if ($result == 1) {
                $temp = DB::selectOne("update LN_altas_masivas set mail_inicial = 1 where id_alta = " . $data->id_alta, array());
            }

            print_r($result);

        }

    }


    public static function enviarPagosValid() {

        $lista = DB::select("select LN_contrapartes.contraparte, LN_contrapartes.email_contacto, LN_contrapartes.cliente from padrones inner join LN_contrapartes
        on LN_contrapartes.id_padron = padrones.id_padron
    where padrones.identificacion in
    (
    '03257161000153',
    '00268723000176',
    '35868330000188',
    '27836552000190',
    '12281597000179',
    '07096868000186',
    '05430415000119',
    '11830823000241',
    '20400285000165',
    '28001301000159',
    '04031962000169',
    '02342071000106',
    '10434259000102',
    '08803745000109',
    '11805105000134 ',
    '56545742000157',
    '32952133000154 ',
    '17804268000189',
    '28420276000148',
    '21783963000189',
    '14353138000189',
    '17755369000107',
    '04311661000199',
    '04400995000139',
    '15158259000132',
    '02777131002906',
    '58740887000134',
    '17692962000151',
    '44022333000197',
    '53020152000112',
    '08969726000149',
    '00126468000470',
    '93259331000121',
    '03282817000198',
    '20953555000165',
    '09436928000198',
    '03089573000121',
    '29246546000109',
    '62323589000116',
    '16712137000109',
    '11935735000123',
    '22770216000179',
    '01005844000198',
    '27013781000105',
    '92253095000173',
    '06341274000120',
    '08197761000197',
    '03342914000633',
    '76533074000155',
    '18952004000135',
    '17264153000149'
    )
    order by padrones.nombre_persona
    ", array());


        //dd($lista);

        foreach ($lista as $x => $data) {

            //Trazabilidad Mail Pago.
            $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Se envió el mail de pago', $data->cliente, 'PAGO_INICIAL_CONTRAPARTE_BACK', 'BACK', $data->contraparte, 15342812), 'selectOne');

            /* 26/02/2021 Se cambio por el nuevo Controller 
            $result = LEDEmailController::enviarMailLED('PAGO-PENDIENTE', 'PAGO-PENDIENTE-SUBJECT', $data->contraparte, '20/02/2020', trim($data->email_contacto));*/
            $result = EmailController::enviarMail('PAGO-PENDIENTE', 'PAGO-PENDIENTE-SUBJECT', $data->contraparte, '20/02/2020', trim($data->email_contacto));

            print_r($result);

        }


    }

    /*************************************************************************************************************************************************************************************/

    /// llamar unicamente cuando sea hayan importado correctamente los datos - IMPORTA LOS INFORMES INQUIRO A LAS CARPETAS DOSSIER
    /// CHEQUEAR VAR $cliente ANTES DE LLAMAR

    // https://backend2.fidelitas.com.ar/importar-inquiros


    public static function importarInquiros() {

        $cliente = 2144275673;

        $path_informes = "/var/www/html/compartido/informes";


        //        $clientes = DB::select('select * from temp_inquiro where cliente not in (2254875,2787462) and cliente in (2787462) ');
        $clientes = DB::select("select * from temp_inquiro where cliente in (" . $cliente . ") ");

        foreach ($clientes as $cli) {
            $cliente = $cli->cliente;

            $inquiros = DB::select("select padrones.identificador,padrones.identificacion,padrones.id_padron,padrones.nombre_persona,
          informes.informe,archivos_informe.observado, IV_busquedas.iv_busqueda, LN_gestiones.contraparte, LN_gestiones.gestion,
          archivos_informe.path_archivo
                     from padrones inner join 
                             informes on (padrones.identificador = informes.identificador AND padrones.numero = informes.numero)
                                       inner join IV_busquedas on informes.informe = IV_busquedas.informe
        inner join LN_contrapartes on (padrones.id_padron = LN_contrapartes.id_padron AND IV_busquedas.cliente = LN_contrapartes.cliente)
      inner join LN_gestiones on (LN_contrapartes.contraparte = LN_gestiones.contraparte AND IV_busquedas.iv_busqueda = LN_gestiones.iv_busqueda)
                                     left outer join archivos_informe on informes.informe = archivos_informe.informe
                                         where informes.cliente = " . $cliente . " and informes.informe_padre is null 
                                                and informes.estado_informe not in ('X','C','N')
                                                AND LN_gestiones.created > '2020-04-01'
                                                and (archivos_informe.path_archivo like '%.pdf' or archivos_informe.path_archivo like '%.PDF')
                                                order by padrones.nombre_persona");

            foreach ($inquiros as $iv) {
                if (!empty($iv->path_archivo)) {

                    $source_file_path = $path_informes . '/' . $iv->informe . '/' . $iv->path_archivo;
                    print_r($source_file_path);

                    if (file_exists($source_file_path)) {
                        $target_file_path = env('PATH_DOSSIER_IV') . '/' . $cliente . '/' . $iv->contraparte . '/' . $iv->contraparte . '_' . $iv->gestion . '.pdf';

                        if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $cliente)) {
                            mkdir(env('PATH_DOSSIER_IV') . '/' . $cliente);
                        }
                        if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $cliente . '/' . $iv->contraparte)) {
                            mkdir(env('PATH_DOSSIER_IV') . '/' . $cliente . '/' . $iv->contraparte);
                        }

                        copy($source_file_path, $target_file_path);

                        $upd = DB::selectOne('update LN_gestiones set iv_informe = 1 where contraparte = ' . $iv->contraparte
                            . ' and gestion = ' . $iv->gestion);

                    }

                }
            }
        }

    }

    /// llamar unicamente cuando sea hayan importado correctamente los datos - CHEQUEAR VAR $cliente ANTES DE LLAMAR
    // https://backend2.fidelitas.com.ar/importar-cv

    public static function importarCv() {
        $cliente = 2144275673;

        $source_cv_path = "/var/www/html/iv/prod/cv";

        $path_iv = '/var/www/html/compartido/inquirovitae';


        $clientes = DB::select("select * from temp_inquiro where cliente in (" . $cliente . ")");

        foreach ($clientes as $cli) {
            $cliente = $cli->cliente;

            $inquiros = DB::select("select padrones.identificador,padrones.identificacion,padrones.id_padron,padrones.nombre_persona,
                                                        informes.informe, IV_busquedas.iv_busqueda, LN_gestiones.contraparte, LN_gestiones.gestion
                                                from padrones inner join 
                                                informes on (padrones.identificador = informes.identificador AND padrones.numero = informes.numero)
                                                inner join IV_busquedas on informes.informe = IV_busquedas.informe
                                                inner join LN_contrapartes on (padrones.id_padron = LN_contrapartes.id_padron AND IV_busquedas.cliente = LN_contrapartes.cliente)
                                                inner join LN_gestiones on (LN_contrapartes.contraparte = LN_gestiones.contraparte AND IV_busquedas.iv_busqueda = LN_gestiones.iv_busqueda)
                                                where informes.cliente = " . $cliente . " and informes.informe_padre is null 
                                                and informes.estado_informe not in ('X','C','N')

                                                AND LN_gestiones.created > '2020-04-01'

                                                order by padrones.nombre_persona");


            foreach ($inquiros as $iv) {

                if (!is_dir($path_iv . '/' . $cliente)) {
                    mkdir($path_iv . '/' . $cliente);
                }
                if (!is_dir($path_iv . '/' . $cliente . '/' . $iv->contraparte)) {
                    mkdir($path_iv . '/' . $cliente . '/' . $iv->contraparte);
                }
                if (!is_dir($path_iv . '/' . $cliente . '/' . $iv->contraparte . '/' . $iv->gestion)) {
                    mkdir($path_iv . '/' . $cliente . '/' . $iv->contraparte . '/' . $iv->gestion);
                }


                // busco CV
                $source_pattern = $source_cv_path . '/' . $cliente . '/' . str_pad($iv->iv_busqueda, 8, '0', STR_PAD_LEFT) . '_*.pdf';

                $files = glob($source_pattern);

                foreach ($files as $f) {
                    copy($f, $path_iv . '/' . $cliente . '/' . $iv->contraparte . '/' . $iv->gestion . '/' . basename($f));
                }

            }

        }

    }


    /// llamar unicamente cuando sea hayan importado correctamente los datos
    /// CHEQUEAR VAR $cliente ANTES DE LLAMAR
    // https://backend2.fidelitas.com.ar/importar-fotos

    public static function importarFotos() {

        $cliente = 2144275673;


        $source_fotos_path = "/var/www/html/iv/prod/fotos";

        $path_iv = '/var/www/html/compartido/inquirovitae';


        $clientes = DB::select("select * from temp_inquiro where cliente in (" . $cliente . ")");

        foreach ($clientes as $cli) {
            $cliente = $cli->cliente;


            $inquiros = DB::select("select padrones.identificador,padrones.identificacion,padrones.id_padron,padrones.nombre_persona,
                                                        informes.informe, IV_busquedas.iv_busqueda, LN_gestiones.contraparte, LN_gestiones.gestion
                                                from padrones inner join 
                                                informes on (padrones.identificador = informes.identificador AND padrones.numero = informes.numero)
                                                inner join IV_busquedas on informes.informe = IV_busquedas.informe
                                                inner join LN_contrapartes on (padrones.id_padron = LN_contrapartes.id_padron AND IV_busquedas.cliente = LN_contrapartes.cliente)
                                                inner join LN_gestiones on (LN_contrapartes.contraparte = LN_gestiones.contraparte AND IV_busquedas.iv_busqueda = LN_gestiones.iv_busqueda)
                                                where informes.cliente = " . $cliente . " and informes.informe_padre is null 
                                                and informes.estado_informe not in ('X','C','N')

                                                AND LN_gestiones.created > '2020-04-01'

                                                order by padrones.nombre_persona");


            foreach ($inquiros as $iv) {

                if (!is_dir($path_iv . '/' . $cliente)) {
                    mkdir($path_iv . '/' . $cliente);
                }
                if (!is_dir($path_iv . '/' . $cliente . '/' . $iv->contraparte)) {
                    mkdir($path_iv . '/' . $cliente . '/' . $iv->contraparte);
                }
                if (!is_dir($path_iv . '/' . $cliente . '/' . $iv->contraparte . '/' . $iv->gestion)) {
                    mkdir($path_iv . '/' . $cliente . '/' . $iv->contraparte . '/' . $iv->gestion);
                }


                // busco fotos
                $source_pattern = $source_fotos_path . '/' . $cliente . '/' . str_pad($iv->iv_busqueda, 8, '0', STR_PAD_LEFT) . '_foto*.*';

                $files = glob($source_pattern);

                foreach ($files as $f) {
                    copy($f, $path_iv . '/' . $cliente . '/' . $iv->contraparte . '/' . $iv->gestion . '/' . basename($f));
                }

            }
        }

    }

    /// UPDATE TABLA IV_BUSQUEDAS SI EXISTE CV
    // https://backend2.fidelitas.com.ar/check-cv

    public static function checkCV() {
        $cliente = !empty(Request::input('cliente')) ? Request::input('cliente') : null;

        $path_iv = '/var/www/html/compartido/inquirovitae';

        $clientes = DB::select('select * from temp_inquiro where cliente in (2144275673)');

        foreach ($clientes as $cli) {
            $cliente = $cli->cliente;

            if ($cliente > 0) {

                $busq = DB::select("select LN_gestiones.gestion, LN_gestiones.iv_busqueda, LN_contrapartes.contraparte
                                                from LN_gestiones inner join LN_contrapartes on LN_gestiones.contraparte = LN_contrapartes.contraparte
                                                inner join IV_busquedas on LN_gestiones.iv_busqueda = IV_busquedas.iv_busqueda
                                                where LN_gestiones.desde <= GETDATE()
                                                and LN_gestiones.hasta >= GETDATE()

                                                AND LN_gestiones.created > '2020-04-01'

                                                and LN_contrapartes.cliente = " . $cliente, array());


                foreach ($busq as $data) {
                    $cv_existe = 0;
                    $path_contraparte = $path_iv . '/' . $cliente . '/' . $data->contraparte . '/' . $data->gestion;

                    if (is_dir($path_contraparte)) {

                        $pattern = $path_contraparte . '/' . str_pad($data->iv_busqueda, 8, '0', STR_PAD_LEFT) . '_*.*';

                        $files_c = glob($pattern);

                        foreach ($files_c as $ff) {
                            $ext = pathinfo($ff, PATHINFO_EXTENSION);
                            if (strtolower($ext) == 'pdf' or strtolower($ext) == 'doc' or strtolower($ext) == 'docx') {
                                $cv_existe = 1;
                                break;
                            }
                        }

                    }

                    $temp = DB::selectOne("update IV_busquedas set cv_existe = " . $cv_existe . " where IV_busqueda = " . $data->iv_busqueda);

                }
            }
        }
    }


    // Popular marca iv_informe en la tabla de LN_gestiones si existe el PDF del informe Inquiro en el storage
    // https://backend2.fidelitas.com.ar/actualizar-iv-informe

    public static function updateInformeIV() {

        $contra = DB::select('select g.contraparte, g.gestion, g.cliente
                            from ln_gestiones g join ln_contrapartes c on c.contraparte = g.contraparte
                            where g.iv_busqueda is not null
                            and g.desde <= getdate() and g.hasta >= getdate()
and c.cliente=2144275673');


        foreach ($contra as $iv) {
            $target_file_path = env('PATH_DOSSIER_IV') . '/' . $iv->cliente . '/' . $iv->contraparte . '/' . $iv->contraparte . '_' . $iv->gestion . '.pdf';

            $iv_informe = file_exists($target_file_path) ? 1 : 0;

            $upd = DB::selectOne('update LN_gestiones set iv_informe = ' . $iv_informe . ' where contraparte = ' . $iv->contraparte
                . ' and gestion = ' . $iv->gestion);


        }

    }

    ////////////////////////////////////////////////////////////////////////////////////////////


    public static function generarPdfAMX() {

        set_time_limit(600);

        $batch = 5;
        $processed = 0;
        $exited = false;

        $FILES_PATH = '/var/www/html/compartido/AMX';
        $error_file = $FILES_PATH . '/error.txt';
        $last_proc = $FILES_PATH . '/last.txt';

        $last_id = 0;
        if (file_exists($last_proc)) {
            $last_id = file_get_contents($last_proc);
        }

        $contrapartes = DB::select("select c.contraparte as 'Contraparte',
        p.nombre_persona as 'Nombre', p.identificacion as 'Identificacion',
        g.desde 'Gestion_desde', g.hasta 'Gestion_hasta', f.nombre_familia as 'Familia',
                                    '/var/www/html/compartido/legajos/' + convert(varchar,c.cliente) + '/' + convert(varchar,c.contraparte) + '/' + convert(varchar,g.gestion) as 'Ruta_documentos',
                                    DOCS.doc_id, DOCS.tipo_doc 'Tipo_doc', DOCS.nombre_tipo_doc 'Documento' ,
                                    DOCS.inicio_ejercicio 'Inicio_Ejercicio', Docs.fin_ejercicio 'Fin_Ejercicio', DOCS.es_balance, DOCS.id_externo,
                                    iif(DOCS.es_balance = 1 and DOCS.id_externo IS NOT NULL, 
                                        '/var/www/html/compartido/balances/'+p.identificacion , 
                                        null) as Ruta_balance
                                from ln_contrapartes c
                                inner join ln_gestiones g on (g.contraparte = c.contraparte)
                                inner join padrones p on p.id_padron = c.id_padron
                                inner join ln_contraparte_indicadores i on (i.contraparte = c.contraparte and i.gestion = g.gestion and indicador = 4)
                                inner join ln_familias f on f.familia = i.familia
                                left join (
                                            select XT.contraparte, XT.doc_id, XT.gestion, Xt.tipo_doc, XT.es_balance, DOC.nombre_tipo_doc,
                                            XT.inicio_ejercicio, XT.fin_ejercicio, XT.id_externo
                                            from ln_docs XT
                                            inner join ln_tipos_doc DOC on DOC.tipo_doc = XT.tipo_doc
                                            where XT.estado_doc = 'V' and XT.aplica = 1) DOCS
                                            on (DOCS.contraparte = c.contraparte and DOCS.gestion = g.gestion)

                                            where c.cliente = 5546348 and c.subcontratista = 0 and c.activo = 1 and c.country_code = 'AR'
                                            and g.vigente = 0
                                            and i.familia != 32
                                            AND DOCS.doc_id IS NOT NULL " . (!empty($last_id) ? (" AND c.contraparte > " . $last_id) : "") .
            " ORDER BY c.contraparte");

        // AND c.contraparte NOT IN (107,142,143,202,363)"

        $last = 0;
        foreach ($contrapartes as $i => $c) {
            $ctr = $c->Contraparte;
            $pdf_name = 'DOCS_' . $ctr . '.pdf';


            if ($ctr != $last) {

                if (isset($joined)) {

                    if ($merge) {
                        echo 'Haciendo merge de PDF contraparte ' . $last . '... ';

                        /*if ($last == 137 or $last == 142) {
                            echo '<br />';
                            var_dump($joined);
                            echo '<br />';
                        }
                        
                        if ($last == 143) {
                            echo '<br />';
                            echo 'Acá se tilda ....';
                            echo '<br />';
                            var_dump($joined);
                        }*/

                        try {
                            $joined->merge('file');
                            $path = $FILES_PATH . '/' . $pdf_name;
                        $joined->save($path);
                            echo 'PDF de contraparte ID ' . $last . ' adjuntados.<br />';
                        } catch (Exception $e) {
                            echo 'ERROR AL GENERAR PDF de contraparte ID ' . $last . ' - ' . $e->getMessage() . '<br />';
                            file_put_contents($error_file, $last . chr(13) . chr(10), FILE_APPEND);
                        } finally {
                            echo 'unset de joined..544';
                            unset($joined->buffer);
                            unset($joined);
                        }

                    }

                }

                if ($processed == $batch) {
                    $exited = true;
                    break;
                }


                //echo $ctr . '<BR />';
                $hay_file = false;
                $merge = false;
            }

            $doc = $c->doc_id;
            $bal = $c->es_balance;

            $path_archivo = ($bal == 1) ? (($c->Ruta_balance != null) ? $c->Ruta_balance . '/' . $c->id_externo . '.pdf' : NULL) : $c->Ruta_documentos . '/' . $doc . '.pdf';


            if (file_exists($path_archivo)) {
                if (!$hay_file) {
                    copy($path_archivo, $FILES_PATH . '/' . $pdf_name);
                    $hay_file = true;

                    $processed = $processed + 1;
                    echo '<br><br>Orden a procesar Nro. ' . $processed . '<br />';

                    echo '<BR />' . 'Contraparte ' . $c->Nombre . ' -> generado el archivo : ' . $pdf_name . '<BR />';
                    file_put_contents($last_proc, $ctr);
                } else {
                    if (!$merge) {
                        echo '-- adjuntar PDFs al archivo ' . $pdf_name . ' existente... <br>';
                        $joined = PdfMerger::init();
                        $joined->addPDF($FILES_PATH . '/' . $pdf_name);
                        $merge = true;
                    }

                    $joined->addPDF($path_archivo);

                    echo 'Adjuntado el archivo : ' . pathinfo($path_archivo, PATHINFO_BASENAME) . ' a ' . $pdf_name . '<BR />';
                }
            }

            $last = $ctr;
        }

        // process last file after loop: only if look wasn't broken by batch count

        if ($exited == false) {

            if (isset($joined)) {

                if ($merge) {

                    try {
                        $joined->merge('file');
                        $path = $FILES_PATH . '/' . $pdf_name;
                        $joined->save($path);
                        echo 'Haciendo merge de PDF contraparte ' . $last . '... ';
                        echo 'PDF de contraparte ID ' . $last . ' adjuntados.<br />';
                    } catch (Exception $e) {
                        echo 'ERROR AL GENERAR PDF de contraparte ID ' . $last . ' - ' . $e->getMessage() . '<br />';
                        file_put_contents($error_file, $last . chr(13) . chr(10), FILE_APPEND);
                    } finally {
                        echo 'unset de joined..600';
                        unset($joined->buffer);
                        unset($joined);
                    }
                }
            }

        }
    }


}
