<?php

namespace App\Custom;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;

use App\Http\Controllers\AFIPController;
use App\Models\Mailer;

use PDO;

class SQLConnection
{
    /* Landing INICIO */
    public static function iniciarSesion($usuario, $clave, $simultaneo = 0)
    {
        return DB::selectOne('EXEC dbo.user_login ?,?,?,?,?,?,?,?', array($usuario, $clave, ENV('EXPIRATION_PERIOD'), ENV('QTY_PASSWORD'), ENV('SESSION_TIMEOUT'), $simultaneo, 'LOGIN', NULL));
    }

    public static function cerrarSesion($usuario)
    {
        return DB::selectOne('EXEC dbo.user_login ?,?,?,?,?,?,?,?', array($usuario, NULL, ENV('EXPIRATION_PERIOD'), ENV('QTY_PASSWORD'), ENV('SESSION_TIMEOUT'), NULL, 'LOGOUT', NULL));
    }

    public static function solicitudLegal($nombre, $apellido, $dni, $nac, $edad, $calle, $altura, $piso, $dpto, $localidad, $provincia, $telefono, $celular, $mail, $observaciones)
    {
        return DB::selectOne('EXEC dbo.solicitud_legal ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?', array($nombre, $apellido, $dni, $nac, $edad, $calle, $altura, $piso, $dpto, $localidad, $provincia, $telefono, $celular, $mail, $observaciones));
    }
    public static function verificarPadron($numero, $tipo)
    {
        return DB::select('EXEC dbo.verificar_padron ?,?', array($numero, $tipo));
    }

    public static function verificarHabeas($cuit)
    {
        return DB::selectOne('EXEC dbo.Habeas_Data_Solicitud_chequeo_previo ?', array($cuit));
    }

    public static function habeasData($numero, $tipo, $nombre, $mail, $telefono, $celular, $observaciones)
    {
        return DB::selectOne('EXEC dbo.Habeas_Data_Solicitud ?,?,?,?,?,?,?,?,?', array($numero, $tipo, $nombre, $mail, $telefono, $nombre, $mail, $celular, $observaciones));
    }
    public static function habeasDataFile($id_habeas, $nombre, $file_extension)
    {
        return DB::selectOne('EXEC dbo.Habeas_Data_Archivos ?,?,?', array($id_habeas, $nombre, $file_extension));
    }
    /* Landing FIN */
    //public static function obtenerCliente($id_usuario=0){
    //return DB::select('EXEC dbo.obtener_cliente_usuario ?', array($id_usuario));
    //}

    public static function obtenerCliente($id_producto, $id_usuario = 0)
    {
        return DB::select('EXEC dbo.obtener_cliente_usuario ?,?', array($id_usuario, $id_producto));
    }

    public static function consumirServicio($user_id, $cuit, $id_producto)
    {
        $p_ip = $_SERVER['REMOTE_ADDR'];
        return DB::selectOne('EXEC dbo.consumir_servicio ?,?,?,?', array($user_id, $cuit, $id_producto, $p_ip));
    }

    public static function cambiarClave($usuario, $clave_anterior, $clave_nueva)
    {
        return DB::selectOne('EXEC dbo.user_login ?,?,?,?,?,?,?,?', array($usuario, $clave_anterior, ENV('EXPIRATION_PERIOD'), ENV('QTY_PASSWORD'), ENV('SESSION_TIMEOUT'), ENV('SIMUL_LOGIN'), 'CHANGEPWD', $clave_nueva));
    }

    public static function enviarRestablecerClave($mail)
    {
        return DB::selectOne('EXEC dbo.recuperar_usuario_email ?', array($mail));
    }

    public static function restablecerClave($usuario, $clave_nueva)
    {
        return DB::selectOne('EXEC dbo.user_login ?,?,?,?,?,?,?,?', array($usuario, '', ENV('EXPIRATION_PERIOD'), ENV('QTY_PASSWORD'), ENV('SESSION_TIMEOUT'), ENV('SIMUL_LOGIN'), 'RETRPWD', $clave_nueva));
    }

    public static function obtenerTerminos()
    {
        return DB::selectOne('EXEC dbo.obtener_terminos ?', array('FI'));
    }

    /*Monitoreo Inicio */

    public static function obtenerSeccionesEnMantenimientoUsuarioCuit($user_id, $cuit)
    {
        return DB::select('EXEC dbo.obtener_secciones_en_mantenimiento_usuario_cuit ?,?', array($user_id, $cuit));
    }

    public static function listadoMantenimientoCheques($user_id)
    {
        return DB::select('EXEC dbo.listado_mantenimiento_cheques ?', array($user_id));
    }

    public static function obtenerNovedadesCliente($client_id)
    {
        return DB::select('EXEC dbo.obtener_novedades_cliente2 ?', array($client_id));
    }
    public static function obtenerNovedadesHTML($cuit, $seccion_mantenimiento, $tabla, $fecha)
    {
        return DB::select('EXEC dbo.obtener_novedades_html ?,?,?,?', array($cuit, $seccion_mantenimiento, $tabla, $fecha));
    }

    public static function listadoMantenimientoCuits($client_id)
    {
        return DB::select('EXEC dbo.listado_mantenimiento_cuits ?', array($client_id));
    }

    public static function listadoMantenimientoCuitsUno($client_id, $cuit)
    {
        return DB::select('EXEC dbo.listado_mantenimiento_cuits_uno ?,?', array($client_id, $cuit));
    }

