<?php namespace App\Custom;
use DB;
use PDO;
use App\Custom\Misc;
use App\Http\Controllers\AFIPController;
/*
Aviso:
Todos los métodos de la clase SQLConnection deberan generarse como static, para agilizar el trabajo de instanciación ,velocidad y visibilidad por controlador.
*/
use Session;
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 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)
			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 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');
    }

}
	
?>