<?php

namespace App\Http\Controllers;

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

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

use App\Http\Controllers\EmailController;

class VerificadorDocNuevoController extends Controller {
    public static $usuarios;
    public static $monedas;

    // VISTA PRINCIPAL
    public static function vistaVerifDocumentos() {
        //---- SE DECIDE SI EL REQUEST ES PARA LOS DOCUMENTOS DE BBVA O NO
        if ($_SERVER['REDIRECT_URL'] == '/verifica-documentos-bbva-nuevo') {
            if (Session::exists('es_bbva')) {
                Session::forget('es_bbva');
                Session::put('es_bbva', '1');
            } else {
                Session::put('es_bbva', '1');
            }
            //----
            Session::put('es_bbva', '1');
            $docs = SQLConnection::backendStoreProcedure('LN_verificacion_docs_', array('queue', Session::get('usuario')->user_id, null, 1226057645), 'select');
        } else {
            if (Session::exists('es_bbva')) {
                Session::forget('es_bbva');
                Session::put('es_bbva', '0');
            } else {
                Session::put('es_bbva', '0');
            }
            $docs = SQLConnection::backendStoreProcedure('LN_verificacion_docs_', array('FACON_AGRUPADO', Session::get('usuario')->user_id, null, null, null, null, null, null, env('PLATAFORMA')), 'select');
        }
        //----
        $tiempo_actual = new \DateTime('now'); // FECHA ACTUAL
        // $clientes_permitidos = [7500717,1226057645,env('CLIENTES_TEST'),6086009,632095719,2400056,1310336827,9878630,5281581,9017721,1702664090,5546348,528397,431136419,861672084,2046807993,1530289645];
        //
        foreach ($docs as $key => $docu) {
            if ($docu->es_balance > 0) {
                if ($docu->estado == 'CARGA LED') {
                    $docu->color_estado = '#b042f4';
                    $docu->estado = 'PENDIENTE DE CARGA';
                } elseif ($docu->estado == 'ELIMINADO') {
                    $docu->color_estado = '#FF0000';
                } elseif ($docu->estado == 'PUBLICADO') {
                    $docu->color_estado = '#066b27';
                } elseif ($docu->estado == 'GRABADO PARCIAL') {
                    $docu->color_estado = '#0000FF';
                } elseif ($docu->estado == 'A VERIFICAR') {
                    $docu->color_estado = '#d38d13';
                }
            }
            // 
            $vencimiento = date_create_from_format('Y-m-d H:i:s', $docu->limite_carga_inicial);
            $ingresado = date_create_from_format('d/m/Y', $docu->ingresado_dmy);
            $docu->dias_creacion = date_diff($ingresado, $tiempo_actual)->days;
            $docu->dias_hasta_vencer = date_diff($tiempo_actual, $vencimiento)->days;
            //
            if ($tiempo_actual > $vencimiento) {
                $docu->vencida = 1;
            } else {
                $docu->vencida = 0;
            }
            //
            if (Session::get('informes_test_access')) {
                if ($docu->cliente != env('CLIENTES_TEST')) {
                    unset($docs[$key]);
                }
            } else {
                if ($docu->cliente == env('CLIENTES_TEST')) {
                    unset($docs[$key]);
                }
            }
        }
        $titulo_navbar = 'Documentos a verificar';
        return view('/verifica_doc_nuevo/vista_verifica_doc_nuevo')->with(compact(['docs', 'titulo_navbar']));
    }