    public static function eliminarMonitoreoId($id_mantenimiento)
    {
        return DB::select('EXEC dbo.eliminar_monitoreo_id ?', array($id_mantenimiento));
    }

    public static function eliminarMonitoreo($cuit, $id_usuario, $id_cliente, $seccion, $fecha_vigencia)
    {
        return DB::select('EXEC dbo.eliminar_monitoreo ?,?,?,?,?', array($cuit, $id_usuario, $id_cliente, $seccion, $fecha_vigencia));
    }

    public static function obtenerNovedadCheque($cuit, $nro_cheque)
    {
        return DB::selectOne('EXEC dbo.obtener_novedad_cheque ?,?', array($cuit, $nro_cheque));
    }

    /*Monitoreo Fin */
    public static function obtenerEntidadesBancarias()
    {
        return DB::select('EXEC dbo.obtener_EntidadesBancarias');
    }
    /*SCORE inicio */
    public static function obtenerTablaScore()
    {
        return DB::select('EXEC dbo.obtener_tabla_score', array());
    }

    public static function obtenerPorcentajeScorePorAfectacion()
    {
        return DB::select('EXEC dbo.obtener_porcentaje_score_por_afectacion', array());
    }

    public static function obtenerScore($cuit, $fisica)
    {
        return DB::select('EXEC dbo.obtener_score ?,?', array($cuit, $fisica));
    }

    public static function obtenerScoreFiscales($cuit, $fisica)
    {
        return DB::select('EXEC dbo.obtener_score_fiscales ?,?', array($cuit, $fisica));
    }

    public static function obtenerScoreContable($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_score_contable ?', array($cuit));
    }


    public static function obtenerCardScore($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_card_score ?', array($cuit));
    }

    public static function obtenerCardScorePF($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_card_score_pf ?', array($cuit));
    }

    public static function obtenerPorcentajePorGrupo($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_porcentaje_por_grupo ?', array($cuit));
    }
    public static function calcularScore($codigo, $grupo, $dias, $cant)
    {
        return DB::selectOne('EXEC dbo.calcular_score ?,?,?,?', array($codigo, $grupo, $dias, $cant));
    }

    public static function calcularScoreContable($grupo, $liquidez_corriente, $solvencia_patrimonial, $endeudamiento_corriente, $capital_de_trabajo_activo, $rentabilidad_bruta, $utilidad_neta)
    {
        return DB::selectOne('EXEC dbo.calcular_score_contable ?,?,?,?,?,?,?', array($grupo, $liquidez_corriente, $solvencia_patrimonial, $endeudamiento_corriente, $capital_de_trabajo_activo, $rentabilidad_bruta, $utilidad_neta));
    }
    /*SCORE fin */

    public static function obtenerCardBancos($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_card_bancos ?', array($cuit));
    }

    public static function obtenerCardFiscales($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_card_fiscales ?', array($cuit));
    }

    public static function obtenerSircreb($cuit)
    {
        return DB::select('EXEC dbo.obtener_sircreb ?', array($cuit));
    }

    public static function obtenerCardFiscalesPF($cuit)
    {
        return DB::select('EXEC dbo.obtener_card_fiscales_pf ?', array($cuit));
    }

    public static function obtenerCardComex($cuit, $anio)
    {
        return DB::select('EXEC dbo.obtener_card_comex ?,?', array($cuit, $anio));
    }

    public static function obtenerCardPersonasRelacionadas($cuit)
    {
        return DB::select('EXEC dbo.obtener_personas_relacionadas ?', array($cuit));
    }

    public static function obtenerCardSociedadesRelacionadas($cuit, $tipo_persona)
    {
        return DB::select('EXEC dbo.obtener_card_vinculaciones ?,?', array($cuit, $tipo_persona));
    }

    public static function grafoSociedades($cuit, $tipo_persona)
    {
        return DB::select('EXEC dbo.grafo_sociedades ?,?', array($cuit, $tipo_persona));
    }

    public static function obtenerRazonSocial($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_razon_social ?', array($cuit));
    }

    public static function obtenerCardChequesRechazados($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_card_cheques_rechazados ?', array($cuit));
    }

    public static function graficoCardChequesRechazados($cuit)
    {
        return DB::select('EXEC dbo.grafico_card_cheques_rechazados ?', array($cuit));
    }

    public static function obtenerBrief($cuit)
    {
        return DB::select('EXEC dbo.obtener_brief ?', array($cuit));
    }

    public static function obtenerGarantiasBrief($cuit)
    {
        return DB::select('EXEC dbo.obtener_garantias_brief ?', array($cuit));
    }

    public static function obtenerFinancieroBrief($cuit)
    {
        return DB::select('EXEC dbo.obtener_financiero_brief ?', array($cuit));
    }

    public static function obtenerSituacionesBrief($cuit)
    {
        return DB::select('EXEC dbo.obtener_situaciones_brief ?', array($cuit));
    }

    public static function obtenerInscripciones($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_inscripciones ?', array($cuit));
    }

    public static function obtenerClae($cuit)
    {
        return DB::select('EXEC dbo.obtener_clae ?', array($cuit));
    }

    public static function obtenerPersona($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_persona ?', array($cuit));
    }

    public static function obtenerDefuncion($dni)
    {
        return DB::selectOne('EXEC dbo.obtener_defuncion ?', array($dni));
    }

    public static function obtenerTipoPersona($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_tipo_persona ?', array($cuit));
    }
    public static function obtenerTieneNacimiento($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_tiene_nacimiento ?', array($cuit));
    }

