<?php namespace App\Http\Controllers;

use App\Custom\SQLConnection; 
use App\Custom\Misc;
use App\Models\Mailer;
use Session;
use DateTime;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Request;
use DB;
use stdClass;
use App\Http\Controllers\ImperiumEmailController;
use App\Http\Controllers\EmailController;

class ImperiumDocumentos extends Controller {

    public static function verificacionDocumentos() {
        $status = !empty(Request::input('status')) ? Request::input('status') : 'PENDIENTES';
        return view('/imperium/verificacion_documentos')->with(compact(['status']));
    }

    public static function verificacionDocumentosData() {
        $cliente = Session::get('usuario')->cliente['client_id'];
        $status = !empty(Request::input('status')) ? Request::input('status') : 'PENDIENTES';
        $docs = SQLConnection::backendStoreProcedure('Imperium_vista_cliente', array($cliente, $status, null, null, null, null, null, null, null), 'select');

        $periodos = [];
        $secciones = [];
        $acceso = [];
        
        $per = [];
        $sec = [];
        $acc = [];
        foreach($docs as $doc) {
            if(!in_array($doc->periodo, $per)) {
                $per[] = $doc->periodo;
            }
            if(!in_array($doc->nombre_seccion, $sec)) {
                $sec[] = $doc->nombre_seccion;
            }
            if(!in_array($doc->ci_killer, $acc)) {
                $acc[] = $doc->ci_killer;
            }
        }
        arsort($per, 0);
        foreach($per as $p) {
            $periodos[] = array('periodo' => $p, 'periodo_my' => substr($p,4,2).'-'.substr($p,0,4));
        }

        asort($sec,0);
        foreach($sec as $s) {
            $secciones[] = array('nombre_seccion' => $s);
        }

        foreach($acc as $a) {
            $acceso[] = array('acceso' => ($a == 1) ? 'SI' : 'NO');
        }

    
        return json_encode( array('docs' => $docs, 'periodos' => $periodos, 'secciones' => $secciones, 'acceso' => $acceso) );
    }



