<?php

namespace App\Http\Controllers;

use App\Custom\SQLConnection;
use App\Custom\Misc;
use Illuminate\Support\Facades\Request;
use Illuminate\Support\Facades\Session;

use Shuchkin\SimpleXLSXGen;
use stdClass;
use Route;
use Exception;


class NewReportsController extends Controller {
    public function index() {
        $titulo_navbar = 'Contrapartes con documentación finalizada';
        return view('/blue/reports/inicio')->with(compact('titulo_navbar'));
    }

    public function resultadoClienteOrg() {
        if (isset($_POST['clienteOk']) && !Misc::tieneCaracterRaroBase($_POST['clienteOk']) && isset($_POST['producto']) && ($_POST['producto'] == '10' || $_POST['producto'] == '47')) {
            $valoresConsulta = $_POST['clienteOk'];
            $data = explode('-', trim($valoresConsulta));
            $cli_codigo = trim($data[0]);
            $cliente = $data[1];
            $informe_comercial_id = ENV('ID_INFORME_COMERCIAL');
            $producto_select = $_POST['producto'];
            //
            $params = array($cliente);
            $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');	//	SP con datos del cliente
            $nombre_producto = $_POST['producto'];

            $servicios = [];
            $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $datos_cliente->cliente), 'select');
            $key = sizeof($servicios);
            $servicios[$key] = new stdClass();
            $servicios[$key]->producto = "00";
            $servicios[$key]->nombre_producto = "TODOS";