    /* Función que devuelve la vista de verdocs de cada contraparte */
    public static function informesDocs() {
        $contraparte = $_POST['doc_contraparte'];
        $informe = $_POST['doc_data_informe'];
        $es_revisado = $_POST['doc_data_esrevisado'];
        $ruta = '/verifica-documentos-nuevo';
        $titulo_navbar = 'Documentación para producción de informes';
        //
        // $reports = SQLConnection::backendStoreProcedure('LN_informes', array('panel_control_reports', $contraparte, $informe), 'select');		
        $datos_informe = SQLConnection::backendStoreProcedure('IV_panel_reports', array('informe_by_id', Session::get('usuario')->user_id, null, null, null, $informe), 'selectOne');
        //
        $estadoTarea = Misc::NombreEstadosInforme($datos_informe->codigo_estado_informe);
        $integ_carga = $datos_informe->integ_carga;
        $integ_verif = $datos_informe->integ_verif;
        $integ_rech = $datos_informe->integ_rech;
        //
        $gestion = SQLConnection::backendStoreProcedure('LN_informes', array('datos_tarea_gestion', $contraparte, $informe), 'selectOne');
        $docs = DB::select('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
        $files = [];
        $cliente = $datos_informe->cliente;
        //
        if (!empty($docs)) {
            $cliente = !is_null($docs[0]->cliente) ? $docs[0]->cliente : '';
            //			
            $n = -1;
            foreach ($docs as $k => $doc) {
                if ($doc->estado_doc == 'N' || $doc->estado_doc == 'I' || $doc->estado_doc == 'R' || $doc->estado_doc == 'V') {
                    $n++;
                    if ($doc->es_balance == 1) {
                        $file_path = env('PATH_COMPARTIDO') . $doc->ruta_archivo;
                        $file_url = env('RUTA_COMPARTIDO') . $doc->ruta_archivo;
                    } else {
                        $file_path = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
                        $file_url = env('RUTA_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
                    }
                    $file_exists = file_exists($file_path);
                    //
                    $files[$n]['path'] = $file_path;
                    $files[$n]['url'] = $file_url;
                    $files[$n]['exists'] = $file_exists;
                }
            }
        }
        //		
        return view('/verifica_doc_nuevo/informe_docs_nuevo')->with(compact(['gestion', 'docs', 'files', 'es_revisado', 'integ_carga', 'integ_verif', 'integ_rech', 'cliente', 'ruta', 'titulo_navbar', 'datos_informe', 'estadoTarea']));
    }

    // SUBVISTA DEL BTN VERIFICAR (DOCUMENTO)
    public static function documentoVerificar() {
        $docid = Request::input('doc_id');
        $es_revisado = Request::input('es_revisado'); // DATO QUE DECIDE EL ESTADO DE REVISION DEL REGISTRO
        $temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('GENERATE', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
        $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        $tipo_persona = $doc->tipo_persona;
        $cuit = $doc->identificacion;
        $flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
        $integ_carga = Request::input('integridad_carga');
        $integ_rech = Request::input('integridad_rechazado');
        $integ_verif = Request::input('integridad_verificado');
        $ruta = '/verifica-documentos-nuevo';
        $titulo_navbar = 'Verificar Documento';
        //** Documento foto de Inquiro vitae
        $foto_perfil_url = NULL;
        if ($doc->es_foto_perfil > 0) {
            $busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', NULL, $doc->contraparte), 'selectOne');
            if (!empty($busqueda)) {
                $foto_perfil_url = env('RUTA_DOCUMENTOS_IV') . '/' . $busqueda->foto;
            }
        }
        //
        $secciones = [];
        //
        $hay_campos = false;
        $hay_archivo = false;
        foreach ($flds as $fld) {
            $hay_campos = !$hay_campos ? ($fld->tipo_campo != 'F' ? true : $hay_campos) : $hay_campos;
            $hay_archivo = !$hay_archivo ? ($fld->tipo_campo == 'F' ? true : $hay_archivo) : $hay_archivo;
        }
        //
        $data = [];
        //
        $formula_dep_econ = false;
        //
        foreach ($flds as $k => $fld) {
            if ($fld->tipo_campo == 'G') {
                $formula_dep_econ = (false === $formula_dep_econ) ? (($fld->aplica_formula_dep_econ > 0) ? true : false) : false;
                /* encabezados de la tabla */
                $c1 = SQLConnection::backendStoreProcedure('LN_campos_col_', array('search', $fld->campo, null, null, NULL, NULL, NULL, NULL), 'select');
                $cols = [];
                foreach ($c1 as $clm) {
                    $cols[] = $clm->etiqueta;
                }
                /* configuración de los campos y valores de la tabla */
                $c2 = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($fld->doc_id, $fld->seccion, $fld->campo), 'select');
                $valores = [];
                foreach ($c2 as $k1 => $valor) {
                    $valores[$valor->fila][$valor->col]['valor_texto'] = $valor->valor_texto;
                    $valores[$valor->fila][$valor->col]['valor_fecha'] = $valor->valor_fecha;
                    $valores[$valor->fila][$valor->col]['valor_fecha_str'] = $valor->valor_fecha_str;
                    $valores[$valor->fila][$valor->col]['valor_numerico'] = round($valor->valor_numerico, 2);
                    $valores[$valor->fila][$valor->col]['tipo_campo'] = $valor->tipo_campo;
                    $valores[$valor->fila][$valor->col]['longitud'] = $valor->longitud;
                    $valores[$valor->fila][$valor->col]['decimales'] = $valor->decimales;
                    //$valores[$valor->fila][$valor->col]['opciones'] = $valor->opciones;
                    if ($valor->tipo_campo == 'S' || $valor->tipo_campo == 'R' || $valor->tipo_campo == 'C') {
                        if (strlen($valor->opciones) > 0) {
                            $r = explode("^", $valor->opciones);
                            $txt = [];
                            $val = [];
                            if (sizeof($r) >= 2) {
                                $txt = explode("|", $r[0]);
                                $val = explode("|", $r[1]);
                            }
                            $valores[$valor->fila][$valor->col]['opciones']['txt'] = $txt;
                            $valores[$valor->fila][$valor->col]['opciones']['val'] = $val;
                        }
                    }
                }
                $fld->headers = $cols;
                $fld->values = $valores;
            } else {
                /* campo no tabla */
                if ($fld->tipo_campo == 'S' || $fld->tipo_campo == 'R' || $fld->tipo_campo == 'C') {
                    $valores = [];
                    if (strlen($fld->opciones) > 0) {
                        $r = explode("^", $fld->opciones);
                        $txt = [];
                        $val = [];
                        if (sizeof($r) >= 2) {
                            $txt = explode("|", $r[0]);
                            $val = explode("|", $r[1]);
                        }
                        $valores[] = $txt;
                        $valores[] = $val;
                    }
                    $fld->opciones = $valores;
                }
            }

            $data[$fld->titulo_seccion][] = $fld;

            if ($fld->titulo_seccion != '') {
                $secciones[$fld->titulo_seccion]['texto_bajada'] = $fld->texto_bajada;
                $secciones[$fld->titulo_seccion]['texto_pie'] = $fld->texto_pie;
            }

        }
        //
        $file_path = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
        $file_url = env('RUTA_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
        $file_exists = file_exists($file_path);
        $iva = '';
        if ($formula_dep_econ === true) {
            /* Si en el documento hay un campo donde debe aplicar la formula de dependencia económica, busco el campo de alícuota de iva */
            $iva = SQLConnection::backendStoreProcedure('LN_docs_valores', array($doc->contraparte, 'ALICUOTA-IVA', $doc->doc_id), 'selectOne');
        }

        $search_array = array('%inicio_vigencia_fecha%', '%fin_vigencia_fecha%', '%inicio_vigencia_periodo%', '%fin_vigencia_periodo%');
        $replace_array = array($doc->inicio_vigencia, $doc->fecha_vigencia, (NULL !== $doc->inicio_vigencia) ? substr($doc->inicio_vigencia, 3, 7) : NULL, (NULL !== $doc->fecha_vigencia) ? substr($doc->fecha_vigencia, 3, 7) : NULL);

        $paises = SQLConnection::backendStoreProcedure('backend_country', array('SELECCIONAR_ACTIVO'));
        $identificadores = SQLConnection::backendStoreProcedure('backend_obtener_identificadores_pais', array($doc->country_code), 'select');
        // Para registrar TAX ID y constitución de sociedades 
        $cargos = SQLConnection::backendStoreProcedure('obtener_Cargos', [], 'select');
        $relaciones = DB::select('select * from tipo_vinculaciones order by id_tipo_vinculacion', array());
        $campo_tabla = NULL;
        $columnas = NULL;
        $tabla = [];
        if ($doc->tipo_doc == env('LED_DOCUMENTO_DIRECTORIO') || $doc->tipo_doc == env('LED_DOCUMENTO_ACCIONISTAS') || $doc->tipo_doc == env('LED_DOCUMENTO_VINCULACIONES')) {
            $campo_tabla = SQLConnection::backendStoreProcedure('LN_tipos_doc_', array('buscar_campo_tabla', $doc->tipo_doc, null, null, null, null, null, null, null, null, null), 'selectOne');
            if (!empty($campo_tabla)) {
                $columnas = SQLConnection::backendStoreProcedure('LN_campos_col_', array('search', $campo_tabla->campo, null, null, null, null, null, null), 'select');
                if (!empty($columnas)) {
                    $datos_tabla = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($doc->doc_id, $campo_tabla->seccion, $campo_tabla->campo), 'select');
                    foreach ($datos_tabla as $x => $coldata) {
                        $tabla[$coldata->fila][$coldata->col] = !empty($coldata->valor_texto) ? $coldata->valor_texto : $coldata->valor_numerico;
                    }
                }
            }
        }
        $tipo_persona = strtolower($tipo_persona);
        if (isset($_POST['desde_valoracion_pendiente']) && $_POST['desde_valoracion_pendiente'] == '1') {
            $desde_valoracion_pendiente = $_POST['desde_valoracion_pendiente'];
            return view('/verifica_doc_nuevo/verifica_documentos_2023')->with(compact(['docid', 'doc', 'secciones', 'data', 'file_path', 'file_url', 'file_exists', 'hay_campos', 'hay_archivo', 'formula_dep_econ', 'iva', 'search_array', 'replace_array', 'foto_perfil_url', 'paises', 'identificadores', 'cargos', 'relaciones', 'campo_tabla', 'columnas', 'tabla', 'es_revisado', 'desde_valoracion_pendiente', 'integ_carga', 'integ_rech', 'integ_verif', 'titulo_navbar', 'ruta', 'tipo_persona', 'cuit', 'paises']));
        }
        return view('/verifica_doc_nuevo/verifica_documentos_2023')->with(compact(['docid', 'doc', 'secciones', 'data', 'file_path', 'file_url', 'file_exists', 'hay_campos', 'hay_archivo', 'formula_dep_econ', 'iva', 'search_array', 'replace_array', 'foto_perfil_url', 'paises', 'identificadores', 'cargos', 'relaciones', 'campo_tabla', 'columnas', 'tabla', 'es_revisado', 'integ_carga', 'integ_rech', 'integ_verif', 'titulo_navbar', 'ruta', 'tipo_persona', 'cuit', 'paises']));
    }

    public static function procesarSocio() {

        $cuit = Request::input('cuit');
        $cuit_persona = Request::input('cuit_persona');
        $desde = Request::input('desde') ?? null;
        $hasta = Request::input('hasta') ?? null;
        $cargo = Request::input('id_cargo');
        $id_socio = null;
        $tipo_persona = Request::input('tipo_persona');
        $ultimo = Request::input('ultimo');
        $user_id = Session::get("usuario")->user_id;
        $doc_id_led = Request::input('doc_id') ?? NULL;
        $socio = [];

        if (Request::input('cuit_persona') !== null && Request::input('cuit_persona') != '') {
            $socio['cuit'] = $cuit;
            $socio['cuit_persona'] = $cuit_persona;
            $socio['desde'] = $desde;
            $socio['hasta'] = $hasta;
            $socio['cargo'] = $cargo;
            $socio['id_socio'] = $id_socio;
            $socio['tipo_persona'] = $tipo_persona;
            $socio['ultimo'] = $ultimo;
            $socio['edicto'] = 0;
            $socio['archivo_edicto'] = '';
            $socio['contenido_archivo'] = '';
            $socio['provincia_boletin'] = '';
            $socio['fecha_publicacion'] = '';
            $socio['user_id'] = $user_id;
            $socio['id_padron_empresa'] = NULL;
            $socio['id_padron_socio'] = NULL;
            $socio['id_edictos_is'] = NULL;
            $socio['doc_id_led'] = $doc_id_led;
            $socio['doc_id_imperium'] = NULL;    
            $socio = Misc::convertirStringsVaciosEnNull($socio);

            //Si es contrapartes, lo ponemos en la tabla queue	      
            //$insert_queue = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert',NULL,NULL,$socio["cuit"]), 'selectOne');
            //$insert_queue = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert',NULL,NULL,$socio["cuit_persona"]), 'selectOne');
            $socio = SQLConnection::backendStoreProcedure('backend_procesar_socio', array_values($socio), true);

            return json_encode(array('procesado' => (isset($socio) && isset($socio->id_socio)) ? true : false, 'id_socio' => $socio->id_socio ?? null));
        } else {
            return json_encode(array('procesado' => false, 'id_socio' => $socio->id_socio ?? null));
        }
    }

    // SUBVISTA DEL BTN VERIFICAR (BALANCE)
    public static function balancesVerificar() {

        $docid = Request::input('doc_id');
        $ruta = '/verifica-documentos-nuevo';
        $titulo_navbar = 'Verificar balance';

        $bal = SQLConnection::backendStoreProcedure('LN_balances_busqueda', array($docid), 'selectOne');
        $token_por_secciones = Misc::obtenerTokenSeccion('contables');

        $user_id = Session::get("usuario")->user_id;
        $balanceid = SQLConnection::backendStoreProcedure('backend_balances_contables', array($bal->id_balance, null, null, null, null, $user_id), "selectOne");

        $tarea = SQLConnection::backendStoreProcedure('LN_Buscar_tareas', array($bal->id_balance), 'selectOne');
        $pdf_url = (null != $bal->ruta_archivo) ? env('RUTA_COMPARTIDO') . $bal->ruta_archivo : null;
        //$balances = SQLConnection::backendStoreProcedure('backend_balances_contables', array(null, $bal->identificacion, 5, 1, null));
        $balances = SQLConnection::backendStoreProcedure('backend_balances_contables', array(null, $bal->identificacion, 5, 1, null, $user_id));

        self::$usuarios = SQLConnection::backendStoreProcedure('obtener_usuarios_tareas', array());
        $usuarios = self::$usuarios;

        $pub = 0;
        foreach ($balances as $k => $balance) {
            if ($balance->estado == 'PUBLICADO') {
                $pub++;
            }
        }
        if ($bal->estado == 'CARGA LED') {
            $bal->color_estado = '#b042f4';
            $bal->estado = 'PENDIENTE DE CARGA';
        } elseif ($bal->estado == 'ELIMINADO') {
            $bal->color_estado = '#FF0000';
        } elseif ($bal->estado == 'PUBLICADO') {
            $bal->color_estado = '#066b27';
        } elseif ($bal->estado == 'GRABADO PARCIAL') {
            $bal->color_estado = '#0000FF';
        } elseif ($bal->estado == 'A VERIFICAR') {
            $bal->color_estado = '#d38d13';
        }
        return view('/verifica_doc_nuevo/verifica_balances')->with(compact(['docid', 'bal', 'pdf_url', 'balances', 'balanceid', 'pub', 'usuarios', 'tarea', 'user_id', 'token_por_secciones', 'titulo_navbar', 'ruta']));
    }

    public static function grabaBalancesVerificacion() {
        $docid = Request::input('doc_id');
        $doc = SQLConnection::backendStoreProcedure('LN_balances_busqueda', array($docid), 'selectOne');
        $doc_data = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        /* $doc_data = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
              $report_data = NULL;
              if ( !is_null($doc_data) ){
                  $report_data = SQLConnection::backendStoreProcedure('LN_demo_', array('SELECCIONAR_INFORME',$doc_data->contraparte,NULL,null,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,$doc_data->gestion), 'selectOne');		
              } */
        //
        if (!empty($doc)) {
            $temp = SQLConnection::backendStoreProcedure('LN_balances_verificar', array($docid, Session::get('usuario')->user_id), 'selectOne');

            //if ( !is_null($doc_data) && !is_null($report_data) ){
            // recalcula la integridad
            if (!is_null($doc_data)) {
                Misc::recalcularIntegridadGestion($doc_data->contraparte, $doc_data->gestion);
            }
            // self::integridadDocStore($doc_data,1,$report_data->integ_carga,$report_data->integ_verif,$report_data->integ_rech);
            //}

            /* Chequeo de iniciar la tarea de análisis de balances en caso de existir un report activo en gestión en producción y todos los documentos balance verificados / publicados */
            $temp = SQLConnection::backendStoreProcedure('LN_informes', array('check_tarea_balances', $doc->contraparte, NULL, Session::get('usuario')->user_id), 'selectOne');

            /* Chequeo de finalización de carga en caso de existir un report activo en gestión en producción */
            $temp = SQLConnection::backendStoreProcedure('LN_informes', array('check_docs_ok', $doc->contraparte, NULL, Session::get('usuario')->user_id), 'selectOne');

        }
        //return redirect('/led/led-documentos');
        return redirect('/verifica-documentos-nuevo');

    }

    public static function grabaBalancesRechazo() {
        $docid = Request::input('doc_id');
        $texto = Request::input('texto_rechazo');
        $doc = SQLConnection::backendStoreProcedure('LN_balances_busqueda', array($docid), 'selectOne');
        $doc_data = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        /*
              $report_data = NULL;
              if ( !is_null($doc_data) ){
                  $report_data = SQLConnection::backendStoreProcedure('LN_demo_', array('SELECCIONAR_INFORME',$doc_data->contraparte,NULL,null,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,$doc_data->gestion), 'selectOne');		
              } */
        //
        if (!empty($doc)) {
            $temp = SQLConnection::backendStoreProcedure('LN_balances_rechazar', array($docid, $texto, Session::get('usuario')->user_id), 'selectOne');
            /* 26/02/2021 Se cambio por el nuevo Controller 
                     $temp = LEDEmailController::enviarMailLED('DOCUMENTACION-RECHAZADA', 'DOCUMENTACION-RECHAZADA-SUBJECT', $doc->contraparte, NULL, NULL, NULL, $docid);
                     */
            if (!is_null($doc_data)) {
                Misc::recalcularIntegridadGestion($doc_data->contraparte, $doc_data->gestion);
            }
            //if ( !is_null($doc_data) && !is_null($report_data) ){
            // recalcula la integridad
            // self::integridadDocStore($doc_data,2,$report_data->integ_carga,$report_data->integ_verif,$report_data->integ_rech);
            // }

            $temp = EmailController::enviarMail('EMAIL-LED', 'DOCUMENTACION-RECHAZADA', 'DOCUMENTACION-RECHAZADA-SUBJECT', $doc->contraparte, NULL, NULL, NULL, $docid);
        }

        //return redirect('/led/led-documentos');
        return redirect('/verifica-documentos-nuevo');
    }

    public static function grabaBalanceReemplazo() {
        $docid = Request::input('doc_id');
        $idbal = Request::input('id_balance');

        $doc = SQLConnection::backendStoreProcedure('LN_balances_busqueda', array($docid), 'selectOne');
        if (!empty($doc)) {
            $temp = SQLConnection::backendStoreProcedure('LN_balances_reemplazar', array($docid, $idbal, Session::get('usuario')->user_id), 'selectOne');

            /* Chequeo de iniciar la tarea de análisis de balances en caso de existir un report activo en gestión en producción y todos los documentos balance verificados / publicados */
            $temp = SQLConnection::backendStoreProcedure('LN_informes', array('check_tarea_balances', $doc->contraparte, NULL, Session::get('usuario')->user_id), 'selectOne');

            /* Chequeo de finalización de carga en caso de existir un report activo en gestión en producción */
            $temp = SQLConnection::backendStoreProcedure('LN_informes', array('check_docs_ok', $doc->contraparte, NULL, Session::get('usuario')->user_id), 'selectOne');

        }

        //return redirect('/led/led-documentos');
        return redirect('/verifica-documentos-nuevo');
    }

    public static function grabaBalancesEliminarDisp() {
        $id_balance = Request::Input('id_balance');
        $user_id = Session::get("usuario")->user_id;
        $temp = SQLConnection::backendStoreProcedure('backend_eliminar_activar_balances', array($id_balance, '0', $user_id), 'selectOne');

        //return redirect('/led/led-documentos');
        return redirect('/verifica-documentos-nuevo');
    }

    public static function documentoActualizarDir() {
        $contrap = Request::input('contraparte');
        $doc = Request::input('doc_id');
        $fecha_acta = Request::input('fecha_acta');
        $ultimo = !empty(Request::input('ultimo_directorio')) ? Request::input('ultimo_directorio') : 0;

        $dirdata = array($contrap, $doc, $fecha_acta, $ultimo);
        for ($x = 1; $x <= 5; $x++) {
            $nombre = !empty(Request::input('nombre_' . $x)) ? Request::input('nombre_' . $x) : NULL;
            $numero = !empty(Request::input('numero_' . $x)) ? preg_replace('/[^a-zA-Z0-9]/', '', Request::input('numero_' . $x)) : NULL;
            $ident = ($nombre != NULL && $numero != NULL) ? Request::input('ident_' . $x) : NULL;
            $cargo = ($nombre != NULL && $numero != NULL) ? Request::input('cargo_' . $x) : NULL;

            $dirdata[] = $nombre;
            $dirdata[] = $ident;
            $dirdata[] = $numero;
            $dirdata[] = $cargo;

        }
        $temp = SQLConnection::backendStoreProcedure('LN_doc_actualizar_directorio', $dirdata, 'selectOne');

        return json_encode(array('result' => 0, 'message' => 'Sin error'));
    }

    public static function documentoActualizar() {
		$id = Request::input('contraparte');
		$docid = Request::input('doc_id');
		$es_reporte = Request::input('es_reporte') ?? 0;

		$doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
		$flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
		foreach ($flds as $h => $fld) {
			/* Campo NO tabla, ni acrhivo ni texto fijo */
			if ($fld->tipo_campo != 'G' and $fld->tipo_campo != 'F' and $fld->tipo_campo != 'L') {
				// Analizamos por separado campos texto, numérico, fecha y select de opciones de los radio y checkboxes o si/no
				if($fld->tipo_campo == 'N' OR $fld->tipo_campo == 'T' OR $fld->tipo_campo == 'D' OR $fld->tipo_campo == 'M' OR $fld->tipo_campo == 'S') {					
					$vf = ($fld->tipo_campo == 'D') ? ( null != Request::input($fld->FORM_NAME) ? date_create_from_format('d/m/Y', Request::input($fld->FORM_NAME)) : null ) : null;
					$vt = ($fld->tipo_campo == 'T' OR $fld->tipo_campo == 'M' OR $fld->tipo_campo == 'S') ? Request::input($fld->FORM_NAME) : null;
					$vn = ($fld->tipo_campo == 'N') ? str_replace(",", ".", Request::input($fld->FORM_NAME)) : null;
				}				
				if ($fld->tipo_campo == 'B') {
					$vf = null;
					$vt = null;
					$vn = null;
					if(null !== Request::input($fld->FORM_NAME)) {
						$vn = Request::input($fld->FORM_NAME);
					}
				}				
				if ($fld->tipo_campo == 'R') {
					$vf = null;
					$vt = null;
					$vn = null;
					if(null !== Request::input($fld->FORM_NAME)) {
						$vt = Request::input($fld->FORM_NAME);
					}
				}
				if ($fld->tipo_campo == 'C') {
					$vf = null;
					$vt = null;
					$vn = null;
					if(null !== Request::input($fld->FORM_NAME)) {
						$vt = implode(",", Request::input($fld->FORM_NAME));
					}
				}
				$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $docid, $fld->seccion, $fld->campo, $vf, $vt, $vn, null, null, Session::get('usuario')->user_id), 'selectOne');
			}
			else {
				/* Campo tabla */
				if ($fld->tipo_campo == 'G') {
					for($c = 1; $c <= $fld->columnas; $c++) {
						$espec = SQLConnection::backendStoreProcedure('LN_campos_col_', array('select', $fld->campo, $c, null, null, null, null, null), 'selectOne');
						for($f = 1; $f <= $fld->filas; $f++){
							$fname = 'campo_'.$fld->seccion.'_'.$fld->campo.'_'.$f.'_'.$c;
							if(null !== Request::input($fname)) {
								// Analizamos por separado campos texto, numérico, fecha y select de opciones de los radio y checkboxes o si/no
								if($espec->tipo_campo == 'N' OR $espec->tipo_campo == 'T' OR $espec->tipo_campo == 'D' OR $espec->tipo_campo == 'M' OR $espec->tipo_campo == 'S') {				
									$vf = ($espec->tipo_campo == 'D') ? ( null != Request::input($fname) ? date_create_from_format('d/m/Y', Request::input($fname)) : null ) : null;
									$vt = ($espec->tipo_campo == 'T' OR $espec->tipo_campo == 'M' OR $espec->tipo_campo == 'S') ? Request::input($fname) : null;
									$vn = ($espec->tipo_campo == 'N') ? str_replace(",", ".", Request::input($fname)) : null;
								}
								if($espec->tipo_campo == 'B') {
									$vf = null;
									$vt = null;
									$vn = null;
									if(null !== Request::input($fname)) {
										$vn = Request::input($fname);
									}
								}
								if ($espec->tipo_campo == 'R') {
									$vf = null;
									$vt = null;
									$vn = null;
									if(null !== Request::input($fname)) {
										$vt = Request::input($fname);
									}
								}
								if ($espec->tipo_campo == 'C') {
									$vf = null;
									$vt = null;
									$vn = null;
									if(null !== Request::input($fname)) {
										$vt = implode(",", Request::input($fname));
									}
								}
								$temp = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('update', $docid, $fld->seccion, $fld->campo, $vf, $vt, $vn, $f, $c, Session::get('usuario')->user_id), 'selectOne');
							}
						}
					}
				}
			}	
		}
		if ($es_reporte == 1) {
			$temp = SQLConnection::backendStoreProcedure('LN_docs_', array('VERIFICA_BACKEND', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, Session::get('usuario')->user_id), 'selectOne');
		}
	}
    
    public static function busquedaPadron($buscar=null) {
        $data = [];
        if ( is_null($buscar) ) {
            $buscar = Request::input('buscarPadron');
        }
        if (is_numeric($buscar)) {
            $razon_social = '';
            $tax_id = $buscar;
        } else {
            $razon_social = $buscar;
            $tax_id = '';
        }
        $cargo = Request::input('cargo') ?? null;
        $pais = Request::input('pais') ?? 'AR';
        $pais = strtoupper($pais);
        if (substr($pais, 0, 3) == 'ARG') {
            $pais = 'AR';
        } else {
            $pais = NULL;
        }
        $tipo_identificacion = '';
        $tipo_persona = 'F';
        $sexo = '';
        /*
              $data = Misc::CURLCall(env('URL_BASEWEB').'/api/v1/busqueda-padron',http_build_query(['apikey'=>env('APIKEY_API_BRIEF'),'identificacion'=>$tax_id,'pais_busqueda'=>$pais,'razon_social'=>$razon_social,'pais'=>$pais,'tipo_identificacion'=>$tipo_identificacion,'tipo_persona'=>$tipo_persona,'sexo'=>$sexo])); // Llamada al api
              $insert_data = json_decode($data);
              */
        /* Cambiamos: que busque todos, los de AR y de OTRO 
              (porque nos pasaba de personas con nacionalidad != ARG, pero que lo que tenia era un CUIT (porque el identificador si es de Argentina))
              */
        $insert_data = [];
        $pais = 'AR';


        $data = Misc::CURLCall(env('API_BUSCAR_PADRON'), http_build_query(['apikey' => env('APIKEY_BUSCAR_PADRON'), 'identificacion' => $tax_id, 'pais_busqueda' => $pais, 'razon_social' => $razon_social, 'pais' => $pais, 'tipo_identificacion' => $tipo_identificacion, 'tipo_persona' => $tipo_persona, 'sexo' => $sexo])); // Llamada al api
        $insert_data1 = json_decode($data);
        
        $pais = 'OTRO';
        $data = Misc::CURLCall(env('API_BUSCAR_PADRON'), http_build_query(['apikey' => env('APIKEY_BUSCAR_PADRON'), 'identificacion' => $tax_id, 'pais_busqueda' => $pais, 'razon_social' => $razon_social, 'pais' => $pais, 'tipo_identificacion' => $tipo_identificacion, 'tipo_persona' => $tipo_persona, 'sexo' => $sexo])); // Llamada al api
        $insert_data2 = json_decode($data);

        $insert_data = array_merge($insert_data1->Response, $insert_data2->Response);
       


        /*  */

        $response = [];

        /*if ( isset($insert_data->Response) && !empty($insert_data->Response) ){
                  $response = $insert_data->Response;*/
        if (isset($insert_data) && !empty($insert_data)) {
            $response = $insert_data;
            // primero elimina los registros que no corresponden
            foreach ($response as $k => $reg) {
                $response[$k]->cargo = $cargo;
                /* 26/07/2023: Dejamos que muestre todos los encontrados (porque nos pasaba de personas con nacionalidad != ARG, pero que lo que tenia era un CUIT (porque el identificador si es de Argentina))
                            if ( $reg->tipo_persona !== 'F' && $reg->tipo_persona !== 'FISICA'){
                                unset($response[$k]);
                            }
                            /*
                            if ( $reg->country_code == 'AR' && $pais !== 'AR' ) {
                                unset($response[$k]);
                            }
                            if ( $reg->country_code !== 'AR' && $pais == 'AR' ) {
                                unset($response[$k]);
                            }
                            if ( $reg->country_code == 'AR' && !($reg->identificador == 'CUIT' || $reg->identificador == 'CUIL')) {
                                unset($response[$k]);
                            }
                            if ( $reg->country_code !== 'AR' && ($reg->identificador == 'CUIT' || $reg->identificador == 'CUIL')) {
                                unset($response[$k]);
                            }
                            */
            }
        }
        return json_encode($response);
    }

    public static function busquedaPadronGeneral($buscar = null) {

        $nombre = Request::input('nombre');
        $nombre = ($nombre === '' || $nombre === null) ? null : htmlspecialchars(strip_tags(trim($nombre)));

        $apellido = Request::input('apellido');
        $apellido = ($apellido === '' || $apellido === null) ? null : htmlspecialchars(strip_tags(trim($apellido)));

        $provincia = Request::input('provincia');
        $provincia = ($provincia === '' || $provincia === null) ? null : htmlspecialchars(strip_tags(trim($provincia)));

        $genero = Request::input('genero');
        $genero = ($genero === '' || $genero === null) ? null : htmlspecialchars(strip_tags(trim($genero)));

        $razon_social = Request::input('razon_social');
        $razon_social = ($razon_social === '' || $razon_social === null) ? null : htmlspecialchars(strip_tags(trim($razon_social)));

        $tipo_persona = Request::input('tipo_persona');
        $tipo_persona = ($tipo_persona === '' || $tipo_persona === null) ? null : htmlspecialchars(strip_tags(trim($tipo_persona)));

        $pais = Request::input('pais');
        $pais = ($pais === '' || $pais === null) ? null : htmlspecialchars(strip_tags(trim($pais)));
        
        $fullCO = Request::input('fullCO');
        $fullCO = ($fullCO === '' || $fullCO === null) ? null : htmlspecialchars(strip_tags(trim($fullCO)));
        
        $codigo_postal = Request::input('localidad');
        $codigo_postal = ($codigo_postal === '' || $codigo_postal === null) ? null : htmlspecialchars(strip_tags(trim($codigo_postal)));
        

        if ($tipo_persona == "J") {
            $edadMin = null;
            $edadMax = null;
            $apellido = $razon_social;
        } else {
            $edadMin = Request::input('edadMin');
            $edadMin = ($edadMin === '' || $edadMin === null) ? null : filter_var($edadMin, FILTER_SANITIZE_NUMBER_INT);
        
            $edadMax = Request::input('edadMax');
            $edadMax = ($edadMax === '' || $edadMax === null) ? null : filter_var($edadMax, FILTER_SANITIZE_NUMBER_INT);
        }

        //dd($tipo_persona,NULL,$razon_social,$apellido, $nombre,$genero,$provincia,$edadMin,$edadMax,30);
        // $results = SQLConnection::backendStoreProcedure('api_padrones_busqueda_avanzada', array($tipo_persona,NULL,$razon_social,$apellido, $nombre,$genero,$provincia,$edadMin,$edadMax,30));
        $country_code = Request::input('country_code') ?? null;
        $fallecidos = Request::input('fallecidos') ?? null;
        // $results = SQLConnection::backendStoreProcedure('buscador_general_padron', array('BUSCADOR',$tipo_persona,$razon_social,$country_code, $provincia,$apellido,$nombre,$genero,$edadMin,$edadMax,$fallecidos), 'select'); 
        $results = SQLConnection::backendStoreProcedure('buscador_paises_padron', array('BUSCADOR', $tipo_persona, $fullCO,$pais, $provincia, $apellido, $nombre, $genero, $edadMin, $edadMax, $fallecidos, $codigo_postal));
        //$results = SQLConnection::backendStoreProcedure('UNICO_buscador_padron', array($tipo_persona,NULL,$razon_social,$apellido, $nombre,$genero,$provincia,$edadMin,$edadMax));

        
       // dd($results);
        if (empty($results) || is_string($results)) {
            return json_encode(['error' => 'No se encontraron resultados o hubo un error']);
        }

        if (!is_array($results)) {
            $results = [$results]; // Convierte el resultado en un array
        }
        foreach ($results as $result) {
            $response[] = [
                'nombre_persona' => $result->nombre_persona, // Nombre completo
                'identificacion' => $result->identificacion, // CUIT/CUIL/DNI
                'identificador' => $result->identificador,  // Tipo de identificador (CUIT, CUIL, DNI)
                'id_padron' => $result-> id_padron, 
                'country_code' => $result->country_code,     // Código de país
                'localidad' => $result->localidad ?? null,           // Localidad
                'provincia' => $result->provincia ?? null,           // Provincia
                'domicilios' => $result->domicilios,         // Domicilios (separados por punto y coma)
                'fecha_nacimiento' =>  $result->fecha_nacimiento,
                'fecha_defuncion' => $result->fecha_defuncion ?? null// Fecha de defunción (si aplica)
            ];
        }
    
        return json_encode($response);
    }

    public static function procesarSocioFinalizar() {

        $cuit = Request::input('cuit');
        $ids_socios = Request::input('ids_socios');
        $ids = (is_array($ids_socios) == 1) ? implode(',', $ids_socios) : $ids_socios;
        $user_id = Session::get("usuario")->user_id;
        $socios = [];

        //Si es contrapartes, lo ponemos en la tabla queue	      
        $insert_queue = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, NULL, $cuit), 'selectOne');
        $socio = SQLConnection::backendStoreProcedure('backend_procesar_socio_finalizar', array($cuit, $ids, $user_id), true);

        return json_encode(array('procesado' => (isset($socio) && isset($socio->procesado)) ? true : false));
    }

    // FUNCION QUE DEVUELVE EL MODAL DE RECHAZO O VERIFICACION DEL DOCUMENTO
    public static function documentoVerificarRechazarConfirm() {
        if (isset($_POST['accion_estado_doc']) && ($_POST['accion_estado_doc'] == 'verificar' || $_POST['accion_estado_doc'] == 'rechazar')) {
            $docid = Request::input('doc_id');
            $integ_carga = Request::input('integ_carga');
            $integ_verif = Request::input('integ_verif');
            $integ_rech = Request::input('integ_rech');
            $doc_siguiente = Request::input('doc_siguiente');
            $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
            //
            $estado_accion = $_POST['accion_estado_doc'];
            $contraparte = $doc->contraparte;
            $busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', NULL, $contraparte), 'selectOne');
            //
            switch ($estado_accion) {
                case 'verificar':
                    if ($doc_siguiente == 0) {
                        //
                        $informe = '';
                        if (!empty($busqueda)) {
                            $informe = $busqueda->informe;
                        }
                        // 
                        $vista = \View::make('/verifica_doc_nuevo/modal_verificar_documento')->with(compact(['doc', 'doc_siguiente', 'contraparte', 'informe', 'integ_carga', 'integ_verif', 'integ_rech']))->render();
                        break;
                    } else {
                        $vista = \View::make('/verifica_doc_nuevo/modal_verificar_documento')->with(compact(['doc', 'doc_siguiente', 'integ_carga', 'integ_verif', 'integ_rech']))->render();
                        break;
                    }
                case 'rechazar':
                    $vista = \View::make('/verifica_doc_nuevo/modal_rechazar_documento')->with(compact(['doc', 'doc_siguiente', 'integ_carga', 'integ_verif', 'integ_rech']))->render();
                    break;
                default:
                    return 0;
                    break;
            }
            //
            return json_encode($vista);
        }
        //return json_encode($doc);
        // return view('/led/led_documento_verificar_confirm')->with(compact(['doc']));
    }

    // FUNCION QUE CAMBIA EL ESTADO DEL DOCUMENTO A APROBADO
    public static function grabaDocumentoVerificacion() {
        $docid = Request::input('doc_id');
        $integ_carga = Request::input('integ_carga');
        $integ_verif = Request::input('integ_verif');
        $integ_rech = Request::input('integ_rech');
        $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        $dependencias_docs = SQLConnection::backendStoreProcedure('LN_docs_AGB', array('SELECT', $docid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
        if (empty($dependencias_docs) || (is_array($dependencias_docs) && count($dependencias_docs) == 1)) {
            // ENTRA SI NO TIENE DOCUMENTOS HIJOS
            $temp = SQLConnection::backendStoreProcedure('LN_docs_', array('VERIFICA_BACKEND', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, Session::get('usuario')->user_id), 'selectOne');
            // self::integridadDocStore($doc,1,$integ_carga,$integ_verif,$integ_rech);
            // 
            Misc::recalcularIntegridadGestion($doc->contraparte, $doc->gestion);
            SQLConnection::logTrazabilidad('Se verificó el documento ' . $doc->nombre_tipo_doc, 'VERIF_DOC', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $doc->cliente, $doc->contraparte, $docid);
            if ($doc->tipo_doc == env('DOC_ID_EXPERIENCIA_LABORAL')) {
                // self::cargarDocReferencia($doc->doc_id,$doc->doc_id_refe);  // LN_docs_ DEBERIA TRAER EL DOC DE REFE
            }
        } else {
            // ENTRA SI TIENE DOCUMENTOS HIJOS
            foreach ($dependencias_docs as $docs) {
                if ($docs->estado_doc != 'V') {
                    $temp = SQLConnection::backendStoreProcedure('LN_docs_', array('VERIFICA_BACKEND', $docs->doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, Session::get('usuario')->user_id), 'selectOne');
                    // self::integridadDocStore($doc,1,$integ_carga,$integ_verif,$integ_rech);
                    Misc::recalcularIntegridadGestion($doc->contraparte, $doc->gestion);
                    // 
                    SQLConnection::logTrazabilidad('Se verificó documento ' . $doc->nombre_tipo_doc, 'VERIF_DOC', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $docs->cliente, $docs->contraparte, $docs->doc_id);
                    if ($docs->tipo_doc == env('DOC_ID_PERFIL_ACADEMICO_UNIVERSITARIO')) {
                        // self::cargarDocReferencia($doc->doc_id,$doc->doc_id_refe);  // LN_docs_ DEBERIA TRAER EL DOC DE REFE
                    }
                }
            }
        }
        // $temp = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Documento aprobado: ' . $doc->nombre_tipo_doc, $doc->cliente, 'APRUEBA_DOCUMENTO','BACK', $doc->contraparte,Session::get('usuario')->user_id,$docid,$doc->servicio_contratado), 'selectOne'); // Trazabilidad vieja
        $temp = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, $doc->contraparte), 'selectOne');

        /* Chequeo de finalización de carga en caso de existir un report activo en gestión en producción */
        $temp = SQLConnection::backendStoreProcedure('LN_informes', array('check_docs_ok', $doc->contraparte, NULL, Session::get('usuario')->user_id), 'selectOne');
    }

    /* Función que graba la finalización de la gestión */
    public static function informesFinalizarGestion() {
        $contraparte = Request::input('contraparte');
        $informe = Request::input('informe');
        $integ_carga = Request::input('integridad-carga');
        $integ_verif = Request::input('integridad-verificado');
        $integ_rech = Request::input('integridad-rechazado');
        $cliente = Request::input('cliente');
        $gestion = Request::input('gestion');
        $report_data = SQLConnection::backendStoreProcedure('LN_demo_', array('SELECCIONAR_INFORME', $contraparte, $cliente, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, $informe, $gestion), 'selectOne');
        $producto = $report_data->producto;
        $fin_gestion_integridad = SQLConnection::backendStoreProcedure('LN_demo_', array('UPDATE', $contraparte, $cliente, $producto, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, $informe, $gestion, null, null, null, null, $integ_carga, $integ_verif, $integ_rech, 1), 'selectOne');
        $temp = SQLConnection::backendStoreProcedure('LN_informes', array('finalizar_gestion_informe', $contraparte, $informe), 'selectOne');
        // TRAZABILIDAD EN FINALIZAR GESTION
        SQLConnection::logTrazabilidad('Se forzo finalizar la gestión: ' . $gestion, 'FIN_GESTION', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $cliente, $contraparte);

        return redirect('/verifica-documentos-nuevo');
    }

    // FUNCION QUE CAMBIA EL ESTADO DEL DOCUMENTO A RECHAZADO
    public static function grabaDocumentoRechazo() {
        $docid = Request::input('doc_id');
        $integ_carga = Request::input('integ_carga');
        $integ_verif = Request::input('integ_verif');
        $integ_rech = Request::input('integ_rech');
        //
        $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        $dependencias_docs = SQLConnection::backendStoreProcedure('LN_docs_AGB', array('SELECT', $docid, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
        //
        if (empty($dependencias_docs) || (is_array($dependencias_docs) && count($dependencias_docs) == 1)) {
            // self::integridadDocStore($doc,2,$integ_carga,$integ_verif,$integ_rech);
            $temp = SQLConnection::backendStoreProcedure('LN_docs_', array('RECHAZADO', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, Request::input('texto_rechazo'), NULL, null, Session::get('usuario')->user_id), 'selectOne');
            Misc::recalcularIntegridadGestion($doc->contraparte, $doc->gestion);
            // 
            SQLConnection::logTrazabilidad('Se rechazó documento ' . $doc->nombre_tipo_doc, 'RECHAZO_DOC', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $doc->cliente, $doc->contraparte, $docid);
        } else {
            foreach ($dependencias_docs as $docs) {
                if ($doc->estado_doc != 'R') {
                    // self::integridadDocStore($doc,2,$integ_carga,$integ_verif,$integ_rech);
                    $temp = SQLConnection::backendStoreProcedure('LN_docs_', array('RECHAZADO', $docs->doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, Request::input('texto_rechazo'), NULL, null, Session::get('usuario')->user_id), 'selectOne');
                    Misc::recalcularIntegridadGestion($doc->contraparte, $doc->gestion);
                    // 
                    SQLConnection::logTrazabilidad('Se rechazó documento ' . $doc->nombre_tipo_doc, 'RECHAZO_DOC', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $docs->cliente, $docs->contraparte, $docs->doc_id);
                }
            }
        }
        //
        //$temp = SQLConnection::backendStoreProcedure('LN_docs_', array('RECHAZADO', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, Request::input('texto_rechazo'), NULL, null, Session::get('usuario')->user_id), 'selectOne');
        // $temp = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Documento rechazado: ' . $doc->nombre_tipo_doc, $doc->cliente, 'RECHAZA_DOCUMENTO','BACK', $doc->contraparte,Session::get('usuario')->user_id,$docid,$doc->servicio_contratado), 'selectOne');
        $temp = EmailController::enviarMail('EMAIL-LED', 'DOCUMENTACION-RECHAZADA', 'DOCUMENTACION-RECHAZADA-SUBJECT', $doc->contraparte, NULL, NULL, NULL, $docid);
        //
        $temp = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, $doc->contraparte), 'selectOne');
        //
        if (Session::get('es_bbva') == '1') {
            return redirect('/verifica-documentos-bbva-nuevo');
        } else {
            return redirect('/verifica-documentos-nuevo');
        }

    }

    // VISTA INICIAL BBVA DOCUMENTOS
    public static function bbvaInicio() {
        if (Session::exists('es_bbva')) {
            Session::forget('es_bbva');
            Session::put('es_bbva', '1');
        } else {
            Session::put('es_bbva', '1');
        }
        //----
        Session::put('es_bbva', '1');
        if (Session::get('usuario')->user_id == '793639331') {
            $docs = SQLConnection::backendStoreProcedure('LN_verificacion_docs_', array('queue', '44240542', null, 1226057645), 'select');
        } else {
            $docs = SQLConnection::backendStoreProcedure('LN_verificacion_docs_', array('queue', Session::get('usuario')->user_id, null, 1226057645), 'select');
        }

        foreach ($docs as $docu) {
            if ($docu->es_balance > 0) {
                if ($docu->estado == 'CARGA LED') {
                    $docu->color_estado = '#b042f4';
                    $docu->estado = 'PENDIENTE DE CARGA';
                } elseif ($docu->estado == 'ELIMINADO') {
                    $docu->color_estado = '#FF0000';
                } elseif ($docu->estado == 'PUBLICADO') {
                    $docu->color_estado = '#066b27';
                } elseif ($docu->estado == 'GRABADO PARCIAL') {
                    $docu->color_estado = '#0000FF';
                } elseif ($docu->estado == 'A VERIFICAR') {
                    $docu->color_estado = '#d38d13';
                }
            }
        }
        return view('/verifica_doc_nuevo/doc_bbva/vista_inicio_bbva_docs')->with(compact(['docs']));
    }

    /* Función que devuelve el modal corroborando que finalizará la gestión */
    public static function informesNuevoFinGestion() {
        $contraparte = Request::input('contraparte');
        $informe = Request::input('informe');
        $integ_carga = Request::input('integridad-carga');
        $integ_verif = Request::input('integridad-verificado');
        $integ_rech = Request::input('integridad-rechazado');
        $cliente = Request::input('cliente');
        $report = SQLConnection::backendStoreProcedure('LN_informes', array('panel_control_reports', $contraparte, $informe), 'selectOne');
        $producto = SQLConnection::backendStoreProcedure('LN_demo_', array('reports', $contraparte, $cliente), 'selectOne');
        $producto = $producto->producto;
        return view('/verifica_doc_nuevo/modal_informe_fin_gestion')->with(compact(['report', 'integ_carga', 'integ_verif', 'integ_rech', 'cliente', 'producto']));
    }

    /**
     * Función que solicita
     * el recalculo de integridad
     * REQUIERE: hay que enviarle id de contraparte y id de gestion
     * RESULTADO: recalcula la integridad de documentos y docs_ok
     */
    public static function informeRecalcularIntegridad() {
        if (isset($_POST['contraparte']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $gestion = Request::input('gestion');
            //
            $integ = Misc::recalcularIntegridadGestion($contraparte, $gestion, true);
            if (is_null($integ)) {
                return Response::JSON(['error' => 1, 'mensaje' => 'Error']);
            }
            return Response::JSON(['error' => 0, 'mensaje' => 'OK', 'data' => $integ]);
        }
        //
        return Response::JSON(['error' => 2, 'mensaje' => 'Para recalcular la integridad, se necesita la contraparte y la gestion']);
    }

    public static function modalInformeRescatarGestion() {
        if (isset($_POST['contraparte']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $gestion = Request::input('gestion');
            $integ_carga = Request::input('integ-carga') ?? NULL;
            $integ_verif = Request::input('integ-verif') ?? NULL;
            $integ_rech = Request::input('integ-rech') ?? NULL;
            //
            $contrap = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('select', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id), 'selectOne');
            //
            return view('/verifica_doc_nuevo/modal_rescatar_gestion')->with(compact('contraparte', 'gestion', 'integ_carga', 'integ_verif', 'integ_rech', 'contrap'));
        }
    }

    /**
     * Función que solicita
     * el rescato de la gestión
     * (devolver docs_ok para atras)
     * REQUIERE: hay que enviarle id de contraparte, id de gestion y los valores
     * de las integridades
     * RESULTADO: pone docs_ok en 0
     */
    public static function informeRescatarGestion() {
        if (isset($_POST['contraparte']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $gestion = Request::input('gestion');
            $integ_carga = Request::input('integ-carga') ?? NULL;
            $integ_verif = Request::input('integ-verif') ?? NULL;
            $integ_rech = Request::input('integ-rech') ?? NULL;
            //
            /* if ( !is_null($integ_carga) && !is_numeric($integ_carga) ){
                         return Response::JSON(['error' => 3,'mensaje' => 'Integridades invalidas']);
                     }
                     //
                     if ( !is_null($integ_verif) && !is_numeric($integ_verif) ){
                         return Response::JSON(['error' => 3,'mensaje' => 'Integridades invalidas']);
                     }
                     //
                     if ( !is_null($integ_rech) && !is_numeric($integ_rech) ){
                         return Response::JSON(['error' => 3,'mensaje' => 'Integridades invalidas']);
                     } */
            //
            if ((!is_null($integ_rech) && !is_numeric($integ_rech)) || (!is_null($integ_carga) && !is_numeric($integ_carga)) || (!is_null($integ_verif) && !is_numeric($integ_verif))) {
                $temp = SQLConnection::backendStoreProcedure('Revertir_DocsOK_Gestion', array($contraparte, $gestion));
            }
            //
            return redirect('/verifica-documentos-nuevo');
            // return Response::JSON(['error' => 0, 'mensaje' => 'OK']);
        }
        //
        // return Response::JSON(['error' => 2,'mensaje' => 'Para recalcular la integridad, se necesita la contraparte y la gestion']);
    }

    public static function grabaDocumentoValoracion() {
        $docid = Request::input('doc_id');
        $valoracion = Request::input('valoracion');
        $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('valoracion', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL, $valoracion), 'selectOne');
        return 'ok';
    }

    public static function documentoRevision() {
        $docid = Request::input('doc_id');
        $es_revisado = Request::input('es_revisado');
        //------
        if ($es_revisado == '0' || $es_revisado == '1') {
            $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('valoracion', $docid, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL, NULL, $es_revisado), 'selectOne');
            return 'ok';
        }
    }

    public static function altaPadron() {


        $data[0] = trim(Request::input('identificador'));	 // identificador
        $data[1] = trim(Request::input('numero'));	  		 // numero
        $data[2] = null;									 // nombre_persona
        $data[3] = trim(Request::input('tipo_persona'));	 // tipo_persona
        $data[4] = trim(Request::input('genero'));			 // sexo
        $data[5] = 1;										 // habilitado
        $data[6] = null;									 //	altaweb
        $data[7] = null;									 //	consAFIP
        $data[8] = Misc::convertirFormatoFecha(Request::input('fecha_nacimiento'), 'd/m/Y', 'Y-m-d'); // fecha_nac                       
        $data[9] = null;									 //	nacionalidad                    
        $data[10] = trim(Request::input('country_code'));	 //	pais                            
        $data[11] = trim(Request::input('apellido_padron')); //	apellido 
        $data[12] = trim(Request::input('nombre_padron'));	 //	nombre 

        //var_dump($data); die();

        $respuesta = SQLConnection::backendStoreProcedure('backend_insertar_padron', $data, 'selectOne');
        $mensaje = $respuesta->mensaje;
        return Response::JSON(['error' => 0, 'mensaje' => $mensaje]);
    }

    public static function balancesAprobarDoc() {
        $docid = Request::input('doc_id');
        $bal = SQLConnection::backendStoreProcedure('LN_balances_busqueda', array($docid), 'selectOne');

        // return view('/led/led_balances_verificar_confirm')->with(compact(['bal']));
        return json_encode($bal);
    }

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

        return json_encode($doc);
    }

    public function cargarBalance() {
        $nombre_persona = Request::Input('nombre_persona');
        $cuit = Request::Input('cuit');
        $id_balance = Request::input('id_balance');
        $task_id = Request::Input('task_id');
        $task_id1 = Request::Input('task_id1');
        $fecha_inicio = Request::Input('fecha_inicio_tarea');
        $usuario_tarea = Request::Input('usuario_tarea');
        $user_id = Session::get("usuario")->user_id;
        if ($fecha_inicio == '') {
            $fecha_inicio = null;
        }
        $balances = SQLConnection::backendStoreProcedure('backend_balances_contables', array($id_balance, null, null, null, null, $user_id), "selectOne");
        $monedas = (self::$monedas) ? self::$monedas : SQLConnection::obtenerMonedas();

        $archivo = ENV('PATH_COMPARTIDO') . $balances->ruta_archivo;
        $existe_pdf = false;
        if (file_exists($archivo)) {
            $archivo = ENV('RUTA_ARCHIVO_PDF') . $balances->ruta_archivo;
            $existe_pdf = true;
        }

        if ($task_id != null && $task_id != 0 && $fecha_inicio == null && $usuario_tarea == $user_id) // solo se unicia la tarea, si usuario es el asignado
        {
            $fecha_inicio = SQLConnection::backendStoreProcedure('backend_iniciar_tarea', array($task_id), "selectOne");
        }

        return view('verifica_doc_nuevo/modal_carga_balances')->with(compact('balances', 'monedas', 'existe_pdf', 'cuit', 'nombre_persona', 'task_id', 'archivo'));
    }

    public static function balancePdf() {
        $id_balance = Request::input('id_balance');

        $user_id = Session::get("usuario")->user_id;
        $bal = SQLConnection::backendStoreProcedure('backend_balances_contables', array($id_balance, null, null, null, null, $user_id), 'selectOne');

        $fn = (!empty($bal->ruta_archivo)) ? $bal->ruta_archivo : '/balances/' . $bal->cuit . '/' . $bal->fecha_balance . '.pdf';
        $pdf_url = env('PATH_COMPARTIDO') . $fn;

        if (file_exists($pdf_url)) {
            $pdf_url = ENV('RUTA_COMPARTIDO') . $fn;
        } else {
            $pdf_url = ENV('RUTA_COMPARTIDO') . '/balances/generico.pdf';
        }

        return view('/verifica_doc_nuevo/balances_pdf')->with(compact(['pdf_url']));
    }

    public static function balancesReemplazarDoc() {
        $docid = Request::input('doc_id');
        $idbal = Request::input('id_balance');
        $user_id = Session::get("usuario")->user_id;

        $doc = SQLConnection::backendStoreProcedure('LN_balances_busqueda', array($docid), 'selectOne');
        $bal = SQLConnection::backendStoreProcedure('backend_balances_contables', array($idbal, null, null, null, null, $user_id), 'selectOne');

        $anio1 = substr($bal->fecha_dia_mes_anio, 6);
        $anio2 = substr($doc->fecha_cierre, 6);

        $distinto_periodo = ($anio1 != $anio2) ? true : false;
        $doc->distinto_periodo = $distinto_periodo;
        $doc->bal_fecha_dia_mes_anio = $bal->fecha_dia_mes_anio;
        $doc->bal_select_ejercicio = $bal->ejercicio;
        $doc->bal_select_moneda = $bal->moneda;
        $doc->bal_select_nombre_moneda = $bal->nombre_moneda;
        $doc->bal_select_id_balance = $bal->id_balance;

        return json_encode($doc);
    }

    public static function balancesEliminarDocDisp() {
        $docid = Request::input('doc_id');
        $idbal = Request::input('id_balance');
        $doc = SQLConnection::backendStoreProcedure('LN_balances_busqueda', array($docid), 'selectOne');
        //$bal = SQLConnection::backendStoreProcedure('backend_balances_contables', array($idbal, null, null, null, null), 'selectOne');
        $user_id = Session::get("usuario")->user_id;
        $bal = SQLConnection::backendStoreProcedure('backend_balances_contables', array($idbal, null, null, null, null, $user_id), 'selectOne');

        $anio1 = substr($bal->fecha_dia_mes_anio, 6);
        $anio2 = substr($doc->fecha_cierre, 6);

        $distinto_periodo = ($anio1 != $anio2) ? true : false;
        $doc->distinto_periodo = $distinto_periodo;
        $doc->bal_fecha_dia_mes_anio = $bal->fecha_dia_mes_anio;
        $doc->bal_select_ejercicio = $bal->ejercicio;
        $doc->bal_select_moneda = $bal->moneda;
        $doc->bal_select_nombre_moneda = $bal->nombre_moneda;
        $doc->bal_select_id_balance = $bal->id_balance;

        // return view('/led/led_balances_eliminar_confirm')->with(compact(['doce', 'bale']));

        return json_encode($doc);
    }

    // VISTA VALORACION/ANALISIS
    public static function documentoAnalisis() {
        $user_id = Session::get('usuario')->user_id;
        $usuarios = SQLConnection::backendStoreProcedure('obtener_usuarios_tareas', array());
        $token_por_secciones = Misc::obtenerTokenSeccion('led_balances');
        $docs = SQLConnection::backendStoreProcedure('LN_documentos_valoraciones', array($user_id), 'select');
        //--
        if (isset($_GET['route'])) {
            $ruta = '/';
        } else {
            $ruta = '/verifica-documentos-nuevo';
        }
        //--
        $titulo_navbar = 'Balances que requieren Valoración y/o Análisis';

        return view('/verifica_doc_nuevo/analisis')->with(compact(['docs', 'user_id', 'token_por_secciones', 'usuarios', 'ruta', 'titulo_navbar']));
    }

    public static function asignarTareaCarga() {
        $user_id = Request::input('user_id');
        $created_by = Session::get("usuario")->user_id;
        $doc_id = '0';
        $cuit = Request::input('cuit_asi');
        $vigencia_desde = Request::input('vigencia_desde');
        $vigencia_hasta = Request::input('vigencia_hasta');
        $tipo = Request::input('tipo_asi');
        if ($tipo == 'balance') {
            $id_balance = Request::input('id_balance_asi');
            $fecha_bal = Request::input('fecha_bal_asi');
            $resp = SQLConnection::backendStoreProcedure('agregar_tarea', array($user_id, $doc_id, $cuit, $created_by, $vigencia_desde, $vigencia_hasta, $tipo, $id_balance), 'selectOne');
            if ($resp) {
                $id = SQLConnection::backendStoreProcedure('modificar_task_id_balance', array($id_balance, $resp->task_id), 'selectOne');
            }
        } else {
            $contraparte = Request::input('contraparte_asi');
            $id_balance = '';
            $resp = SQLConnection::backendStoreProcedure('agregar_tarea', array($user_id, $doc_id, $cuit, $created_by, $vigencia_desde, $vigencia_hasta, $tipo, $id_balance, $contraparte), 'selectOne');
        }
        self::enviarMailTarea($user_id, $cuit, $tipo);
    }

    public static function enviarMailTarea($user_id, $cuit, $tipo, $caso = 'asignacion', $texto = '') {
        $data = SQLConnection::backendStoreProcedure('backend_mails_tareas', array($user_id, $cuit), "selectOne");
        $content = new \stdClass();
        $content->username = $data->usuario;
        $content->empresa = $data->empresa;
        $content->cuit = $cuit;
        $content->caso = $caso;
        $content->tipo = $tipo;
        $content->texto = $texto;
        Misc::enviarMail("mails/asignacion_tareas", $data->email, $content, "Asignación de Tarea Fidelitas");
    }

    // VISTA DOCUMENTOS VERIFICADOS
    public static function verificacionCliente() {
        $user_id = Session::get('usuario')->user_id;

        $clientes = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT', NULL, NULL, NULL, NULL, 0, env('PLATAFORMA')), 'select'); // Clientes LED

        $today = new \DateTime(); // hoy
        $today = $today->format('Y-m-d');
        $last_week = new \DateTime(); // la ultima semana
        $last_week->sub(new \DateInterval('P7D'));
        $last_week = $last_week->format('Y-m-d');

        $docs = SQLConnection::backendStoreProcedure('LN_documentos', array('V', $user_id, null, $last_week, $today, '47'), 'select');

        if (isset($_GET['route'])) {
            $ruta = '/';
        } else {
            $ruta = '/verifica-documentos-nuevo';
        }

        $titulo_navbar = 'Documentos Verificados';

        return view('/verifica_doc_nuevo/verificados_cliente')->with(compact(['clientes', 'user_id', 'ruta', 'titulo_navbar', 'docs']));
    }

    public static function documentosVerificados() {
        $user_id = Session::get('usuario')->user_id;
        $id_cliente = Request::input('cliente');
        // --
        $start_date = Request::input('inputStartDate');
        $end_date = Request::input('inputEndDate');
        // --
        $docs = SQLConnection::backendStoreProcedure('LN_documentos', array('V', $user_id, $id_cliente, $start_date, $end_date, '47'), 'select');
        // $docs = SQLConnection::backendStoreProcedure('LN_documentos', array('V', $user_id, null, null, null),'select');
        // dd($docs);
        //
        foreach ($docs as $docu) {
            if ($docu->es_balance > 0) {
                if ($docu->estado == 'CARGA LED') {
                    $docu->color_estado = '#b042f4';
                    $docu->estado = 'PENDIENTE DE CARGA';
                } elseif ($docu->estado == 'ELIMINADO') {
                    $docu->color_estado = '#FF0000';
                } elseif ($docu->estado == 'PUBLICADO') {
                    $docu->color_estado = '#066b27';
                } elseif ($docu->estado == 'GRABADO PARCIAL') {
                    $docu->color_estado = '#0000FF';
                } elseif ($docu->estado == 'A VERIFICAR') {
                    $docu->color_estado = '#d38d13';
                }
            }
        }
        //
        return (json_encode($docs));
        // return view('/led/led_docs_verificados')->with(compact(['docs', 'user_id']));
    }

    // VISTA DOCUMENTOS RECHAZADOS
    public static function rechazadosCliente() {
        $user_id = Session::get('usuario')->user_id;

        //if ( env('PLATAFORMA') == env('IV_PRODUCTO') ){
        //	$clientes = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT',NULL,NULL,NULL,NULL,0,env('PLATAFORMA')), 'select'); // Clientes LED
        //} else {
        //	$clientes = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT',NULL,NULL,NULL,NULL), 'select');
        //}

        $clientes = SQLConnection::backendStoreProcedure('LED_Clientes', array('SELECT', NULL, NULL, NULL, NULL, 0, env('PLATAFORMA')), 'select'); // Clientes LED

        $today = new \DateTime(); // hoy
        $today = $today->format('Y-m-d');
        $last_week = new \DateTime(); // la ultima semana
        $last_week->sub(new \DateInterval('P7D'));
        $last_week = $last_week->format('Y-m-d');
        //
        $docs = SQLConnection::backendStoreProcedure('LN_documentos', array('R', $user_id, null, $last_week, $today, '47'), 'select');
        //--
        if (isset($_GET['route'])) {
            $ruta = '/';
        } else {
            $ruta = '/verifica-documentos-nuevo';
        }
        //--
        $titulo_navbar = 'Documentos Rechazados';
        //
        return view('/verifica_doc_nuevo/rechazados_cliente')->with(compact(['clientes', 'user_id', 'ruta', 'titulo_navbar', 'docs']));
    }

    public static function documentosRechazados() {
        $user_id = Session::get('usuario')->user_id;
        $id_cliente = Request::input('cliente');
        // --
        $start_date = Request::input('inputStartDate');
        $end_date = Request::input('inputEndDate');
        // --
        $docs = SQLConnection::backendStoreProcedure('LN_documentos', array('R', $user_id, $id_cliente, $start_date, $end_date, '47'), 'select');
        //
        foreach ($docs as $docu) {
            if ($docu->es_balance > 0) {
                if ($docu->estado == 'CARGA LED') {
                    $docu->color_estado = '#b042f4';
                    $docu->estado = 'PENDIENTE DE CARGA';
                } elseif ($docu->estado == 'ELIMINADO') {
                    $docu->color_estado = '#FF0000';
                } elseif ($docu->estado == 'PUBLICADO') {
                    $docu->color_estado = '#066b27';
                } elseif ($docu->estado == 'GRABADO PARCIAL') {
                    $docu->color_estado = '#0000FF';
                } elseif ($docu->estado == 'A VERIFICAR') {
                    $docu->color_estado = '#d38d13';
                }
            }
        }
        //
        return json_encode($docs);
    }

    public static function detalleDocumentoRechazado() {
        $doc_id = Request::input('doc_id');
        $user_id = Request::input('user_id');
        $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        /* Información de los campos del documento */
        $flds = SQLConnection::backendStoreProcedure('LN_doc_campos_', array('search', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL), 'select');

        $secciones = [];

        $hay_campos = false;
        $hay_archivo = false;
        foreach ($flds as $fld) {
            $hay_campos = !$hay_campos ? ($fld->tipo_campo != 'F' ? true : $hay_campos) : $hay_campos;
            $hay_archivo = !$hay_archivo ? ($fld->tipo_campo == 'F' ? true : $hay_archivo) : $hay_archivo;
        }

        $data = [];
        foreach ($flds as $k => $fld) {

            if ($fld->tipo_campo == 'G') {

                /* encabezados de la tabla */
                $c1 = SQLConnection::backendStoreProcedure('LN_campos_col_', array('search', $fld->campo, null, null, NULL, NULL, NULL, NULL), 'select');
                $cols = [];
                foreach ($c1 as $clm) {
                    $cols[] = $clm->etiqueta;
                }

                /* configuración de los campos y valores de la tabla */
                $c2 = SQLConnection::backendStoreProcedure('LN_doc_campos_col_', array($fld->doc_id, $fld->seccion, $fld->campo), 'select');
                $valores = [];
                foreach ($c2 as $k1 => $valor) {
                    $valores[$valor->fila][$valor->col]['valor_texto'] = $valor->valor_texto;
                    $valores[$valor->fila][$valor->col]['valor_fecha'] = $valor->valor_fecha;
                    $valores[$valor->fila][$valor->col]['valor_fecha_str'] = $valor->valor_fecha_str;
                    $valores[$valor->fila][$valor->col]['valor_numerico'] = $valor->valor_numerico;
                    $valores[$valor->fila][$valor->col]['tipo_campo'] = $valor->tipo_campo;
                    $valores[$valor->fila][$valor->col]['longitud'] = $valor->longitud;
                    $valores[$valor->fila][$valor->col]['decimales'] = $valor->decimales;

                    //$valores[$valor->fila][$valor->col]['opciones'] = $valor->opciones;

                    if ($valor->tipo_campo == 'S' || $valor->tipo_campo == 'R' || $valor->tipo_campo == 'C') {

                        if (strlen($valor->opciones) > 0) {
                            $r = explode("^", $valor->opciones);
                            $txt = [];
                            $val = [];
                            if (sizeof($r) >= 2) {
                                $txt = explode("|", $r[0]);
                                $val = explode("|", $r[1]);
                            }
                            $valores[$valor->fila][$valor->col]['opciones']['txt'] = $txt;
                            $valores[$valor->fila][$valor->col]['opciones']['val'] = $val;
                        }

                    }
                }

                $fld->headers = $cols;
                $fld->values = $valores;
            } else {

                /* campo no tabla */

                if ($fld->tipo_campo == 'S' || $fld->tipo_campo == 'R' || $fld->tipo_campo == 'C') {

                    $valores = [];

                    if (strlen($fld->opciones) > 0) {
                        $r = explode("^", $fld->opciones);
                        $txt = [];
                        $val = [];
                        if (sizeof($r) >= 2) {
                            $txt = explode("|", $r[0]);
                            $val = explode("|", $r[1]);
                        }
                        $valores[] = $txt;
                        $valores[] = $val;
                    }

                    $fld->opciones = $valores;

                }


            }

            $data[$fld->titulo_seccion][] = $fld;

            if ($fld->titulo_seccion != '') {
                $secciones[$fld->titulo_seccion]['texto_bajada'] = $fld->texto_bajada;
                $secciones[$fld->titulo_seccion]['texto_pie'] = $fld->texto_pie;
            }
        }
        /* Fin información de los campos del documento */


        /* Archivo adjunto */
        if ($doc->es_balance > 0) {
            $file_path = env('PATH_COMPARTIDO') . $doc->ruta_archivo;
            $file_url = env('RUTA_COMPARTIDO') . $doc->ruta_archivo;
            ;
        } else {
            $file_path = env('PATH_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
            $file_url = env('RUTA_DOCUMENTOS') . '/' . $doc->cliente . '/' . $doc->contraparte . '/' . $doc->gestion . '/' . $doc->doc_id . '.pdf';
        }
        $file_exists = file_exists($file_path);

        return view('/verifica_doc_nuevo/detalle_documeto')->with(compact(['doc', 'user_id', 'secciones', 'data', 'file_exists', 'file_path', 'file_url','hay_archivo']));
    }

    /* Deshacer la verificación o un rechazo de documento y dejarlo en pendiente de verificar */
    public static function documentoEstadoUndo() {
        $doc_id = Request::input('doc_id');
        $dependencias_docs = SQLConnection::backendStoreProcedure('LN_docs_AGB', array('SELECT', $doc_id, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'select');
        $doc = SQLConnection::backendStoreProcedure('LN_docs_', array('select', $doc_id, null, null, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, null, NULL), 'selectOne');
        //
        if (!empty($doc)) {
            if (empty($dependencias_docs) || (is_array($dependencias_docs) && count($dependencias_docs) == 1)) {
                $temp = SQLConnection::backendStoreProcedure('LN_docs_verif', array('UNDO', null, Session::get('usuario')->user_id, $doc->doc_id, 0), 'selectOne');
                // $check = SQLConnection::backendStoreProcedure('LN_docs_verificar_carga', array($doc_id), 'selectOne');
                // self::integridadDocStore($doc,0,0,0,0,1);
                Misc::recalcularIntegridadGestion($doc->contraparte, $doc->gestion);
                // 
                SQLConnection::logTrazabilidad('Se devolvió documento a pendiente', 'UNDO_DOC', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $doc->cliente, $doc->contraparte, $doc_id);
            } else {
                foreach ($dependencias_docs as $docs) {
                    if ($docs->estado_doc == 'V') {
                        $temp = SQLConnection::backendStoreProcedure('LN_docs_verif', array('UNDO', null, Session::get('usuario')->user_id, $docs->doc_id, 0), 'selectOne');
                        // 
                        SQLConnection::logTrazabilidad('Se devolvió documento a pendiente', 'UNDO_DOC', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $docs->cliente, $docs->contraparte, $docs->doc_id);
                    } else if ($docs->estado_doc == 'R') {
                        $temp = SQLConnection::backendStoreProcedure('LN_docs_verif', array('UNDO', null, Session::get('usuario')->user_id, $docs->doc_id, 0), 'selectOne');
                        // 
                        SQLConnection::logTrazabilidad('Se devolvió documento a pendiente', 'UNDO_DOC', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $docs->cliente, $docs->contraparte, $docs->doc_id);
                    }
                    // self::integridadDocStore($doc,0,0,0,0,1);
                    Misc::recalcularIntegridadGestion($doc->contraparte, $doc->gestion);
                }
            }
            $temp = SQLConnection::backendStoreProcedure('LN_contrapartes_queue_', array('insert', NULL, $doc->contraparte), 'selectOne');
            // $temp = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array('Documento devuelto a pendiente: ' . $doc->nombre_tipo_doc, $doc->cliente, 'DEVUELVE_DOCUMENTO','BACK', $doc->contraparte,Session::get('usuario')->user_id,$doc_id,$doc->servicio_contratado), 'selectOne');
        }
        //ruta
        return json_encode($temp);
    }

    // VISTA ANALISIS/VALORACION BBVA
    public static function valoracionesBBVA() {
        //--
        $docs = SQLConnection::backendStoreProcedure('LN_docs_valorar_pendientes', array());
        $ruta = '/verifica-documentos-nuevo';
        $titulo_navbar = 'Documentos Pendientes de Valoración BBVA';
        //---
        return view('verifica_doc_nuevo/analisis_bbva')->with(compact(['docs', 'ruta', 'titulo_navbar']));
    }

    public function verTodosReports() {
        $user_id = Session::get('usuario')->user_id;
        //$cliente = Request::input('cliente');
        //$contraparte = null;
        $contrap1 = SQLConnection::backendStoreProcedure('LN_panel_reports', array('search_panel_informes', $user_id, NULL, NULL), 'select');
        //$contrap1 = SQLConnection::backendStoreProcedure('LN_panel_reports', array('search_panel_informes', $user_id, NULL, NULL, env('PLATAFORMA'),NULL,env('PLATAFORMA')), 'select');
        //$contrap1 = SQLConnection::backendStoreProcedure('LN_panel_reports', array('search_panel_informes', $user_id, $cliente, $contraparte), 'select');
        //$contrap1 = SQLConnection::backendStoreProcedure('LN_panel_reports', array('search_panel_reportes', $user_id, $cliente, $contraparte), 'select');
        //$ruta = '/verifica-documentos-nuevo'; 
        $titulo_navbar = 'Informes';
        //
        $hoy = date_create();
        foreach ($contrap1 as $k => $data) {
            $data->created = explode(' ', $data->created);
            $dias_creacion = date_diff(date_create($data->created[0]), $hoy);
            $data->created[0] = explode('-', $data->created[0]);
            $data->created[1] = explode(':', $data->created[1]);
            $contrap1[$k]->created = $data->created[0][2] . '/' . $data->created[0][1] . '/' . $data->created[0][0] . ' ' . $data->created[1][0] . ':' . $data->created[1][1];
            $contrap1[$k]->dias_creacion = $dias_creacion->format('%a');
            //
            /*$data->vigencia_hasta = str_replace('/','-', $data->vigencia_hasta);
                     $dias_vencimiento = date_diff($hoy,date_create($data->vigencia_hasta));
                     $contrap1[$k]->dias_hasta_vencer = $dias_vencimiento;*/
            if (!is_null($data->fecha_comprometida)) {
                $data->fecha_comprometida = date_create_from_format('Y-m-d H:i:s', $data->fecha_comprometida);
                $dias_vencimiento = date_diff($hoy, $data->fecha_comprometida);
                $contrap1[$k]->dias_hasta_vencer = $dias_vencimiento;

                if ($hoy < $data->vigencia_hasta) {
                    $contrap1[$k]->vencida = 1;
                } else {
                    $contrap1[$k]->vencida = 0;
                }
            } else {
                $contrap1[$k]->vencida = 1;
                $contrap1[$k]->dias_hasta_vencer = date_create();
            }
        }
        //
        //return view('/verifica_doc_nuevo/reports/ver_reports_datatable')->with(compact(['contrap1','ruta','titulo_navbar']));
        return view('/verifica_doc_nuevo/reports/ver_reports_datatable')->with(compact(['contrap1', 'titulo_navbar']));
    }

    // Funcion que devuelve los datos para la mapa de informes
    public function mapaInformes() {
        if (isset($_POST['contraparte'])) {
            $contraparte = Request::input('contraparte');
            //
            $docs = DB::select('EXEC dbo.LN_contrapartes_ ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
            //
            $docs_data = [];
            //
            foreach ($docs as $doc) {
                if ($doc->estado_doc == 'V') {
                    $doc->icon_code = '\uF633';
                    $doc->color_code = '#198754';
                } elseif ($doc->estado_doc == 'R') {
                    $doc->icon_code = '\uF659';
                    $doc->color_code = '#dc3545';
                } elseif ($doc->estado_doc == 'I') {
                    $doc->icon_code = '\uF63C';
                    $doc->color_code = '#ffc107';
                } elseif ($doc->estado_doc == 'N' && $doc->aplica == '0') {
                    $doc->icon_code = '\uF2AD';
                    $doc->color_code = '#212529';
                } else {
                    $doc->icon_code = '\uF296';
                    $doc->color_code = '#0dcaf0';
                }
                $doc->icon_code = json_decode('"' . $doc->icon_code . '"');
            }
            //
            return $docs;
        }
    }


}