    public static function actualizarDatosConPadron($cuit, $user_id)
    {
        return DB::selectOne('EXEC dbo.actualizar_datos_con_padron ?,?', array($cuit, $user_id));
    }


    public static function obtenerSintomasDeVitalidad($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_sintomas_de_vitalidad ?', array($cuit));
    }

    public static function obtenerParticipacionSociosDirectores($cuit)
    {
        return DB::select('EXEC dbo.obtener_participacion_socios_directores ?', array($cuit));
    }

    public static function obtenerEmpleadoDe($cuit)
    {
        return DB::select('EXEC dbo.obtener_empleado_de ?', array($cuit));
    }

    public static function backendJuiciosDemandadoActor($id_juicio, $demact, $cuit)
    {
        return DB::select('EXEC dbo.obtener_juicios_demandado_actor ?,?,?', array($id_juicio, $demact, $cuit));
    }

    public static function obtenerJuiciosDemandadoActor($id_juicio, $demact, $cuit)
    {
        return DB::select('EXEC dbo.obtener_juicios_demandado_actor ?,?,?', array($id_juicio, $demact, $cuit));
    }

    public static function obtenerRemates($cuit, $cuit_enmascarado, $dni)
    {
        return DB::select('EXEC dbo.obtener_remates ?,?,?', array($cuit, $cuit_enmascarado, $dni));
    }

    public static function obtenerConcursosQuiebras($cuit)
    {
        return DB::select('EXEC dbo.obtener_concursos_quiebras ?', array($cuit));
    }

    public static function obtenerArba($cuit)
    {
        return DB::select('EXEC dbo.obtener_arba ?', array($cuit));
    }

    public static function obtenerDomicilios($cuit)
    {
        return DB::select('EXEC dbo.sp_obtener_domicilios ?', array($cuit));
    }

    //public static function obtenerDomicilios($cuit){
    //return DB::select('EXEC dbo.obtener_domicilios ?,?,?', array($cuit,1,null));
    //}

    public static function obtenerOtrosDomicilios($cuit)
    {
        return DB::select('EXEC dbo.obtener_otros_domicilios ?', array($cuit));
    }

    //el 5 es el ID de comerciales de la tabla productos_secciones.
    public static function obtenerDatosGenerales($cuit)
    {
        return DB::select('EXEC dbo.backend_datos_generales ?,?,?,?,?', array(null, $cuit, 1, ENV('ID_INFORME_COMERCIAL'), 5));
    }

    public static function obtenerConsultasPorRamos($cuit)
    {
        return DB::select('EXEC dbo.obtener_consulta_por_ramos ?', array($cuit));
    }
    public static function backendSeguros($cuit)
    {
        return DB::select('EXEC dbo.backend_seguros ?,?,?', array(null, $cuit, '1'));
    }
    /* Contables  Inicio */