            //-- VARIABLE QUE VA A TENER EL PRODUCTO SELECCIONADO
            $servicio_elegido = (object) [];
            $clave = sizeof($servicios);
            //
            //$reports = SQLConnection::backendStoreProcedure('LN_demo_', array('reports', null, $qcontrap->cliente), 'select');
            $contrap = [];
            foreach ($servicios as $key => $ser) {
                if ($ser->producto == '10' || $ser->producto == '47') {
                    $servicio_elegido->producto = $ser->producto;
                    $servicio_elegido->nombre_producto = $ser->nombre_producto;
                } elseif ($ser->producto != $producto_select && $key != $clave - 1) {
                    continue;
                } else if ($key == $clave - 1 && $ser->producto != $producto_select) {
                    if (!isset($servicio_elegido->producto) && !isset($servicio_elegido->nombre_producto)) {
                        // return back()->withInput()->withErrors('error');
                        return view('/blue/reports/error_busqueda');
                    }
                }
                //
                $contrap[$ser->producto] = [];
            }
            //
            $cli = SQLConnection::backendStoreProcedure('LED_Clientes', array('select', $cliente, NULL, NULL, NULL, '10'), 'selectOne');
            $nombre_cliente = $cli->nombre_cliente;
            $cli_codigo = $cli->cli_codigo;
            $cli_cuit = $cli->cuit;
            $contrap1 = SQLConnection::backendStoreProcedure('LN_contrapartes_DEV', array('search_informes_contraparte', null, null, $cliente, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id, null, null, null), 'select');
            $familias = SQLConnection::backendStoreProcedure('LN_familias_sc', array('search', NULL, NULL, $cli->cliente, null, NULL, NULL, NULL, NULL, NULL, NULL, $producto_select), 'select');
            // YPF
            foreach ($familias as $familia) {
                if ($familia->familia == '577') {
                    $nombre_familia = $familia->nombre_familia;
                }
            }
            if (!isset($nombre_familia)) {
                return view('/blue/reports/error_busqueda');
            } else {
                // Si hay contrapartes de un servicio que tiene inactivo no se van a ver, solo toma la de los servicios activos.
                $cantidad_contrapartes = 0;
                // CIFRAS
                // TIENE DEPENEDENCIA ECONOMICA
                $tiene_de = 0;
                // TIENE LIMITE CONSU
                $tiene_lcs = 0;
                $tiene_mlcs = 0;
                // TIENE PLAN DE PAGO
                $tiene_pp = 0;
                foreach ($contrap1 as $key => $cont) {
                    if (isset($servicio_elegido->producto) && $servicio_elegido->producto == $cont->servicio_contratado) {
                        if ($nombre_familia != $cont->nombre_familia) {
                            unset($contrap1[$key]);
                            continue;
                        }
                        $contrap[$cont->servicio_contratado][$key] = $contrap1[$key];
                        $contrap["00"][$key] = $contrap1[$key];
                        $cantidad_contrapartes += 1;
                        $tiene_de = ($cont->tiene_de == 1) ? 1 : $tiene_de;
                        $tiene_lcs = ($cont->tiene_lcs == 1) ? 1 : $tiene_lcs;
                        $tiene_mlcs = ($cont->tiene_mlcs == 1) ? 1 : $tiene_mlcs;
                        $tiene_pp = ($cont->tiene_pp == 1) ? 1 : $tiene_pp;
                    }
                }
            }
            /* // Si hay contrapartes de un servicio que tiene inactivo no se van a ver, solo toma la de los servicios activos.
            $cantidad_contrapartes = 0;
            // CIFRAS
            // TIENE DEPENEDENCIA ECONOMICA
            $tiene_de = 0;
            // TIENE LIMITE CONSU
            $tiene_lcs = 0;
            $tiene_mlcs = 0;
            // TIENE PLAN DE PAGO
            $tiene_pp = 0;
            //
            foreach($contrap1 as $key => $cont){
                if ( isset($servicio_elegido->producto) && $servicio_elegido->producto == $cont->servicio_contratado){
                    if ( self::contraparteDocsVerificados($cont->contraparte) ){
                        unset($contrap1[$key]);
                        continue;
                    }
                    $contrap[$cont->servicio_contratado][$key] = $contrap1[$key];
                    $contrap["00"][$key] = $contrap1[$key];
                    $cantidad_contrapartes += 1;
                    $tiene_de = ($cont->tiene_de == 1) ? 1 : $tiene_de;
                    $tiene_lcs = ($cont->tiene_lcs == 1) ? 1 : $tiene_lcs;
                    $tiene_mlcs = ($cont->tiene_mlcs == 1) ? 1 : $tiene_mlcs;
                    $tiene_pp = ($cont->tiene_pp == 1) ? 1 : $tiene_pp;
                }
            } */
            //
            $inquirovitae = SQLConnection::backendStoreProcedure('LN_demo_', array('check_inquirovitae_cliente', NULL, $cli->cliente), 'selectOne');
            //
            $es_inquiro = '1';
            //
            return view('/blue/reports/contrapartes_reports')->with(compact(['cli', 'contrap', 'inquirovitae', 'servicios', 'cantidad_contrapartes', 'tiene_de', 'tiene_lcs', 'tiene_mlcs', 'tiene_pp', 'cliente', 'servicio_elegido', 'nombre_cliente', 'cli_codigo', 'cli_cuit', 'es_inquiro']));
        } else {
            echo ("error");
        }
    }

    public function resultadoClienteBKP() {
        if (isset($_POST['clienteOk']) && !Misc::tieneCaracterRaroBase($_POST['clienteOk']) && isset($_POST['producto']) && ($_POST['producto'] == '10' || $_POST['producto'] == '47')) {
            $valoresConsulta = $_POST['clienteOk'];
            $data = explode('-', trim($valoresConsulta));
            $cli_codigo = trim($data[0]);
            $cliente = trim($data[1]);
            $informe_comercial_id = ENV('ID_INFORME_COMERCIAL');
            $producto_select = $_POST['producto'];
            $publicados = $_POST['publicados'] ?? 0;
            //
            $params = array($cliente);
            $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');	//	SP con datos del cliente
            //$nombre_producto = $_POST['producto'];
            //
            $servicios = [];
            $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $datos_cliente->cliente), 'select');
            // dd($servicios);
            //-- VARIABLE QUE VA A TENER EL PRODUCTO SELECCIONADO
            $servicio_elegido = (object) [];
            foreach ($servicios as $key => $ser) {
                if ($ser->producto == $producto_select) {
                    $servicio_elegido->producto = $ser->producto;
                    $servicio_elegido->nombre_producto = $ser->nombre_producto;
                    break;
                }
            }
            //
            if (!isset($servicio_elegido->producto)) {
                $error = 1;
                return view('/blue/reports/error_busqueda')->with(compact('error'));
            }
            //
            $cli = SQLConnection::backendStoreProcedure('LED_Clientes', array('select', $cliente, NULL, NULL, NULL, '10'), 'selectOne');
            $nombre_cliente = $cli->nombre_cliente;
            $cli_codigo = $cli->cli_codigo;
            $cli_cuit = $cli->cuit;

            $user_id = Session::get('usuario')->user_id;
            $contraparte = null;
            //
            $contrap1 = SQLConnection::backendStoreProcedure('LN_panel_reports', array('search_reports_cliente', $user_id, $cliente, $contraparte, $servicio_elegido->producto), 'select');
            // $contrap1 = SQLConnection::backendStoreProcedure('LN_contrapartes_DEV', array('search_informes_contraparte', null, null, $cliente, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id, null, null, $servicio_elegido->producto), 'select');
            $familias = SQLConnection::backendStoreProcedure('LN_familias_sc', array('search', NULL, NULL, $cli->cliente, null, NULL, NULL, NULL, NULL, NULL, NULL, $producto_select), 'select');
            // EXCEPCIONES
            $nombre_familia = '';
            if ($cliente == '431136419') {
                $familias = SQLConnection::backendStoreProcedure('LN_familias_sc', array('search', NULL, NULL, $cli->cliente, null, NULL, NULL, NULL, NULL, NULL, NULL, $producto_select), 'select');
                foreach ($familias as $familia) {
                    if ($familia->familia == '623') {
                        $nombre_familia = $familia->nombre_familia;
                    }
                }
            }
            //
            foreach ($contrap1 as $key => $value) {
                if ($nombre_familia == $value->nombre_familia) {
                    continue;
                }
                //
                // if ( self::contraparteDocsVerificados($value->contraparte) ){
                //     unset($contrap1[$key]);
                //     continue;
                // }
            }
            //
            if (empty($contrap1)) {
                $error = 2;
                return view('/blue/reports/error_busqueda')->with(compact('error'));
            }
            $cantidad_contrapartes = count($contrap1);
            $contrap[$servicio_elegido->producto] = $contrap1;
            // YPF
            /* foreach($familias as $familia) {
                if($familia->familia == '577'){
                    $nombre_familia = $familia->nombre_familia;
                }
            } */
            /*if ( !isset($nombre_familia) ) {
                return view('/blue/reports/error_busqueda');
            } else {
                // Si hay contrapartes de un servicio que tiene inactivo no se van a ver, solo toma la de los servicios activos.
                $cantidad_contrapartes = 0;
                // CIFRAS
                // TIENE DEPENEDENCIA ECONOMICA
                $tiene_de = 0;
                // TIENE LIMITE CONSU
                $tiene_lcs = 0;
                $tiene_mlcs = 0;
                // TIENE PLAN DE PAGO
                $tiene_pp = 0;
                foreach($contrap1 as $key => $cont){
                    if ( isset($servicio_elegido->producto) && $servicio_elegido->producto == $cont->servicio_contratado){
                        if ( $nombre_familia != $cont->nombre_familia ){
                            unset($contrap1[$key]);
                            continue;
                        }
                        $contrap[$cont->servicio_contratado][$key] = $contrap1[$key];
                        $contrap["00"][$key] = $contrap1[$key];
                        $cantidad_contrapartes += 1;
                        $tiene_de = ($cont->tiene_de == 1) ? 1 : $tiene_de;
                        $tiene_lcs = ($cont->tiene_lcs == 1) ? 1 : $tiene_lcs;
                        $tiene_mlcs = ($cont->tiene_mlcs == 1) ? 1 : $tiene_mlcs;
                        $tiene_pp = ($cont->tiene_pp == 1) ? 1 : $tiene_pp;
                    }
                }
            }*/
            /* // Si hay contrapartes de un servicio que tiene inactivo no se van a ver, solo toma la de los servicios activos.
            $cantidad_contrapartes = 0;
            // CIFRAS
            // TIENE DEPENEDENCIA ECONOMICA
            $tiene_de = 0;
            // TIENE LIMITE CONSU
            $tiene_lcs = 0;
            $tiene_mlcs = 0;
            // TIENE PLAN DE PAGO
            $tiene_pp = 0;
            //
            foreach($contrap1 as $key => $cont){
                if ( isset($servicio_elegido->producto) && $servicio_elegido->producto == $cont->servicio_contratado){
                    if ( self::contraparteDocsVerificados($cont->contraparte) ){
                        unset($contrap1[$key]);
                        continue;
                    }
                    $contrap[$cont->servicio_contratado][$key] = $contrap1[$key];
                    $contrap["00"][$key] = $contrap1[$key];
                    $cantidad_contrapartes += 1;
                    $tiene_de = ($cont->tiene_de == 1) ? 1 : $tiene_de;
                    $tiene_lcs = ($cont->tiene_lcs == 1) ? 1 : $tiene_lcs;
                    $tiene_mlcs = ($cont->tiene_mlcs == 1) ? 1 : $tiene_mlcs;
                    $tiene_pp = ($cont->tiene_pp == 1) ? 1 : $tiene_pp;
                }
            } */
            //
            $inquirovitae = SQLConnection::backendStoreProcedure('LN_demo_', array('check_inquirovitae_cliente', NULL, $cli->cliente), 'selectOne');
            //
            $es_inquiro = '1';
            //
            $clientes_publicados = SQLConnection::backendStoreProcedure('LN_panel_reports', array('reports_cliente_publicados', $user_id, $cliente, $contraparte, $servicio_elegido->producto), 'select');
            return view('/blue/reports/contrapartes_reports')->with(compact(['cli', 'contrap', 'inquirovitae', 'servicios', 'cantidad_contrapartes', 'cliente', 'servicio_elegido', 'nombre_cliente', 'cli_codigo', 'cli_cuit', 'es_inquiro']));
        } else {
            echo ("error");
        }
    }

    // FUNCION QUE RETORNA LA VISTA CON LOS RESULTADOS DEL CLIENTE SELECCIONADO
    public function resultadoCliente() {
        if (isset($_POST['clienteOk']) && !Misc::tieneCaracterRaroBase($_POST['clienteOk'])) {
            $valoresConsulta = $_POST['clienteOk'];
            $data = explode('-', trim($valoresConsulta));
            $cli_codigo = trim($data[0]);
            $cliente = trim($data[1]);
            $informe_comercial_id = ENV('ID_INFORME_COMERCIAL');
            $publicados = $_POST['publicados'] ?? 0;
            //$titulo_navbar = 'REPORTS Contrapartes';
            $titulo_navbar = 'Contrapartes con carga de documentación finalizada';
            //
            $params = array($cliente);
            $datos_cliente = SQLConnection::backendStoreProcedure("backend_datos_clientes", $params, 'selectOne');	//	SP con datos del cliente
            //
            $servicios = [];
            $servicios = SQLConnection::backendStoreProcedure('usuarios_restricciones_', array('servicios', $datos_cliente->cliente), 'select');
            //
            $cli = SQLConnection::backendStoreProcedure('LED_Clientes', array('select', $cliente, NULL, NULL, NULL, '10'), 'selectOne');
            $nombre_cliente = $cli->nombre_cliente;
            $cli_codigo = $cli->cli_codigo;
            $cli_cuit = $cli->cuit;

            $user_id = Session::get('usuario')->user_id;
            $contraparte = null;
            //
            $contrap = [];
            $tiene_reports = 0;
            $cantidad_contrapartes = 0;
            // CONTRAPARTES PENDIENTES DE PUBLICACION
            $serv_contrap = SQLConnection::backendStoreProcedure('LN_panel_reports', array('search_reports_cliente', $user_id, $cliente, $contraparte, null), 'select');
            // dd($serv_contrap);
            if ($serv_contrap != []) {
                $tiene_reports++;
                $cantidad_contrapartes += count($serv_contrap);
            }
            $contrap = $serv_contrap;
            // CONTRAPARTES PUBLICADOS
            $contrapartes_publicados = SQLConnection::backendStoreProcedure('LN_panel_reports', array('reports_cliente_publicados', $user_id, $cliente, $contraparte, null), 'select');
            /*foreach ($servicios as $serv){
                $serv_contrap = SQLConnection::backendStoreProcedure('LN_panel_reports', array('search_reports_cliente', $user_id, $cliente, $contraparte,$serv->producto), 'select');
                //
                if ($serv_contrap != []){
                    $tiene_reports++;
                    $cantidad_contrapartes += count($serv_contrap);
                }
                $contrap[$serv->producto] = $serv_contrap;
            }*/
            //
            $inquirovitae = SQLConnection::backendStoreProcedure('LN_demo_', array('check_inquirovitae_cliente', NULL, $cli->cliente), 'selectOne');
            //
            $es_inquiro = '1';
            //
            return view('/blue/reports/contrapartes_reports')->with(compact(['cli', 'contrap', 'contrapartes_publicados', 'inquirovitae', 'servicios', 'cantidad_contrapartes', 'cliente', 'nombre_cliente', 'cli_codigo', 'cli_cuit', 'es_inquiro', 'tiene_reports', 'titulo_navbar']));
        } else {
            echo ("error");
        }
    }

    public function listadoClientesVisibles() {
        $user_id = Session::get('usuario')->user_id;
        $cliente = Request::input('cliente');
        $mostrar_publicados = Request::input('mostrar_publicados');
        $contrap = json_decode(Request::input('contrap'), true);
        $modalidad_pago = Request::input('modalidad_pago');
        $contraparte = null;
        $tiene_publicados = 0;
        $clientes_publicados = SQLConnection::backendStoreProcedure('LN_panel_reports', array('reports_cliente_publicados', $user_id, $cliente, $contraparte, null), 'select');
        //
        if ($mostrar_publicados) {
            foreach ($contrap as $key => $serv) {
                if ($clientes_publicados != []) {
                    $tiene_publicados++;
                    foreach ($clientes_publicados as $publicado) {
                        if ($key == $publicado->servicio_contratado) {
                            $publicado = (array) $publicado;
                            $publicado['publicado'] = '1';
                            array_push($contrap[intval($publicado['servicio_contratado'])], $publicado);
                        }
                    }
                }
            }
        }
        //
        if (count($contrap) != 0) {
            $tiene_publicados = count($contrap);
        }
        return view('/blue/reports/contrapartes_reports_publicados')->with(compact(['contrap', 'modalidad_pago', 'tiene_publicados', 'mostrar_publicados']));
    }

    /**
     *  FUNCION HELPER QUE CALCULA SI LA CONTRAPARTE TIENE TODOS LOS DOCUMENTOS VERIFICADOS O NO
     *  DEVUELVE SI LA CONTRAPARTE TIENE DOCS QUE NO SEAN VERIFICADOS O NO
     * @param string contraparte
     * @return int 
     */
    public function contraparteDocsVerificados($contraparte) {
        $tiene_no_ver = 0;
        $docs = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('DOCUMENTOS_GESTION_ACTIVA', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, null));
        foreach ($docs as $key => $value) {
            // if ( $value->estado_doc == 'N' || $value->estado_doc == 'I' || $value->estado_doc == 'R' ){
            //     $tiene_no_ver++;
            //     break;
            // }
            if ($value->docs_ok == '0' && intval($value->integ_verif) < 100) {
                $tiene_no_ver++;
                break;
            }
        }
        //
        return $tiene_no_ver;
    }

    public function contraparteReportes() {
        $id_contraparte = Request::input('contraparte');
        $desde_contraparte_generico = Request::input('desde_contraparte_generico');
        // DATOS DE REDIRECCION
        if ($desde_contraparte_generico == '0') {
            $tipo_paquete = Request::input('tipo_paquete_cliente');
            $nombre_producto = Request::input('prod_nombre_cliente');
            $limite_consumo = Request::input('limite_consumo_cliente');
            $fecha_desde = Request::input('fecha_desde');
            $fecha_hasta = Request::input('fecha_hasta');
            $bloquea = Request::input('estado_bloquea_cliente');
            $estado_producto = Request::input('estado_producto_cliente');
            $modalidad_de_pago = Request::input('modalidad_de_pago');
            $impe_doc = Request::input('impe_doc');
            $impe_acceso = Request::input('impe_acceso');
            // DATOS PARA EL FORMULARIO DE REDIRECCIONAMIENTO
            $datos_redireccion = (object) ['desde_contrapartes_generico' => 0, 'tipo_paquete' => $tipo_paquete, 'nombre_producto' => $nombre_producto, 'limite' => $limite_consumo, 'desde' => $fecha_desde, 'hasta' => $fecha_hasta, 'bloquea' => $bloquea, 'estado_producto' => $estado_producto, 'modalidad_de_pago' => $modalidad_de_pago, 'impe_acceso' => $impe_acceso, 'impe_doc' => $impe_doc];
        } else {
            $cliente = Request::input('cliente') != '' ? Request::input('cliente') : '';
            $tiene_api = Request::input('tieneApi') != '' ? Request::input('tieneApi') : '';
            $producto = Request::input('producto') != '' ? Request::input('producto') : '';
            $nombre_producto = Request::input('nombre_producto') != '' ? Request::input('nombre_producto') : '';
            $id_padron = Request::input('id_padron') != '' ? Request::input('id_padron') : '';
            // DATOS PARA EL FORMULARIO DE REDIRECCIONAMIENTO
            $datos_redireccion = (object) ['desde_contrapartes_generico' => 1, 'cliente' => $cliente, 'tiene_api' => $tiene_api, 'producto' => $producto, 'nombre_producto' => $nombre_producto, 'id_padron' => $id_padron];
        }
        //
        $qcontrap = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('select', $id_contraparte, null, null, null, null, null, null, null, null, null, null, null, null, Session::get('usuario')->user_id), 'selectOne');
        $reports = SQLConnection::backendStoreProcedure('LN_demo_', array('reports', $id_contraparte, $qcontrap->cliente), 'select');
        //
        $nombre_cliente = $qcontrap->nombre_cliente;
        $cli_cuit = Request::input('cli_cuit');
        $cli_codigo = Request::input('cli_codigo');

        return view('/blue/servicios_cliente/contrapartes_reports')->with(compact(['qcontrap', 'reports', 'datos_redireccion', 'nombre_cliente', 'cli_cuit', 'cli_codigo']));
    }

    // FUNCION QUE DEVUELVE EL CERTIFICADO DE FIDECHECK
    public function devoloverCertificadoFidecheck() {
        if (isset($_POST['cuit']) && Misc::validacionesGenerica($_POST['cuit'], 'razon_social') && isset($_POST['contraparte']) && Misc::validacionesGenerica($_POST['contraparte'], 'numero')) {
            $cuit = Request::input('cuit');
            $contraparte = Request::input('contraparte');
            Traducciones::$blade = 'certificado_fidecheck';
            $datos_fidecheck = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('search', null, $contraparte, null, 'P'), 'selectOne');

            // $datos_fidecheck = SQLConnection::backendStoreProcedure('LN_dashboard_cliente', array('FIDECHECK', null, null, null, 194223), 'selectOne');
            if (empty($datos_fidecheck) || is_null($datos_fidecheck)) {
                return 0;
            } else {
                // dd(Session::all());
                return view('/blue/certificado_fidecheck')->with(compact('datos_fidecheck', 'cuit', 'contraparte'));
            }
        } else {
            return 0;
        }
    }

    // FUNCION QUE GENERA EL CERTIFICADO DE FIDECHECK
    public function GenerarFidecheck() {
        //
        // if ( isset($_POST['cuit']) && Misc::validacionesGenerica($_POST['cuit'],'razon_social') &&  isset($_POST['nombre_persona']) && Misc::validacionesGenerica($_POST['nombre_persona'],'nombre') && isset($_POST['contraparte']) && Misc::validacionesGenerica($_POST['contraparte'],'numero') ){
        if (isset($_POST['cuit']) && Misc::validacionesGenerica($_POST['cuit'], 'razon_social') && isset($_POST['contraparte']) && Misc::validacionesGenerica($_POST['contraparte'], 'numero')) {
            $cuit = Request::input('cuit');
            $cliente = Request::input('cliente');
            $nombre_persona = Request::input('nombre_persona') ?? null;
            $pais = Request::input('pais') ?? 'AR';
            $contraparte = Request::input('contraparte');
            // SE HACE UN LLAMADA INTERNA AL FIDECHECK AUTOMATICO
            $request = Request::create('/blue/servicios-contratados-contrapartes/fidecheck/automatico', 'POST', Request::all());
            $response = Route::dispatch($request);
            // 
            SQLConnection::logTrazabilidad('Se generó fidecheck para la contraparte ' . $nombre_persona . '(' . $contraparte . ')', 'GEN_FIDECHECK', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $cliente, $contraparte);
            //
            return 1;
        } else {
            return 0;
        }
    }

    // FUNCION QUE DEVUELVE EL MODAL DE EDICION DE FIDECHECK
    public function editarFidecheckContraparte() {
        if (isset($_POST['contraparte']) && Misc::validacionesGenerica($_POST['contraparte'], 'numero')) {
            $contraparte = Request::input('contraparte');
            $datos_fidecheck = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('search', null, $contraparte, null, 'P'), 'selectOne');
            //
            if (empty($datos_fidecheck) || is_null($datos_fidecheck)) {
                return 1;
            }
            $id = $datos_fidecheck->id_fidecheck;
            $seccion = $datos_fidecheck->seccion;
            $reporte = 1;
            $fidecheck = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('select', $id, $contraparte, '', $seccion), 'selectOne');
            // HACE UNA LLAMADA INTERNA QUE DEVUELVE EL MODAL DE EDICION DEL FIDECHECK DE LA CONTRAPARTE
            return view('/blue/servicios_cliente/fidecheck/fidecheck_edit')->with(compact(['fidecheck', 'reporte']));
            //
            //return $response;
        } else {
            return 0;
        }
    }

    public function editarConstCuitContraparte() {

        Request::validate([
            'idConstCuit' => 'required|mimetypes:image/jpeg,image/png|max:5120', // 5MB
        ]);
        $cuit = Request::input('cli_cuit');
        $nombre_persona = Request::input('nombre_persona');
        $cliente = Request::input('cliente');
        $contraparte = Request::input('contraparte');
    
        if (isset($_FILES['idConstCuit']) && $_FILES['idConstCuit']['error'] === UPLOAD_ERR_OK) {
            $tmpPath = $_FILES['idConstCuit']['tmp_name'];
    
            $baseDir = env('AFIP_URL_COMPARTIDO_PEGAR');
            $subDir = substr($cuit, 0, 2) . '/' . substr($cuit, 2, 3) . '/' . substr($cuit, 5, 3);
            $dir = $baseDir . '/' . $subDir;
    
            if (!is_dir($dir)) mkdir($dir, 0777, true);
    
            $link_pdf = $dir . '/' . $cuit . '.png';   // Archivo final subido
            $filehtml = $dir . '/' . $cuit . '.html';  // HTML temporal para PDF
            $path = $dir . '/' . $cuit . '.pdf';       // PDF generado
    
            $mime = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $tmpPath);
            if (in_array($mime, ['image/jpeg', 'image/png'])) {
                $html = '<html><head><title></title></head><body><div align="center"><img src="file://'.$tmpPath.'" border="0" width="1000" /></div></body></html>';
                file_put_contents($filehtml, mb_convert_encoding($html, 'ISO-8859-1', 'UTF-8'));
                chmod($filehtml, 0777);
    
                exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --viewport-size 1920x1080 --zoom 1 "
                     . escapeshellarg($filehtml) . " " . escapeshellarg($path));
                exec('exiftool -all= '.escapeshellarg($path));
                unlink($filehtml);
            }
    
            if (move_uploaded_file($tmpPath, $link_pdf)) {
                SQLConnection::logTrazabilidad(
                    'Se agregó o modifico constancia de tax id para la contraparte '.$nombre_persona.'('.$contraparte.')',
                    'DELETE_FOTO_PERFIL',
                    Session::get('webdata')['id_menu_plataforma'],
                    Session::get('usuario')->user_id,
                    Session::get('webdata')['servicio_contratado'],
                    $cliente,
                    $contraparte
                );
                return '1';
            } else {
                return '0';
            }
        }
    
        return '0';
    }

    // FUNCION QUE DIBUJA EL CERTIFICADO DE FIDECHECK
    public function certificadoFidecheck() {
        //
        if (isset($_POST['cuit']) && Misc::validacionesGenerica($_POST['cuit'], 'razon_social') && isset($_POST['nombre_persona']) && Misc::validacionesGenerica($_POST['nombre_persona'], 'nombre') && isset($_POST['contraparte']) && Misc::validacionesGenerica($_POST['contraparte'], 'numero')) {
            $cuit = Request::input('cuit');
            $nombre_persona = Request::input('nombre_persona');
            $pais = Request::input('pais') ?? 'AR';
            $contraparte = Request::input('contraparte');
            //
            $propio = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('search', null, $contraparte, null, 'P'), 'selectOne');
            if (!is_null($propio) && !empty($propio)) {
                $datos_fidecheck = $propio;
            } else {
                $PEPController = new PEPControllerNuevo();
                $datos = ($pais=='AR') ? ($PEPController->consultApiWsNueva($cuit, $nombre_persona, $pais)) : ($PEPController->consultApiWsNueva(null, $nombre_persona, null));
                $datos = $datos[0];
                $fidecheck = $datos->fidecheck;
                $idr = 0;
                $seccion = 'P';
                //
                $registros = SQLConnection::backendStoreProcedure('LN_completa_fidecheck', array($contraparte), 'select');
                //
                $lista = (isset($datos->tipoFuente)) ? $datos->tipoFuente : '';
                $pais = (isset($datos->descripcionPais)) ? $datos->descripcionPais : '';
                $cargo = (isset($datos->cargo)) ? $datos->cargo : '';
                $institucion = (isset($datos->institucion)) ? $datos->institucion : '';
                $relacion = (isset($datos->relacion)) ? $datos->relacion : '';
                //
                $detalle = '';
                if ($lista != '') {
                    $detalle .= 'Integrante de listas ' . $lista;
                }
                if ($detalle == '' && $pais != '') {
                    $detalle = 'Integrante de listas';
                }
                if ($pais != '') {
                    $detalle .= ' ' . $pais;
                }
                if ($detalle != '') {
                    $detalle .= ':';
                }
                if ($cargo != '') {
                    $detalle .= ' ' . $cargo;
                }
                if ($institucion != '') {
                    $detalle .= ' de ' . $institucion;
                }
                if ($relacion != '') {
                    $detalle .= ' - Relacionado: ' . $relacion;
                }
                $actualizo = SQLConnection::backendStoreProcedure('LN_actualiza_fidecheck', array($contraparte, $cuit, $seccion, $fidecheck, $detalle, $idr), 'select');
                $datos_fidecheck = SQLConnection::backendStoreProcedure('LN_demo_fidecheck_', array('search', null, $contraparte, null, 'P'), 'selectOne');
            }
            //
            if (is_null($datos_fidecheck) || empty($datos_fidecheck)) {
                return 0;
            }
            // $request = Request::create('/obtener-pep-api','POST',Request::all());
            // $response = Route::dispatch($request)->getContent();
            //$datos = json_decode($response)[0];
            //
            return view('/blue/certificado_fidecheck')->with(compact('datos_fidecheck', 'cuit', 'contraparte'));
        } else {
            return 0;
        }
    }

    // FUNCION QUE GUARDA LA IMAGEN DE ANTECEDENTES PENALES CARGADA
    public function cargarAntecedentesPenales() {
        if (isset($_FILES['archivo_antecedentes_penales']) && $_FILES['archivo_antecedentes_penales']['error'] == 0) {
            $ruta_archivo = $_FILES['archivo_antecedentes_penales']['tmp_name'];
            $contraparte = $_POST['contraparte'];
            $cliente = $_POST['cliente'];
            $iv_busqueda = $_POST['iv_busqueda'];
            //
            $filetype = $_FILES['archivo_antecedentes_penales']['type'];
            //
            $extension = '.png';
            /*switch($filetype){
                case 'image/png':
                    $extension = '.png';
                    break;
                case 'image/jpeg':
                    $extension = '.jpg';
                    break;
                default:
                    $extension = '.png';
                    break;
            }*/
            //
            $file_path = env('PATH_IV_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            $filename = $iv_busqueda . '_penales' . $extension;
            //
            if (!is_dir($file_path)) {
                mkdir($file_path, 0777, true);
            }
            //
            if (file_exists($file_path . $filename)) {
                unlink($file_path . $filename);
            }
            //
            if (move_uploaded_file($ruta_archivo, $file_path . $filename)) {
                return 'Tu archivo se cargo efectivamente';
            } else {
                //return 'No se pudo guardar el archivo';
                return '0';
            }
        }
        //
    }

    // FUNCION QUE BORRA EL ARCHIVO DE ANTECEDENTES PENALES
    public function borrarAntecedentesPenales() {
        $contraparte = $_POST["contraparte"];
        $cliente = $_POST["cliente"];
        $iv_busqueda = $_POST["iv_busqueda"];
        //        
        $files = glob(env('PATH_IV_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $iv_busqueda . '_penales.*');
        //        
        if (!empty($files)) {
            $archivo = $files[0];
            //    
            try {
                unlink($archivo);
            } catch (Exception $e) {
                return 'No se pudo borrar el archivo';
            }
        }
        //        
        return '1';
    }

    ///////////////////////////////////////////////
    ////////// IMAGENES GOOGLE MAPS ///////////////
    ///////////////////////////////////////////////

    // FUNCION QUE DEVUELE LA SECCION DE UBICACION QUE TIENE LAS IMAGENES DE GOOGLE
    public function obtenerSeccionUbicacion($dato_json = false) {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $user_id = Session::get('usuario')->user_id ?? NULL;
            //
            $contrap = SQLConnection::backendStoreProcedure('LN_contrapartes_', array('select', $contraparte, null, null, null, null, null, null, null, null, null, null, null, null, $user_id), 'selectOne');
            // SECCION DOMICILIOS
            $domicilios = SQLConnection::obtenerDomicilios($contrap->identificacion); // STORE PARA DOMICILIOS
            $direccion_elegida = [];
            $direccion = '';
            foreach ($domicilios as $domi) {
                //
                // $domi->domicilio_completo = $domi->domicilio;
                // $domi->domicilio_completo .= ( !is_null($domi->loc_nombre) && !empty($domi->loc_nombre) ) ? ','.$domi->loc_nombre : '';
                // $domi->domicilio_completo .= ( !is_null($domi->prv_nombre) && !empty($domi->prv_nombre) ) ? ','.$domi->prv_nombre : '';
                // $domi->domicilio_completo .= ( !is_null($domi->pai_nombre) && !empty($domi->pai_nombre) ) ? ','.$domi->pai_nombre : '';
                //
                if (empty($direccion)) {
                    if ($domi->tipo_domicilio_nombre == 'MAPAS' && !is_null($domi->domicilio)) {
                        $direccion_elegida = $domi;
                        //$direccion = $domi->domicilio_completo;
                    }
                    /*if( ($domi->tipo_domicilio_nombre == 'LEGAL' && !is_null($domi->domicilio)) || ($domi->tipo_domicilio_nombre == 'FISCAL' && !is_null($domi->domicilio))  ) {
                        $direccion_elegida = $domi;
                        //$direccion = $domi->domicilio_completo;
                    }*/
                } else {
                    break;
                }
            }
            //
            if (isset($direccion_elegida->domicilio)) {
                $direccion = $direccion_elegida->domicilio;
                $direccion .= (!is_null($direccion_elegida->loc_nombre) && !empty($direccion_elegida->loc_nombre)) ? ',' . $direccion_elegida->loc_nombre : '';
                $direccion .= (!is_null($direccion_elegida->prv_nombre) && !empty($direccion_elegida->prv_nombre)) ? ',' . $direccion_elegida->prv_nombre : '';
                $direccion .= (!is_null($direccion_elegida->pai_nombre) && !empty($direccion_elegida->pai_nombre)) ? ',' . $direccion_elegida->pai_nombre : '';
            }
            //
            if (!empty($direccion)) {
                $url = env('URL_GOOGLE_LOCATION');
                $google_key = env('GOOGLE_MAPS_KEY');
                $query = $url . "?query=" . str_replace(' ', '%20', $direccion) . "%20main%20street&key=" . $google_key;
                $llamada = Misc::CURLCall($query, '', 'GET');
                $llamada = json_decode($llamada);
                if (json_last_error() === JSON_ERROR_NONE) {
                    $coordinacion = (isset($llamada->results[0]->geometry)) ? $llamada->results[0]->geometry : '';
                }
            }
            // SE BUSCAN LOS FOTOS DE MAPAS
            $mapas = self::BuscarImagenesMapa($cliente, $contraparte, $gestion);
            $taxid = $contrap->identificacion;
            //
            if ($dato_json) {
                return ([$mapas, $domicilios]);
            } else {
                return view('/blue/servicios_cliente/reportes/seccion_mapas_ubicacion', compact('contraparte', 'cliente', 'gestion', 'mapas', 'direccion', 'domicilios', 'taxid'));
            }
            //return view('/blue/servicios_cliente/reportes/seccion_mapas_ubicacion',compact('contraparte','cliente','gestion','mapas','direccion','domicilios','taxid'));
        } else {
            return 0;
        }
    }

    public function guardarImagenUbicacionOrg() {
        $contraparte = $_POST['contraparte'];
        $cliente = $_POST['cliente'];
        $gestion = $_POST['gestion'];
        //
        $latitude = $_POST['MapsLat'];
        $heading = $_POST['StreetViewHeading'];
        $pitch = $_POST['StreetViewPitch'];
        //
        $direccion = isset($_POST['direccion']) ? $_POST['direccion'] : '';
        $mapTypeId = isset($_POST['mapTypeId']) ? $_POST['mapTypeId'] : 'roadmap';
        // SE GENERAN LAS IMAGENES CON LOS COORDINADAS ELEGIDAS
        $response_mapa_micro = json_decode(self::obtenerYGuardarImagenGoogle('micro_staticmap', $latitude, $mapTypeId));
        $response_mapa_macro = json_decode(self::obtenerYGuardarImagenGoogle('macro_staticmap', $latitude, $mapTypeId));
        $response_streetview = json_decode(self::obtenerYGuardarImagenGoogle('streetview', $latitude, $mapTypeId, $heading, $pitch));
        // VARIABLES QUE REGISTRAN QUE EL PROCESO NO FALLE
        $mapa_micro = '0';
        $mapa_macro = '0';
        $streetview = '0';
        // SE ALMACENA LA IMAGEN DEL MAPA MICRO
        if ($response_mapa_micro->error == 0) {
            $contenido_mapa_micro = mb_convert_encoding($response_mapa_micro->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_mapa_micro = env('PATH_MAP_MICRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_mapa_micro)) {
                try {
                    mkdir($file_path_mapa_micro, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            $archivo_mapa_micro = $file_path_mapa_micro . $gestion . '.png';
            //$archivo_mapa_micro = $file_path_mapa_micro.$iv_busqueda.'.png';
            if (file_exists($archivo_mapa_micro)) {
                unlink($archivo_mapa_micro);
            }
            //
            if (file_put_contents($archivo_mapa_micro, $contenido_mapa_micro)) {
                $mapa_micro = '1';
            }
        }
        // SE ALMACENA LA IMAGEN DEL MAPA MACRO
        if ($response_mapa_macro->error == 0) {
            $contenido_mapa_macro = mb_convert_encoding($response_mapa_macro->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_mapa_macro = env('PATH_MAP_MACRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_mapa_macro)) {
                try {
                    mkdir($file_path_mapa_macro, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            //$archivo_mapa_macro = $file_path_mapa_macro.$iv_busqueda.'.png';
            $archivo_mapa_macro = $file_path_mapa_macro . $gestion . '.png';
            if (file_exists($archivo_mapa_macro)) {
                unlink($archivo_mapa_macro);
            }
            //
            if (file_put_contents($archivo_mapa_macro, $contenido_mapa_macro)) {
                $mapa_macro = '1';
            }
        }
        // SE ALMACENA LA IMAGEN DEL STREETVIEW
        if ($response_streetview->error == 0) {
            $contenido_streetview = mb_convert_encoding($response_streetview->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_streetview = env('PATH_STREETVIEW_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_streetview)) {
                try {
                    mkdir($file_path_streetview, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            //
            $archivo_streetview = $file_path_streetview . $gestion . '.png';
            //$archivo_streetview = $file_path_streetview.$iv_busqueda.'.png';
            //
            if (file_exists($archivo_streetview)) {
                unlink($archivo_streetview);
            }
            //
            if (file_put_contents($archivo_streetview, $contenido_streetview)) {
                $streetview = '1';
            }
        }
        /* //
        if ( !is_null($data_streetview) ){
            //
            $file_path_streetview = env('PATH_STREETVIEW_INFORME').'/'.$cliente.'/'.$contraparte.'/';
            //
            if ( !is_dir($file_path_streetview) ){
                try{
                    mkdir($file_path_streetview,0777,true);
                } catch ( Exception $e ){
                    return 'fallo en almacenar las imagenes';
                }
            }
            //
            $archivo_streetview = $file_path_streetview.$gestion.'.png';
            //
            if ( file_exists($archivo_streetview) ){
                unlink($archivo_streetview);
            }
            //
            if ( file_put_contents($archivo_streetview,base64_decode($data_streetview)) ){
                $streetview = '1';
            }
        } */
        //
        if ($streetview == '1' && $mapa_micro == '1' && $mapa_macro == '1') {
            return '1';
        } else {
            return '0';
        }
    }

    // FUNCION QUE GUARDA LA IMAGEN DEL MAPA Y EL STREETVIEW (NUEVA GENERICA PARA TODOS PRODUCTOS)
    public function guardarImagenUbicacion() {
        $contraparte = $_POST['contraparte'];
        $cliente = $_POST['cliente'];
        $gestion = $_POST['gestion'];
        //
        $latitude = $_POST['MapsLat'];
        $heading = $_POST['StreetViewHeading'];
        $pitch = $_POST['StreetViewPitch'];
        $sin_streetview = (isset($_POST['sin_streetview']) && $_POST['sin_streetview'] == '1') ? TRUE : FALSE;
        // $geolat = $_POST['geolat'];
        // $geolong = $_POST['geolong'];
        //
        //$imagen_streetview = (isset($_POST['streetview']) && isset($_POST['sin_streetview']) && $_POST['sin_streetview'] != '1') ? Request::input('streetview') : null;
        $imagen_streetview = (isset($_POST['streetview']) && !$sin_streetview) ? Request::input('streetview') : null;
        if (!is_null($imagen_streetview)) {
            $data_streetview = explode(';', $imagen_streetview)[1];
            $data_streetview = explode(',', $data_streetview)[1];
            $data_streetview = str_replace(' ', '+', $data_streetview);
        } else {
            $data_streetview = null;
        }
        //
        $direccion = isset($_POST['direccion']) ? $_POST['direccion'] : '';
        $mapTypeId = isset($_POST['mapTypeId']) ? $_POST['mapTypeId'] : 'roadmap';
        // SE GENERAN LAS IMAGENES CON LOS COORDINADAS ELEGIDAS
        $response_mapa_micro = json_decode(self::obtenerYGuardarImagenGoogle('micro_staticmap', $latitude, $mapTypeId));
        $response_mapa_macro = json_decode(self::obtenerYGuardarImagenGoogle('macro_staticmap', $latitude, $mapTypeId));
        // VARIABLES QUE REGISTRAN QUE EL PROCESO NO FALLE
        $mapa_micro = '0';
        $mapa_macro = '0';
        if ($sin_streetview) {
            $streetview = '1';
        } else {
            $streetview = '0';
        }
        // SE ALMACENA LA IMAGEN DEL MAPA MICRO
        if ($response_mapa_micro->error == 0) {
            $contenido_mapa_micro = mb_convert_encoding($response_mapa_micro->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_mapa_micro = env('PATH_MAP_MICRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_mapa_micro)) {
                try {
                    mkdir($file_path_mapa_micro, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            $archivo_mapa_micro = $file_path_mapa_micro . $gestion . '.png';
            if (file_exists($archivo_mapa_micro)) {
                unlink($archivo_mapa_micro);
            }
            //
            if (file_put_contents($archivo_mapa_micro, $contenido_mapa_micro)) {
                $mapa_micro = '1';
            }
        }
        // SE ALMACENA LA IMAGEN DEL MAPA MACRO
        if ($response_mapa_macro->error == 0) {
            $contenido_mapa_macro = mb_convert_encoding($response_mapa_macro->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_mapa_macro = env('PATH_MAP_MACRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_mapa_macro)) {
                try {
                    mkdir($file_path_mapa_macro, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            $archivo_mapa_macro = $file_path_mapa_macro . $gestion . '.png';
            if (file_exists($archivo_mapa_macro)) {
                unlink($archivo_mapa_macro);
            }
            //
            if (file_put_contents($archivo_mapa_macro, $contenido_mapa_macro)) {
                $mapa_macro = '1';
            }
        }
        // SE ALMACENA LA IMAGEN DEL STREETVIEW        
        //
        if (!is_null($data_streetview)) {
            //
            $file_path_streetview = env('PATH_STREETVIEW_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_streetview)) {
                try {
                    mkdir($file_path_streetview, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            //
            $archivo_streetview = $file_path_streetview . $gestion . '.png';
            //
            if (file_exists($archivo_streetview)) {
                unlink($archivo_streetview);
            }
            //
            if (file_put_contents($archivo_streetview, base64_decode($data_streetview))) {
                $streetview = '1';
            }
        }
        // GUARDA DOMICILIO PARA MOSTRAR
        /*$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');
        $dir_sel = trim((explode(',',$direccion)[0]));
        $domicilios = SQLConnection::obtenerDomicilios($contrap->identificacion); // STORE PARA DOMICILIOS
        // dd($domicilios);
        foreach($domicilios as $domi){
            if ($domi->domicilio == $dir_sel && $domi->tipo_domicilio != 'M'){
                $flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('ACTUALIZAR', $contrap->numero, explode(' ',$dir_sel)[0], explode(' ',$dir_sel)[1], '0', '0', $domi->codpos, $domi->loc_nombre, $domi->prv_nombre, $dir_sel,null,null,Session::get('usuario')->user_id,null), 'select');
            }
        }*/
        if ($streetview == '1' && $mapa_micro == '1' && $mapa_macro == '1') {
            // 
            SQLConnection::logTrazabilidad('Se agregó o modifcó mapa', 'ADD_UPD_MAPA', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $cliente, $contraparte);
            // 
            return '1';
        } else {
            return '0';
        }
    }

    // FUNCION QUE BORRA LA IMAGEN DEL MAPA
    public function borrarImagenUbicacion() {
        $contraparte = $_POST['contraparte'];
        $cliente = $_POST['cliente'];
        $gestion = $_POST['gestion'];
        //
        $file_path_mapa_micro = glob(env('PATH_MAP_MICRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '*');
        $file_path_mapa_macro = glob(env('PATH_MAP_MACRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '*');
        $file_path_streetview = glob(env('PATH_STREETVIEW_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '*');
        // $file_path_mapa_micro = glob(env('PATH_MAP_MICRO_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$iv_busqueda.'*');
        // $file_path_mapa_macro = glob(env('PATH_MAP_MACRO_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$iv_busqueda.'*');
        // $file_path_streetview = glob(env('PATH_STREETVIEW_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$iv_busqueda.'*');
        // SE BORRAN LOS ARCHIVOS
        if (!empty($file_path_mapa_micro)) {
            $archivo_mapa_micro = $file_path_mapa_micro[0];
            try {
                unlink($archivo_mapa_micro);
            } catch (Exception $e) {
                return 'No se pudo borrar la imagen estatica del mapa';
            }
        }
        //
        if (!empty($file_path_mapa_macro)) {
            $archivo_mapa_macro = $file_path_mapa_macro[0];
            try {
                unlink($archivo_mapa_macro);
            } catch (Exception $e) {
                return 'No se pudo borrar la imagen estatica del mapa';
            }
        }
        //
        if (!empty($file_path_streetview)) {
            $archivo_streetview = $file_path_streetview[0];
            try {
                unlink($archivo_streetview);
            } catch (Exception $e) {
                return 'No se pudo borrar la imagen de streetview';
            }
        }
        //
        SQLConnection::logTrazabilidad('Se borró mapa', 'DELETE_MAPA', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $cliente, $contraparte);
        // 
        return '1';
    }

    // FUNCION QUE GUARDA LA IMAGEN DEL MAPA Y EL STREETVIEW
    public function guardarImagenUbicacionBackup() {
        $contraparte = $_POST['contraparte'];
        $cliente = $_POST['cliente'];
        $gestion = $_POST['gestion'];
        //
        $latitude = $_POST['MapsLat'];
        $heading = $_POST['StreetViewHeading'];
        $pitch = $_POST['StreetViewPitch'];
        // SE GENERAN LAS IMAGENES CON LOS COORDINADAS ELEGIDAS
        $response_mapa_micro = json_decode(self::obtenerYGuardarImagenGoogle('micro_staticmap', $latitude));
        $response_mapa_macro = json_decode(self::obtenerYGuardarImagenGoogle('macro_staticmap', $latitude));
        $response_streetview = json_decode(self::obtenerYGuardarImagenGoogle('streetview', $latitude, $heading, $pitch));
        // VARIABLES QUE REGISTRAN QUE EL PROCESO NO FALLE
        $mapa_micro = '0';
        $mapa_macro = '0';
        $streetview = '0';
        // SE ALMACENA LA IMAGEN DEL MAPA MICRO
        if ($response_mapa_micro->error == 0) {
            $contenido_mapa_micro = mb_convert_encoding($response_mapa_micro->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_mapa_micro = env('PATH_MAP_MICRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_mapa_micro)) {
                try {
                    mkdir($file_path_mapa_micro, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            $archivo_mapa_micro = $file_path_mapa_micro . $gestion . '.png';
            if (file_exists($archivo_mapa_micro)) {
                unlink($archivo_mapa_micro);
            }
            //
            if (file_put_contents($archivo_mapa_micro, $contenido_mapa_micro)) {
                $mapa_micro = '1';
            }
        }
        // SE ALMACENA LA IMAGEN DEL MAPA MACRO
        if ($response_mapa_macro->error == 0) {
            $contenido_mapa_macro = mb_convert_encoding($response_mapa_macro->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_mapa_macro = env('PATH_MAP_MACRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_mapa_macro)) {
                try {
                    mkdir($file_path_mapa_macro, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            //
            $archivo_mapa_macro = $file_path_mapa_macro . $gestion . '.png';
            if (file_exists($archivo_mapa_macro)) {
                unlink($archivo_mapa_macro);
            }
            //
            if (file_put_contents($archivo_mapa_macro, $contenido_mapa_macro)) {
                $mapa_macro = '1';
            }
        }
        // SE ALMACENA LA IMAGEN DEL STREETVIEW
        if ($response_streetview->error == 0) {
            $contenido_streetview = mb_convert_encoding($response_streetview->respuesta, 'UTF-8', 'ISO-8859-1');
            $file_path_streetview = env('PATH_STREETVIEW_INFORME') . '/' . $cliente . '/' . $contraparte . '/';
            //
            if (!is_dir($file_path_streetview)) {
                try {
                    mkdir($file_path_streetview, 0777, true);
                } catch (Exception $e) {
                    return 'fallo en almacenar las imagenes';
                }
            }
            //
            $archivo_streetview = $file_path_streetview . $gestion . '.png';
            //
            if (file_exists($archivo_streetview)) {
                unlink($archivo_streetview);
            }
            //
            if (file_put_contents($archivo_streetview, $contenido_streetview)) {
                $streetview = '1';
            }
        }
        // 
        if ($streetview == '1' && $mapa_micro == '1' && $mapa_macro == '1') {
            return '1';
        } else {
            return '0';
        }
    }

    // FUNCION QUE BORRA LA IMAGEN DEL MAPA
    public function borrarImagenUbicacionBackup() {
        $contraparte = $_POST['contraparte'];
        $cliente = $_POST['cliente'];
        //$iv_busqueda = $_POST['iv_busqueda'];
        $gestion = $_POST['gestion'];
        //
        // $file_path_mapa_micro = glob(env('PATH_MAP_MICRO_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$contraparte.'*');
        // $file_path_mapa_macro = glob(env('PATH_MAP_MACRO_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$contraparte.'*');
        // $file_path_streetview = glob(env('PATH_STREETVIEW_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$contraparte.'*');
        // $file_path_mapa_micro = glob(env('PATH_MAP_MICRO_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$iv_busqueda.'*');
        // $file_path_mapa_macro = glob(env('PATH_MAP_MACRO_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$iv_busqueda.'*');
        // $file_path_streetview = glob(env('PATH_STREETVIEW_INFORME').'/'.$cliente.'/'.$contraparte.'/'.$iv_busqueda.'*');
        $file_path_mapa_micro = glob(env('PATH_MAP_MICRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '*');
        $file_path_mapa_macro = glob(env('PATH_MAP_MACRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '*');
        $file_path_streetview = glob(env('PATH_STREETVIEW_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '*');
        // SE BORRAN LOS ARCHIVOS
        if (!empty($file_path_mapa_micro)) {
            $archivo_mapa_micro = $file_path_mapa_micro[0];
            try {
                unlink($archivo_mapa_micro);
            } catch (Exception $e) {
                return 'No se pudo borrar la imagen estatica del mapa';
            }
        }
        //
        if (!empty($file_path_mapa_macro)) {
            $archivo_mapa_macro = $file_path_mapa_macro[0];
            try {
                unlink($archivo_mapa_macro);
            } catch (Exception $e) {
                return 'No se pudo borrar la imagen estatica del mapa';
            }
        }
        //
        if (!empty($file_path_streetview)) {
            $archivo_streetview = $file_path_streetview[0];
            try {
                unlink($archivo_streetview);
            } catch (Exception $e) {
                return 'No se pudo borrar la imagen de streetview';
            }
        }
        //
        return '1';
    }

    // FUNCION QUE OBTIENE LA IMAGEN DEL MAPA Y DEL STREETVIEW
    private function obtenerYGuardarImagenGoogle($type, $latitude, $mapTypeId = 'roadmap', $heading = '', $pitch = '') {
        $key = env('GOOGLE_MAPS_KEY');
        $url = env('URL_GOOGLE_STATIC_IMAGE');
        //
        if ($mapTypeId != 'roadmap' && $mapTypeId != 'terrain' && $mapTypeId != 'hybrid' && $mapTypeId != 'satellite') {
            $mapTypeId = 'roadmap';
        }
        //
        if ($type == 'micro_staticmap') {
            $call = $url . "staticmap?center=$latitude&zoom=17&size=600x600&maptype=$mapTypeId&markers=color:red%7C$latitude&key=$key";
        } elseif ($type == 'macro_staticmap') {
            $call = $url . "staticmap?center=$latitude&zoom=15&size=600x600&maptype=$mapTypeId&markers=color:red%7C$latitude&key=$key";
        } elseif ($type == 'streetview') {
            $call = $url . "streetview?size=600x400&location=$latitude&fov=90&heading=$heading&pitch=$pitch&key=$key";
        } else {
            return json_encode(array('error' => 1, 'mensaje' => 'por favor especifique el tipo de imagen'));
        }
        //
        $response = Misc::CURLCall($call, '', 'GET');
        $es_error = 0;
        $test_error = json_decode($response);
        if (json_last_error() === JSON_ERROR_NONE) {
            $es_error++;
        }
        //
        if ($es_error) {
            return json_encode(array('error' => 1, 'mensaje' => 'No se pudo obtener la imagen'));
        } else {
            return json_encode(array('respuesta' => mb_convert_encoding($response, 'UTF-8', 'ISO-8859-1'), 'error' => 0, 'mensaje' => 'exito'));
        }
    }

    // FUNCION QUE BUSCA LAS IMAGENES DE MAPA PARA EL REPORTE
    // PARAMETROS : 1- cliente 2- contraparte 3- gestion
    // DEVUELVE UN OBJETO DE VALORES QUE TIENEN LAS RUTAS DE LOS ARCHIVOS SI EXISTEN , O CON VALORES NULL
    protected function BuscarImagenesMapa($cliente, $contraparte, $gestion) {
        // OBTENER IMAGEN ESTATICA DEL MAPA (MICRO)
        $static_micro_map_exists = FALSE;
        $archivo_static_micro_map = NULL;
        $filepath_static_micro_map = env('PATH_MAP_MICRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '.*';
        $busqueda_archivo_static_micro_map = glob($filepath_static_micro_map);
        if (!empty($busqueda_archivo_static_micro_map)) {
            $static_micro_map_exists = TRUE;
            $ext = pathinfo($busqueda_archivo_static_micro_map[0], PATHINFO_EXTENSION);
            $archivo_static_micro_map = env('RUTA_MAP_MICRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '.' . $ext;
        }
        // OBTENER IMAGEN ESTATICA DEL MAPA (MACRO)
        $static_macro_map_exists = FALSE;
        $archivo_static_macro_map = NULL;
        $filepath_static_macro_map = env('PATH_MAP_MACRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '.*';
        $busqueda_archivo_static_macro_map = glob($filepath_static_macro_map);
        if (!empty($busqueda_archivo_static_macro_map)) {
            $static_macro_map_exists = TRUE;
            $ext = pathinfo($busqueda_archivo_static_macro_map[0], PATHINFO_EXTENSION);
            $archivo_static_macro_map = env('RUTA_MAP_MACRO_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '.' . $ext;
        }
        // OBTENER IMAGEN STREETVIEW DEL MAPA
        $streetview_exists = FALSE;
        $archivo_streetview = NULL;
        $filepath_streetview = env('PATH_STREETVIEW_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '.*';
        $busqueda_archivo_streetview = glob($filepath_streetview);
        if (!empty($busqueda_archivo_streetview)) {
            $streetview_exists = TRUE;
            $ext = pathinfo($busqueda_archivo_streetview[0], PATHINFO_EXTENSION);
            $archivo_streetview = env('RUTA_STREETVIEW_INFORME') . '/' . $cliente . '/' . $contraparte . '/' . $gestion . '.' . $ext;
        }
        //
        return (object) ['micro_map' => $archivo_static_micro_map, 'macro_map' => $archivo_static_macro_map, 'streetview' => $archivo_streetview];
    }

    // AGREGAR NUEVA DIRECCION A LA LISTA DE DOMICILIOS CONOCIDOS O ACTUALIZAR LOS ANTERIORES
    public function addDomicilio() {
        $direccion = json_decode(Request::input('address'));
        $taxid = Request::input('contrap_taxid');
        //
        $piso = Request::input('piso_ubicacion') ?? null;
        $depto = Request::input('depto_ubicacion') ?? null;
        $geolat = Request::input('geolat') ?? null;
        $geolong = Request::input('geolong') ?? null;
        //
        if ($piso == '') {
            $piso = null;
        }
        if ($depto == '') {
            $depto = null;
        }
        if ($geolat == '') {
            $geolat = null;
        }
        if ($geolong == '') {
            $geolong = null;
        }
        //
        $new_direccion = null;
        $new_altura = null;
        $cod_postal = null;
        $new_localidad = null;
        $new_provincia = null;
        $new_pai_nombre = null;
        // DEFINE LAS VARIABLES CON LOS DATOS TRAIDOS DE GOOGLE MAPS
        foreach ($direccion as $dir) {
            if ($dir->types[0] == 'route') {
                $new_direccion = Misc::reemplazarAcentosPorEquivalentes($dir->short_name);

            } elseif ($dir->types[0] == 'street_number') {
                $new_altura = $dir->long_name;
            } elseif ($dir->types[0] == 'administrative_area_level_1') {
                if ($dir->short_name == 'CABA') {
                    // SI ES DE CABA DEFINE LOCALIDAD Y PROVINCIA COMO TAL, SI NO SOLO PROIVNCIA.
                    $new_localidad = $dir->short_name;
                    $new_provincia = $dir->short_name;
                } else {
                    $new_provincia = $dir->long_name;
                }
            } elseif ($dir->types[0] == 'postal_code') {
                if (count_chars($dir->long_name) > 4) {
                    // OBTIENE SOLO LOS NÚMEROS DEL CÓDIGO POSTAL, FORMATO VIEJO
                    preg_match_all('!\d+!', $dir->long_name, $numeros);
                    $cod_postal = $numeros[0][0];
                } else {
                    $cod_postal = $dir->long_name;
                }
            } elseif ($dir->types[0] == 'administrative_area_level_2' && $new_localidad == null) {
                // SI NO SE DEFINIÓ ANTES LOCALIDAD SE DEFINE ACÁ
                $new_localidad = $dir->short_name;
            } elseif ($dir->types[0] == 'country' && $new_pai_nombre == null) {
                $new_pai_nombre = $dir->long_name;
            }

        }
        $domicilios = SQLConnection::obtenerDomicilios($taxid); // STORE PARA DOMICILIOS
        $dir_exist = 0;
        $dir_updt = 0;
        $new_domicilio = strtoupper($new_direccion . ' ' . $new_altura);
        //
        foreach ($domicilios as $domi) {
            if ($domi->tipo_domicilio == 'M') {
                // if (preg_match(('/'.$domi->domicilio.'/'), $new_domicilio)){
                //     // COMPARA SI EXISTE LA DIRECCIÓN EN LA LISTA                    
                //     $dir_updt ++;
                //     $dir_exist ++;
                //     $idDomicilio = $domi->id_domicilio;
                // }
                $dir_updt++;
                $dir_exist++;
                $idDomicilio = $domi->id_domicilio;
            }
        }
        //
        if ($dir_exist == 0 && $dir_updt == 0) {
            // SI LA DIRECCIÓN BUSCADA NO EXISTE EN LA LISTA LA INSERTA
            $flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('INSERTAR', $taxid, $new_direccion, $new_altura, $piso, $depto, $cod_postal, $new_localidad, $new_provincia, $new_domicilio, $geolat, $geolong, Session::get('usuario')->user_id, null, $new_pai_nombre), 'select');
            return 'insert M ok';
        } elseif ($dir_updt != 0) {
            // var_dump($taxid, $new_direccion, $new_altura, $piso, $depto, $cod_postal, $new_localidad, $new_provincia, $new_domicilio,$geolat,$geolong,Session::get('usuario')->user_id,$idDomicilio);die();
            // dd($taxid, $new_direccion, $new_altura, $piso, $depto, $cod_postal, $new_localidad, $new_provincia, $new_domicilio,$geolat,$geolong,Session::get('usuario')->user_id,$idDomicilio,$new_pai_codigo,$new_pai_nombre);
            // SI EXISTE LA DIRECCIÓN BUSCADA EN LA LISTA, Y NO TIENE DATOS GEO, SE ACTUALIZA
            $flds = SQLConnection::backendStoreProcedure('facon_domicilios', array('ACTUALIZAR', $taxid, $new_direccion, $new_altura, $piso, $depto, $cod_postal, $new_localidad, $new_provincia, $new_domicilio, $geolat, $geolong, Session::get('usuario')->user_id, $idDomicilio, $new_pai_nombre), 'select');
            return 'update M ok';
        } else {
            return 'error';
        }
    }

    /////////////////////////////////////////
    ///////// CERTIFICACION ACADEMICA ///////
    /////////////////////////////////////////

    // FUNCION QUE DEVUELVE LA SECCION DE CERTIFICACION ACADEMICA
    public function certificacionAcademica($dato_json = false) {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_certificacion = env('PATH_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $ruta_certificacion = env('RUTA_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $certificacion_existe = false;
            //
            if (file_exists($path_certificacion)) {
                $certificacion_existe = true;
            }
            //
            if ($dato_json) {
                return [$ruta_certificacion];
            }
            //
            return view('/blue/servicios_cliente/reportes/seccion-documentos-facon-inquiro/certificacion_academica', compact('ruta_certificacion', 'certificacion_existe', 'cliente', 'contraparte', 'gestion'));
        }
    }

    // FUNCION QUE GUARDA EL ARCHIVO DE CERTIFICACION ACADEMICA
    public function guardarCertificacionAcademica() {
        if (isset($_FILES['certificacion-academica']) && $_FILES['certificacion-academica']['error'] == 0) {
            $file_tmp = $_FILES['certificacion-academica']['tmp_name'];
            $nombre = $_FILES['certificacion-academica']['name'];
            $extension = substr($nombre, -3);
            $extension_jpeg = substr($nombre, -4);
            if ($extension == 'png' || $extension == 'jpg' || $extension == 'gif' || $extension_jpeg == 'jpeg') {
                //
                $contraparte = Request::input('contraparte');
                $cliente = Request::input('cliente');
                $gestion = Request::input('gestion');
                //
                $path_certificacion = env('PATH_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
                //
                if (!is_dir(env('PATH_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente)) {
                    mkdir(env('PATH_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente);
                }
                //
                if (!is_dir(env('PATH_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte)) {
                    mkdir(env('PATH_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte);
                }
                // SI EXISTE EL ARCHIVO LO BORRA
                if (file_exists($path_certificacion)) {
                    unlink($path_certificacion);
                }
                //
                if (move_uploaded_file($file_tmp, $path_certificacion)) {
                    // 
                    SQLConnection::logTrazabilidad('Se cargó registro de graduados', 'UPLOAD_REG_GRADUADOS', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $cliente, $contraparte);
                    // 
                    return 1;
                } else {
                    return 0;
                }
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    }

    // FUNCION QUE BORRA EL ARCHIVO DE CERTIFICACION ACADEMICA
    public function borrarCertificacionAcademica() {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_certificacion = env('PATH_CERTIFICACION_ACADEMICA') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            //
            if (file_exists($path_certificacion)) {
                unlink($path_certificacion);
            }
            //
            return 1;
        }
    }

    //////////////////////////////////////////
    /////////// REFERENCIAS ACADEMICAS ///////
    //////////////////////////////////////////

    // FUNCION QUE CARGA LAS REFERENCIAS ACADEMICAS
    public function referenciasAcademicas() {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_ref_academica = env('PATH_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $ruta_ref_academica = env('RUTA_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $ref_academica_existe = false;
            //
            if (file_exists($path_ref_academica)) {
                $ref_academica_existe = true;
            }
            //
            return view('/blue/servicios_cliente/reportes/seccion-documentos-facon-inquiro/referencias_academicas', compact('ruta_ref_academica', 'ref_academica_existe', 'cliente', 'contraparte', 'gestion'));
        }
    }

    // FUNCION QUE CARGA LA SECCION DE REFERENCIAS ACADEMICAS
    public function guardarReferenciasAcademicas() {
        if (isset($_FILES['referencias-academicas']) && $_FILES['referencias-academicas']['error'] == 0) {
            $file_tmp = $_FILES['referencias-academicas']['tmp_name'];
            $nombre = $_FILES['referencias-academicas']['name'];
            $extension = substr($nombre, -3);
            $extension_jpeg = substr($nombre, -4);
            if ($extension == 'png' || $extension == 'jpg' || $extension == 'gif' || $extension_jpeg == 'jpeg') {
                //
                $contraparte = Request::input('contraparte');
                $cliente = Request::input('cliente');
                $gestion = Request::input('gestion');
                //
                $path_certificacion = env('PATH_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
                //
                if (!is_dir(env('PATH_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente)) {
                    mkdir(env('PATH_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente);
                }
                //
                if (!is_dir(env('PATH_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte)) {
                    mkdir(env('PATH_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte);
                }
                // SI EXISTE EL ARCHIVO LO BORRA
                if (file_exists($path_certificacion)) {
                    unlink($path_certificacion);
                }
                //
                if (move_uploaded_file($file_tmp, $path_certificacion)) {
                    return 1;
                } else {
                    return 0;
                }
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    }

    // FUNCION QUE BORRA LA SECCION DE REFERENCIAS ACADEMICAS
    public function borrarReferenciasAcademicas() {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_certificacion = env('PATH_REFERENCIAS_ACADEMICAS') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            //
            if (file_exists($path_certificacion)) {
                unlink($path_certificacion);
            }
            //
            return 1;
        }
    }

    //////////////////////////////////////////
    //////// REFERENCIAS LABORALES ///////////
    //////////////////////////////////////////

    // FUNCION QUE DEVUELVE LA SECCION DE REFERENCIAS LABORALES
    public function referenciasLaborales() {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_ref_laboral = env('PATH_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $ruta_ref_laboral = env('RUTA_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $ref_laboral_existe = false;
            //
            if (file_exists($path_ref_laboral)) {
                $ref_laboral_existe = true;
            }
            //
            return view('/blue/servicios_cliente/reportes/seccion-documentos-facon-inquiro/referencias_laborales', compact('ruta_ref_laboral', 'ref_laboral_existe', 'cliente', 'contraparte', 'gestion'));
        }
    }

    // FUNCION QUE CARGA LA SECCION DE REFERENCIAS LABORALES
    public function guardarReferenciasLaborales() {
        if (isset($_FILES['referencias-laborales']) && $_FILES['referencias-laborales']['error'] == 0) {
            $file_tmp = $_FILES['referencias-laborales']['tmp_name'];
            $nombre = $_FILES['referencias-laborales']['name'];
            $extension = substr($nombre, -3);
            $extension_jpeg = substr($nombre, -4);
            if ($extension == 'png' || $extension == 'jpg' || $extension == 'gif' || $extension_jpeg == 'jpeg') {
                //
                $contraparte = Request::input('contraparte');
                $cliente = Request::input('cliente');
                $gestion = Request::input('gestion');
                //
                $path_certificacion = env('PATH_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
                //
                if (!is_dir(env('PATH_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente)) {
                    mkdir(env('PATH_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente);
                }
                //
                if (!is_dir(env('PATH_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte)) {
                    mkdir(env('PATH_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte);
                }
                // SI EXISTE EL ARCHIVO LO BORRA
                if (file_exists($path_certificacion)) {
                    unlink($path_certificacion);
                }
                //
                if (move_uploaded_file($file_tmp, $path_certificacion)) {
                    return 1;
                } else {
                    return 0;
                }
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    }

    // FUNCION QUE BORRA LA SECCION DE REFERENCIAS LABORALES
    public function borrarReferenciasLaborales() {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_certificacion = env('PATH_REFERENCIAS_LABORALES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            //
            if (file_exists($path_certificacion)) {
                unlink($path_certificacion);
            }
            //
            return 1;
        }
    }

    ///////////////////////////////////////////
    ///////// FIDECHECK GRUPO FAMILIAR ////////
    ///////////////////////////////////////////

    // FUNCION QUE DEVUELVE LA SECCION DE FIDECHECK DEL GRUPO FAMILIAR
    public static function fidecheckGrupoFamiliar($dato_json = true) {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_fidecheck_familiar = env('PATH_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $ruta_fidecheck_familiar = env('RUTA_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            $fidecheck_familiar_existe = false;
            //
            if (file_exists($path_fidecheck_familiar)) {
                $fidecheck_familiar_existe = true;
            }
            //
            if ($dato_json) {
                return [$ruta_fidecheck_familiar, $fidecheck_familiar_existe];
            }
            //
            return view('/blue/servicios_cliente/reportes/fidecheck-grupo-familiar', compact('ruta_fidecheck_familiar', 'fidecheck_familiar_existe', 'cliente', 'contraparte', 'gestion'));
        }
    }

    // FUNCION QUE CARGA LA SECCION DE REFERENCIAS LABORALES
    public function guardarfidecheckGrupoFamiliar() {
        if (isset($_FILES['fidecheck-grupo-familiar']) && $_FILES['fidecheck-grupo-familiar']['error'] == 0) {
            $file_tmp = $_FILES['fidecheck-grupo-familiar']['tmp_name'];
            $nombre = $_FILES['fidecheck-grupo-familiar']['name'];
            $extension = substr($nombre, -3);
            $extension_jpeg = substr($nombre, -4);
            if ($extension == 'png' || $extension == 'jpg' || $extension == 'gif' || $extension_jpeg == 'jpeg') {
                //
                $contraparte = Request::input('contraparte');
                $cliente = Request::input('cliente');
                $gestion = Request::input('gestion');
                //
                $path_certificacion = env('PATH_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
                //
                if (!is_dir(env('PATH_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente)) {
                    mkdir(env('PATH_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente);
                }
                //
                if (!is_dir(env('PATH_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte)) {
                    mkdir(env('PATH_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte);
                }
                // SI EXISTE EL ARCHIVO LO BORRA
                if (file_exists($path_certificacion)) {
                    unlink($path_certificacion);
                }
                //
                if (move_uploaded_file($file_tmp, $path_certificacion)) {
                    // 
                    SQLConnection::logTrazabilidad('Se generó fidecheck familiar a contraparte ' . $contraparte, 'GEN_FIDECHECK_FAM', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $cliente, $contraparte);
                    // 
                    return 1;
                } else {
                    return 0;
                }
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    }

    // FUNCION QUE BORRA LA SECCION DE REFERENCIAS LABORALES
    public function borrarfidecheckGrupoFamiliar() {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_certificacion = env('PATH_FIDECHECK_GRUPO_FAMILIAR') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            //
            if (file_exists($path_certificacion)) {
                unlink($path_certificacion);
            }
            //
            return 1;
        }
    }

    /////////////////////////////////////////
    /////// HISTORIAL LABORAL ANSES /////////
    /////////////////////////////////////////

    // FUNCION QUE CARGA LA SECCION DE REFERENCIAS LABORALES
    public function guardarHistorialLaboralAnses() {
        if (isset($_FILES['historial-laboral-anses']) && $_FILES['historial-laboral-anses']['error'] == 0) {
            $file_tmp = $_FILES['historial-laboral-anses']['tmp_name'];
            $nombre = $_FILES['historial-laboral-anses']['name'];
            $extension = substr($nombre, -3);
            $extension_jpeg = substr($nombre, -4);
            if ($extension == 'png' || $extension == 'jpg' || $extension == 'gif' || $extension_jpeg == 'jpeg') {
                //
                $contraparte = Request::input('contraparte');
                $cliente = Request::input('cliente');
                $gestion = Request::input('gestion');
                //
                $path_historial_laboral_anses = env('PATH_HISTORIAL_LABORAL_ANSES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
                //
                if (!is_dir(env('PATH_HISTORIAL_LABORAL_ANSES') . DIRECTORY_SEPARATOR . $cliente)) {
                    mkdir(env('PATH_HISTORIAL_LABORAL_ANSES') . DIRECTORY_SEPARATOR . $cliente);
                }
                //
                if (!is_dir(env('PATH_HISTORIAL_LABORAL_ANSES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte)) {
                    mkdir(env('PATH_HISTORIAL_LABORAL_ANSES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte);
                }
                // SI EXISTE EL ARCHIVO LO BORRA
                if (file_exists($path_historial_laboral_anses)) {
                    unlink($path_historial_laboral_anses);
                }
                //
                if (move_uploaded_file($file_tmp, $path_historial_laboral_anses)) {
                    return 1;
                } else {
                    return 0;
                }
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    }

    // FUNCION QUE BORRA LA SECCION DE REFERENCIAS LABORALES
    public function borrarHistorialLaboralAnses() {
        if (isset($_POST['contraparte']) && isset($_POST['cliente']) && isset($_POST['gestion'])) {
            $contraparte = Request::input('contraparte');
            $cliente = Request::input('cliente');
            $gestion = Request::input('gestion');
            //
            $path_certificacion = env('PATH_HISTORIAL_LABORAL_ANSES') . DIRECTORY_SEPARATOR . $cliente . DIRECTORY_SEPARATOR . $contraparte . DIRECTORY_SEPARATOR . $gestion . '.png';
            //
            if (file_exists($path_certificacion)) {
                unlink($path_certificacion);
            }
            //
            return 1;
        }
    }

    ////////////////////////////////////////
    //////// INFORMES DE CONTRAPARTE ///////
    ////////////////////////////////////////

    // FUNCION QUE GENERA EL PDF DEL INFORME DE INQUIRO
    public function generarYGuardarArchivoInquiro() {
        if (!is_null(Request::input('contraparte'))) {
            $tipo_informe = !is_null(Request::input('tipo_informe')) ? Request::input('tipo_informe') : 'Criminal Check Colombia';
            $contenido = Request::input('contenido') ?? '';
            $contraparte = Request::input('contraparte');
            $user_id = Session::get('usuario')->user_id;
            //
            $grafico_cheques = Request::input('graficoCheques') ?? '';
            $grafico_financiero = Request::input('graficoFinanciero') ?? '';
            $grafico_situaciones = Request::input('graficoSituaciones') ?? '';
            $grafico_garantias = Request::input('graficoGarantias') ?? '';
            //
            $grafico_cheques_brief = Request::input('graficoChequesBrief') ?? '';
            $grafico_financiero_brief = Request::input('graficoFinancieroBrief') ?? '';
            $grafico_empleados_brief = Request::input('graficoEmpleadosBrief') ?? '';
            $grafico_comex_brief = Request::input('graficoComexBrief') ?? '';
            //
            $grafico_capital = Request::input('graficoCapitalTrabajo') ?? '';
            $grafico_patrimonial = Request::input('graficoPatrimonial') ?? '';
            $grafico_solvencia = Request::input('graficoSolvencia') ?? '';
            $grafico_liquidez = Request::input('graficoLiquidezCorriente') ?? '';
            $grafico_endeudamiento = Request::input('graficoEndeudamientoCorriente') ?? '';
            $grafico_performance = Request::input('graficoPerformance') ?? '';
            $grafico_palanca = Request::input('graficoEfectoPalance') ?? '';
            $grafico_ventas = Request::input('graficoVentas') ?? '';
            $grafico_gastos = Request::input('graficoGastosTotales') ?? '';
            //
            $grafico_impo_comex = Request::input('graficoImpoComex') ?? '';
            $grafico_expo_comex = Request::input('graficoExpoComex') ?? '';
            $grafico_expo_pais = Request::input('graficoPaisExpo') ?? '';
            $grafico_impo_pais = Request::input('graficoPaisImpo') ?? '';
            $grafico_rubro_impo = Request::input('graficoRubrosImpo') ?? '';
            $grafico_rubro_expo = Request::input('graficoRubrosExpo') ?? '';
            //
            $grafico_sociedades = Request::input('graficoSociedades') ?? '';
            // DATOS DE CONTRAPARTE
            $qcontrap = 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');
            $dossierdemo = SQLConnection::backendStoreProcedure('LN_demo_', array('check_dossier_cliente', NULL, $qcontrap->cliente), 'selectOne');
            $datos = SQLConnection::backendStoreProcedure('LN_demo_', array('select', $contraparte, NULL, $dossierdemo->producto), 'selectOne');
            //
            $ruta_logo = env('PATH_LOGOS');
            // $ruta_logo .= '/fidelitas_sm_box.png';
            $ruta_logo .= '/fidelitas.png';
            // $logo_header = env('PATH_LOGOS').'/fidelitas.png';
            $logo_header = env('PATH_LOGOS') . '/fidelitas_sm_box.png';
            $cuit = $qcontrap->identificacion;
            $nombre_contraparte = $qcontrap->nombre_persona;
            $nombre_cliente = $qcontrap->nombre_cliente;
            $pais = $qcontrap->country_name;
            $meses = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
            $fecha = $meses[date('n') - 1] . ' del ' . date_create('now')->format('Y');
            //
            $disclaimer = SQLConnection::backendStoreProcedure('dbo.obtener_terminos', array('LEDPDFSPA'), true);
            //
            $html = '';
            $informe = Request::input('informe');
            $id_tipo_informe = Request::input('tipo_informe');
            $nombre_tipo_informe = Request::input('nombre_tipo_informe');
            $html .= view('/blue/reports/export_pdf/plantilla_informe_dossier')->with(compact('contenido', 'grafico_cheques', 'grafico_financiero', 'grafico_situaciones', 'grafico_garantias', 'cuit', 'nombre_contraparte', 'nombre_cliente', 'pais', 'tipo_informe', 'fecha', 'ruta_logo', 'grafico_cheques_brief', 'grafico_financiero_brief', 'grafico_empleados_brief', 'grafico_comex_brief', 'grafico_capital', 'grafico_patrimonial', 'grafico_solvencia', 'grafico_liquidez', 'grafico_endeudamiento', 'grafico_performance', 'grafico_palanca', 'grafico_ventas', 'grafico_gastos', 'grafico_impo_comex', 'grafico_expo_comex', 'grafico_expo_pais', 'grafico_impo_pais', 'grafico_rubro_impo', 'grafico_rubro_expo', 'grafico_sociedades', 'logo_header', 'disclaimer', 'contraparte', 'id_tipo_informe', 'nombre_tipo_informe'))->render();
            //
            $nombre = $cuit . "_contraparte" . ".html";
            //
            $file = ENV('PATH_GENERATE_INFORME') . '/' . $nombre;

            $file_download = ENV('PATH_GENERATE_INFORME') . '/' . str_replace('.html', '.pdf', $nombre);
            //$file_header = ENV('PATH_GENERATE_INFORME').'/'.$cuit.'_header.html';
            //
            //file_put_contents($file, mb_convert_encoding($html, 'UTF-8', 'ISO-8859-1'));
            file_put_contents($file, $html);
            //chmod($file, 0777);
            // 
            exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 -s Letter --enable-local-file-access --margin-bottom 10mm --header-left '[page]/[topage]' --viewport-size 1920x1080 " . ENV('PATH_GENERATE_INFORME') . "/" . $nombre . " " . ENV('PATH_GENERATE_INFORME') . "/" . str_replace('.html', '.pdf', $nombre));
            exec("exiftool -all= ".$file_download);
            // SE GUARDA EL PDF
            $path = env('PATH_DOSSIER') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $qcontrap->gestion . '/' . $qcontrap->gestion . '.pdf';
            $ruta = env('RUTA_DOSSIER') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $qcontrap->gestion . '/' . $qcontrap->gestion . '.pdf';
            if (file_exists($path)) {
                unlink($path);
            }
            //
            if (file_exists($file_download)) {
                if (!is_dir(env('PATH_DOSSIER') . '/' . $qcontrap->cliente)) {
                    mkdir(env('PATH_DOSSIER') . '/' . $qcontrap->cliente);
                }
                //
                if (!is_dir(env('PATH_DOSSIER') . '/' . $qcontrap->cliente . '/' . $contraparte)) {
                    mkdir(env('PATH_DOSSIER') . '/' . $qcontrap->cliente . '/' . $contraparte);
                }
                //
                if (!is_dir(env('PATH_DOSSIER') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $qcontrap->gestion)) {
                    mkdir(env('PATH_DOSSIER') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $qcontrap->gestion);
                }
                //
                if (!copy($file_download, $path)) {
                    throw new Exception('No se pudo guardar el archivo');
                    exit;
                }
                //
                unlink($file_download);
                // 
                SQLConnection::logTrazabilidad('Se generó o regeneró informe dossier de la contraparte ' . $qcontrap->nombre_persona . '(' . $contraparte . ')', 'GEN_REPLACE_IV_PDF', Session::get('webdata')['id_menu_plataforma'], Session::get('usuario')->user_id, Session::get('webdata')['servicio_contratado'], $qcontrap->cliente, $contraparte);
            } else {
                throw new Exception('No se pudo generar el archivo');
                exit;
            }
            //
            $accion = 'generar';
            return view("/blue/servicios_cliente/reportes/modal_informe_dossier")->with(compact('ruta', 'datos', 'dossierdemo', 'accion'));
            //
            /*$file_download  = file_get_contents(ENV('PATH_GENERATE_INFORME').'/'.str_replace('.html', '.pdf', $nombre));
            $response = array(
                'op'=> 'ok',
                'archivo' => 'informe_iv_'.$cuit.'.pdf',
                'file' => "data:application/pdf;base64,".chunk_split(base64_encode($file_download)) 
            );
            die(json_encode($response));*/
        } else {
            exit;
        }
    }

    // FUNCION QUE GENERA EL PDF DEL INFORME DE DOSSIER
    public function generarYGuardarArchivoDossier() {
        if (!is_null(Request::input('contraparte'))) {
            //$tipo_informe = !is_null(Request::input('tipo_informe')) ? Request::input('tipo_informe') : '';
            $tipo_informe = 'Dossier';
            $contenido = Request::input('contenido') ?? '';
            //$iv_busqueda = Request::input('iv_busqueda');
            $contraparte = Request::input('contraparte');
            $user_id = Session::get('usuario')->user_id;
            $cargo_contraparte = !is_null(Request::input('cargo_contraparte')) ? Request::input('cargo_contraparte') : 'Sin cargo registrado';
            $sector_contraparte = !is_null(Request::input('sector_contraparte')) ? Request::input('sector_contraparte') : 'Sin sector registrado';
            //
            $grafico_cheques = Request::input('graficoCheques') ?? '';
            $grafico_financiero = Request::input('graficoFinanciero') ?? '';
            $grafico_situaciones = Request::input('graficoSituaciones') ?? '';
            $grafico_garantias = Request::input('graficoGarantias') ?? '';
            //
            $grafico_cheques_brief = Request::input('graficoChequesBrief') ?? '';
            $grafico_financiero_brief = Request::input('graficoFinancieroBrief') ?? '';
            $grafico_empleados_brief = Request::input('graficoEmpleadosBrief') ?? '';
            $grafico_comex_brief = Request::input('graficoComexBrief') ?? '';
            //
            $grafico_capital = Request::input('graficoCapitalTrabajo') ?? '';
            $grafico_patrimonial = Request::input('graficoPatrimonial') ?? '';
            $grafico_solvencia = Request::input('graficoSolvencia') ?? '';
            $grafico_liquidez = Request::input('graficoLiquidezCorriente') ?? '';
            $grafico_endeudamiento = Request::input('graficoEndeudamientoCorriente') ?? '';
            $grafico_performance = Request::input('graficoPerformance') ?? '';
            $grafico_palanca = Request::input('graficoEfectoPalance') ?? '';
            $grafico_ventas = Request::input('graficoVentas') ?? '';
            $grafico_gastos = Request::input('graficoGastosTotales') ?? '';
            //
            $grafico_impo_comex = Request::input('graficoImpoComex') ?? '';
            $grafico_expo_comex = Request::input('graficoExpoComex') ?? '';
            $grafico_expo_pais = Request::input('graficoPaisExpo') ?? '';
            $grafico_impo_pais = Request::input('graficoPaisImpo') ?? '';
            $grafico_rubro_impo = Request::input('graficoRubrosImpo') ?? '';
            $grafico_rubro_expo = Request::input('graficoRubrosExpo') ?? '';
            //
            $grafico_sociedades = Request::input('graficoSociedades') ?? '';
            // DATOS DE CONTRAPARTE
            //$datos_busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');
            $qcontrap = 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');
            $ruta_logo = env('PATH_LOGOS');
            $ruta_logo .= '/fidelitas.png';
            $logo_header = env('PATH_LOGOS');
            $logo_header .= '/fidelitas_sm_box.png';
            $css = 'FI';
            //$prod = SQLConnection::backendStoreProcedure('LN_productos_', array('select', $datos_busqueda->producto, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'selectOne');
            // dd($prod);
            $dossierdemo = SQLConnection::backendStoreProcedure('LN_demo_', array('check_dossier_cliente', NULL, $qcontrap->cliente), 'selectOne');
            $datos = SQLConnection::backendStoreProcedure('LN_demo_', array('select', $contraparte, NULL, $dossierdemo->producto), 'selectOne');
            //
            /*$ruta_logo = env('PATH_LOGOS');
            if ($prod->producto_id == 'inquiroVitae') {
                $ruta_logo .= '/inquiro_vitae_xl.png';
            } elseif ( $prod->producto_id == 'dossierdemo' ) {
                $ruta_logo .= '/fidelitas.png';
            } else {
                $ruta_logo .= '/fidelitas.png';
            }*/
            $cuit = $qcontrap->identificacion;
            $nombre_contraparte = $qcontrap->nombre_persona;
            $nombre_cliente = $qcontrap->nombre_cliente;
            $pais = $qcontrap->country_name;
            $meses = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
            $fecha = $meses[date('n') - 1] . ' del ' . date_create('now')->format('Y');
            //
            $html = '';
            $html .= view('/blue/reports/export_pdf/plantilla_informe_inquiro')->with(compact('contenido', 'grafico_cheques', 'grafico_financiero', 'grafico_situaciones', 'grafico_garantias', 'cuit', 'nombre_contraparte', 'nombre_cliente', 'pais', 'tipo_informe', 'cargo_contraparte', 'sector_contraparte', 'fecha', 'ruta_logo', 'grafico_cheques_brief', 'grafico_financiero_brief', 'grafico_empleados_brief', 'grafico_comex_brief', 'grafico_capital', 'grafico_patrimonial', 'grafico_solvencia', 'grafico_liquidez', 'grafico_endeudamiento', 'grafico_performance', 'grafico_palanca', 'grafico_ventas', 'grafico_gastos', 'grafico_impo_comex', 'grafico_expo_comex', 'grafico_expo_pais', 'grafico_impo_pais', 'grafico_rubro_impo', 'grafico_rubro_expo', 'grafico_sociedades', 'css', 'logo_header'))->render();
            $nombre = $cuit . "_contraparte" . ".html";
            //
            $file = ENV('PATH_GENERATE_INFORME') . '/' . $nombre;
            $file_download = ENV('PATH_GENERATE_INFORME') . '/' . str_replace('.html', '.pdf', $nombre);
            //$file_header = ENV('PATH_GENERATE_INFORME').'/'.$cuit.'_header.html';
            //
            //file_put_contents($file, mb_convert_encoding($html, 'UTF-8', 'ISO-8859-1'));
            file_put_contents($file, mb_convert_encoding($html, 'UTF-8', 'ISO-8859-1'));
            //chmod($file, 0777);
            // 
            //exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --header-font-size 8 --header-right ' [page] de [toPage]'  --viewport-size 500x750 --zoom 1 ".ENV('PATH_GENERATE_INFORME')."/".$nombre." ".ENV('PATH_GENERATE_INFORME')."/".str_replace('.html', '.pdf', $nombre));
            // exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --header-font-size 8 --header-right ' [page] de [toPage]' --viewport-size 1920x1080 --zoom 1 ".ENV('PATH_GENERATE_INFORME')."/".$nombre." ".ENV('PATH_GENERATE_INFORME')."/".str_replace('.html', '.pdf', $nombre));
            exec("wkhtmltopdf  -d 300 -L 10 -R 10 -T 10 -B 10 -s Letter --encoding UTF-8 --enable-local-file-access --header-font-size 8 --header-right ' [page] de [toPage]' --viewport-size 1920x1080 --zoom 1 " . ENV('PATH_GENERATE_INFORME') . "/" . $nombre . " " . ENV('PATH_GENERATE_INFORME') . "/" . str_replace('.html', '.pdf', $nombre));
            exec('exiftool -all= '. ENV('PATH_GENERATE_INFORME') . "/" . str_replace('.html', '.pdf', $nombre));
            // SE GUARDA EL PDF
            //$path = env('PATH_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte . '/' . $datos_busqueda->gestion .'/'.$iv_busqueda.'.pdf';
            //$path = env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $contraparte . '_' . $qcontrap->gestion.'.pdf';
            $path = env('PATH_DOCUMENTOS') . '/dossier/' . $contraparte . '.pdf';
            $ruta = env('RUTA_DOCUMENTOS') . '/dossier/' . $contraparte . '.pdf';
            //$ruta = env('RUTA_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $contraparte . '_' . $qcontrap->gestion.'.pdf';
            //$ruta = env('RUTA_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte . '/' . $datos_busqueda->gestion .'/'.$iv_busqueda.'.pdf';
            if (file_exists($path)) {
                unlink($path);
            }
            //
            if (file_exists($file_download)) {
                /* if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente)) {
                    mkdir( env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente );
                }
                if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte)) {
                    mkdir( env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte ); 
                } */
                /*if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte. '/'.$datos_busqueda->gestion )) {
                    mkdir( env('PATH_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte.'/'.$datos_busqueda->gestion ); 
                }*/
                //
                if (!copy($file_download, $path)) {
                    throw new Exception('No se pudo guardar el archivo');
                    exit;
                }
                // Actualizar marca de archivo del informe Inquiro Disponible
                //$temp = SQLConnection::backendStoreProcedure('LN_gestiones_', array('upload_inquiro_vitae', $qcontrap->gestion, NULL, $contraparte, NULL, NULL, NULL, $user_id), 'selectOne');
            } else {
                throw new Exception('No se pudo generar el archivo');
                exit;
            }
            //
            //return view("/blue/servicios_cliente/reportes/modal_infomre_inquiro")->with(compact('ruta','datos_busqueda'));
            $accion = 'generar';
            return view("/blue/servicios_cliente/reportes/modal_informe_dossier")->with(compact('ruta', 'datos', 'dossierdemo', 'accion'));
            //
            /*$file_download  = file_get_contents(ENV('PATH_GENERATE_INFORME').'/'.str_replace('.html', '.pdf', $nombre));
            $response = array(
                'op'=> 'ok',
                'archivo' => 'informe_iv_'.$cuit.'.pdf',
                'file' => "data:application/pdf;base64,".chunk_split(base64_encode($file_download)) 
            );
            die(json_encode($response));*/
        } else {
            exit;
        }
    }

    // FUNCION QUE GENERA EL PDF DEL INFORME DE MANERA GENERICA
    public function generarYGuardarArchivoInforme() {
        if (!is_null(Request::input('contraparte'))) {
            $contenido = Request::input('contenido') ?? '';
            $contraparte = Request::input('contraparte');
            $user_id = Session::get('usuario')->user_id;
            $cargo_contraparte = !is_null(Request::input('cargo_contraparte')) ? Request::input('cargo_contraparte') : 'Sin cargo registrado';
            $sector_contraparte = !is_null(Request::input('sector_contraparte')) ? Request::input('sector_contraparte') : 'Sin sector registrado';
            //
            $grafico_cheques = Request::input('graficoCheques') ?? '';
            $grafico_financiero = Request::input('graficoFinanciero') ?? '';
            $grafico_situaciones = Request::input('graficoSituaciones') ?? '';
            $grafico_garantias = Request::input('graficoGarantias') ?? '';
            //
            $grafico_cheques_brief = Request::input('graficoChequesBrief') ?? '';
            $grafico_financiero_brief = Request::input('graficoFinancieroBrief') ?? '';
            $grafico_empleados_brief = Request::input('graficoEmpleadosBrief') ?? '';
            $grafico_comex_brief = Request::input('graficoComexBrief') ?? '';
            //
            $grafico_capital = Request::input('graficoCapitalTrabajo') ?? '';
            $grafico_patrimonial = Request::input('graficoPatrimonial') ?? '';
            $grafico_solvencia = Request::input('graficoSolvencia') ?? '';
            $grafico_liquidez = Request::input('graficoLiquidezCorriente') ?? '';
            $grafico_endeudamiento = Request::input('graficoEndeudamientoCorriente') ?? '';
            $grafico_performance = Request::input('graficoPerformance') ?? '';
            $grafico_palanca = Request::input('graficoEfectoPalance') ?? '';
            $grafico_ventas = Request::input('graficoVentas') ?? '';
            $grafico_gastos = Request::input('graficoGastosTotales') ?? '';
            //
            $grafico_impo_comex = Request::input('graficoImpoComex') ?? '';
            $grafico_expo_comex = Request::input('graficoExpoComex') ?? '';
            $grafico_expo_pais = Request::input('graficoPaisExpo') ?? '';
            $grafico_impo_pais = Request::input('graficoPaisImpo') ?? '';
            $grafico_rubro_impo = Request::input('graficoRubrosImpo') ?? '';
            $grafico_rubro_expo = Request::input('graficoRubrosExpo') ?? '';
            //
            $grafico_sociedades = Request::input('graficoSociedades') ?? '';
            // DATOS DE CONTRAPARTE
            //$datos_busqueda = SQLConnection::backendStoreProcedure('IV_busquedas_', array('search', $iv_busqueda), 'selectOne');
            $qcontrap = 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');
            $cliente = $qcontrap->cliente;
            $reports = SQLConnection::backendStoreProcedure('LN_demo_', array('reports', $contraparte, $qcontrap->cliente), 'selectOne');
            $producto = $reports->producto;
            //
            $cuit = $qcontrap->identificacion;
            $nombre_contraparte = $qcontrap->nombre_persona;
            $nombre_cliente = $qcontrap->nombre_cliente;
            $pais = $qcontrap->country_name;
            $meses = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
            $fecha = $meses[date('n') - 1] . ' del ' . date_create('now')->format('Y');
            //            
            $html = '';
            $nombre = $cuit . "_contraparte" . ".html";
            //
            $prod = SQLConnection::backendStoreProcedure('LN_productos_', array('select', $producto, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL), 'selectOne');
            $ruta_logo = env('PATH_LOGOS');
            if ($prod->producto_id == 'inquiroVitae') {
                $ruta_logo .= '/inquiro_vitae_xl.png';
                //
            } elseif ($prd->producto_id == 'dossierdemo' || $prd->producto_id == 'legajo') {
                $ruta_logo .= '/fidelitas.png';
                $dossierdemo = SQLConnection::backendStoreProcedure('LN_demo_', array('check_dossier_cliente', NULL, $qcontrap->cliente), 'selectOne');
                $datos = SQLConnection::backendStoreProcedure('LN_demo_', array('select', $contraparte, NULL, $dossierdemo->producto), 'selectOne');
                //
                $html .= view('/blue/reports/export_pdf/plantilla_informe_inquiro')->with(compact('contenido', 'grafico_cheques', 'grafico_financiero', 'grafico_situaciones', 'grafico_garantias', 'cuit', 'nombre_contraparte', 'nombre_cliente', 'pais', 'tipo_informe', 'cargo_contraparte', 'sector_contraparte', 'fecha', 'ruta_logo', 'grafico_cheques_brief', 'grafico_financiero_brief', 'grafico_empleados_brief', 'grafico_comex_brief', 'grafico_capital', 'grafico_patrimonial', 'grafico_solvencia', 'grafico_liquidez', 'grafico_endeudamiento', 'grafico_performance', 'grafico_palanca', 'grafico_ventas', 'grafico_gastos', 'grafico_impo_comex', 'grafico_expo_comex', 'grafico_expo_pais', 'grafico_impo_pais', 'grafico_rubro_impo', 'grafico_rubro_expo', 'grafico_sociedades'))->render();
            }
            //
            $file = ENV('PATH_GENERATE_INFORME') . '/' . $nombre;
            $file_download = ENV('PATH_GENERATE_INFORME') . '/' . str_replace('.html', '.pdf', $nombre);
            //$file_header = ENV('PATH_GENERATE_INFORME').'/'.$cuit.'_header.html';
            //
            file_put_contents($file, mb_convert_encoding($html, 'UTF-8', 'ISO-8859-1'));
            //chmod($file, 0777);
            // 
            //exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --header-font-size 8 --header-right ' [page] de [toPage]'  --viewport-size 500x750 --zoom 1 ".ENV('PATH_GENERATE_INFORME')."/".$nombre." ".ENV('PATH_GENERATE_INFORME')."/".str_replace('.html', '.pdf', $nombre));
            // exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 --enable-local-file-access --header-font-size 8 --header-right ' [page] de [toPage]' --viewport-size 1920x1080 --zoom 1 ".ENV('PATH_GENERATE_INFORME')."/".$nombre." ".ENV('PATH_GENERATE_INFORME')."/".str_replace('.html', '.pdf', $nombre));
            exec("wkhtmltopdf -d 300 -L 10 -R 10 -T 10 -B 10 -s Letter --enable-local-file-access --header-font-size 8 --header-right ' [page] de [toPage]' --viewport-size 1920x1080 --zoom 1 " . ENV('PATH_GENERATE_INFORME') . "/" . $nombre . " " . ENV('PATH_GENERATE_INFORME') . "/" . str_replace('.html', '.pdf', $nombre));
            exec('exiftool -all= '. ENV('PATH_GENERATE_INFORME') . "/" . str_replace('.html', '.pdf', $nombre));
            // SE GUARDA EL PDF
            //$path = env('PATH_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte . '/' . $datos_busqueda->gestion .'/'.$iv_busqueda.'.pdf';
            //$path = env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $contraparte . '_' . $qcontrap->gestion.'.pdf';
            $path = env('PATH_DOCUMENTOS') . '/dossier/' . $contraparte . '.pdf';
            $ruta = env('RUTA_DOCUMENTOS') . '/dossier/' . $contraparte . '.pdf';
            //$ruta = env('RUTA_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte . '/' . $contraparte . '_' . $qcontrap->gestion.'.pdf';
            //$ruta = env('RUTA_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte . '/' . $datos_busqueda->gestion .'/'.$iv_busqueda.'.pdf';
            if (file_exists($path)) {
                unlink($path);
            }
            //
            if (file_exists($file_download)) {
                /* if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente)) {
                    mkdir( env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente );
                }
                if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte)) {
                    mkdir( env('PATH_DOSSIER_IV') . '/' . $qcontrap->cliente . '/' . $contraparte ); 
                } */
                /*if (!is_dir(env('PATH_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte. '/'.$datos_busqueda->gestion )) {
                    mkdir( env('PATH_DOSSIER_IV') . '/' . $datos_busqueda->cliente . '/' . $datos_busqueda->contraparte.'/'.$datos_busqueda->gestion ); 
                }*/
                //
                if (!copy($file_download, $path)) {
                    throw new Exception('No se pudo guardar el archivo');
                    exit;
                }
                // Actualizar marca de archivo del informe Inquiro Disponible
                //$temp = SQLConnection::backendStoreProcedure('LN_gestiones_', array('upload_inquiro_vitae', $qcontrap->gestion, NULL, $contraparte, NULL, NULL, NULL, $user_id), 'selectOne');
            } else {
                throw new Exception('No se pudo generar el archivo');
                exit;
            }
            //
            return view("/blue/servicios_cliente/reportes/modal_informe_dossier")->with(compact('ruta', 'datos', 'dossierdemo'));
            //
            /*$file_download  = file_get_contents(ENV('PATH_GENERATE_INFORME').'/'.str_replace('.html', '.pdf', $nombre));
            $response = array(
                'op'=> 'ok',
                'archivo' => 'informe_iv_'.$cuit.'.pdf',
                'file' => "data:application/pdf;base64,".chunk_split(base64_encode($file_download)) 
            );
            die(json_encode($response));*/
        } else {
            exit;
        }
    }

    // FUNCION QUE HACE VISIBLE A LA CONTRAPARTE DE DOSSIER
    public function VisibilizarContraparteDossier() {
        if (!is_null(Request::input('producto')) && !is_null(Request::input('contraparte'))) {
            $producto = Request::input('producto');
            $contraparte = Request::input('contraparte');
            $accion = (NULL !== Request::input('visible')) ? 'activar' : 'desactivar';
            $temp = SQLConnection::backendStoreProcedure('LN_demo_', array($accion, $contraparte, NULL, $producto), 'selectOne');
            return '1';
        } else {
            return '0';
        }

    }

    // AUXILIAR - TRAZABILIDAD (POR AHORA SOLO CONTEMPLA EL DESCARTE DE SECCION DEL INFORME, LUEGO SE PUEDE AGREGAR MAS ACCIONES)
    public function trazabilidadAccionesInforme() {
        $cliente = Request::input('cliente');
        $contraparte = Request::input('contraparte');
        $accion = Request::input('accion');
        $msg = '';
        $tipo_accion = '';
        $fuente = '';
        if ($accion = 'descarta_seccion') {
            $msg = 'Se descartó sección del informe';
            $tipo_accion = 'DESCARTA_SECCION_INFORME';
            $fuente = 'BACK';
        }
        $trazabilidad = SQLConnection::backendStoreProcedure('insertar_trazabilidad', array($msg, $cliente, $tipo_accion, $fuente, $contraparte, Session::get('usuario')->user_id), 'selectOne');
    }

    // FUNCION QUE CAMBIA EL IDIOMA DEL USUARIO
    public function cambiarIdiomaInforme() {
        if (isset($_POST['codigo_idioma']) && ($_POST['codigo_idioma'] == 'spa' || $_POST['codigo_idioma'] == 'eng' || $_POST['codigo_idioma'] == 'por')) {
            $codigo_idioma = Request::input('codigo_idioma');
            Session::get('usuario')->codigo_idioma = $codigo_idioma;
            return 1;
        } else {
            return 0;
        }
    }

    public function reportsTareas() {
        $clientes = SQLConnection::backendStoreProcedure('Clientes_', array(ENV('PLATAFORMA')), 'select');
        //$usuarios = SQLConnection::backendStoreProcedure('LN_Blue', array('USERS_BACK',null,null), 'select');
        $usuarios = SQLConnection::backendStoreProcedure('LN_Blue', array('USERS_BACK', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, env('PLATAFORMA')));
        //$tareas = SQLConnection::backendStoreProcedure('LN_Blue', array('LISTA_TAREAS',null,null), 'select');
        $tareas = SQLConnection::backendStoreProcedure('LN_Tareas_', array('LISTAR', NULL, NULL), 'select');

        return view('/blue/reports/reportes_tareas')->with(compact(['clientes', 'usuarios', 'tareas']));
    }

    public function reportsTareasData() {
        $cliente = Request::input('cliente');
        
        $usuario = Request::input('usuario');
        $tarea = Request::input('tarea');
        $fecha_desde = Request::input('fecha_desde');
        $fecha_hasta = Request::input('fecha_hasta');
        //--Formateo fechas--
        //Formateo fechas
        $dateDesde = \DateTime::createFromFormat('d/m/Y', $fecha_desde);
        $dateHasta = \DateTime::createFromFormat('d/m/Y', $fecha_hasta);

        if (!$dateDesde || !$dateHasta) {
            return response()->json(['error' => 'Formato de fecha inválido'], 400);
        }

        $fecha_desde = $dateDesde->format('Y-m-d 00:00:00');
        $fecha_hasta = $dateHasta->format('Y-m-d 23:59:59');
        //
        $plataforma = Session::get("webdata")["servicio_contratado"];
        $estado = Request::input('estado');
        //-------------------
        $hay = 'SI';
        //

        $listaClientesParam = null;
        $clienteParam = 0;

        if (is_array($cliente)) {
            $listaClientesParam = !empty($cliente) ? implode(',', $cliente) : null;
        } else {
            $clienteParam = $cliente;
        }

        $registros = SQLConnection::backendStoreProcedure('dbo.LN_Blue', array('REPORTE_TAREAS', NULL, NULL, $usuario, NULL, NULL, $tarea, NULL, $estado, NULL, NULL, NULL, $clienteParam, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, $fecha_desde, $fecha_hasta, 0, $plataforma, $listaClientesParam));
        #$registros = SQLConnection::backendStoreProcedure('LN_Blue', array('REPORTE_TAREAS', NULL, NULL, $usuario, NULL, NULL, $tarea, NULL, $estado, NULL, NULL, NULL, $cliente, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, $fecha_desde, $fecha_hasta, 0, $plataforma, $listaClientesParam), 'select');

        if (empty($registros)) {
            $hay = 'NO';
        }
            
        return json_encode(array('data' => $registros, 'hay' => $hay));
    }

    public function reportsTareasDataTat() {
        $contraparte = Request::input('contraparte');
        $tarea = Request::input('tarea');
        $dataTat = SQLConnection::backendStoreProcedure('dbo.LN_TATime_',array('LISTTASKTIME', $contraparte, NULL, NULL, NULL, $tarea));

        return response()->json($dataTat);
    }

    public function reportsTareasDataExcel() {
        if (isset($_POST['data'])) {
            $data = Request::input('data');
            $dataExcel = json_decode($data);
            if (is_array($dataExcel)) {
                $fecha = date("Y-m-d");
                $nombreExcel = 'Reporte_Tareas_' . $fecha . '.xlsx';
                //
                $path_Excel = env('PATH_EXCEL_GEN') . '/' . $nombreExcel;
                if (file_exists($path_Excel)) {
                    unlink($path_Excel);
                }
                //Genero el excel con la libreria nueva
                $xlsx = SimpleXLSXGen::fromArray($dataExcel);
                $xlsx->saveAs(env('PATH_EXCEL_GEN') . '/' . $nombreExcel);

                // return json_encode(['filename' => $nombreExcel, 'path' => ('/excel_pre/'.$nombreExcel)]);
                return json_encode(['filename' => $nombreExcel, 'path' => (env('RUTA_EXCEL_GEN') . '/' . $nombreExcel)]);
            }
        }
    }

    public static function ReportsAsignablesGestion() {
        $id_tipo = Request::input('id_tipo_informe');
        $asig = SQLConnection::backendStoreProcedure('LN_informes', array('asignables_gestion', null, null, null, null, null, $id_tipo), 'select');
        return json_encode($asig);
    }

}