    public static function verificacionDocumentosDoc() {        
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if(!($doc->prox_vencer == 1 && $doc->estado_doc == 'I' && $doc->doc_version > 0)) {
            //$doc_url = Misc::getDocUrl($doc_id);        

            $files = Misc::docUrls($doc_id);
            $doc_url = $files[$doc->doc_version];

            $hijos = NULL;
            if ($doc->es_doc_lista > 0) {
                $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');
            }

            $aux = NULL;
            if ($doc->doc_version > 0) {
                // Todos los documentos de reemplazo para mostrar el historial en caso que el estado sea verificado
                $aux = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, -1), 'select');
            }
            return view('/imperium/documento_verificar')->with(compact(['doc', 'doc_url', 'hijos', 'files', 'aux']));
        }
        else {
            $dv = $doc->doc_version;
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, 0), 'selectOne');
            $doc_reemp = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $dv), 'selectOne');
            $doc_url = Misc::getDocUrl($doc_id);        
            $doc_url_reemp = Misc::getDocUrl($doc_id, $dv);
            $hijos = NULL;
            if ($doc->es_doc_lista > 0) {
                $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');
            }
            return view('/imperium/documento_verificar_reemplazo')->with(compact(['doc', 'doc_reemp', 'doc_url', 'doc_url_reemp', 'hijos']));            
        }
    }

    public static function documentosHijos() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        $type = '';

        $columns = [];
        if($doc->validar_cuit > 0) {
            $type = 'C';

            $col = new stdClass;
            $col->type = 'select';
            $col->index = 'doc_id';
            $col->title = '';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 40;
            $columns[] = $col;

            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Documento';
            $col->index = 'nombre_tipo_doc';
            $col->align = 'left';
            $col->cellAlign = 'left';
            $col->flex = 1;
            $columns[] = $col;
        }
        else if ($doc->validar_lista_cuil > 0) {
            $type = 'E';

            $col = new stdClass;
            $col->type = 'select';
            $col->index = 'empleado';
            $col->title = '';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 40;
            $col->headerCheckBox = true;
            $columns[] = $col;

            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Empleado';
            $col->index = 'nombre_persona';
            $col->align = 'left';
            $col->cellAlign = 'left';
            $col->flex = 1;
            $columns[] = $col;


            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Identificación';
            $col->index = 'taxid';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 150;
            $columns[] = $col;
        }

        else if ($doc->validar_lista_dominios > 0) {
            $type = 'V';

            $col = new stdClass;
            $col->type = 'select';
            $col->title = '';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 40;
            $columns[] = $col;

            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Vehículo';
            $col->index = 'nombre_vehiculo';
            $col->align = 'left';
            $col->cellAlign = 'left';
            $col->flex = 1;
            $columns[] = $col;


            $col = new stdClass;
            $col->type = 'string';
            $col->title = 'Dominio';
            $col->index = 'dominio';
            $col->align = 'center';
            $col->cellAlign = 'center';
            $col->width = 100;
            $columns[] = $col;

        }

      

        $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');
        return json_encode( array('columns' => $columns, 'data' => $hijos, 'type' => $type, 'es_doc_lista' => $doc->es_doc_lista) );
    }

    public static function actualizarFechaVigencia() {
        $rslt = 0;
        $msg = 'Fecha de vigencia actualizada.';

        $doc_id = Request::input('doc_id');
        $fecha_vigencia = Request::input('fecha_vigencia');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            if ($doc->prox_vencer == 1 AND $doc->doc_version > 0) {
                // Cambio sólo la vigencia del registro de reemplazo
                $temp = SQLConnection::backendStoreProcedure('Imperium_Actualizar_Fecha_Vigencia', array($doc_id, $doc->doc_version, $fecha_vigencia, Session::get('usuario')->user_id), 'selectOne');
            }
            else {

                $temp = SQLConnection::backendStoreProcedure('Imperium_Actualizar_Fecha_Vigencia', array($doc_id, 0, $fecha_vigencia, Session::get('usuario')->user_id), 'selectOne');
            }

        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }

    public static function verificarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if($doc->doc_version > 0 and $doc->prox_vencer == 1) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $doc->doc_version), 'selectOne');
        }
        
        return view('/imperium/verificar_documento_confirm')->with(compact(['doc']));
    }

    public static function verificarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido verificado';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {

            
            if ($doc->prox_vencer == 1 AND $doc->doc_version > 0) {
                // verifica doc reemplazo, segundo parámetro del SP en 1
                $temp = SQLConnection::backendStoreProcedure('Imperium_Verificar_Documento', array($doc_id, 1, Session::get('usuario')->user_id), 'selectOne');
            }
            else {
                // verifico doc normal
                $temp = SQLConnection::backendStoreProcedure('Imperium_Verificar_Documento', array($doc_id, 0, Session::get('usuario')->user_id), 'selectOne');
            }
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }


        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }

    public static function rechazarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if($doc->doc_version > 0) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $doc->doc_version), 'selectOne');
        }

        return view('/imperium/rechazar_documento_confirm')->with(compact(['doc', 'motivo_rechazo']));
    }
    
    public static function rechazarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido rechazado';
        $doc_id = Request::input('doc_id');
        $motivo_rechazo = Request::input('motivo_rechazo');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            if (strlen(trim($motivo_rechazo)) > 3) {
                $temp = SQLConnection::backendStoreProcedure('Imperium_Rechazar_Documento', array($doc_id, $motivo_rechazo, Session::get('usuario')->user_id), 'selectOne');

                /// Enviar el mail de rechazo : debo pasar el ID de contraparte que tiene asociado a LED
                if ($doc->contraparte > 0) {

                    /* 01/03/2021, se cambio al EmailController:
                    $eml = ImperiumEmailController::enviarMailImperium('DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, NULL, $doc_id);
                    */
                    $eml = EmailController::enviarMail('EMAIL-IMPE','DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, NULL, NULL, NULL, $doc_id);

                }

            }
            else {
                $rslt = 2;
                $msg = 'Por favor ingrese un texto consistente para el motivo de rechazo del documento.';        
            }
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }
    
    
        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }


    public static function verificarDocumentoParcialConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        $selected = Request::input('selected');
        $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');

        $seleccionados = sizeof(explode(',', $selected));
        $totales = sizeof($hijos);

        if($doc->doc_version > 0) {
            $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento_reemplazo', array($doc_id, $doc->doc_version), 'selectOne');
        }

        return view('/imperium/verificar_documento_parcial_confirm')->with(compact(['doc', 'selected', 'seleccionados', 'totales']));       
    }

    public static function verificarDocumentoParcial() {
        $rslt = 0;
        $msg = 'El documento ha sido verificado en forma parcial';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        $selected = Request::input('selected');
        $hijos = SQLConnection::backendStoreProcedure('Imperium_Datos_Documentos_Hijos', array($doc_id), 'select');        

        if (!empty($doc)) {
            if (!empty($selected)) {
                if ($doc->periodicidad == 'E' && empty($doc->fecha_vigencia)) {
                    $rslt = 3;
                    $msg = 'Antes de verificar parcial el documento debe indicar la fecha de vigencia del mismo.';    
                } 
                if ($rslt == 0) {
                    $faltantes = SQLConnection::backendStoreProcedure('Imperium_Verificar_Documento_Parcial', array($doc_id, $selected, Session::get('usuario')->user_id), 'selectOne');

                    /// Enviar el mail de aprobacion parcial : debo pasar el ID de contraparte que tiene asociado a LED
                    if ($doc->contraparte > 0) {
                        /* 01/03/2021, se cambio al EmailController:
                        $eml = ImperiumEmailController::enviarMailImperium('DOCUMENTO-APROBADO-PARCIAL', 'DOCUMENTO-APROBADO-PARCIAL-SUBJECT', $doc->contraparte, NULL, $doc_id, $faltantes->lista_faltantes);
                        */
                        $eml = EmailController::enviarMail('EMAIL-IMPE','DOCUMENTO-APROBADO-PARCIAL', 'DOCUMENTO-APROBADO-PARCIAL-SUBJECT', $doc->contraparte, NULL, NULL, NULL, $doc_id);

                    }

                }
            }
            else {
                $rslt = 2;
                $msg = 'Debe indicarse al menos un recurso/documento para realizar una aprobación parcial.';        
            }
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }


    public static function undoVerificarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        return view('/imperium/undo_verificar_documento_confirm')->with(compact(['doc']));       
    }

    public static function undoVerificarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido colocado en estado ingresado pendiente de verificar.';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            $temp = SQLConnection::backendStoreProcedure('Imperium_Undo_Verificar_Documento', array($doc_id, Session::get('usuario')->user_id), 'selectOne');
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }



    public static function undoRechazarDocumentoConfirm() {
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        return view('/imperium/undo_rechazar_documento_confirm')->with(compact(['doc']));       
    }

    public static function undoRechazarDocumento() {
        $rslt = 0;
        $msg = 'El documento ha sido colocado en estado ingresado pendiente de verificar.';
        $doc_id = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');

        if (!empty($doc)) {
            $temp = SQLConnection::backendStoreProcedure('Imperium_Undo_Rechazar_Documento', array($doc_id, Session::get('usuario')->user_id), 'selectOne');
        }
        else {
            $rslt = 1;
            $msg = 'Documento inexistente.';    
        }

        return json_encode( array('result' => $rslt, 'message' => $msg) );
    }

    /// test
    public static function notirechazo() {
        $doc_id = 4960350303;
        $doc = SQLConnection::backendStoreProcedure('Imperium_datos_documento', array($doc_id), 'selectOne');
        /* 01/03/2021, se cambio al EmailController:
        $eml = ImperiumEmailController::enviarMailImperium('DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, 'luis.prenafeta@gmail.com', $doc_id);
        */
        $eml = EmailController::enviarMail('EMAIL-IMPE','DOCUMENTO-RECHAZADO', 'DOCUMENTO-RECHAZADO-SUBJECT', $doc->contraparte, NULL, 'soporte@fidelitas.com.ar', NULL, $doc_id);        

    }

}