    public static function obtenerNotasContables($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_notas_contables ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerComentariosContables($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_comentarios_contables ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerActivoResumido($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_activo_resumido ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerPasivoResumido($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_pasivo_resumido ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerEstadoDeResultadosResumido($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_estado_de_resultados_resumido ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerIndicesDeGestionResumido($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_indices_de_gestion_resumido ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerActivo($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_activo_contables ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerPasivo($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_pasivo_contables ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerEstadoDeResultados($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_estado_de_resultados_contables ?,?', array($cuit, $ver_todo));
    }

    public static function obtenerIndicesDeGestion($cuit, $ver_todo)
    {
        return DB::select('EXEC dbo.obtener_indices_de_gestion ?,?', array($cuit, $ver_todo));
    }
    /* Contables  Fin */

    public static function obtenerSociedades($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_sociedades ?', array($cuit));
    }

    public static function obtenerSociosDirectores($cuit, $tipo_persona)
    {
        return DB::select('EXEC dbo.obtener_socios_directores_test ?,?', array($cuit, $tipo_persona));
    }

    public static function obtenerAccionistasDe($cuit)
    {
        return DB::select('EXEC dbo.obtener_accionistas_de ?', array($cuit));
    }

    public static function obtenerAccionistas($cuit)
    {
        return DB::select('EXEC dbo.obtener_accionistas ?', array($cuit));
    }

    public static function obtenerAccionistasNew($cuit)
    {
        return DB::select('EXEC dbo.obtener_accionistas_new ?', array($cuit));
    }

    public static function obtenerEdictos($cuit)
    {
        return DB::select('EXEC dbo.obtener_edictos ?', array($cuit));
    }

    public static function obtenerEdictosHomonimos($palabras)
    {
        return DB::select('EXEC dbo.obtener_edictos_homonimos ?', array($palabras));
    }

    public static function obtenerEdictosMencionado($palabras)
    {
        return DB::select('EXEC dbo.obtener_edictos_mencionado ?', array($palabras));
    }

    public static function obtenerCheques($cuit, $id_persona = 0)
    {
        return DB::select('EXEC dbo.obtener_cheques ?,?', array($cuit, $id_persona));
    }

    public static function monitorearCheques($cuit, $id_usuario, $id_cliente, $numero_cheque, $fecha_cheque, $importe, $id_banco, $seccion)
    {
        return DB::selectOne('EXEC dbo.monitorear_cheques ?,?,?,?,?,?,?,?', array($cuit, $id_usuario, $id_cliente, $numero_cheque, $fecha_cheque, $importe, $id_banco, $seccion));
    }

    public static function obtenerVinculaciones($cuit)
    {
        return DB::select('EXEC dbo.obtener_vinculaciones ?', array($cuit));
    }

    public static function obtenerVinculacionesIndirectas($cuit)
    {
        return DB::select('EXEC dbo.obtener_vinculaciones_indirectas ?', array($cuit));
    }

    public static function monitorearCuit($cuit, $id_usuario, $id_cliente, $seccion, $fecha_vigencia, $obs)
    {
        return DB::selectOne('EXEC dbo.monitorear_cuit ?,?,?,?,?,?', array($cuit, $id_usuario, $id_cliente, $seccion, $fecha_vigencia, $obs));
    }

    public static function obtenerEmpleados($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_empleados ?', array($cuit));
    }

    public static function obtenerPeriodoMaximo($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_periodo_maximo ?', array($cuit))->periodo_maximo;
    }

    public static function obtenerBancos($cuit)
    {
        return DB::select('EXEC dbo.obtener_bancos_test ?', array($cuit));
    }

    public static function obtenerCancelacion($cuit)
    {
        return DB::select('EXEC dbo.obtener_cancelacion ?', array($cuit));
    }

    public static function obtenerStatusBancario($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_status_bancario ?', array($cuit));
    }

    public static function obtenerSituacionesBancos($cuit)
    {
        return DB::select('EXEC dbo.obtener_situaciones_bancos_test2 ?', array($cuit));
    }
    public static function obtenerComex($cuit)
    {
        return DB::select('EXEC dbo.obtener_comex ?', array($cuit));
    }
    public static function obtenerComexPais($cuit)
    {
        return DB::select('EXEC dbo.obtener_comex_pais ?', array($cuit));
    }
    public static function obtenerComexRubros($cuit)
    {
        return DB::select('EXEC dbo.obtener_comex_rubros ?', array($cuit));
    }
    public static function obtenerComexTotales($cuit, $meses)
    {
        return DB::selectOne('EXEC dbo.obtener_comex_totales ?,?', array($cuit, $meses));
    }
    public static function obtenerGraficoExportaciones($cuit)
    {
        return DB::select('EXEC dbo.obtener_grafico_exportaciones ?', array($cuit));
    }

    public static function obtenerSeccionesHabilitadasInforme($user_id, $id_informe)
    {
        return DB::select('EXEC dbo.obtener_secciones_habilitadas_informe ?,?', array($user_id, $id_informe));
    }

    public static function obtenerMenu()
    {
        $usuario = Session::get('usuario');
        return DB::select('EXEC dbo.obtener_menu ?,?', array($usuario->user_id, $usuario->cliente->id_cliente));
    }

    public static function obtenerPerfil($user_id)
    {
        return DB::selectOne('EXEC dbo.obtener_perfil ?', array($user_id));
    }

    /*public static function editarPerfilUsuario($user_id,$usuario,$nombre,$apellido,$email,$fecha_de_nacimiento,$cargo){
           return DB::selectOne('EXEC dbo.editar_perfil_usuario ?,?,?,?,?,?,?', array($user_id,$usuario,$nombre,$apellido,$email,$fecha_de_nacimiento,$cargo));
       }*/

    public static function obtenerSecciones($producto)
    {
        return DB::select('EXEC dbo.obtener_secciones ?', array($producto));
    }

    public static function obtenerPrensa($buscar, $desde, $hasta)
    {
        return DB::connection('prensa')->select('EXEC dbo.Fidelitas_obtener_prensa ?,?,?', array($buscar, $desde, $hasta));
    }
    /*
       public static function busquedaPadron($cuit=NULL,$dni=NULL,$razon_social=NULL,$todos_los_paises){
           $buscador_cuit 					= ($cuit)  					? true : null;
           $buscador_dni 					= ($dni)  					? true : null;
           $buscador_razon_social 	= ($razon_social)  	? true : null;

            if($buscador_cuit){
                $cuit = Misc::parsearBusquedaPadron($cuit);
            }else if($buscador_dni){
                $dni = Misc::parsearBusquedaPadron($dni);
            }else if($buscador_razon_social){
                $razon_social = Misc::parsearBusquedaPadron($razon_social);
            }
           return DB::select('EXEC dbo.buscar_en_padron ?,?,?,?', array($cuit,$dni,$razon_social,$todos_los_paises));
       }*/

    public static function obtenerSeccionesMantenimiento($user_id)
    {
        return DB::select('EXEC dbo.obtener_secciones_mantenimiento ?', array($user_id));
    }

    public static function insertarRegistroActividad($tipo_registro, $registro)
    {
        $usuario = Session::get('usuario');
        $ip = $_SERVER['REMOTE_ADDR'];
        return DB::selectOne('EXEC dbo.insertar_registro_actividad ?,?,?,?,?', array($usuario->cliente['client_id'], $usuario->user_id, $tipo_registro, $registro, $ip));
    }

    /*Public static function obtenerConsultasRealizadas($user_id){
           return DB::select('EXEC dbo.obtener_consultas_realizadas ?', array($user_id));
       }*/

    public static function obtenerRegistroActividad($user_id, $id_cliente)
    {
        return DB::select('EXEC dbo.obtener_registro_actividad ?,?', array($user_id, $id_cliente));
    }

    public static function obtenerRegistroConsumos($id_cliente, $user_id, $desde, $hasta, $prod, $tipo)
    {
        return DB::select('EXEC dbo.obtener_registro_consumos ?,?,?,?,?,?', array($id_cliente, $user_id, $desde, $hasta, $prod, $tipo));
    }

    public static function obtenerUltimoPeriodoProcesado($fuente)
    {
        return DB::selectOne('EXEC dbo.obtener_ultimo_periodo_procesado ?', array($fuente))->fecha_informacion;
    }

    public static function obtenerSinonimos($string)
    {
        return DB::selectOne('EXEC dbo.obtener_sinonimos ?', array($string));
    }

    public static function obtenerOmitidos()
    {
        return DB::select('EXEC dbo.obtener_omitidos');
    }

    public static function obtenerJuiciosHomonimos($string, $demandado_actor)
    {
        return DB::select('EXEC dbo.obtener_juicios_homonimos ?,?', array($string, $demandado_actor));
    }

    public static function obtenerDatosCliente($usuario)
    {
        return DB::selectOne('EXEC dbo.obtener_datos_cliente ?', array($usuario));
    }

    //test pato
    public static function obtenerActivoPasivo($cuit)
    {
        return DB::select('EXEC dbo.obtener_activopasivo ?', array($cuit));
    }

    public static function obtenerComentario($cuit, $cliente)
    {
        return DB::select('EXEC dbo.obtener_comentario ?,?', array($cuit, $cliente));
    }

    public static function cargaComentario($user_id, $cliente, $msj_comentario, $cuit)
    {
        return DB::selectOne('EXEC dbo.carga_comentario ? ,? ,? ,?', array($user_id, $cliente, $msj_comentario, $cuit));
    }

    public static function obtenerHistoricoMonitoreo($user_id, $fecha_desde, $fecha_hasta, $cuit)
    {
        return DB::select('EXEC dbo.obtener_historico_monitoreo ? ,?, ?, ?', array($user_id, $fecha_desde, $fecha_hasta, $cuit));
    }

    public static function busquedaPadronAutocomplete($input_autocomplete, $todos_los_paises)
    {
        $input_autocomplete = Misc::parsearBusquedaPadron($input_autocomplete);
        if ($input_autocomplete == "") {
            return [];
        }
        return DB::select('EXEC dbo.busqueda_padron_autocompletar ?,?', array($input_autocomplete, $todos_los_paises));
    }

    public static function busquedaPadronAutocompleteCMS($input_autocomplete, $todos_los_paises)
    {
        $input_autocomplete = Misc::parsearBusquedaPadron($input_autocomplete);
        if ($input_autocomplete == "") {
            return [];
        }
        return DB::select('EXEC dbo.busqueda_padron_autocompletar_cms ?,?', array($input_autocomplete, $todos_los_paises));
    }

    public static function busquedaPadron($input_autocomplete, $todos_los_paises)
    {
        $result = [];
        $input_autocomplete = Misc::limpiarString($input_autocomplete);
        $cuit = 0;
        $cuit_length = 0;

        if (is_numeric($input_autocomplete)) {
            $cuit = $input_autocomplete;
            $cuit_length = strlen((string) $input_autocomplete);
        }

        $diccionario = Misc::diccionarioRazonesSociales($input_autocomplete);
        if ($diccionario === false) {
            $diccionario = [$input_autocomplete];
        }

        if (is_array($diccionario)) {
            foreach ($diccionario as $razon_social) {
                $dni = 0;
                if (strlen($razon_social) <= 8 && is_numeric($razon_social)) {
                    $dni = 1;
                }
                $aux = DB::select('EXEC dbo.busqueda_padron_por_igualdad ?,?,?', array($razon_social, $todos_los_paises, $dni));
                $result = array_merge($result, $aux);
            }
        }

        if ($dni == 1 && sizeof($result) > 0) {
            return $result;
        }
        $string = Misc::removerDiccionarioRazonesSociales($input_autocomplete);
        $input_autocomplete = ($string !== false) ? $string : $input_autocomplete;
        $input_autocomplete = Misc::parsearBusquedaPadron($input_autocomplete);
        if ($input_autocomplete == "") {
            return $result;
        }
        $aux = DB::select('EXEC dbo.busqueda_padron ?,?', array($input_autocomplete, $todos_los_paises));
        $result = array_values(array_unique(array_merge($result, $aux), SORT_REGULAR));
        //if((sizeof($result) == 0) && ($cuit_length == 11) ) {
        if ((sizeof($result) == 0 || $result[0]->nombre_persona == '') && ($cuit_length == 11)) {
            if (ENV('SERVICIOS_AFIP') == true) {
                $inserto = AFIPController::obtenerPadron($cuit, true);
                if (is_array($inserto)) {
                    $resp = json_decode($inserto[0]);
                } else {
                    $resp = json_decode($inserto);
                }
                if (isset($resp->error)) {
                    /* nuevo para que marque como habilitado = 0 en padrones si el nombre esta vacio y afip devilvio error */
                    if (sizeof($result) > 0 && $result[0]->nombre_persona == '') {
                        $aux = DB::select('EXEC dbo.servicios_afip_error ?', array($cuit));
                    }
                    return false;
                }
                return self::busquedaPadron($input_autocomplete, $todos_los_paises);
            }
        }
        return $result;
    }


    // Función agregada por Diego - copia de busquedaPadron de Backend
    public static function busquedaPadronPersonas($cuit = NULL, $dni = NULL, $razon_social = NULL)
    {
        $buscador_cuit = ($cuit) ? true : null;
        $buscador_dni = ($dni) ? true : null;
        $buscador_razon_social = ($razon_social) ? true : null;

        if ($buscador_cuit) {
            $cuit = Misc::parsearBusquedaPadron($cuit);
            if ($cuit == "") {
                return [];
            }
        } else if ($buscador_dni) {
            $dni = Misc::parsearBusquedaPadron($dni);
            if ($dni == "") {
                return [];
            }
        } else if ($buscador_razon_social) {
            $razon_social = Misc::parsearBusquedaPadron($razon_social);
            if ($razon_social == "") {
                return [];
            }
        }
        return DB::select('EXEC dbo.backend_buscar_en_padron ?,?', array($cuit, $razon_social));
    }

    public static function listaNegraDB_test($action, $campo)
    {
        $connection = new PDO('dblib:host=' . '192.168.121.10' . ';dbname=' . 'Fidev' . ';charset=utf8', 'sa', 'Fidelita2020');

        if ($action == 'update') {
            if ($campo[3] == 'update_vis_blacklist') {
                $tabla_fide = $connection->prepare("EXEC black_list_store '" . $campo[3] . "','" . $campo[0] . "',''," . $campo[1] . ",'',''," . $campo[2] . ",''");
                $tabla_fide->setFetchMode(PDO::FETCH_OBJ);
                $tabla_fide->execute();
            } else {
                $tabla_fide = $connection->prepare("EXEC black_list_store '" . $campo[3] . "','" . $campo[0] . "',''," . $campo[1] . ",'','" . $campo[2] . "',0,''");
                $tabla_fide->setFetchMode(PDO::FETCH_OBJ);
                $tabla_fide->execute();
            }

        }

        if ($action == 'agregar') {
            $tabla_fide = $connection->prepare("EXEC black_list_store 'add_blacklist', " . $campo[0] . ",'" . $campo[1] . "','" . $campo[2] . "','" . $campo[3] . "','" . $campo[4] . "'," . $campo[5] . ",'" . $campo[6] . "'");
            $tabla_fide->setFetchMode(PDO::FETCH_OBJ);
            if ($tabla_fide->execute()) {
                return 1;
            } else {
                return 0;
            }
        }
        if ($action == 'consultar') {
            $tabla_fide = $connection->prepare("EXEC black_list_store 'consulta_blacklist','','','','','','',''");
            $tabla_fide->setFetchMode(PDO::FETCH_OBJ);
            $tabla_fide->execute();
            return $tabla_fide->fetchAll();
        }

        if ($action == 'selectOne') {
            $tabla_fide = $connection->prepare("EXEC black_list_store 'consulta_ide_blacklist','" . $campo . "','','','','','',''");
            $tabla_fide->setFetchMode(PDO::FETCH_OBJ);
            $tabla_fide->execute();
            return $tabla_fide->fetchAll();
        }

    }

    public static function listaNegraDB($action, $campo)
    {
        if ($action == 'consultar') {
            return DB::select('EXEC dbo.LN_black_list ?,?,?,?,?,?,?,?', array('consulta_blacklist', null, $campo[1], $campo[2], null, null, null, null));
        } elseif ($action == 'agregar') {
            return DB::select('EXEC dbo.LN_black_list ?,?,?,?,?,?,?,?', array('add_blacklist', $campo[0], $campo[1], $campo[2], $campo[3], $campo[4], $campo[5], $campo[6]));
        } elseif ($action == 'update') {
            if ($campo[3] == 'update_hasta_blacklist') {
                return DB::select('EXEC dbo.LN_black_list ?,?,?,?,?,?,?,?', array($campo[3], $campo[0], $campo[4], $campo[1], null, $campo[2], null, null));

            } else {
                return DB::select('EXEC dbo.LN_black_list ?,?,?,?,?,?,?,?', array($campo[3], $campo[0], $campo[4], $campo[1], null, null, $campo[2], null));
            }

        } elseif ($action == 'selectOne') {
            return DB::select('EXEC dbo.LN_black_list ?,?,?,?,?,?,?,?', array('consulta_ide_blacklist', $campo[0], $campo[1], null, null, null, null, null));
        }
    }

    /*	
       Buscador V2
       public static function busquedaPadron ($input_autocomplete, $todos_los_paises,$tipo_persona=''){
       $result = [];
       $input_autocomplete = Misc::limpiarString($input_autocomplete);
       $cuit = 0;
       $cuit_length = 0;

       if(is_numeric($input_autocomplete)){
         $cuit = $input_autocomplete;
         $cuit_length = strlen((string)$input_autocomplete);
       }

       $diccionario = Misc::diccionarioRazonesSociales($input_autocomplete);
       if ($diccionario === false) {
         $diccionario = [$input_autocomplete];
       }

        if (is_array($diccionario)){
         foreach ($diccionario as $razon_social) {
             $dni = 0;
             if(strlen($razon_social) <= 8 && is_numeric($razon_social)){
                 $dni = 1;
             }
           $aux = DB::select('EXEC dbo.busqueda_padron_por_igualdad ?,?,?', array($razon_social,$todos_los_paises,$dni));
           $result = array_merge($result, $aux);
         }
       }

           if($dni == 1 && sizeof($result) > 0){
           return $result;
       }
       $string = Misc::removerDiccionarioRazonesSociales($input_autocomplete);
       $input_autocomplete = ($string !== false) ? $string : $input_autocomplete;
       $input_autocomplete = Misc::parsearBusquedaPadron($input_autocomplete);
           if ($input_autocomplete == "") { return $result; }
       $aux = DB::select('EXEC dbo.busqueda_padron_201910 ?,?,?', array($input_autocomplete,$todos_los_paises,$tipo_persona));
       $result = array_values(array_unique (array_merge($result, $aux),SORT_REGULAR));

       if((sizeof($result) == 0) && ($cuit_length == 11) ) {
         if(ENV('SERVICIOS_AFIP') == true){
             $inserto = AFIPController::obtenerPadron($cuit,true);
               if(is_array($inserto)){
                 $resp = json_decode($inserto[0]);
             }else{
                   $resp = json_decode($inserto);
             }
             if(isset($resp->error)){
                 return false;
             }
                   return self::busquedaPadron($input_autocomplete, $todos_los_paises);
           }
       }
       return $result;
       }*/

    /*
       public static function obtenerPadronAvanzado ($razon_social_avanzado,$fisica_juridica,$pais,$provincia,$edad,$genero,$condicion_fiscal,$actividad_economica,$tipo_persona){
           return DB::select('EXEC dbo.busqueda_padron_avanzada ? ', array($razon_social_avanzado,$fisica_juridica,$pais,$provincia,$edad,$genero,$condicion_fiscal,$actividad_economica,$tipo_persona));
       }
       */

    public static function obtenerPadronImpuestos($id_padron)
    {
        return DB::select('EXEC dbo.obtener_padron_impuestos ?', array($id_padron));
    }

    public static function obtenerPadronActividades($cuit)
    {
        return DB::select('EXEC dbo.obtener_padron_actividades ?', array($cuit));
    }

    public static function obtenerPadronCaracterizaciones($id_padron)
    {
        return DB::select('EXEC dbo.obtener_padron_caracterizaciones ?', array($id_padron));
    }

    public static function obtenerPaises()
    {
        return DB::select('EXEC dbo.obtener_Paises');
    }

    public static function obtenerProvincias($codigo)
    {
        return DB::select('EXEC dbo.obtener_provincias', array($codigo));
    }

    // Funcion generica para ejecutar Store Procedure

public static function backendStoreProcedure($store_procedure, $params, $selectOne = FALSE, $debug = FALSE)
    {        
        $question_marks = '';
        if (count($params)) {
            $question_marks = array_fill(0, count($params), '?');
            $question_marks = ' ' . implode(',', $question_marks);
        }
        if ($debug === TRUE) {
            $params_txt = (count($params)) ? " '" . implode("','", $params) . "'" : "";
            die("EXEC " . $store_procedure . $params_txt);
        }

        // if ($store_procedure == 'backend_insertar_padron'){
        //  dd($store_procedure.$question_marks, $params);

        // }

        if ($selectOne == "selectOne" or $selectOne === TRUE) {
            $start = microtime(true);
            $sql = DB::selectOne('EXEC ' . $store_procedure . $question_marks, $params);
            $time = microtime(true) - $start;
            
            if ($time > 10) {
                $params_str = implode(', ', $params);
                $mensaje = "Demora excesiva en SP: $store_procedure. Tiempo: $time. Params: $params_str";
                try {
                    Mailer::from("no-reply@fidelitas.com.ar");
                    Mailer::to('api_support@fidelitas.com.ar');
                    //Mailer::bcc(env('COPIA')); 
                    Mailer::text($mensaje, "DEMORA TIMEOUT SP - API STATUS");
                    //Mailer::send();
                } catch (\Throwable $e) {
                    //
                }
            }
            return $sql;
        }
        else {
            $start = microtime(true);
            $sql = DB::select('EXEC ' . $store_procedure . $question_marks, $params);
            $time = microtime(true) - $start;
            
            if ($time > 10) {
                $params_str = implode(', ',  $params);
                $mensaje = "Demora excesiva en SP: $store_procedure. Tiempo: $time. Params: $params_str";
                try {
                    Mailer::from("no-reply@fidelitas.com.ar");
                    Mailer::to('api_support@fidelitas.com.ar');
                    //Mailer::bcc(env('COPIA')); 
                    Mailer::text($mensaje, "DEMORA TIMEOUT SP - API STATUS");
                    //Mailer::send();
                } catch (\Throwable $e) {
                    //
                }
            }
            return $sql;
        }
    }


    public static function backendStoreProcedureOLD($store_procedure, $params, $selectOne = FALSE, $debug = FALSE)
    {        
        $question_marks = '';
        if (count($params)) {
            $question_marks = array_fill(0, count($params), '?');
            $question_marks = ' ' . implode(',', $question_marks);
        }
        if ($debug === TRUE) {
            $params_txt = (count($params)) ? " '" . implode("','", $params) . "'" : "";
            die("EXEC " . $store_procedure . $params_txt);
        }

        // if ($store_procedure == 'backend_insertar_padron'){
        // 	dd($store_procedure.$question_marks, $params);

        // }

        if ($selectOne == "selectOne" or $selectOne === TRUE)
            return DB::selectOne('EXEC ' . $store_procedure . $question_marks, $params);
        else
            return DB::select('EXEC ' . $store_procedure . $question_marks, $params);
    }

    public static function obtenerProductosCliente($id_cliente, $es_cliente, $es_usuario)
    {
        return DB::select('EXEC dbo.obtener_productos_cliente ?,?,?', array($id_cliente, $es_cliente, $es_usuario));
    }
    //nombres anteriores posibles de una razon social
    public static function obtenerNombresAnteriores($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_nombres_anteriores ?', array($cuit));
    }

    public static function backendCambiosNombres($cuit)
    {
        return DB::select('EXEC dbo.backend_cambios_nombres ?,?,?', array(null, $cuit, '1'));
    }

    public static function obtenerIdPadron($cuit)
    {
        return DB::selectOne('EXEC dbo.obtener_id_padron ?', array($cuit));
    }

    public static function obtenerMarcas($cuit)
    {
        return DB::select('EXEC dbo.obtener_marcas ?', array($cuit));
    }

    public static function cargaScoreCustom($score_contables, $score_cendeu, $score_cheques, $score_fiscales, $score_formales, $score_judiciales)
    {
        $id_score_custom = 1;
        $fecha_de_modificacion = date('m/d/Y');
        //ver tratado fecha en store
        $result = DB::selectOne('EXEC dbo.carga_score_custom ? , ? , ? , ? , ? , ? , ? , ?', array($id_score_custom, $score_contables, $score_cendeu, $score_cheques, $score_fiscales, $score_formales, $score_judiciales, $fecha_de_modificacion));

        return $result;
    }

    public static function cargarEstadoMarcasExterno($cuit, $dato, $tipo_dato, $acta)
    {
        return DB::selectOne('EXEC dbo.carga_estado_marcas_externo_new ? ,?,?,?', array($cuit, $dato, $tipo_dato, $acta));
    }

    public static function obtenerMarcasConCuit()
    {
        return DB::select('EXEC dbo.obtener_marcas_cuit');
    }

    public static function mailDefuncionError()
    {
        return DB::select('EXEC dbo.mail_defuncion_error');
    }

    public static function obtenerTraducciones($blade)
    {
        $app_id = Session::get('webdata')['app_id'] ?? ENV('APP_ID');
        $select = DB::select('EXEC dbo.obtener_traducciones_dinamicas ?,?', array($blade, ENV('APP_ID')));
        // $select = DB::select('EXEC dbo.obtener_traducciones_dinamicas ?,?', array($blade,$app_id));
        $array_traducciones = [];
        $idioma = Session::get('usuario')->codigo_idioma;

        $atxt = array(41807, 726, 43597, 43615, 43657);

        foreach ($select as $key => $value) {
            //$array_traducciones[$value->{'spa'}] = $value->{$idioma};
            $array_traducciones[strtoupper(substr(preg_replace('/[^a-zA-Z0-9]/', '', $value->{'spa'}), 0, 500))] = $value->{$idioma};

            /*if (array_search($value->id_traduccion, $atxt)) {
                         print_r("<h2>TRADUCCION</h2>");
                         var_dump($value);
                         print_r("<br />");
                         print_r("<h2>TEXTO</h2>");
                         print_r($value->{$idioma});
                         print_r("<br />");

                     }*/
        }
        Session::put('traduccion_dinamica', $array_traducciones);
    }

    public static function obtenerTraduccionesPHP($blade)
    {
        $app_id = Session::get('webdata')['app_id'] ?? ENV('APP_ID');
        $select = DB::select('EXEC dbo.obtener_traducciones_dinamicas ?,?,?,?', array($blade, ENV('APP_ID'), null, '0'));
        // $select = DB::select('EXEC dbo.obtener_traducciones_dinamicas ?,?,?,?', array($blade,$app_id,null,'0'));
        $array_traducciones = [];
        $idioma = Session::get('usuario')->codigo_idioma;

        foreach ($select as $key => $value) {
            $array_traducciones[$value->{'spa'}] = $value->{$idioma};
        }
        return $array_traducciones;
    }

    static function control_erores($seccion = '', $nombre_funcion = '', $mensaje = '')
    {
        // $ip_server -> es para conocer el server donde se esta produciendo el error.
        $ip_server = $_SERVER['SERVER_ADDR'];
        // Llamada al store, no devuelve nada, solo guarda el registro.
        DB::select('EXEC dbo.info_log_erores ?,?,?,?', array($ip_server, $seccion, $nombre_funcion, $mensaje));
    }

    /**
     * @access public
     * @param string el texto a registrar
     * @param string la accion a registrar
     * @param string id de la plataforma (Ej:'IV_BACK')
     * @param string|int el id del ususario
     * @param string el servicio contratado (Codigo de producto)
     * @param string|null el id de cliente
     * @param string|null el id de contraparte
     * @param string|null el doc id
     * @param string|null el de set documento
     * @param string|null la familia
     * @param string|null el tipo informe
     * @param string|null el tipo doc
     * @param string|null la tarea
     * @param string|null si la tarea es 'I' iniciado o 'F' finalizada
     * @return string|array|null
     */
    public static function logTrazabilidad(string $texto, string $accion, string $id_plataforma, $user_id, $servicio_contratado, $cliente = 0, $contraparte = null, $doc_id = null, $set_doc = null, $familia = null, $idtipoinforme = null, $tipo_doc = null, $idTarea = null, $tipo_accion = null)
    {
        return DB::select('EXEC dbo.insertar_trazabilidad ?,?,?,?,?,?,?,?,?,?,?,?,?,?', array($texto, $cliente, $accion, $id_plataforma, $contraparte, $user_id, $doc_id, $servicio_contratado, $set_doc, $familia, $idtipoinforme, $tipo_doc, $idTarea, $tipo_accion));
    }


    /**
     * Funcion que devuelve
     * el identificador de pasaporte
     * @access public
     * @static
     * @param string el codigo del pais
     * @return object
     */
    public static function obtenerPasaportePais($pais)
    {
        return SQLConnection::backendStoreProcedure('LN_identificadores', array('SELECCIONAR_POR_PAIS_FILTROS', NULL, $pais, 1, NULL, NULL, 'F', 1), 'selectOne');
    }

}
