package com.ejie.ad74a.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.dao.support.DataAccessUtils;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.dao.comun.UtilDAO;
import com.ejie.ad74a.exceptions.ManagerErrors;
import com.ejie.ad74a.model.Ayuntamientos;
import com.ejie.ad74a.model.BeneficiarioActividadWS;
import com.ejie.ad74a.model.BeneficiarioWS;
import com.ejie.ad74a.model.Cuentas;
import com.ejie.ad74a.model.Dependencia;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.Instalaciones;
import com.ejie.ad74a.model.MaestroNivSoporte;
import com.ejie.ad74a.model.Perfiles;
import com.ejie.ad74a.model.PisosTutelados;
import com.ejie.ad74a.model.Riesgos;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.model.Soporte;
import com.ejie.ad74a.model.Valoraciones;
import com.ejie.ad74a.util.Ad74aDataBaseAudit;
import com.ejie.ad74a.util.UtilSQL;
import com.ejie.ad74a.util.comun.UtilSeguridad;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.ad74a.util.constantes.Constantes;
import com.ejie.ad74a.util.constantes.Constantes.ValoresDefectoBandejaPapel0;
import com.ejie.ad74a.util.constantes.EstadosExpedienteEnum;
import com.ejie.ad74a.util.constantes.ProcedimientosEnum;
import com.ejie.ad74a.util.constantes.modelos.TipoSolicitantes;
import com.ejie.x38.dao.RowNumResultSetExtractor;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableManager;
import com.ejie.x38.dto.TableManagerJerarquia;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * SolicitantesDaoImpl generated by UDA, 10-feb-2023 12:13:19.
 * 
 * @author UDA
 */

@Repository
@Transactional
public class SolicitantesDaoImpl implements SolicitantesDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDSOLICITANTE01", "TIPOIDENTIFICADOR01",
			"IDENTIFICADOR01", "NOMBRE01", "APELLIDO101", "APELLIDO201", "SEXO01", "FNACIMIENTO01", "NUMSS01",
			"NUMTIS01", "FALTATELEASISTENCIA01", "BENEFICIARIO01", "FBENEFICIARIO01", "FBAJA01", "FINICIO01",
			"NUMABONADO01", "OBSERVACIONES01", "NOREINTENTAR01", "IDIOMASERVICIO01", "IDIOMASOLICITANTE01",
			"OTROIDIOMA01", "TLFNOSERVICIO01", "TLFNOMOVIL01", "EMAIL01", "TIPOBENEFICIARIO01", "FRETIRADA01",
			"MANTENERINST01", "EXENCION01", "EXONERACION01", "INSTALADO01", "IDMOTIVOBAJA01", "USUALTA01", "USUMODIF01",
			"FALTA01", "FMODIF01", "CUENTASIDCUENTA05", "CUENTASNUMCUENTA05", "CUENTASCODTIPOIDENTITULAR05",
			"CUENTASIDENTITULAR05", "CUENTASIDSOLICITANTE05", "CUENTASUSUHISTORICO05", "CUENTASFHISTORICO05",
			"CUENTASFALTA05", "CUENTASUSUALTA05", "PERFILESIDPERFIL07", "PERFILESMAYOR65DEP07",
			"PERFILESMAYOR65RIESGODEP07", "PERFILESMAYOR75SOLA07", "PERFILESDISINTELECTUAL07", "PERFILESDISFISICA07",
			"PERFILESDISSENSORIAL07", "PERFILESENFMENTAL07", "PERFILESRIESGOAISLAMIENTO07", "PERFILESPISOTUTELADO07",
			"PERFILESFALTA07", "PERFILESUSUALTA07", "DIRECCIONESIDDIRECCION06", "DIRECCIONESCALLE06", "DIRECCIONESCP06",
			"DIRECCIONESIDCALLE06", "DIRECCIONESIDLOCALIDAD06", "DIRECCIONESIDMUNICIPIO06", "DIRECCIONESIDPAIS06",
			"DIRECCIONESIDPORTAL06", "DIRECCIONESIDPROVINCIA06", "DIRECCIONESLETRA06", "DIRECCIONESLOCALIDAD06",
			"DIRECCIONESMUNICIPIO06", "DIRECCIONESPAIS06", "DIRECCIONESPISO06", "DIRECCIONESPORTAL06",
			"DIRECCIONESESCALERA06", "DIRECCIONESPROVINCIA06", "DIRECCIONESIDSOLICITANTE06",
			"DIRECCIONESUSUHISTORICO06", "DIRECCIONESFHISTORICO06", "DIRECCIONESFALTA06", "DIRECCIONESUSUALTA06",
			"PERFILESIDPISO07", "VALIDVALORACION08", "VALFVALORACION08", "VALTIPOVALORACION08",
			"VALCONTRATOACTUACION08", "VALMODOVALORACION08", "VALIDNIVELSOPORTE08", "VALALTORIESGO08",
			"VALNIVELMALTRATO08", "VALNIVELSUICIDIO08", "VALPERIODICIDADPROPUESTA08", "VALPERIODICIDADACORDADA08",
			"VALPROPUESTAACEPTADA08", "VALIDSOLICITANTE08", "VALUSUHISTORICO08", "VALFHISTORICO08", "VALFALTA08",
			"VALUSUALTA08", "ValMOTIVORETRASO08" };

	private JdbcTemplate jdbcTemplate;

	public static final String SEQUENCE_SOLICITANTE = "SEQ_SOLICITANTES";
	public static final String SEQUENCE_NUM_ABONADO = "SEQ_NUM_ABONADO";

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<Solicitantes> rwMap = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {

			Solicitantes solicitante = new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"),
					resultSet.getString("TIPOIDENTIFICADOR01"), resultSet.getString("IDENTIFICADOR01"),
					resultSet.getString("NOMBRE01"), resultSet.getString("APELLIDO101"),
					resultSet.getString("APELLIDO201"), resultSet.getString("SEXO01"),
					resultSet.getDate("FNACIMIENTO01"), resultSet.getString("NUMSS01"), resultSet.getString("NUMTIS01"),
					resultSet.getDate("FALTATELEASISTENCIA01"), UtilSQL.getInt(resultSet, "BENEFICIARIO01"),
					resultSet.getDate("FBENEFICIARIO01"), resultSet.getDate("FBAJA01"), resultSet.getDate("FINICIO01"),
					resultSet.getString("NUMABONADO01"), resultSet.getString("OBSERVACIONES01"),
					UtilSQL.getInt(resultSet, "NOREINTENTAR01"), UtilSQL.getInt(resultSet, "IDIOMASERVICIO01"),
					UtilSQL.getInt(resultSet, "IDIOMASOLICITANTE01"), resultSet.getString("OTROIDIOMA01"),
					resultSet.getString("TLFNOSERVICIO01"), resultSet.getString("TLFNOMOVIL01"),
					resultSet.getString("EMAIL01"), UtilSQL.getInt(resultSet, "TIPOBENEFICIARIO01"),
					resultSet.getDate("FRETIRADA01"), UtilSQL.getInt(resultSet, "MANTENERINST01"),
					UtilSQL.getInt(resultSet, "EXENCION01"), UtilSQL.getInt(resultSet, "EXONERACION01"),
					UtilSQL.getInt(resultSet, "INSTALADO01"), UtilSQL.getLong(resultSet, "IDMOTIVOBAJA01"),
					resultSet.getString("USUALTA01"), resultSet.getString("USUMODIF01"), resultSet.getDate("FALTA01"),
					resultSet.getTimestamp("FMODIF01"), UtilSQL.getInt(resultSet, "ESDENEGACIONSERVICIO01"),
					new Cuentas(UtilSQL.getLong(resultSet, "CuentasIDCUENTA05"),
							resultSet.getString("CuentasNUMCUENTA05"),
							resultSet.getString("CuentasCODTIPOIDENTITULAR05"),
							resultSet.getString("CuentasIDENTITULAR05"),
							UtilSQL.getLong(resultSet, "CUENTASIDSOLICITANTE05"),
							resultSet.getString("CUENTASUSUHISTORICO05"), resultSet.getDate("CUENTASFHISTORICO05"),
							resultSet.getDate("CuentasFALTA05"), resultSet.getString("CuentasUSUALTA05"),
							resultSet.getString("NOMBRETITCUENTA05"), resultSet.getString("APELLIDO1TITCUENTA05"),
							resultSet.getString("APELLIDO2TITCUENTA05")),
					new Perfiles(UtilSQL.getLong(resultSet, "PerfilesIDPERFIL07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65DEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65RIESGODEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR75SOLA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISINTELECTUAL07"),
							UtilSQL.getInt(resultSet, "PerfilesDISFISICA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISSENSORIAL07"),
							UtilSQL.getInt(resultSet, "PerfilesENFMENTAL07"),
							UtilSQL.getInt(resultSet, "PerfilesRIESGOAISLAMIENTO07"),
							UtilSQL.getInt(resultSet, "PerfilesPISOTUTELADO07"), resultSet.getDate("PerfilesFALTA07"),
							resultSet.getString("PerfilesUSUALTA07"),
							new PisosTutelados(UtilSQL.getLong(resultSet, "PerfilesIDPISO07"), null, null, null, null,
									null, null, null, null)),
					new Direcciones(UtilSQL.getLong(resultSet, "DireccionesIDDIRECCION06"),
							resultSet.getString("DireccionesCALLE06"), resultSet.getString("DireccionesCP06"),
							UtilSQL.getLong(resultSet, "DireccionesIDCALLE06"),
							UtilSQL.getLong(resultSet, "DireccionesIDLOCALIDAD06"),
							resultSet.getString("DireccionesIDMUNICIPIO06"), resultSet.getString("DireccionesIDPAIS06"),
							UtilSQL.getLong(resultSet, "DireccionesIDPORTAL06"),
							resultSet.getString("DireccionesIDPROVINCIA06"), resultSet.getString("DireccionesLETRA06"),
							resultSet.getString("DireccionesLOCALIDAD06"),
							resultSet.getString("DireccionesMUNICIPIO06"), resultSet.getString("DireccionesPAIS06"),
							resultSet.getString("DireccionesPISO06"), resultSet.getString("DireccionesPORTAL06"),
							resultSet.getString("DireccionesESCALERA06"), resultSet.getString("DireccionesPROVINCIA06"),
							UtilSQL.getLong(resultSet, "DIRECCIONESIDSOLICITANTE06"),
							resultSet.getString("DIRECCIONESUSUHISTORICO06"),
							resultSet.getDate("DIRECCIONESFHISTORICO06"), resultSet.getDate("DireccionesFALTA06"),
							resultSet.getString("DireccionesUSUALTA06")),
					new Valoraciones(UtilSQL.getLong(resultSet, "VALIDVALORACION08"),
							resultSet.getDate("ValFVALORACION08"), UtilSQL.getInt(resultSet, "ValTIPOVALORACION08"),
							resultSet.getString("ValCONTRATOACTUACION08"),
							UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"),
							UtilSQL.getInt(resultSet, "ValALTORIESGO08"),
							UtilSQL.getInt(resultSet, "ValNIVELMALTRATO08"),
							UtilSQL.getInt(resultSet, "ValNIVELSUICIDIO08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADPROPUESTA08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADACORDADA08"),
							UtilSQL.getInt(resultSet, "ValPROPUESTAACEPTADA08"),
							UtilSQL.getLong(resultSet, "VALIDSOLICITANTE08"), resultSet.getString("VALUSUHISTORICO08"),
							resultSet.getDate("VALFHISTORICO08"), UtilSQL.getInt(resultSet, "ValMOTIVORETRASO08"),
							resultSet.getDate("ValFALTA08"), resultSet.getString("ValUSUALTA08"),
							UtilSQL.getInt(resultSet, "VALMODOVALORACION08")),
					new Instalaciones());

			if (UtilDAO.hasColumn(resultSet, "IDINSTALACION52") && resultSet.getDate("IDINSTALACION52") != null) {
				Instalaciones instalaciones = new Instalaciones();
				instalaciones.setIdInstalacion52(UtilSQL.getLong(resultSet, "IDINSTALACION52"));
				instalaciones.setfInstalacion52(resultSet.getDate("FINSTALACION52"));
				instalaciones.setMotivInstFueraPlazo52(resultSet.getInt("MOTIVINSTFUERAPLAZO52"));
				instalaciones.setIdSolicitante52(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"));
				solicitante.setInstalaciones(instalaciones);
			}

			return solicitante;
		}
	};

	private RowMapper<Solicitantes> rwMapProvinciasDesc = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Solicitantes solicitante = new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"),
					resultSet.getString("TIPOIDENTIFICADOR01"), resultSet.getString("IDENTIFICADOR01"),
					resultSet.getString("NOMBRE01"), resultSet.getString("APELLIDO101"),
					resultSet.getString("APELLIDO201"), resultSet.getString("SEXO01"),
					resultSet.getDate("FNACIMIENTO01"), resultSet.getString("NUMSS01"), resultSet.getString("NUMTIS01"),
					resultSet.getDate("FALTATELEASISTENCIA01"), UtilSQL.getInt(resultSet, "BENEFICIARIO01"),
					resultSet.getDate("FBENEFICIARIO01"), resultSet.getDate("FBAJA01"), resultSet.getDate("FINICIO01"),
					resultSet.getString("NUMABONADO01"), resultSet.getString("OBSERVACIONES01"),
					UtilSQL.getInt(resultSet, "NOREINTENTAR01"), UtilSQL.getInt(resultSet, "IDIOMASERVICIO01"),
					UtilSQL.getInt(resultSet, "IDIOMASOLICITANTE01"), resultSet.getString("OTROIDIOMA01"),
					resultSet.getString("TLFNOSERVICIO01"), resultSet.getString("TLFNOMOVIL01"),
					resultSet.getString("EMAIL01"), UtilSQL.getInt(resultSet, "TIPOBENEFICIARIO01"),
					resultSet.getDate("FRETIRADA01"), UtilSQL.getInt(resultSet, "MANTENERINST01"),
					UtilSQL.getInt(resultSet, "EXENCION01"), UtilSQL.getInt(resultSet, "EXONERACION01"),
					UtilSQL.getInt(resultSet, "INSTALADO01"), // UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO01"),
					UtilSQL.getLong(resultSet, "IDMOTIVOBAJA01"), resultSet.getString("USUALTA01"),
					resultSet.getString("USUMODIF01"), resultSet.getDate("FALTA01"), resultSet.getDate("FMODIF01"),
					UtilSQL.getInt(resultSet, "ESDENEGACIONSERVICIO01"),
					new Cuentas(UtilSQL.getLong(resultSet, "CuentasIDCUENTA05"),
							resultSet.getString("CuentasNUMCUENTA05"),
							resultSet.getString("CuentasCODTIPOIDENTITULAR05"),
							resultSet.getString("CuentasIDENTITULAR05"),
							UtilSQL.getLong(resultSet, "CUENTASIDSOLICITANTE05"),
							resultSet.getString("CUENTASUSUHISTORICO05"), resultSet.getDate("CUENTASFHISTORICO05"),
							resultSet.getDate("CuentasFALTA05"), resultSet.getString("CuentasUSUALTA05"),
							resultSet.getString("NOMBRETITCUENTA05"), resultSet.getString("APELLIDO1TITCUENTA05"),
							resultSet.getString("APELLIDO2TITCUENTA05")),
					new Perfiles(UtilSQL.getLong(resultSet, "PerfilesIDPERFIL07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65DEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65RIESGODEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR75SOLA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISINTELECTUAL07"),
							UtilSQL.getInt(resultSet, "PerfilesDISFISICA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISSENSORIAL07"),
							UtilSQL.getInt(resultSet, "PerfilesENFMENTAL07"),
							UtilSQL.getInt(resultSet, "PerfilesRIESGOAISLAMIENTO07"),
							UtilSQL.getInt(resultSet, "PerfilesPISOTUTELADO07"), resultSet.getDate("PerfilesFALTA07"),
							resultSet.getString("PerfilesUSUALTA07"),
							new PisosTutelados(UtilSQL.getLong(resultSet, "PerfilesIDPISO07"), null, null, null, null,
									null, null, null, null)),
					new Direcciones(UtilSQL.getLong(resultSet, "DireccionesIDDIRECCION06"),
							resultSet.getString("DireccionesCALLE06"), resultSet.getString("DireccionesCP06"),
							UtilSQL.getLong(resultSet, "DireccionesIDCALLE06"),
							UtilSQL.getLong(resultSet, "DireccionesIDLOCALIDAD06"),
							resultSet.getString("DireccionesIDMUNICIPIO06"), resultSet.getString("DireccionesIDPAIS06"),
							UtilSQL.getLong(resultSet, "DireccionesIDPORTAL06"),
							resultSet.getString("DireccionesIDPROVINCIA06"), resultSet.getString("DireccionesLETRA06"),
							resultSet.getString("DireccionesLOCALIDAD06"),
							resultSet.getString("DireccionesMUNICIPIO06"), resultSet.getString("DireccionesPAIS06"),
							resultSet.getString("DireccionesPISO06"), resultSet.getString("DireccionesPORTAL06"),
							resultSet.getString("DireccionesESCALERA06"), resultSet.getString("DireccionesPROVINCIA06"),
							UtilSQL.getLong(resultSet, "DIRECCIONESIDSOLICITANTE06"),
							resultSet.getString("DIRECCIONESUSUHISTORICO06"),
							resultSet.getDate("DIRECCIONESFHISTORICO06"), resultSet.getDate("DireccionesFALTA06"),
							resultSet.getString("DireccionesUSUALTA06"), resultSet.getString("provincianoradesces"),
							resultSet.getString("provincianoradesceu"), resultSet.getString("municipionoradesc"),
							resultSet.getString("localidadNORADesc"), resultSet.getString("calleDescripcion"),
							resultSet.getString("calleTipoVia"), UtilSQL.getLong(resultSet, "portalNumNORADesc"),
							resultSet.getString("portalBisNORADesc"), resultSet.getString("portalBloqueNORADesc")),
					new Valoraciones(UtilSQL.getLong(resultSet, "VALIDVALORACION08"),
							resultSet.getDate("ValFVALORACION08"), UtilSQL.getInt(resultSet, "ValTIPOVALORACION08"),
							resultSet.getString("ValCONTRATOACTUACION08"),
							UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"),
							UtilSQL.getInt(resultSet, "ValALTORIESGO08"),
							UtilSQL.getInt(resultSet, "ValNIVELMALTRATO08"),
							UtilSQL.getInt(resultSet, "ValNIVELSUICIDIO08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADPROPUESTA08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADACORDADA08"),
							UtilSQL.getInt(resultSet, "ValPROPUESTAACEPTADA08"),
							UtilSQL.getLong(resultSet, "VALIDSOLICITANTE08"), resultSet.getString("VALUSUHISTORICO08"),
							resultSet.getDate("VALFHISTORICO08"), UtilSQL.getInt(resultSet, "ValMOTIVORETRASO08"),
							resultSet.getDate("ValFALTA08"), resultSet.getString("ValUSUALTA08"),
							UtilSQL.getInt(resultSet, "VALMODOVALORACION08")),
					new Instalaciones(UtilSQL.getLong(resultSet, "IDINSTALACION52"),
							resultSet.getDate("FINSTALACION52"), UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO52"),
							UtilSQL.getLong(resultSet, "IDSOLICITANTE01"), null, null, null, null));

			if (UtilDAO.hasColumn(resultSet, "NIVELSOPORTEDESCES")
					&& null != resultSet.getString("NIVELSOPORTEDESCES")) {
				MaestroNivSoporte nivelSoporte = new MaestroNivSoporte();
				nivelSoporte.setDescEs58(resultSet.getString("NIVELSOPORTEDESCES"));

				if (UtilDAO.hasColumn(resultSet, "NIVELSOPORTEDESCEU")
						&& null != resultSet.getString("NIVELSOPORTEDESCEU")) {
					nivelSoporte.setDescEu58(resultSet.getString("NIVELSOPORTEDESCEU"));
				}
				nivelSoporte.setIdNivelSoporte58(UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"));
				solicitante.getValoraciones().setMaestroNivSoporte(nivelSoporte);
			} else {
				solicitante.getValoraciones().setMaestroNivSoporte(new MaestroNivSoporte());
			}
			solicitante.setfPrimeraVisita01(resultSet.getDate("FPRIMERAVISITA01"));
			solicitante.setMotivoExoneracion01(resultSet.getString("MOTIVOEXONERACION01"));
			solicitante.setfExoneracion01(resultSet.getDate("FEXONERACION01"));
			return solicitante;
		}
	};

	private RowMapper<Solicitantes> rwMapExcelTabla = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Solicitantes solicitante = new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"),
					resultSet.getString("TIPOIDENTIFICADOR01"), resultSet.getString("IDENTIFICADOR01"),
					resultSet.getString("NOMBRE01"), resultSet.getString("APELLIDO101"),
					resultSet.getString("APELLIDO201"), resultSet.getString("SEXO01"),
					resultSet.getDate("FNACIMIENTO01"), resultSet.getString("NUMSS01"), resultSet.getString("NUMTIS01"),
					resultSet.getDate("FALTATELEASISTENCIA01"), UtilSQL.getInt(resultSet, "BENEFICIARIO01"),
					resultSet.getDate("FBENEFICIARIO01"), resultSet.getDate("FBAJA01"), resultSet.getDate("FINICIO01"),
					resultSet.getString("NUMABONADO01"), resultSet.getString("OBSERVACIONES01"),
					UtilSQL.getInt(resultSet, "NOREINTENTAR01"), UtilSQL.getInt(resultSet, "IDIOMASERVICIO01"),
					UtilSQL.getInt(resultSet, "IDIOMASOLICITANTE01"), resultSet.getString("OTROIDIOMA01"),
					resultSet.getString("TLFNOSERVICIO01"), resultSet.getString("TLFNOMOVIL01"),
					resultSet.getString("EMAIL01"), UtilSQL.getInt(resultSet, "TIPOBENEFICIARIO01"),
					resultSet.getDate("FRETIRADA01"), UtilSQL.getInt(resultSet, "MANTENERINST01"),
					UtilSQL.getInt(resultSet, "EXENCION01"), UtilSQL.getInt(resultSet, "EXONERACION01"),
					UtilSQL.getInt(resultSet, "INSTALADO01"), // UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO01"),
					UtilSQL.getLong(resultSet, "IDMOTIVOBAJA01"), resultSet.getString("USUALTA01"),
					resultSet.getString("USUMODIF01"), resultSet.getDate("FALTA01"), resultSet.getDate("FMODIF01"),
					UtilSQL.getInt(resultSet, "ESDENEGACIONSERVICIO01"),
					new Cuentas(UtilSQL.getLong(resultSet, "CuentasIDCUENTA05"),
							resultSet.getString("CuentasNUMCUENTA05"),
							resultSet.getString("CuentasCODTIPOIDENTITULAR05"),
							resultSet.getString("CuentasIDENTITULAR05"),
							UtilSQL.getLong(resultSet, "CUENTASIDSOLICITANTE05"),
							resultSet.getString("CUENTASUSUHISTORICO05"), resultSet.getDate("CUENTASFHISTORICO05"),
							resultSet.getDate("CuentasFALTA05"), resultSet.getString("CuentasUSUALTA05"),
							resultSet.getString("NOMBRETITCUENTA05"), resultSet.getString("APELLIDO1TITCUENTA05"),
							resultSet.getString("APELLIDO2TITCUENTA05")),
					new Perfiles(UtilSQL.getLong(resultSet, "PerfilesIDPERFIL07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65DEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65RIESGODEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR75SOLA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISINTELECTUAL07"),
							UtilSQL.getInt(resultSet, "PerfilesDISFISICA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISSENSORIAL07"),
							UtilSQL.getInt(resultSet, "PerfilesENFMENTAL07"),
							UtilSQL.getInt(resultSet, "PerfilesRIESGOAISLAMIENTO07"),
							UtilSQL.getInt(resultSet, "PerfilesPISOTUTELADO07"), resultSet.getDate("PerfilesFALTA07"),
							resultSet.getString("PerfilesUSUALTA07"),
							new PisosTutelados(UtilSQL.getLong(resultSet, "PerfilesIDPISO07"), null, null, null, null,
									null, null, null, null)),
					new Direcciones(UtilSQL.getLong(resultSet, "DireccionesIDDIRECCION06"),
							resultSet.getString("DireccionesCALLE06"), resultSet.getString("DireccionesCP06"),
							UtilSQL.getLong(resultSet, "DireccionesIDCALLE06"),
							UtilSQL.getLong(resultSet, "DireccionesIDLOCALIDAD06"),
							resultSet.getString("DireccionesIDMUNICIPIO06"), resultSet.getString("DireccionesIDPAIS06"),
							UtilSQL.getLong(resultSet, "DireccionesIDPORTAL06"),
							resultSet.getString("DireccionesIDPROVINCIA06"), resultSet.getString("DireccionesLETRA06"),
							resultSet.getString("DireccionesLOCALIDAD06"),
							resultSet.getString("DireccionesMUNICIPIO06"), resultSet.getString("DireccionesPAIS06"),
							resultSet.getString("DireccionesPISO06"), resultSet.getString("DireccionesPORTAL06"),
							resultSet.getString("DireccionesESCALERA06"), resultSet.getString("DireccionesPROVINCIA06"),
							UtilSQL.getLong(resultSet, "DIRECCIONESIDSOLICITANTE06"),
							resultSet.getString("DIRECCIONESUSUHISTORICO06"),
							resultSet.getDate("DIRECCIONESFHISTORICO06"), resultSet.getDate("DireccionesFALTA06"),
							resultSet.getString("DireccionesUSUALTA06"), resultSet.getString("provincianoradesces"),
							resultSet.getString("provincianoradesceu"), resultSet.getString("municipionoradesc"),
							resultSet.getString("localidadNORADesc"), resultSet.getString("calleDescripcion"),
							resultSet.getString("calleTipoVia"), UtilSQL.getLong(resultSet, "portalNumNORADesc"),
							resultSet.getString("portalBisNORADesc"), resultSet.getString("portalBloqueNORADesc")),
					new Valoraciones(UtilSQL.getLong(resultSet, "VALIDVALORACION08"),
							resultSet.getDate("ValFVALORACION08"), UtilSQL.getInt(resultSet, "ValTIPOVALORACION08"),
							resultSet.getString("ValCONTRATOACTUACION08"),
							UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"),
							UtilSQL.getInt(resultSet, "ValALTORIESGO08"),
							UtilSQL.getInt(resultSet, "ValNIVELMALTRATO08"),
							UtilSQL.getInt(resultSet, "ValNIVELSUICIDIO08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADPROPUESTA08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADACORDADA08"),
							UtilSQL.getInt(resultSet, "ValPROPUESTAACEPTADA08"),
							UtilSQL.getLong(resultSet, "VALIDSOLICITANTE08"), resultSet.getString("VALUSUHISTORICO08"),
							resultSet.getDate("VALFHISTORICO08"), UtilSQL.getInt(resultSet, "ValMOTIVORETRASO08"),
							resultSet.getDate("ValFALTA08"), resultSet.getString("ValUSUALTA08"),
							UtilSQL.getInt(resultSet, "VALMODOVALORACION08")),
					new Instalaciones(UtilSQL.getLong(resultSet, "IDINSTALACION52"),
							resultSet.getDate("FINSTALACION52"), UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO52"),
							UtilSQL.getLong(resultSet, "IDSOLICITANTE01"), null, null, null, null));

//			if (UtilDAO.hasColumn(resultSet, "NIVELSOPORTEDESCES")
//					&& null != resultSet.getString("NIVELSOPORTEDESCES")) {
//				MaestroNivSoporte nivelSoporte = new MaestroNivSoporte();
//				nivelSoporte.setDescEs58(resultSet.getString("NIVELSOPORTEDESCES"));
//
//				if (UtilDAO.hasColumn(resultSet, "NIVELSOPORTEDESCEU")
//						&& null != resultSet.getString("NIVELSOPORTEDESCEU")) {
//					nivelSoporte.setDescEu58(resultSet.getString("NIVELSOPORTEDESCEU"));
//				}
//				nivelSoporte.setIdNivelSoporte58(UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"));
//				solicitante.getValoraciones().setMaestroNivSoporte(nivelSoporte);
//			} else {
//				solicitante.getValoraciones().setMaestroNivSoporte(new MaestroNivSoporte());
//			}
			solicitante.setfPrimeraVisita01(resultSet.getDate("FPRIMERAVISITA01"));
			solicitante.setMotivoExoneracion01(resultSet.getString("MOTIVOEXONERACION01"));
			solicitante.setfExoneracion01(resultSet.getDate("FEXONERACION01"));
			if (null != solicitante.getValoraciones() && null != solicitante.getValoraciones().getMaestroNivSoporte()) {
				solicitante.getValoraciones().getMaestroNivSoporte().setDescEs58(resultSet.getString("DESCES58"));
				solicitante.getValoraciones().getMaestroNivSoporte().setDescEu58(resultSet.getString("DESCEU58"));
			}
			return solicitante;
		}
	};

	private RowMapper<Solicitantes> rwMapProvinciasDescPrestServ = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Solicitantes solicitante = new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"),
					resultSet.getString("TIPOIDENTIFICADOR01"), resultSet.getString("IDENTIFICADOR01"),
					resultSet.getString("NOMBRE01"), resultSet.getString("APELLIDO101"),
					resultSet.getString("APELLIDO201"), resultSet.getString("SEXO01"),
					resultSet.getDate("FNACIMIENTO01"), resultSet.getString("NUMSS01"), resultSet.getString("NUMTIS01"),
					resultSet.getDate("FALTATELEASISTENCIA01"), UtilSQL.getInt(resultSet, "BENEFICIARIO01"),
					resultSet.getDate("FBENEFICIARIO01"), resultSet.getDate("FBAJA01"), resultSet.getDate("FINICIO01"),
					resultSet.getString("NUMABONADO01"), resultSet.getString("OBSERVACIONES01"),
					UtilSQL.getInt(resultSet, "NOREINTENTAR01"), UtilSQL.getInt(resultSet, "IDIOMASERVICIO01"),
					UtilSQL.getInt(resultSet, "IDIOMASOLICITANTE01"), resultSet.getString("OTROIDIOMA01"),
					resultSet.getString("TLFNOSERVICIO01"), resultSet.getString("TLFNOMOVIL01"),
					resultSet.getString("EMAIL01"), UtilSQL.getInt(resultSet, "TIPOBENEFICIARIO01"),
					resultSet.getDate("FRETIRADA01"), UtilSQL.getInt(resultSet, "MANTENERINST01"),
					UtilSQL.getInt(resultSet, "EXENCION01"), UtilSQL.getInt(resultSet, "EXONERACION01"),
					UtilSQL.getInt(resultSet, "INSTALADO01"), // UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO01"),
					UtilSQL.getLong(resultSet, "IDMOTIVOBAJA01"), resultSet.getString("USUALTA01"),
					resultSet.getString("USUMODIF01"), resultSet.getDate("FALTA01"), resultSet.getDate("FMODIF01"),
					UtilSQL.getInt(resultSet, "ESDENEGACIONSERVICIO01"),
					new Cuentas(UtilSQL.getLong(resultSet, "CuentasIDCUENTA05"),
							resultSet.getString("CuentasNUMCUENTA05"),
							resultSet.getString("CuentasCODTIPOIDENTITULAR05"),
							resultSet.getString("CuentasIDENTITULAR05"),
							UtilSQL.getLong(resultSet, "CUENTASIDSOLICITANTE05"),
							resultSet.getString("CUENTASUSUHISTORICO05"), resultSet.getDate("CUENTASFHISTORICO05"),
							resultSet.getDate("CuentasFALTA05"), resultSet.getString("CuentasUSUALTA05"),
							resultSet.getString("NOMBRETITCUENTA05"), resultSet.getString("APELLIDO1TITCUENTA05"),
							resultSet.getString("APELLIDO2TITCUENTA05")),
					new Perfiles(UtilSQL.getLong(resultSet, "PerfilesIDPERFIL07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65DEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65RIESGODEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR75SOLA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISINTELECTUAL07"),
							UtilSQL.getInt(resultSet, "PerfilesDISFISICA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISSENSORIAL07"),
							UtilSQL.getInt(resultSet, "PerfilesENFMENTAL07"),
							UtilSQL.getInt(resultSet, "PerfilesRIESGOAISLAMIENTO07"),
							UtilSQL.getInt(resultSet, "PerfilesPISOTUTELADO07"), resultSet.getDate("PerfilesFALTA07"),
							resultSet.getString("PerfilesUSUALTA07"),
							new PisosTutelados(UtilSQL.getLong(resultSet, "PerfilesIDPISO07"), null, null, null, null,
									null, null, null, null)),
					new Direcciones(UtilSQL.getLong(resultSet, "DireccionesIDDIRECCION06"),
							resultSet.getString("DireccionesCALLE06"), resultSet.getString("DireccionesCP06"),
							UtilSQL.getLong(resultSet, "DireccionesIDCALLE06"),
							UtilSQL.getLong(resultSet, "DireccionesIDLOCALIDAD06"),
							resultSet.getString("DireccionesIDMUNICIPIO06"), resultSet.getString("DireccionesIDPAIS06"),
							UtilSQL.getLong(resultSet, "DireccionesIDPORTAL06"),
							resultSet.getString("DireccionesIDPROVINCIA06"), resultSet.getString("DireccionesLETRA06"),
							resultSet.getString("DireccionesLOCALIDAD06"),
							resultSet.getString("DireccionesMUNICIPIO06"), resultSet.getString("DireccionesPAIS06"),
							resultSet.getString("DireccionesPISO06"), resultSet.getString("DireccionesPORTAL06"),
							resultSet.getString("DireccionesESCALERA06"), resultSet.getString("DireccionesPROVINCIA06"),
							UtilSQL.getLong(resultSet, "DIRECCIONESIDSOLICITANTE06"),
							resultSet.getString("DIRECCIONESUSUHISTORICO06"),
							resultSet.getDate("DIRECCIONESFHISTORICO06"), resultSet.getDate("DireccionesFALTA06"),
							resultSet.getString("DireccionesUSUALTA06"), resultSet.getString("provincianoradesces"),
							resultSet.getString("provincianoradesceu"), resultSet.getString("municipionoradesc"),
							resultSet.getString("localidadNORADesc"), resultSet.getString("calleDescripcion"),
							resultSet.getString("calleTipoVia"), UtilSQL.getLong(resultSet, "portalNumNORADesc"),
							resultSet.getString("portalBisNORADesc"), resultSet.getString("portalBloqueNORADesc")),
					new Valoraciones(UtilSQL.getLong(resultSet, "VALIDVALORACION08"),
							resultSet.getDate("ValFVALORACION08"), UtilSQL.getInt(resultSet, "ValTIPOVALORACION08"),
							resultSet.getString("ValCONTRATOACTUACION08"),
							UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"),
							UtilSQL.getInt(resultSet, "ValALTORIESGO08"),
							UtilSQL.getInt(resultSet, "ValNIVELMALTRATO08"),
							UtilSQL.getInt(resultSet, "ValNIVELSUICIDIO08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADPROPUESTA08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADACORDADA08"),
							UtilSQL.getInt(resultSet, "ValPROPUESTAACEPTADA08"),
							UtilSQL.getLong(resultSet, "VALIDSOLICITANTE08"), resultSet.getString("VALUSUHISTORICO08"),
							resultSet.getDate("VALFHISTORICO08"), UtilSQL.getInt(resultSet, "ValMOTIVORETRASO08"),
							resultSet.getDate("ValFALTA08"), resultSet.getString("ValUSUALTA08"),
							UtilSQL.getInt(resultSet, "VALMODOVALORACION08")),
					new Instalaciones(UtilSQL.getLong(resultSet, "IDINSTALACION52"),
							resultSet.getDate("FINSTALACION52"), UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO52"),
							UtilSQL.getLong(resultSet, "IDSOLICITANTE01"), null, null, null, null));

			if (UtilDAO.hasColumn(resultSet, "ALTORIESGO") && null != resultSet.getString("ALTORIESGO")) {
				Riesgos riesgo = new Riesgos();
				riesgo.setIdRiesgo21(UtilSQL.getLong(resultSet, "IDRIESGO"));
				riesgo.setAltoRiesgo21(UtilSQL.getInt(resultSet, "ALTORIESGO"));
				riesgo.setNivelSuicidio21(UtilSQL.getInt(resultSet, "NIVELSUICIDIO"));
				riesgo.setNivelMaltrato21(UtilSQL.getInt(resultSet, "NIVELMALTRATO"));
				solicitante.setRiesgo(riesgo);
			}

			if (UtilDAO.hasColumn(resultSet, "NIVELSOPORTEDESCES")
					&& null != resultSet.getString("NIVELSOPORTEDESCES")) {
				MaestroNivSoporte nivelSoporte = new MaestroNivSoporte();
				nivelSoporte.setDescEs58(resultSet.getString("NIVELSOPORTEDESCES"));

				if (UtilDAO.hasColumn(resultSet, "NIVELSOPORTEDESCEU")
						&& null != resultSet.getString("NIVELSOPORTEDESCEU")) {
					nivelSoporte.setDescEu58(resultSet.getString("NIVELSOPORTEDESCEU"));
				}
				nivelSoporte.setIdNivelSoporte58(UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"));
				solicitante.getValoraciones().setMaestroNivSoporte(nivelSoporte);
				Soporte soporte = new Soporte();
				soporte.setIdSoporte22(UtilSQL.getLong(resultSet, "IDSOPORTE"));
				soporte.setIdNivelSoporte22(UtilSQL.getLong(resultSet, "NIVELSOPORTE"));
				solicitante.setSoporte(soporte);
			} else {
				solicitante.getValoraciones().setMaestroNivSoporte(new MaestroNivSoporte());
			}
			solicitante.setfPrimeraVisita01(resultSet.getDate("FPRIMERAVISITA01"));

			return solicitante;
		}
	};

	private RowMapper<Solicitantes> rwMapFindSameDir = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"),
					resultSet.getString("TIPOIDENTIFICADOR01"), resultSet.getString("IDENTIFICADOR01"),
					resultSet.getString("NOMBRE01"), resultSet.getString("APELLIDO101"),
					resultSet.getString("APELLIDO201"), resultSet.getString("SEXO01"),
					resultSet.getDate("FNACIMIENTO01"), resultSet.getString("NUMSS01"), resultSet.getString("NUMTIS01"),
					resultSet.getDate("FALTATELEASISTENCIA01"), UtilSQL.getInt(resultSet, "BENEFICIARIO01"),
					resultSet.getDate("FBENEFICIARIO01"), resultSet.getDate("FBAJA01"), resultSet.getDate("FINICIO01"),
					resultSet.getString("NUMABONADO01"), resultSet.getString("OBSERVACIONES01"),
					UtilSQL.getInt(resultSet, "NOREINTENTAR01"), UtilSQL.getInt(resultSet, "IDIOMASERVICIO01"),
					UtilSQL.getInt(resultSet, "IDIOMASOLICITANTE01"), resultSet.getString("OTROIDIOMA01"),
					resultSet.getString("TLFNOSERVICIO01"), resultSet.getString("TLFNOMOVIL01"),
					resultSet.getString("EMAIL01"), UtilSQL.getInt(resultSet, "TIPOBENEFICIARIO01"),
					resultSet.getDate("FRETIRADA01"), UtilSQL.getInt(resultSet, "MANTENERINST01"),
					UtilSQL.getInt(resultSet, "EXENCION01"), UtilSQL.getInt(resultSet, "EXONERACION01"),
					UtilSQL.getInt(resultSet, "INSTALADO01"), // UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO01"),
					UtilSQL.getLong(resultSet, "IDMOTIVOBAJA01"), resultSet.getString("USUALTA01"),
					resultSet.getString("USUMODIF01"), resultSet.getDate("FALTA01"), resultSet.getDate("FMODIF01"),
					UtilSQL.getInt(resultSet, "ESDENEGACIONSERVICIO01"), new Cuentas(), new Perfiles(),
					new Direcciones(UtilSQL.getLong(resultSet, "DireccionesIDDIRECCION06"),
							resultSet.getString("DireccionesCALLE06"), resultSet.getString("DireccionesCP06"),
							UtilSQL.getLong(resultSet, "DireccionesIDCALLE06"),
							UtilSQL.getLong(resultSet, "DireccionesIDLOCALIDAD06"),
							resultSet.getString("DireccionesIDMUNICIPIO06"), resultSet.getString("DireccionesIDPAIS06"),
							UtilSQL.getLong(resultSet, "DireccionesIDPORTAL06"),
							resultSet.getString("DireccionesIDPROVINCIA06"), resultSet.getString("DireccionesLETRA06"),
							resultSet.getString("DireccionesLOCALIDAD06"),
							resultSet.getString("DireccionesMUNICIPIO06"), resultSet.getString("DireccionesPAIS06"),
							resultSet.getString("DireccionesPISO06"), resultSet.getString("DireccionesPORTAL06"),
							resultSet.getString("DireccionesESCALERA06"), resultSet.getString("DireccionesPROVINCIA06"),
							UtilSQL.getLong(resultSet, "DIRECCIONESIDSOLICITANTE06"),
							resultSet.getString("DIRECCIONESUSUHISTORICO06"),
							resultSet.getDate("DIRECCIONESFHISTORICO06"), resultSet.getDate("DireccionesFALTA06"),
							resultSet.getString("DireccionesUSUALTA06")),
					new Valoraciones(), new Instalaciones());
		}
	};

	private RowMapper<Solicitantes> rwMapPK = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"));
		}
	};
	private RowMapper<Solicitantes> rwMapPKPago = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Solicitantes sol = new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"));
			sol.setfInicio01(resultSet.getDate("FINICIO01"));
			return sol;
		}
	};

	private RowMapper<Solicitantes> rwMapByFolderId = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Solicitantes solicitante = new Solicitantes();
			solicitante.setIdSolicitante01(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"));
			solicitante.setIdentificador01(resultSet.getString("IDENTIFICADOR01"));
			solicitante.setIdiomaServicio01(resultSet.getInt("IDIOMASERVICIO01"));
			solicitante.setExpSolicitud(new Expedientes(UtilSQL.getLong(resultSet, "IDEXPEDIENTE00")));
			return solicitante;
		}
	};

	private RowMapper<Solicitantes> rwMapEsBeneficiario = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Solicitantes solicitante = new Solicitantes();
			solicitante.setIdSolicitante01(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"));
			solicitante.setIdentificador01(resultSet.getString("IDENTIFICADOR01"));
			solicitante.setBeneficiario01(resultSet.getInt("BENEFICIARIO01"));
			solicitante.setfAltaTeleasistencia01(resultSet.getDate("FALTATELEASISTENCIA01"));
			solicitante.setfBaja01(resultSet.getDate("FBAJA01"));
			return solicitante;
		}
	};
	private RowMapper<BeneficiarioActividadWS> rwMapActividadBeneficiario = new RowMapper<BeneficiarioActividadWS>() {
		public BeneficiarioActividadWS mapRow(ResultSet resultSet, int rowNum) throws SQLException {

			BeneficiarioActividadWS actividad = new BeneficiarioActividadWS();
			actividad.setId(resultSet.getString("IDTIPO"));
			actividad.setTipo(resultSet.getString("TIPO"));
			actividad.setContador(resultSet.getInt("CANTIDAD"));
			actividad.setUltimaFecha(resultSet.getDate("FECHA"));

			return actividad;
		}
	};

	private RowMapper<BeneficiarioWS> rwMapDtosBeneficiario = new RowMapper<BeneficiarioWS>() {
		public BeneficiarioWS mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			BeneficiarioWS solicitante = new BeneficiarioWS();
			solicitante.setfInicio01(resultSet.getDate("FECHAALTABENEFICIARIO"));
			solicitante.setExentoPago(resultSet.getString("EXENTOPAGO"));
			solicitante.setfBaja01(resultSet.getDate("FECHABAJABENEFICIARIO"));
			solicitante.setIdMotivoBaja01(UtilSQL.getLong(resultSet, "MOTIVOBAJA"));
			solicitante.setIdentificador01(resultSet.getString("IDENTIFICADOR01"));
			solicitante.setIdSolicitante01(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"));

			return solicitante;
		}
	};

	private RowMapper<Solicitantes> rwMapFBaja = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {

			Solicitantes solicitante = new Solicitantes();
			solicitante.setfBaja01(resultSet.getDate("FBAJA01"));
			return solicitante;
		}
	};

	private RowMapper<Solicitantes> rwMapTabDatosBeneficiarios = new RowMapper<Solicitantes>() {
		public Solicitantes mapRow(ResultSet resultSet, int rowNum) throws SQLException {

			Solicitantes solicitante = new Solicitantes();
			solicitante.setIdSolicitante01(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"));
			solicitante.setNombre01(resultSet.getString("NOMBRE01"));
			solicitante.setApellido101(resultSet.getString("APELLIDO101"));
			solicitante.setApellido201(resultSet.getString("APELLIDO201"));
			solicitante.setfNacimiento01(resultSet.getDate("FNACIMIENTO01"));
			solicitante.setSexo01(resultSet.getString("SEXO01"));
			solicitante.setTlfnoServicio01(resultSet.getString("TLFNOSERVICIO01"));
			solicitante.setTlfnoMovil01(resultSet.getString("TLFNOMOVIL01"));
			solicitante.setEmail01(resultSet.getString("EMAIL01"));
			solicitante.setNumss01(resultSet.getString("NUMSS01"));
			solicitante.setNumtis01(resultSet.getString("NUMTIS01"));
			solicitante.setIdiomaServicio01(UtilSQL.getInt(resultSet, "IDIOMASERVICIO01"));
			solicitante.setIdiomaSolicitante01(UtilSQL.getInt(resultSet, "IDIOMASOLICITANTE01"));

			Dependencia dependencia = new Dependencia();
			dependencia.setIdGradoDependencia04(UtilSQL.getLong(resultSet, "IDGRADODEPENDENCIA04"));
			solicitante.setDependencia(dependencia);

			return solicitante;
		}
	};

	/**
	 * Rowmapper para Jerarquía
	 *
	 * @param dataSource DataSource
	 * @return
	 */
	private RowMapper<JerarquiaDto<Solicitantes>> rwMapJerarquia = new RowMapper<JerarquiaDto<Solicitantes>>() {
		public JerarquiaDto<Solicitantes> mapRow(ResultSet resultSet, int rowNum) throws SQLException {

			Solicitantes solicitantes = new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE01"),
					resultSet.getString("TIPOIDENTIFICADOR01"), resultSet.getString("IDENTIFICADOR01"),
					resultSet.getString("NOMBRE01"), resultSet.getString("APELLIDO101"),
					resultSet.getString("APELLIDO201"), resultSet.getString("SEXO01"),
					resultSet.getDate("FNACIMIENTO01"), resultSet.getString("NUMSS01"), resultSet.getString("NUMTIS01"),
					resultSet.getDate("FALTATELEASISTENCIA01"), UtilSQL.getInt(resultSet, "BENEFICIARIO01"),
					resultSet.getDate("FBENEFICIARIO01"), resultSet.getDate("FBAJA01"), resultSet.getDate("FINICIO01"),
					resultSet.getString("NUMABONADO01"), resultSet.getString("OBSERVACIONES01"),
					UtilSQL.getInt(resultSet, "NOREINTENTAR01"), UtilSQL.getInt(resultSet, "IDIOMASERVICIO01"),
					UtilSQL.getInt(resultSet, "IDIOMASOLICITANTE01"), resultSet.getString("OTROIDIOMA01"),
					resultSet.getString("TLFNOSERVICIO01"), resultSet.getString("TLFNOMOVIL01"),
					resultSet.getString("EMAIL01"), UtilSQL.getInt(resultSet, "TIPOBENEFICIARIO01"),
					resultSet.getDate("FRETIRADA01"), UtilSQL.getInt(resultSet, "MANTENERINST01"),
					UtilSQL.getInt(resultSet, "EXENCION01"), UtilSQL.getInt(resultSet, "EXONERACION01"),
					UtilSQL.getInt(resultSet, "INSTALADO01"), // UtilSQL.getInt(resultSet, "MOTIVINSTFUERAPLAZO01"),
					UtilSQL.getLong(resultSet, "IDMOTIVOBAJA01"), resultSet.getString("USUALTA01"),
					resultSet.getString("USUMODIF01"), resultSet.getDate("FALTA01"), resultSet.getDate("FMODIF01"),
					UtilSQL.getInt(resultSet, "ESDENEGACIONSERVICIO01"),
					new Cuentas(UtilSQL.getLong(resultSet, "CuentasIDCUENTA05"),
							resultSet.getString("CuentasNUMCUENTA05"),
							resultSet.getString("CuentasCODTIPOIDENTITULAR05"),
							resultSet.getString("CuentasIDENTITULAR05"),
							UtilSQL.getLong(resultSet, "CUENTASIDSOLICITANTE05"),
							resultSet.getString("CUENTASUSUHISTORICO05"), resultSet.getDate("CUENTASFHISTORICO05"),
							resultSet.getDate("CuentasFALTA05"), resultSet.getString("CuentasUSUALTA05"),
							resultSet.getString("NOMBRETITCUENTA05"), resultSet.getString("APELLIDO1TITCUENTA05"),
							resultSet.getString("APELLIDO2TITCUENTA05")),
					new Perfiles(UtilSQL.getLong(resultSet, "PerfilesIDPERFIL07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65DEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR65RIESGODEP07"),
							UtilSQL.getInt(resultSet, "PerfilesMAYOR75SOLA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISINTELECTUAL07"),
							UtilSQL.getInt(resultSet, "PerfilesDISFISICA07"),
							UtilSQL.getInt(resultSet, "PerfilesDISSENSORIAL07"),
							UtilSQL.getInt(resultSet, "PerfilesENFMENTAL07"),
							UtilSQL.getInt(resultSet, "PerfilesRIESGOAISLAMIENTO07"),
							UtilSQL.getInt(resultSet, "PerfilesPISOTUTELADO07"), resultSet.getDate("PerfilesFALTA07"),
							resultSet.getString("PerfilesUSUALTA07"),
							new PisosTutelados(UtilSQL.getLong(resultSet, "PerfilesIDPISO07"), null, null, null, null,
									null, null, null, null)),
					new Direcciones(UtilSQL.getLong(resultSet, "DireccionesIDDIRECCION06"),
							resultSet.getString("DireccionesCALLE06"), resultSet.getString("DireccionesCP06"),
							UtilSQL.getLong(resultSet, "DireccionesIDCALLE06"),
							UtilSQL.getLong(resultSet, "DireccionesIDLOCALIDAD06"),
							resultSet.getString("DireccionesIDMUNICIPIO06"), resultSet.getString("DireccionesIDPAIS06"),
							UtilSQL.getLong(resultSet, "DireccionesIDPORTAL06"),
							resultSet.getString("DireccionesIDPROVINCIA06"), resultSet.getString("DireccionesLETRA06"),
							resultSet.getString("DireccionesLOCALIDAD06"),
							resultSet.getString("DireccionesMUNICIPIO06"), resultSet.getString("DireccionesPAIS06"),
							resultSet.getString("DireccionesPISO06"), resultSet.getString("DireccionesPORTAL06"),
							resultSet.getString("DireccionesESCALERA06"), resultSet.getString("DireccionesPROVINCIA06"),
							UtilSQL.getLong(resultSet, "DIRECCIONESIDSOLICITANTE06"),
							resultSet.getString("DIRECCIONESUSUHISTORICO06"),
							resultSet.getDate("DIRECCIONESFHISTORICO06"), resultSet.getDate("DireccionesFALTA06"),
							resultSet.getString("DireccionesUSUALTA06")),
					new Valoraciones(UtilSQL.getLong(resultSet, "VALIDVALORACION08"),
							resultSet.getDate("ValFVALORACION08"), UtilSQL.getInt(resultSet, "ValTIPOVALORACION08"),
							resultSet.getString("ValCONTRATOACTUACION08"),
							UtilSQL.getLong(resultSet, "VALIDNIVELSOPORTE08"),
							UtilSQL.getInt(resultSet, "ValALTORIESGO08"),
							UtilSQL.getInt(resultSet, "ValNIVELMALTRATO08"),
							UtilSQL.getInt(resultSet, "ValNIVELSUICIDIO08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADPROPUESTA08"),
							UtilSQL.getLong(resultSet, "ValPERIODICIDADACORDADA08"),
							UtilSQL.getInt(resultSet, "ValPROPUESTAACEPTADA08"),
							UtilSQL.getLong(resultSet, "VALIDSOLICITANTE08"), resultSet.getString("VALUSUHISTORICO08"),
							resultSet.getDate("VALFHISTORICO08"), UtilSQL.getInt(resultSet, "ValMOTIVORETRASO08"),
							resultSet.getDate("ValFALTA08"), resultSet.getString("ValUSUALTA08"),
							UtilSQL.getInt(resultSet, "VALMODOVALORACION08")),
					new Instalaciones());

			JerarquiaDto<Solicitantes> jerarquia = new JerarquiaDto<Solicitantes>();
			jerarquia.setModel(solicitantes);
			jerarquia.setLevel(resultSet.getBigDecimal("LEVEL").intValue());
			jerarquia.setParentNodes(resultSet.getString("PARENTNODES"));
			jerarquia.setIsLeaf(Boolean.parseBoolean(resultSet.getString("ISLEAF")));
			jerarquia.setFilter(Boolean.parseBoolean(resultSet.getString("FILTER")));
			return jerarquia;
		}
	};

	/**
	 * Method use to set the datasource.
	 *
	 * @param dataSource DataSource
	 * @return
	 */
	@Resource
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	/*
	 * OPERACIONES CRUD
	 */

	/**
	 * Inserts a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	public Solicitantes add(Solicitantes solicitantes) {

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		String query = "INSERT INTO SOLICITANTES (ID_SOLICITANTE_01, ID_CUENTA_01, ID_PERFIL_01, ID_VALORACION_01, ID_DIRECCION_01, TIPO_IDENTIFICADOR_01, IDENTIFICADOR_01, NOMBRE_01, APELLIDO1_01, APELLIDO2_01, SEXO_01, F_NACIMIENTO_01, NUMSS_01, NUMTIS_01, F_ALTA_TELEASISTENCIA_01, BENEFICIARIO_01, F_BENEFICIARIO_01, F_BAJA_01, F_INICIO_01, NUM_ABONADO_01, OBSERVACIONES_01, NO_REINTENTAR_01, IDIOMA_SERVICIO_01, IDIOMA_SOLICITANTE_01, OTRO_IDIOMA_01, TLFNO_SERVICIO_01, TLFNO_MOVIL_01, EMAIL_01, TIPO_BENEFICIARIO_01, F_RETIRADA_01, MANTENER_INST_01, EXENCION_01, EXONERACION_01, ID_MOTIVO_BAJA_01, USU_ALTA_01, USU_MODIF_01) "
				+ "VALUES (" + SEQUENCE_SOLICITANTE
				+ ".NEXTVAL,:idCuenta,:idPerfil,:idValoracion,:idDireccion,:tipoIdentificador,UPPER(:identificador),:nombre,:apellido1,"
				+ ":apellido2,:sexo,:fNacimiento,:numSS,:numTis,:fAltaTeleasistencia,:beneficiario,:fBeneficiario,"
				+ ":fBaja,:fInicio,:numAbonado,:observaciones,:noReintentar,:idiomaServicio, :idiomaSolicitante, :otroIdioma, :tlfnoServicio, :tlfnoMovil, :email, :tipoBeneficiario, :fRetirada, :mantenerInst, :exencion, :exoneracion, :idMotivoBaja, :usuAlta,:usuModif)";
		Object getCuentasIdCuenta05Aux = null;
		if (solicitantes.getCuentas() != null && solicitantes.getCuentas().getIdCuenta05() != null) {
			getCuentasIdCuenta05Aux = solicitantes.getCuentas().getIdCuenta05();
		}
		Object getPerfilesIdPerfil07Aux = null;
		if (solicitantes.getPerfiles() != null && solicitantes.getPerfiles().getIdPerfil07() != null) {
			getPerfilesIdPerfil07Aux = solicitantes.getPerfiles().getIdPerfil07();
		}
		Object getValoracionIdValoracion08Aux = null;
		if (solicitantes.getValoraciones() != null && solicitantes.getValoraciones().getIdValoracion08() != null) {
			getValoracionIdValoracion08Aux = solicitantes.getValoraciones().getIdValoracion08();
		}
		Object getDireccionesIdDireccion06Aux = null;
		if (solicitantes.getDirecciones() != null && solicitantes.getDirecciones().getIdDireccion06() != null) {
			getDireccionesIdDireccion06Aux = solicitantes.getDirecciones().getIdDireccion06();
		}

		MapSqlParameterSource parameters = new MapSqlParameterSource().addValue("idCuenta", getCuentasIdCuenta05Aux)
				.addValue("idPerfil", getPerfilesIdPerfil07Aux).addValue("idValoracion", getValoracionIdValoracion08Aux)
				.addValue("idDireccion", getDireccionesIdDireccion06Aux)
				.addValue("tipoIdentificador", solicitantes.getTipoIdentificador01())
				.addValue("identificador", solicitantes.getIdentificador01())
				.addValue("nombre", solicitantes.getNombre01()).addValue("apellido1", solicitantes.getApellido101())
				.addValue("apellido2", solicitantes.getApellido201()).addValue("sexo", solicitantes.getSexo01())
				.addValue("fNacimiento", solicitantes.getfNacimiento01()).addValue("numSS", solicitantes.getNumss01())
				.addValue("numTis", solicitantes.getNumtis01())
				.addValue("fAltaTeleasistencia", solicitantes.getfAltaTeleasistencia01())
				.addValue("beneficiario", solicitantes.getBeneficiario01())
				.addValue("fBeneficiario", solicitantes.getfBeneficiario01())
				.addValue("fBaja", solicitantes.getfBaja01()).addValue("fInicio", solicitantes.getfInicio01())
				.addValue("numAbonado", solicitantes.getNumAbonado01())
				.addValue("observaciones", solicitantes.getObservaciones01())
				.addValue("noReintentar", solicitantes.getNoReintentar01())
				.addValue("idiomaServicio", solicitantes.getIdiomaServicio01())
				.addValue("idiomaSolicitante", solicitantes.getIdiomaSolicitante01())
				.addValue("otroIdioma", solicitantes.getOtroIdioma01())
				.addValue("tlfnoServicio", solicitantes.getTlfnoServicio01())
				.addValue("tlfnoMovil", solicitantes.getTlfnoMovil01()).addValue("email", solicitantes.getEmail01())
				.addValue("tipoBeneficiario", solicitantes.getTipoBeneficiario01())
				.addValue("fRetirada", solicitantes.getfRetirada01())
				.addValue("mantenerInst", solicitantes.getMantenerInst01())
				.addValue("exencion", solicitantes.getExencion01())
				.addValue("exoneracion", solicitantes.getExoneracion01())
				.addValue("idMotivoBaja", solicitantes.getIdMotivoBaja01())
				.addValue("usuAlta", solicitantes.getUsuAlta01()).addValue("usuModif", solicitantes.getUsuModif01());

		NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
		namedParameterJdbcTemplate.update(query, parameters, generatedKeyHolder, new String[] { "ID_SOLICITANTE_01" });

		solicitantes.setIdSolicitante01(generatedKeyHolder.getKey().longValue());
		return solicitantes;
	}

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	public Solicitantes update(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET ID_CUENTA_01=?, ID_PERFIL_01=?, ID_DIRECCION_01=?, TIPO_IDENTIFICADOR_01=?, IDENTIFICADOR_01=UPPER(?), NOMBRE_01=?, APELLIDO1_01=?, APELLIDO2_01=?, SEXO_01=?, F_NACIMIENTO_01=?, NUMSS_01=?, NUMTIS_01=?, F_ALTA_TELEASISTENCIA_01=?, BENEFICIARIO_01=?, F_BENEFICIARIO_01=?, F_BAJA_01=?, F_INICIO_01=?, NUM_ABONADO_01=?, OBSERVACIONES_01=?, NO_REINTENTAR_01=?, IDIOMA_SERVICIO_01 = ?, IDIOMA_SOLICITANTE_01 = ?, OTRO_IDIOMA_01 = ?, TLFNO_SERVICIO_01 = ?, TLFNO_MOVIL_01 = ?, EMAIL_01 = ?, TIPO_BENEFICIARIO_01 = ?, F_RETIRADA_01 = ?, MANTENER_INST_01 = ?, EXENCION_01 = ?, EXONERACION_01=?, INSTALADO_01 = ?, ID_MOTIVO_BAJA_01 = ?, USU_ALTA_01=?, USU_MODIF_01=?, F_ALTA_01=?, F_MODIF_01=? WHERE ID_SOLICITANTE_01=?";
		Object getCuentasIdCuenta05Aux = null;
		if (solicitantes.getCuentas() != null && solicitantes.getCuentas().getIdCuenta05() != null) {
			getCuentasIdCuenta05Aux = solicitantes.getCuentas().getIdCuenta05();
		}
		Object getPerfilesIdPerfil07Aux = null;
		if (solicitantes.getPerfiles() != null && solicitantes.getPerfiles().getIdPerfil07() != null) {
			getPerfilesIdPerfil07Aux = solicitantes.getPerfiles().getIdPerfil07();
		}
		Object getDireccionesIdDireccion06Aux = null;
		if (solicitantes.getDirecciones() != null && solicitantes.getDirecciones().getIdDireccion06() != null) {
			getDireccionesIdDireccion06Aux = solicitantes.getDirecciones().getIdDireccion06();
		}
		this.jdbcTemplate.update(query, getCuentasIdCuenta05Aux, getPerfilesIdPerfil07Aux,
				getDireccionesIdDireccion06Aux, solicitantes.getTipoIdentificador01(),
				solicitantes.getIdentificador01(), solicitantes.getNombre01(), solicitantes.getApellido101(),
				solicitantes.getApellido201(), solicitantes.getSexo01(), solicitantes.getfNacimiento01(),
				solicitantes.getNumss01(), solicitantes.getNumtis01(), solicitantes.getfAltaTeleasistencia01(),
				solicitantes.getBeneficiario01(), solicitantes.getfBeneficiario01(), solicitantes.getfBaja01(),
				solicitantes.getfInicio01(), solicitantes.getNumAbonado01(), solicitantes.getObservaciones01(),
				solicitantes.getNoReintentar01(), solicitantes.getIdiomaServicio01(),
				solicitantes.getIdiomaSolicitante01(), solicitantes.getOtroIdioma01(),
				solicitantes.getTlfnoServicio01(), solicitantes.getTlfnoMovil01(), solicitantes.getEmail01(),
				solicitantes.getTipoBeneficiario01(), solicitantes.getfRetirada01(), solicitantes.getMantenerInst01(),
				solicitantes.getExencion01(), solicitantes.getExoneracion01(), solicitantes.getInstalado01(),
				solicitantes.getIdMotivoBaja01(), solicitantes.getUsuAlta01(), solicitantes.getUsuModif01(),
				solicitantes.getfAlta01(), solicitantes.getfModif01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateTabDatosBeneficiarios(Solicitantes solicitantes) {
		String query = "UPDATE solicitantes SET apellido1_01 = ?, apellido2_01 = ?, nombre_01 = ?, f_nacimiento_01 = ?, tipo_beneficiario_01 = ?, sexo_01 = ?, tlfno_servicio_01 = ?, tlfno_movil_01 = ?, email_01 = ?, id_direccion_01 = ?, id_perfil_01 = ?, numss_01 = ?, numtis_01 = ?, id_cuenta_01 = ?, idioma_servicio_01 = ? WHERE id_solicitante_01 = ?";

		this.jdbcTemplate.update(query, solicitantes.getApellido101(), solicitantes.getApellido201(),
				solicitantes.getNombre01(), solicitantes.getfNacimiento01(), solicitantes.getTipoBeneficiario01(),
				solicitantes.getSexo01(), solicitantes.getTlfnoServicio01(), solicitantes.getTlfnoMovil01(),
				solicitantes.getEmail01(), solicitantes.getIdDireccion01(), solicitantes.getIdPerfil01(),
				solicitantes.getNumss01(), solicitantes.getNumtis01(), solicitantes.getIdCuenta01(),
				solicitantes.getIdiomaServicio01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateMantInst(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET MANTENER_INST_01 = ?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getMantenerInst01(), solicitantes.getUsuModif01(),
				solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateAltaInstalacionPS(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET INSTALADO_01 = ?, F_INICIO_01 = ?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getInstalado01(), solicitantes.getfInicio01(),
				solicitantes.getUsuModif01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateDireccionHist(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET ID_DIRECCION_01 = ?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getDirecciones().getIdDireccion06(), solicitantes.getUsuModif01(),
				solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateFromWSUpdate(Solicitantes solicitantes) {

		List<Object> params = new ArrayList<>();
		StringBuilder query = new StringBuilder(
				"UPDATE SOLICITANTES SET TIPO_BENEFICIARIO_01 = ?, IDIOMA_SERVICIO_01 = ? ");

		params.add(solicitantes.getTipoBeneficiario01());
		params.add(solicitantes.getIdiomaServicio01());

		if (solicitantes.getEmail01() != null) {
			query.append(", EMAIL_01=? ");
			params.add(solicitantes.getEmail01());
		}
		if (solicitantes.getTlfnoMovil01() != null) {
			query.append(", TLFNO_MOVIL_01=? ");
			params.add(solicitantes.getTlfnoMovil01());
		}
		if (solicitantes.getTlfnoServicio01() != null) {
			query.append(", TLFNO_SERVICIO_01=? ");
			params.add(solicitantes.getTlfnoServicio01());
		}

		query.append(", USU_MODIF_01 = ?, F_MODIF_01 = sysdate WHERE ID_SOLICITANTE_01=? ");
		params.add(solicitantes.getUsuModif01());
		params.add(solicitantes.getIdSolicitante01());

		this.jdbcTemplate.update(query.toString(), params.toArray());
		return solicitantes;
	}

	@Override
	public Solicitantes updateAltaBeneficiario(Solicitantes solicitantes) {
		String usuario = null;
		try {
			usuario = UtilSeguridad.getUsuarioConectado().getUserName();
		} catch (Exception e) {
			usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
		}
		String query = "UPDATE SOLICITANTES SET F_BENEFICIARIO_01 = ?, F_ALTA_TELEASISTENCIA_01 = ?, BENEFICIARIO_01= ?, EXENCION_01 = ?, NUM_ABONADO_01 = "
				+ SEQUENCE_NUM_ABONADO + ".NEXTVAL, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getfBeneficiario01(), solicitantes.getfAltaTeleasistencia01(),
				solicitantes.getBeneficiario01(), solicitantes.getExencion01(), usuario,
				solicitantes.getIdSolicitante01());

//		ds = new DataSourceImpl("ad74a.ad74aDataSource", "jdbc:oracle:thin:@//ad74d:1530/ad74.ejie.eus", "ad74a",
//				"ad74a");
//
//		try (Connection con = ds.getConnection(); PreparedStatement ps = con.prepareStatement(query);) {
//			ps.setObject(1, solicitantes.getfBeneficiario01());
//			ps.setObject(2, solicitantes.getfAltaTeleasistencia01());
//			ps.setLong(3, solicitantes.getBeneficiario01());
//			ps.setLong(4, solicitantes.getExencion01());
//			ps.setString(5, usuario);
//			ps.setLong(6, solicitantes.getIdSolicitante01());
//			ResultSet rs = ps.executeQuery();
//			rs.setFetchSize(200);
//		} catch (SQLException e) {
//
//		}

		return solicitantes;
	}

	@Override
	public Solicitantes updateBajaBeneficiario(Solicitantes solicitantes) {
		String usuario = null;
		try {
			usuario = UtilSeguridad.getUsuarioConectado().getUserName();
		} catch (Exception e) {
			usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
		}
		String query = "UPDATE SOLICITANTES SET F_BAJA_01 = ?, ID_MOTIVO_BAJA_01 = ?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getfBaja01(), solicitantes.getIdMotivoBaja01(), usuario,
				solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateBajaPSBeneficiario(Solicitantes solicitantes) {
		String usuario = null;
		try {
			usuario = UtilSeguridad.getUsuarioConectado().getUserName();
		} catch (Exception e) {
			usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
		}
		String query = "UPDATE SOLICITANTES SET F_BAJA_PS_01 = ?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getfBaja01(), usuario, solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateValoracion(Solicitantes solicitantes) {
		String usuario = null;
		try {
			usuario = UtilSeguridad.getUsuarioConectado().getUserName();
		} catch (Exception e) {
			usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
		}
		String query = "UPDATE SOLICITANTES SET ID_VALORACION_01 = ?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getValoraciones().getIdValoracion08(), usuario,
				solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	/**
	 * Funcion para modificar la persona interesada. Llama a platea.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	public Solicitantes updatePersonaInteresada(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder(
				"UPDATE SOLICITANTES SET TIPO_IDENTIFICADOR_01=?, IDENTIFICADOR_01 = UPPER(?), NOMBRE_01=?, APELLIDO1_01=?, APELLIDO2_01=?, SEXO_01=?, USU_MODIF_01=?, F_MODIF_01=?,F_NACIMIENTO_01 = ? WHERE ID_SOLICITANTE_01=?");

		List<Object> params = new ArrayList<>();
		params.add(solicitantes.getTipoIdentificador01());
		params.add(solicitantes.getIdentificador01());
		params.add(solicitantes.getNombre01());
		params.add(solicitantes.getApellido101());
		params.add(solicitantes.getApellido201());
		params.add(solicitantes.getSexo01());
		params.add(solicitantes.getUsuModif01());
		params.add(solicitantes.getfModif01());
		params.add(solicitantes.getfNacimiento01());
		params.add(solicitantes.getIdSolicitante01());

		this.jdbcTemplate.update(query.toString(), params.toArray());
		return solicitantes;
	}

	@Override
	public Solicitantes updatePersonaInteresadaSinFNac(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder(
				"UPDATE SOLICITANTES SET TIPO_IDENTIFICADOR_01=?, IDENTIFICADOR_01 = UPPER(?), NOMBRE_01=?, APELLIDO1_01=?, APELLIDO2_01=?, SEXO_01=?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?");
		String usuario = null;

		try {

			usuario = UtilSeguridad.getUsuarioConectado().getUserName();
		} catch (Exception e) {
			usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
		}
		List<Object> params = new ArrayList<>();
		params.add(solicitantes.getTipoIdentificador01());
		params.add(solicitantes.getIdentificador01());
		params.add(solicitantes.getNombre01());
		params.add(solicitantes.getApellido101());
		params.add(solicitantes.getApellido201());
		params.add(solicitantes.getSexo01());
		params.add(usuario);
		params.add(solicitantes.getIdSolicitante01());

		this.jdbcTemplate.update(query.toString(), params.toArray());
		return solicitantes;
	}

	@Override
	public Solicitantes updatePersonaInteresadaSinFNacYSex(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder(
				"UPDATE SOLICITANTES SET TIPO_IDENTIFICADOR_01=?, IDENTIFICADOR_01 = UPPER(?), NOMBRE_01=?, APELLIDO1_01=?, APELLIDO2_01=?, USU_MODIF_01=?, F_MODIF_01=sysdate WHERE ID_SOLICITANTE_01=?");
		String usuario = null;

		try {

			usuario = UtilSeguridad.getUsuarioConectado().getUserName();
		} catch (Exception e) {
			usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
		}
		List<Object> params = new ArrayList<>();
		params.add(solicitantes.getTipoIdentificador01());
		params.add(solicitantes.getIdentificador01());
		params.add(solicitantes.getNombre01());
		params.add(solicitantes.getApellido101());
		params.add(solicitantes.getApellido201());
		params.add(usuario);
		params.add(solicitantes.getIdSolicitante01());

		this.jdbcTemplate.update(query.toString(), params.toArray());
		return solicitantes;
	}

	/**
	 * Función para actualizar el idioma del solicitante
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Override
	public Solicitantes updateIdioma(Solicitantes solicitantes) {

		String query = "UPDATE SOLICITANTES SET IDIOMA_SOLICITANTE_01 = ? WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getIdiomaSolicitante01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	/**
	 * Función para actualizar el tipo de beneficiario
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Override
	public Solicitantes updateTipoBeneficiario(Solicitantes solicitantes) {

		String query = "UPDATE SOLICITANTES SET TIPO_BENEFICIARIO_01 = ? WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getTipoBeneficiario01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	/**
	 * Finds a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Transactional(readOnly = true)
	public Solicitantes find(Solicitantes solicitantes) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01, t1.IDENTIFICADOR_01 IDENTIFICADOR01, t1.NOMBRE_01 NOMBRE01, t1.APELLIDO1_01 APELLIDO101, t1.APELLIDO2_01 APELLIDO201, t1.SEXO_01 SEXO01, t1.F_NACIMIENTO_01 FNACIMIENTO01, t1.NUMSS_01 NUMSS01, t1.NUMTIS_01 NUMTIS01, t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01, t1.BENEFICIARIO_01 BENEFICIARIO01, t1.F_BENEFICIARIO_01 FBENEFICIARIO01, t1.F_BAJA_01 FBAJA01, t1.F_INICIO_01 FINICIO01, t1.NUM_ABONADO_01 NUMABONADO01, t1.OBSERVACIONES_01 OBSERVACIONES01, t1.NO_REINTENTAR_01 NOREINTENTAR01, t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01, t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01, t1.USU_MODIF_01 USUMODIF01, t1.F_ALTA_01 FALTA01, t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01, t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 ,t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01, ");
		query.append(
				" t3.ID_CUENTA_05 CUENTASIDCUENTA05, t3.NUM_CUENTA_05 CUENTASNUMCUENTA05, t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05, t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,  t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05, t3.F_ALTA_05 CUENTASFALTA05, t3.USU_ALTA_05 CUENTASUSUALTA05, NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,");
		query.append(
				" t4.ID_PERFIL_07 PERFILESIDPERFIL07, t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07, t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07, t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07, t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07, t4.DIS_FISICA_07 PERFILESDISFISICA07, t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07, t4.ENF_MENTAL_07 PERFILESENFMENTAL07, t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07, t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07, t4.F_ALTA_07 PERFILESFALTA07, t4.USU_ALTA_07 PERFILESUSUALTA07, t4.ID_PISO_07 PERFILESIDPISO07,");
		query.append(
				" t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t5.CALLE_06 DIRECCIONESCALLE06, t5.CP_06 DIRECCIONESCP06, t5.ID_CALLE_06 DIRECCIONESIDCALLE06, t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06, t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06, t5.ID_PAIS_06 DIRECCIONESIDPAIS06, t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t5.LETRA_06 DIRECCIONESLETRA06, t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06, t5.PAIS_06 DIRECCIONESPAIS06, t5.PISO_06 DIRECCIONESPISO06, t5.PORTAL_06 DIRECCIONESPORTAL06, t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06, t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06, t5.USU_ALTA_06 DIRECCIONESUSUALTA06,");
		query.append(
				" t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08,");
		query.append("t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,");//
		query.append("t9.DS_O municipionoradesc, ");
		query.append("t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion,");
		query.append("t11.DS_O localidadNORADesc,");
		query.append("t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc, ");
		query.append("t13.DESC_ES_58 NIVELSOPORTEDESCES, t13.DESC_EU_58 NIVELSOPORTEDESCEU, ");
		query.append(
				"t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");

		query.append(" FROM SOLICITANTES t1 ");
		query.append(" LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append(" LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append(" LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t13 ON (t6.ID_NIVEL_SOPORTE_08= t13.ID_NIVEL_SOPORTE_58) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id) ");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");
		query.append(" WHERE t1.ID_SOLICITANTE_01 = ? ");
		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query.toString(), this.rwMapProvinciasDesc,
				solicitantes.getIdSolicitante01());
		Solicitantes result = (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * Finds a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Transactional(readOnly = true)
	public Solicitantes findPrestacionServicio(Solicitantes solicitantes) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01, t1.IDENTIFICADOR_01 IDENTIFICADOR01, t1.NOMBRE_01 NOMBRE01, t1.APELLIDO1_01 APELLIDO101, t1.APELLIDO2_01 APELLIDO201, t1.SEXO_01 SEXO01, t1.F_NACIMIENTO_01 FNACIMIENTO01, t1.NUMSS_01 NUMSS01, t1.NUMTIS_01 NUMTIS01, t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01, t1.BENEFICIARIO_01 BENEFICIARIO01, t1.F_BENEFICIARIO_01 FBENEFICIARIO01, t1.F_BAJA_01 FBAJA01, t1.F_INICIO_01 FINICIO01, t1.NUM_ABONADO_01 NUMABONADO01, t1.OBSERVACIONES_01 OBSERVACIONES01, t1.NO_REINTENTAR_01 NOREINTENTAR01, t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01, t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01, t1.USU_MODIF_01 USUMODIF01, t1.F_ALTA_01 FALTA01, t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01, t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 , ");
		query.append(
				" t3.ID_CUENTA_05 CUENTASIDCUENTA05, t3.NUM_CUENTA_05 CUENTASNUMCUENTA05, t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05, t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,  t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05, t3.F_ALTA_05 CUENTASFALTA05, t3.USU_ALTA_05 CUENTASUSUALTA05, NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,");
		query.append(
				" t4.ID_PERFIL_07 PERFILESIDPERFIL07, t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07, t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07, t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07, t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07, t4.DIS_FISICA_07 PERFILESDISFISICA07, t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07, t4.ENF_MENTAL_07 PERFILESENFMENTAL07, t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07, t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07, t4.F_ALTA_07 PERFILESFALTA07, t4.USU_ALTA_07 PERFILESUSUALTA07, t4.ID_PISO_07 PERFILESIDPISO07,");
		query.append(
				" t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t5.CALLE_06 DIRECCIONESCALLE06, t5.CP_06 DIRECCIONESCP06, t5.ID_CALLE_06 DIRECCIONESIDCALLE06, t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06, t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06, t5.ID_PAIS_06 DIRECCIONESIDPAIS06, t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t5.LETRA_06 DIRECCIONESLETRA06, t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06, t5.PAIS_06 DIRECCIONESPAIS06, t5.PISO_06 DIRECCIONESPISO06, t5.PORTAL_06 DIRECCIONESPORTAL06, t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06, t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06, t5.USU_ALTA_06 DIRECCIONESUSUALTA06,");
		query.append(
				" t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08, t6.MODO_VALORACION_08 VALMODOVALORACION08,");
		query.append("t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,");//
		query.append("t9.DS_O municipionoradesc, ");
		query.append("t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion,");
		query.append("t11.DS_O localidadNORADesc,");
		query.append("t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc, ");
		query.append("t13.DESC_ES_58 NIVELSOPORTEDESCES, t13.DESC_EU_58 NIVELSOPORTEDESCEU");
		query.append(
				", t14.ID_RIESGO_21 IDRIESGO,t14.ALTO_RIESGO_21 ALTORIESGO, t14.NIVEL_MALTRATO_21 NIVELMALTRATO, t14.NIVEL_SUICIDIO_21 NIVELSUICIDIO,t15.ID_SOPORTE_22  IDSOPORTE, t15.ID_NIVEL_SOPORTE_22 NIVELSOPORTE");
		query.append(
				" ,t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");
		query.append(" FROM SOLICITANTES t1 ");
		query.append(" LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append(" LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append(" LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");

		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id) ");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				" LEFT JOIN RIESGOS t14 ON (t1.id_solicitante_01 = t14.id_solicitante_21 AND T14.f_historico_21 IS NULL)");
		query.append(
				" LEFT JOIN SOPORTE t15 ON (t1.id_solicitante_01 = t15.id_solicitante_22 AND t15.f_historico_22 IS NULL)");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t13 ON (t15.ID_NIVEL_SOPORTE_22= t13.ID_NIVEL_SOPORTE_58) ");
		query.append(" WHERE t1.ID_SOLICITANTE_01 = ? ");
		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query.toString(),
				this.rwMapProvinciasDescPrestServ, solicitantes.getIdSolicitante01());
		Solicitantes result = (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	@Transactional(readOnly = true)
	public Solicitantes findPorDni(Solicitantes solicitantes) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01, t1.IDENTIFICADOR_01 IDENTIFICADOR01, t1.NOMBRE_01 NOMBRE01, t1.APELLIDO1_01 APELLIDO101, t1.APELLIDO2_01 APELLIDO201, t1.SEXO_01 SEXO01, t1.F_NACIMIENTO_01 FNACIMIENTO01, t1.NUMSS_01 NUMSS01, t1.NUMTIS_01 NUMTIS01, t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01, t1.BENEFICIARIO_01 BENEFICIARIO01, t1.F_BENEFICIARIO_01 FBENEFICIARIO01, t1.F_BAJA_01 FBAJA01, t1.F_INICIO_01 FINICIO01, t1.NUM_ABONADO_01 NUMABONADO01, t1.OBSERVACIONES_01 OBSERVACIONES01, t1.NO_REINTENTAR_01 NOREINTENTAR01, t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01, t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01, t1.USU_MODIF_01 USUMODIF01, t1.F_ALTA_01 FALTA01, t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01, t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 ,t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01, ");
		query.append(
				" t3.ID_CUENTA_05 CUENTASIDCUENTA05, t3.NUM_CUENTA_05 CUENTASNUMCUENTA05, t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05, t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,  t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05, t3.F_ALTA_05 CUENTASFALTA05, t3.USU_ALTA_05 CUENTASUSUALTA05, NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,");
		query.append(
				" t4.ID_PERFIL_07 PERFILESIDPERFIL07, t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07, t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07, t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07, t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07, t4.DIS_FISICA_07 PERFILESDISFISICA07, t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07, t4.ENF_MENTAL_07 PERFILESENFMENTAL07, t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07, t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07, t4.F_ALTA_07 PERFILESFALTA07, t4.USU_ALTA_07 PERFILESUSUALTA07, t4.ID_PISO_07 PERFILESIDPISO07,");
		query.append(
				" t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t5.CALLE_06 DIRECCIONESCALLE06, t5.CP_06 DIRECCIONESCP06, t5.ID_CALLE_06 DIRECCIONESIDCALLE06, t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06, t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06, t5.ID_PAIS_06 DIRECCIONESIDPAIS06, t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t5.LETRA_06 DIRECCIONESLETRA06, t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06, t5.PAIS_06 DIRECCIONESPAIS06, t5.PISO_06 DIRECCIONESPISO06, t5.PORTAL_06 DIRECCIONESPORTAL06, t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06, t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06, t5.USU_ALTA_06 DIRECCIONESUSUALTA06,");
		query.append(
				" t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08,");
		query.append("t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,");//
		query.append("t9.DS_O municipionoradesc, ");
		query.append("t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion,");
		query.append("t11.DS_O localidadNORADesc,");
		query.append("t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc, ");
		query.append("t13.DESC_ES_58 NIVELSOPORTEDESCES, t13.DESC_EU_58 NIVELSOPORTEDESCEU, ");
		query.append(
				"t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");

		query.append(" FROM SOLICITANTES t1 ");
		query.append(" LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append(" LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append(" LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t13 ON (t6.ID_NIVEL_SOPORTE_08= t13.ID_NIVEL_SOPORTE_58) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id) ");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");
		query.append(
				" WHERE UPPER(t1.IDENTIFICADOR_01) = UPPER(?) AND BENEFICIARIO_01 = 1 AND (F_BAJA_01 IS NULL OR (F_BAJA_01 IS NOT NULL AND F_BAJA_01 > sysdate))");
		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query.toString(), this.rwMapProvinciasDesc,
				solicitantes.getIdentificador01());
		Solicitantes result = (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * Removes a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return
	 */
	public void remove(Solicitantes solicitantes) {
		String query = "DELETE FROM SOLICITANTES WHERE ID_SOLICITANTE_01=?";
		this.jdbcTemplate.update(query, solicitantes.getIdSolicitante01());
	}

	/**
	 * Exporta Datos al clipBoard
	 *
	 */
	public List<Solicitantes> getMultiple(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01, t1.IDENTIFICADOR_01 IDENTIFICADOR01, t1.NOMBRE_01 NOMBRE01, t1.APELLIDO1_01 APELLIDO101, t1.APELLIDO2_01 APELLIDO201, t1.SEXO_01 SEXO01, t1.F_NACIMIENTO_01 FNACIMIENTO01, t1.NUMSS_01 NUMSS01, t1.NUMTIS_01 NUMTIS01, t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01, t1.BENEFICIARIO_01 BENEFICIARIO01, t1.F_BENEFICIARIO_01 FBENEFICIARIO01, t1.F_BAJA_01 FBAJA01, t1.F_INICIO_01 FINICIO01, t1.NUM_ABONADO_01 NUMABONADO01, t1.OBSERVACIONES_01 OBSERVACIONES01, t1.NO_REINTENTAR_01 NOREINTENTAR01, t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01, t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01, t1.USU_MODIF_01 USUMODIF01, t1.F_ALTA_01 FALTA01, t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01, t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t3.ID_CUENTA_05 CUENTASIDCUENTA05, t3.NUM_CUENTA_05 CUENTASNUMCUENTA05, t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05, t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05, t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,  t3.F_ALTA_05 CUENTASFALTA05, t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05, t4.ID_PERFIL_07 PERFILESIDPERFIL07, t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07, t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07, t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07, t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07, t4.DIS_FISICA_07 PERFILESDISFISICA07, t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07, t4.ENF_MENTAL_07 PERFILESENFMENTAL07, t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07, t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07, t4.F_ALTA_07 PERFILESFALTA07, t4.USU_ALTA_07 PERFILESUSUALTA07, t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t5.CALLE_06 DIRECCIONESCALLE06, t5.CP_06 DIRECCIONESCP06, t5.ID_CALLE_06 DIRECCIONESIDCALLE06, t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06, t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06, t5.ID_PAIS_06 DIRECCIONESIDPAIS06, t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t5.LETRA_06 DIRECCIONESLETRA06, t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06, t5.PAIS_06 DIRECCIONESPAIS06, t5.PISO_06 DIRECCIONESPISO06, t5.PORTAL_06 DIRECCIONESPORTAL06, t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06, t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06,t5.F_ALTA_06 DIRECCIONESFALTA06, t5.USU_ALTA_06 DIRECCIONESUSUALTA06, t4.ID_PISO_07 PERFILESIDPISO07, t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08 ");
		query.append(" FROM SOLICITANTES t1 , CUENTAS t3 , PERFILES t4 , DIRECCIONES t5, VALORACIONES t6  ");
		// Where clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterSolicitantes, startsWith);
		StringBuilder where = new StringBuilder(query + " WHERE 1=1 ");
		where.append(mapaWhere.get("query"));

		@SuppressWarnings("unchecked")
		List<Object> params = (List<Object>) mapaWhere.get("params");

		StringBuilder sbMultipleSQL = TableManager.getSelectMultipleQuery(tableRequestDto, Solicitantes.class, params,
				"ID_SOLICITANTE_01");
		where.append(sbMultipleSQL);

		List<Solicitantes> result = this.jdbcTemplate.query(where.toString(), this.rwMap, params.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * Finds a list of rows in the Solicitantes table.
	 *
	 * @param solicitantes    Solicitantes
	 * @param tableRequestDto TableRequestDto
	 * @return List<Solicitantes>
	 */
	@Transactional(readOnly = true)
	public List<Solicitantes> findAll(Solicitantes solicitantes, TableRequestDto tableRequestDto) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01, t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01, t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06,t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,t4.ID_PISO_07 PERFILESIDPISO07, t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08 ");
		query.append("FROM SOLICITANTES t1 ,CUENTAS t3 ,PERFILES t4 ,DIRECCIONES t5, VALORACIONES t6 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(solicitantes);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_CUENTA_01= t3.ID_CUENTA_05(+) AND t1.ID_PERFIL_01= t4.ID_PERFIL_07(+) AND t1.ID_DIRECCION_01= t5.ID_DIRECCION_06(+) AND t1.ID_VALORACION_01= t6.ID_VALORACION_08(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query, SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<Solicitantes> result = (List<Solicitantes>) this.jdbcTemplate.query(query.toString(), this.rwMap,
				params.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * Finds rows in the Solicitantes table using like.
	 *
	 * @param solicitantes    Solicitantes
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<Solicitantes>
	 */
	@Transactional(readOnly = true)
	public List<Solicitantes> findAllLike(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith, Boolean isSSB, Ayuntamientos ayuntamiento) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01,t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01,t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 ,t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01, "
						+ "t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,"
						+ "t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t4.ID_PISO_07 PERFILESIDPISO07,"
						+ "t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06,t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,"
						+ "t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08, t6.F_ALTA_08 VALFALTA08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.USU_ALTA_08 VALUSUALTA08,"
						+ "t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,"//
						+ "t9.DS_O municipionoradesc," //
						+ "t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion," //
						+ "t11.DS_O localidadNORADesc, " //
						+ "t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc ");
		query.append(
				" ,t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");
		query.append(", t17.DESC_ES_58 DESCES58, t17.DESC_EU_58 DESCEU58 ");
		query.append("FROM SOLICITANTES t1 ");
		query.append("LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append("LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append("LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append("LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");

		// query.append("LEFT JOIN EXPEDIENTES t7 ON (t1.id_solicitante_01 =
		// t7.ID_SOLICITANTE_00 ) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id)");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				"LEFT JOIN AYUNTAMIENTOS t13 ON (t5.id_provincia_06 = t13.id_provincia_31 and t5.id_municipio_06 = t13.id_MUNICIPIO_31) ");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t17 ON (t17.ID_NIVEL_SOPORTE_58 = t6.id_nivel_soporte_08) ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(solicitantes, startsWith);
		List<?> params = (List<?>) mapaWhere.get("params");
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);
		if (isSSB) {
			StringBuilder queryDSS = new StringBuilder(
					" AND t13.id_provincia_31 = " + ayuntamiento.getProvincia().getCodProvincia()
							+ " and t13.id_municipio_31 = " + ayuntamiento.getMunicipio().getCodMunicipio());
			query.append(queryDSS);
		}

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query, SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<Solicitantes> result = (List<Solicitantes>) this.jdbcTemplate.query(query.toString(), this.rwMapExcelTabla,
				params.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	@Transactional(readOnly = true)
	public List<Solicitantes> findAllLikeExcel(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith, Boolean isSSB, Ayuntamientos ayuntamiento) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01,t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01,t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 ,t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01, "
						+ "t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,"
						+ "t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t4.ID_PISO_07 PERFILESIDPISO07,"
						+ "t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06,t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,"
						+ "t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08, t6.F_ALTA_08 VALFALTA08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.USU_ALTA_08 VALUSUALTA08,"
						+ "t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,"//
						+ "t9.DS_O municipionoradesc," //
						+ "t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion," //
						+ "t11.DS_O localidadNORADesc, " //
						+ "t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc ");
		query.append(
				" ,t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");
		query.append(", t17.DESC_ES_58 DESCES58, t17.DESC_EU_58 DESCEU58 ");
		query.append("FROM SOLICITANTES t1 ");
		query.append("LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append("LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append("LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append("LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");

		// query.append("LEFT JOIN EXPEDIENTES t7 ON (t1.id_solicitante_01 =
		// t7.ID_SOLICITANTE_00 ) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id)");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				"LEFT JOIN AYUNTAMIENTOS t13 ON (t5.id_provincia_06 = t13.id_provincia_31 and t5.id_municipio_06 = t13.id_MUNICIPIO_31) ");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t17 ON (t17.ID_NIVEL_SOPORTE_58 = t6.id_nivel_soporte_08) ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(solicitantes, startsWith);
		List<?> params = (List<?>) mapaWhere.get("params");
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);
		if (isSSB) {
			StringBuilder queryDSS = new StringBuilder(
					" AND t13.id_provincia_31 = " + ayuntamiento.getProvincia().getCodProvincia()
							+ " and t13.id_municipio_31 = " + ayuntamiento.getMunicipio().getCodMunicipio());
			query.append(queryDSS);
		}
		query.append(" ORDER BY IDENTIFICADOR_01 ");

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query, SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<Solicitantes> result = (List<Solicitantes>) this.jdbcTemplate.query(query.toString(), this.rwMapExcelTabla,
				params.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	@Transactional(readOnly = true)
	public List<Solicitantes> findAllLike(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01,t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01,t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 , t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01,"
						+ "t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05, "
						+ "t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t4.ID_PISO_07 PERFILESIDPISO07,"
						+ "t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,"
						+ "t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08, t6.F_ALTA_08 VALFALTA08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.USU_ALTA_08 VALUSUALTA08,"
						+ "t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,"//
						+ "t9.DS_O municipionoradesc," //
						+ "t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion," //
						+ "t11.DS_O localidadNORADesc, " //
						+ "t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc, "
						+ "t13.ID_TIPO_INTERVENCION_25 IDTIPOINTERVENCION25 ");

		query.append(
				" ,t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");

		query.append("FROM SOLICITANTES t1 ");
		query.append("LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append("LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append("LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append("LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");
		// query.append("LEFT JOIN EXPEDIENTES t7 ON (t1.id_solicitante_01 =
		// t7.ID_SOLICITANTE_00 ) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id)");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append("LEFT JOIN INTERVENCIONES t13 ON (t1.ID_SOLICITANTE_01 = t13.ID_SOLICITANTE_25)");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(solicitantes, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");

		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query, SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<Solicitantes> result = (List<Solicitantes>) this.jdbcTemplate.query(query.toString(),
				this.rwMapProvinciasDesc, params.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	@Transactional(readOnly = true)
	public List<Solicitantes> findAllLikeBeneficiarios(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01,t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01,t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 ,t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01,"
						+ "t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05, "
						+ "t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t4.ID_PISO_07 PERFILESIDPISO07,"
						+ "t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,"
						+ "t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08, t6.F_ALTA_08 VALFALTA08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.USU_ALTA_08 VALUSUALTA08,"
						+ "t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,"//
						+ "t9.DS_O municipionoradesc," //
						+ "t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion," //
						+ "t11.DS_O localidadNORADesc, " //
						+ "t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc ");
		query.append(
				" ,t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");
		/* + "t13.ID_TIPO_INTERVENCION_25 IDTIPOINTERVENCION25 "); */

		query.append("FROM SOLICITANTES t1 ");
		query.append("LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append("LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append("LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append("LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");
		// query.append("LEFT JOIN EXPEDIENTES t7 ON (t1.id_solicitante_01 =
		// t7.ID_SOLICITANTE_00 ) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id)");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");
		/*
		 * query.
		 * append("LEFT JOIN INTERVENCIONES t13 ON (t1.ID_SOLICITANTE_01 = t13.ID_SOLICITANTE_25)"
		 * );
		 */

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(solicitantes, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");

		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query, SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<Solicitantes> result = (List<Solicitantes>) this.jdbcTemplate.query(query.toString(),
				this.rwMapProvinciasDesc, params.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	@Transactional(readOnly = true)
	public List<Solicitantes> obtenerDatosBeneficiario(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01,t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01,t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 ,t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01,"
						+ "t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05, "
						+ "t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t4.ID_PISO_07 PERFILESIDPISO07,"
						+ "t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,"
						+ "t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08, t6.F_ALTA_08 VALFALTA08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.USU_ALTA_08 VALUSUALTA08,"
						+ "t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,"//
						+ "t9.DS_O municipionoradesc," //
						+ "t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion," //
						+ "t11.DS_O localidadNORADesc, " //
						+ "t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc ");
		query.append(
				" ,t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");
		/* + "t13.ID_TIPO_INTERVENCION_25 IDTIPOINTERVENCION25 "); */

		query.append("FROM SOLICITANTES t1 ");
		query.append("LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append("LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append("LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append("LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");
		query.append("LEFT JOIN EXPEDIENTES t7 ON (t1.id_solicitante_01 = t7.ID_SOLICITANTE_00 ) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id)");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");
		/*
		 * query.
		 * append("LEFT JOIN INTERVENCIONES t13 ON (t1.ID_SOLICITANTE_01 = t13.ID_SOLICITANTE_25)"
		 * );
		 */

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(solicitantes, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");

		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query, SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<Solicitantes> result = (List<Solicitantes>) this.jdbcTemplate.query(query.toString(),
				this.rwMapProvinciasDesc, params.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}
	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder(
				"SELECT COUNT(1) FROM SOLICITANTES t1 , CUENTAS t3 , PERFILES t4 , DIRECCIONES t5, VALORACIONES t6, INTERVENCIONES t7 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(solicitantes);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_CUENTA_01= t3.ID_CUENTA_05(+) AND t1.ID_PERFIL_01= t4.ID_PERFIL_07(+) AND t1.ID_DIRECCION_01= t5.ID_DIRECCION_06(+) AND t1.ID_VALORACION_01= t6.ID_VALORACION_08(+) AND t1.ID_SOLICITANTE_01 = t17.ID_SOLICITANTE_25 (+)");

		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");

		return this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);
	}

	/**
	 * Counts rows in the Solicitantes table using like.
	 *
	 * @param solicitantes Solicitantes
	 * @param startsWith   Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(Solicitantes solicitantes, Boolean startsWith, Boolean isDSS,
			Ayuntamientos ayuntamiento) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) ");
		query.append("FROM SOLICITANTES t1 ");
		query.append("LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append("LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append("LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append("LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");
		// query.append("LEFT JOIN EXPEDIENTES t7 ON (t1.id_solicitante_01 =
		// t7.ID_SOLICITANTE_00 ) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id)");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				"LEFT JOIN AYUNTAMIENTOS t13 ON (t5.id_provincia_06 = t13.id_provincia_31 and t5.id_municipio_06 = t13.id_MUNICIPIO_31)");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(solicitantes, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1  ");
		where.append(mapaWhere.get("query"));
		query.append(where);
		if (isDSS) {
			StringBuilder queryDSS = new StringBuilder(
					" AND t13.id_provincia_31 = " + ayuntamiento.getProvincia().getCodProvincia()
							+ " and t13.id_municipio_31 = " + ayuntamiento.getMunicipio().getCodMunicipio());
			query.append(queryDSS);
		}

		List<?> params = (List<?>) mapaWhere.get("params");

		return this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);
	}

	/**
	 * Reorder the data list of Solicitantes selected for rup_table
	 *
	 * @param solicitantes    Solicitantes
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<Solicitantes>>
	 */
	@Override
	public List<TableRowDto<Solicitantes>> reorderSelection(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01,t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01, t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA, t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,t4.ID_PISO_07 PERFILESIDPISO07, t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08 ");
		// FROM
		query.append("FROM SOLICITANTES t1 ,CUENTAS t3 ,PERFILES t4 ,DIRECCIONES t5, VALORACIONES t6 ");
		// FILTRADO
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(solicitantes, startsWith);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_CUENTA_01= t3.ID_CUENTA_05(+) AND t1.ID_PERFIL_01= t4.ID_PERFIL_07(+) AND t1.ID_DIRECCION_01= t5.ID_DIRECCION_06(+) AND t1.ID_VALORACION_01= t6.ID_VALORACION_08(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

		// Parámetros de filtrado
		@SuppressWarnings("unchecked")
		List<Object> filterParamList = (List<Object>) mapaWhere.get("params");

		// SQL para la reordenación
		StringBuilder sbReorderSelectionSQL = TableManager.getReorderQuery(query, tableRequestDto, Solicitantes.class,
				filterParamList, "IDSOLICITANTE01");

		List<TableRowDto<Solicitantes>> result = this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<Solicitantes>(this.rwMapPK, tableRequestDto), filterParamList.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams    Solicitantes
	 * @param searchParams    Solicitantes
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<Solicitantes>>
	 */
	@Override
	public List<TableRowDto<Solicitantes>> search(Solicitantes filterParams, Solicitantes searchParams,
			TableRequestDto tableRequestDto, Boolean startsWith) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,t4.ID_PISO_07 PERFILESIDPISO07, t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08 ");
		// FROM
		query.append("FROM SOLICITANTES t1 ,CUENTAS t3 ,PERFILES t4 ,DIRECCIONES t5, VALORACIONES t6 ");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");
		from_alias.add(" t3 ");
		from_alias.add(" t4 ");
		from_alias.add(" t5 ");

		// FILTRADO
		Map<String, ?> mapaWhereFilter = this.getWhereLikeMap(filterParams, startsWith);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_CUENTA_01= t3.ID_CUENTA_05(+) AND t1.ID_PERFIL_01= t4.ID_PERFIL_07(+) AND t1.ID_DIRECCION_01= t5.ID_DIRECCION_06(+) AND t1.ID_VALORACION_01= t6.ID_VALORACION_08(+) ");
		where.append(mapaWhereFilter.get("query"));
		query.append(where);
		// Filter params
		@SuppressWarnings("unchecked")
		List<Object> filterParamList = (List<Object>) mapaWhereFilter.get("params");

		// BUSQUEDA
		Map<String, Object> mapaWhereSearch = this.getWhereLikeMap(searchParams, startsWith);
		String searchSQL = ((StringBuilder) mapaWhereSearch.get("query")).toString();
		// Search params
		@SuppressWarnings("unchecked")
		List<Object> searchParamList = (List<Object>) mapaWhereSearch.get("params");

		// SQL
		StringBuilder sbReorderSelectionSQL = TableManager.getSearchQuery(query, tableRequestDto, Solicitantes.class,
				filterParamList, searchSQL, searchParamList, from_alias, "IDSOLICITANTE01");

		List<TableRowDto<Solicitantes>> result = this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<Solicitantes>(this.rwMapPK, tableRequestDto), filterParamList.toArray());

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * Remove multiple method for rup_table
	 *
	 * @param tableRequestDto TableRequestDto
	 */
	@Override
	public void removeMultiple(TableRequestDto tableRequestDto) {
		StringBuilder sbRemoveMultipleSQL = TableManager.getRemoveMultipleQuery(tableRequestDto, Solicitantes.class,
				"SOLICITANTES", new String[] { "IDSOLICITANTE01" });

		List<String> params = tableRequestDto.getMultiselection().getSelectedIds();

		this.jdbcTemplate.update(sbRemoveMultipleSQL.toString(), params.toArray());
	}

	/**
	 * Filter in the hierarchical Solicitantes table.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @return List<JerarquiaDto<Solicitantes>>
	 */
	@Override
	public List<JerarquiaDto<Solicitantes>> findAllLikeJerarquia(Solicitantes filterSolicitantes,
			TableRequestDto tableRequestDto) {
		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01,t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 , t3.ID_CUENTA_05 CUENTASIDCUENTA05,t3.NUM_CUENTA_05 CUENTASNUMCUENTA05,t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05,t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05,t3.F_ALTA_05 CUENTASFALTA05,t3.USU_ALTA_05 CUENTASUSUALTA05, t3.NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, t3.APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, t3.APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,t4.ID_PERFIL_07 PERFILESIDPERFIL07,t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07,t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07,t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07,t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07,t4.DIS_FISICA_07 PERFILESDISFISICA07,t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07,t4.ENF_MENTAL_07 PERFILESENFMENTAL07,t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07,t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07,t4.F_ALTA_07 PERFILESFALTA07,t4.USU_ALTA_07 PERFILESUSUALTA07,t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06,t4.ID_PISO_07 PERFILESIDPISO07, t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08 ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM SOLICITANTES t1 ,INFORME_SOCIAL
		// t2 ,CUENTAS t3 ,PERFILES t4 ,DIRECCIONES t5 ");
		List<String> from = new ArrayList<String>();
		from.add("SOLICITANTES");
		from.add("CUENTAS");
		from.add("PERFILES");
		from.add("DIRECCIONES");
		from.add("VALORACIONES");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");
		from_alias.add(" t3 ");
		from_alias.add(" t4 ");
		from_alias.add(" t5 ");
		from_alias.add(" t6 ");

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterSolicitantes, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "IDSOLICITANTE01", "ID_PADRE",
				"NOMBRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "ID", "ID_PADRE", "NOMBRE", from, from_alias, joins, businessFilters, businessParams);

		// PAGINACION
		if (tableRequestDto != null) {
			query = TableManagerJerarquia.getPaginationQuery(tableRequestDto, query,
					SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<?> params = (List<?>) mapaWhere.get("params");
		List<JerarquiaDto<Solicitantes>> result = this.jdbcTemplate.query(query.toString(), this.rwMapJerarquia,
				params.toArray());
		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	/**
	 * Count rows in hierarchy
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @return Long
	 */
	@Override
	public Long findAllLikeCountJerarquia(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto) {
		// FROM
		// StringBuilder from = new StringBuilder("FROM SOLICITANTES t1 ,INFORME_SOCIAL
		// t2 ,CUENTAS t3 ,PERFILES t4 ,DIRECCIONES t5 ");
		List<String> from = new ArrayList<String>();
		from.add("SOLICITANTES");
		from.add("CUENTAS");
		from.add("PERFILES");
		from.add("DIRECCIONES");
		from.add("VALORACIONES");

		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");
		from_alias.add(" t3 ");
		from_alias.add(" t4 ");
		from_alias.add(" t5 ");
		from_alias.add(" t6 ");

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterSolicitantes, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "IDSOLICITANTE01",
				"ID_PADRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "ID", "ID_PADRE", from, from_alias, joins, businessFilters, businessParams);

		List<?> params = (List<?>) mapaWhere.get("params");
		return this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);
	}

	/**
	 * Find dependent hierarchical rows
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @return List<TableRowDto<Solicitantes>>
	 */
	@Override
	public List<TableRowDto<Solicitantes>> findAllChild(Solicitantes filterSolicitantes,
			TableRequestDto tableRequestDto) {

		// FROM
		// StringBuilder from = new StringBuilder("FROM SOLICITANTES t1 ,INFORME_SOCIAL
		// t2 ,CUENTAS t3 ,PERFILES t4 ,DIRECCIONES t5 ");
		List<String> from = new ArrayList<String>();
		from.add("SOLICITANTES");
		from.add("CUENTAS");
		from.add("PERFILES");
		from.add("DIRECCIONES");
		from.add("VALORACIONES");

		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");
		from_alias.add(" t3 ");
		from_alias.add(" t4 ");
		from_alias.add(" t5 ");
		from_alias.add(" t6 ");

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterSolicitantes, false);

		// MULTISELECCION
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "IDSOLICITANTE01",
				"ID_PADRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "ID", "ID_PADRE", from, from_alias, joins, businessFilters, businessParams);

		List<?> params = (List<?>) mapaWhere.get("params");

		return this.jdbcTemplate.query(query.toString(),
				new RowNumResultSetExtractor<Solicitantes>(this.rwMapPK, "IDSOLICITANTE01"), params.toArray());
	}

	/**
	 * Buscar beneficiarios para utilizar en pagos.
	 * 
	 * @param fechaInicio Date
	 * @param fechaFin    Date
	 * @return List<Solicitantes>
	 */
	@Transactional(readOnly = true)
	public List<Solicitantes> findBeneficiariosPago(Date fechaInicio, Date fechaFin) {
		StringBuilder query = new StringBuilder(
				"SELECT ID_SOLICITANTE_01 IDSOLICITANTE01, F_INICIO_01 FINICIO01 FROM SOLICITANTES");
		query.append(" WHERE BENEFICIARIO_01 = '1'");
		query.append(" AND F_INICIO_01 IS NOT NULL AND F_INICIO_01 <= ?");
		query.append(" AND (F_BAJA_01 IS NULL OR (F_BAJA_01 IS NOT NULL AND F_BAJA_01 > ?))");
		return this.jdbcTemplate.query(query.toString(), this.rwMapPKPago, fechaFin, fechaInicio);
	}

	/*
	 * MÉTODOS PRIVADOS
	 */

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * Solicitantes entity
	 *
	 * @param solicitantes Solicitantes Bean with the criteria values to filter by.
	 * @return Map created with two keys key query stores the sql query syntax key
	 *         params stores the parameter values to be used in the condition
	 *         sentence.
	 */
	// CHECKSTYLE:OFF CyclomaticComplexity - Generación de código de UDA
	private Map<String, ?> getWhereMap(Solicitantes solicitantes) {

		StringBuilder where = new StringBuilder(SolicitantesDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (solicitantes != null && solicitantes.getIdSolicitante01() != null) {
			where.append(" AND t1.ID_SOLICITANTE_01 = ?");
			params.add(solicitantes.getIdSolicitante01());
		}

		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getIdValoracion08() != null) {
			where.append(" AND t6.ID_VALORACION_08 = ?");
			params.add(solicitantes.getValoraciones().getIdValoracion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getfValoracion08() != null) {
			where.append(" AND t6.F_VALORACION_08 = ?");
			params.add(solicitantes.getValoraciones().getfValoracion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getTipoValoracion08() != null) {
			where.append(" AND t6.TIPO_VALORACION_08 = ?");
			params.add(solicitantes.getValoraciones().getTipoValoracion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getContratoActuacion08() != null) {
			where.append(" AND t6.CONTRATO_ACTUACION_08 = ?");
			params.add(solicitantes.getValoraciones().getContratoActuacion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getIdNivelSoporte08() != null) {
			where.append(" AND t6.ID_NIVEL_SOPORTE_08 = ?");
			params.add(solicitantes.getValoraciones().getIdNivelSoporte08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getAltoRiesgo08() != null) {
			where.append(" AND t6.ALTO_RIESGO_08 = ?");
			params.add(solicitantes.getValoraciones().getAltoRiesgo08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getNivelMaltrato08() != null) {
			where.append(" AND t6.NIVEL_MALTRATO_08 = ?");
			params.add(solicitantes.getValoraciones().getNivelMaltrato08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getNivelSuicidio08() != null) {
			where.append(" AND t6.NIVEL_SUICIDIO_08 = ?");
			params.add(solicitantes.getValoraciones().getNivelSuicidio08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getPeriodicidadPropuesta08() != null) {
			where.append(" AND t6.PERIODICIDAD_PROPUESTA_08 = ?");
			params.add(solicitantes.getValoraciones().getPeriodicidadPropuesta08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getPeriodicidadAcordada08() != null) {
			where.append(" AND t6.PERIODICIDAD_ACORDADA_08 = ?");
			params.add(solicitantes.getValoraciones().getPeriodicidadAcordada08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getPropuestaAceptada08() != null) {
			where.append(" AND t6.PROPUESTA_ACEPTADA_08 = ?");
			params.add(solicitantes.getValoraciones().getPropuestaAceptada08());
		}

		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getIdSolicitante08() != null) {
			where.append(" AND t6.ID_SOLICITANTE_08 = ?");
			params.add(solicitantes.getValoraciones().getIdSolicitante08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getUsuHistorico08() != null) {
			where.append(" AND t6.USU_HISTORICO_08 = ?");
			params.add(solicitantes.getValoraciones().getUsuHistorico08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getfHistorico08() != null) {
			where.append(" AND t6.F_HISTORICO_08 = ?");
			params.add(solicitantes.getValoraciones().getfHistorico08());
		}

		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getfAlta08() != null) {
			where.append(" AND t6.F_ALTA_08 = ?");
			params.add(solicitantes.getValoraciones().getfAlta08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getUsuAlta08() != null) {
			where.append(" AND t6.USU_ALTA_08 = ?");
			params.add(solicitantes.getValoraciones().getUsuAlta08());
		}

		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getIdCuenta05() != null) {
			where.append(" AND t3.ID_CUENTA_05 = ?");
			params.add(solicitantes.getCuentas().getIdCuenta05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getNumCuenta05() != null) {
			where.append(" AND t3.NUM_CUENTA_05 = ?");
			params.add(solicitantes.getCuentas().getNumCuenta05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getCodTipoIdenTitular05() != null) {
			where.append(" AND t3.COD_TIPO_IDEN_TITULAR_05 = ?");
			params.add(solicitantes.getCuentas().getCodTipoIdenTitular05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getIdenTitular05() != null) {
			where.append(" AND t3.IDEN_TITULAR_05 = ?");
			params.add(solicitantes.getCuentas().getIdenTitular05());
		}

		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getIdSolicitante05() != null) {
			where.append(" AND t3.ID_SOLICITANTE_05 = ?");
			params.add(solicitantes.getCuentas().getIdSolicitante05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getUsuHistorico05() != null) {
			where.append(" AND t3.USU_HISTORICO_05 = ?");
			params.add(solicitantes.getCuentas().getUsuHistorico05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getfHistorico05() != null) {
			where.append(" AND t3.F_HISTORICO_05 = ?");
			params.add(solicitantes.getCuentas().getfHistorico05());
		}

		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getfAlta05() != null) {
			where.append(" AND t3.F_ALTA_05 = ?");
			params.add(solicitantes.getCuentas().getfAlta05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getUsuAlta05() != null) {
			where.append(" AND t3.USU_ALTA_05 = ?");
			params.add(solicitantes.getCuentas().getUsuAlta05());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getIdPerfil07() != null) {
			where.append(" AND t4.ID_PERFIL_07 = ?");
			params.add(solicitantes.getPerfiles().getIdPerfil07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getPisosTutelados() != null
				&& solicitantes.getPerfiles().getPisosTutelados().getIdPiso32() != null) {
			where.append(" AND t4.ID_PISO_07 = ?");
			params.add(solicitantes.getPerfiles().getPisosTutelados().getIdPiso32());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getMayor65Dep07() != null) {
			where.append(" AND t4.MAYOR_65_DEP_07 = ?");
			params.add(solicitantes.getPerfiles().getMayor65Dep07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getMayor65RiesgoDep07() != null) {
			where.append(" AND t4.MAYOR_65_RIESGO_DEP_07 = ?");
			params.add(solicitantes.getPerfiles().getMayor65RiesgoDep07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getMayor75Sola07() != null) {
			where.append(" AND t4.MAYOR_75_SOLA_07 = ?");
			params.add(solicitantes.getPerfiles().getMayor75Sola07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getDisIntelectual07() != null) {
			where.append(" AND t4.DIS_INTELECTUAL_07 = ?");
			params.add(solicitantes.getPerfiles().getDisIntelectual07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getDisFisica07() != null) {
			where.append(" AND t4.DIS_FISICA_07 = ?");
			params.add(solicitantes.getPerfiles().getDisFisica07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getDisSensorial07() != null) {
			where.append(" AND t4.DIS_SENSORIAL_07 = ?");
			params.add(solicitantes.getPerfiles().getDisSensorial07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getEnfMental07() != null) {
			where.append(" AND t4.ENF_MENTAL_07 = ?");
			params.add(solicitantes.getPerfiles().getEnfMental07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getRiesgoAislamiento07() != null) {
			where.append(" AND t4.RIESGO_AISLAMIENTO_07 = ?");
			params.add(solicitantes.getPerfiles().getRiesgoAislamiento07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getPisoTutelado07() != null) {
			where.append(" AND t4.PISO_TUTELADO_07 = ?");
			params.add(solicitantes.getPerfiles().getPisoTutelado07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getfAlta07() != null) {
			where.append(" AND t4.F_ALTA_07 = ?");
			params.add(solicitantes.getPerfiles().getfAlta07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getUsuAlta07() != null) {
			where.append(" AND t4.USU_ALTA_07 = ?");
			params.add(solicitantes.getPerfiles().getUsuAlta07());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdDireccion06() != null) {
			where.append(" AND t5.ID_DIRECCION_06 = ?");
			params.add(solicitantes.getDirecciones().getIdDireccion06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getCalle06() != null) {
			where.append(" AND t5.CALLE_06 = ?");
			params.add(solicitantes.getDirecciones().getCalle06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getCp06() != null) {
			where.append(" AND t5.CP_06 = ?");
			params.add(solicitantes.getDirecciones().getCp06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdCalle06() != null) {
			where.append(" AND t5.ID_CALLE_06 = ?");
			params.add(solicitantes.getDirecciones().getIdCalle06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdLocalidad06() != null) {
			where.append(" AND t5.ID_LOCALIDAD_06 = ?");
			params.add(solicitantes.getDirecciones().getIdLocalidad06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdMunicipio06() != null) {
			where.append(" AND t5.ID_MUNICIPIO_06 = ?");
			params.add(solicitantes.getDirecciones().getIdMunicipio06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdPais06() != null) {
			where.append(" AND t5.ID_PAIS_06 = ?");
			params.add(solicitantes.getDirecciones().getIdPais06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdPortal06() != null) {
			where.append(" AND t5.ID_PORTAL_06 = ?");
			params.add(solicitantes.getDirecciones().getIdPortal06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdProvincia06() != null) {
			where.append(" AND t5.ID_PROVINCIA_06 = ?");
			params.add(solicitantes.getDirecciones().getIdProvincia06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getLetra06() != null) {
			where.append(" AND t5.LETRA_06 = ?");
			params.add(solicitantes.getDirecciones().getLetra06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getLocalidad06() != null) {
			where.append(" AND t5.LOCALIDAD_06 = ?");
			params.add(solicitantes.getDirecciones().getLocalidad06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getMunicipio06() != null) {
			where.append(" AND t5.MUNICIPIO_06 = ?");
			params.add(solicitantes.getDirecciones().getMunicipio06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getPais06() != null) {
			where.append(" AND t5.PAIS_06 = ?");
			params.add(solicitantes.getDirecciones().getPais06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getPiso06() != null) {
			where.append(" AND t5.PISO_06 = ?");
			params.add(solicitantes.getDirecciones().getPiso06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getPortal06() != null) {
			where.append(" AND t5.PORTAL_06 = ?");
			params.add(solicitantes.getDirecciones().getPortal06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getEscalera06() != null) {
			where.append(" AND t5.ESCALERA_06 = ?");
			params.add(solicitantes.getDirecciones().getEscalera06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getProvincia06() != null) {
			where.append(" AND t5.PROVINCIA_06 = ?");
			params.add(solicitantes.getDirecciones().getProvincia06());
		}

		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdSolicitante06() != null) {
			where.append(" AND t5.ID_SOLICITANTE_06 = ?");
			params.add(solicitantes.getDirecciones().getIdSolicitante06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getUsuHistorico06() != null) {
			where.append(" AND t5.USU_HISTORICO_06 = ?");
			params.add(solicitantes.getDirecciones().getUsuHistorico06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getfHistorico06() != null) {
			where.append(" AND t5.F_HISTORICO_06 = ?");
			params.add(solicitantes.getDirecciones().getfHistorico06());
		}

		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getfAlta06() != null) {
			where.append(" AND t5.F_ALTA_06 = ?");
			params.add(solicitantes.getDirecciones().getfAlta06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getUsuAlta06() != null) {
			where.append(" AND t5.USU_ALTA_06 = ?");
			params.add(solicitantes.getDirecciones().getUsuAlta06());
		}
		if (solicitantes != null && solicitantes.getTipoIdentificador01() != null) {
			where.append(" AND t1.TIPO_IDENTIFICADOR_01 = ?");
			params.add(solicitantes.getTipoIdentificador01());
		}
		if (solicitantes != null && solicitantes.getIdentificador01() != null) {
			where.append(" AND UPPER(t1.IDENTIFICADOR_01) = UPPER(?)");
			params.add(solicitantes.getIdentificador01());
		}
		if (solicitantes != null && solicitantes.getNombre01() != null) {
			where.append(" AND t1.NOMBRE_01 = ?");
			params.add(solicitantes.getNombre01());
		}
		if (solicitantes != null && solicitantes.getApellido101() != null) {
			where.append(" AND t1.APELLIDO1_01 = ?");
			params.add(solicitantes.getApellido101());
		}
		if (solicitantes != null && solicitantes.getApellido201() != null) {
			where.append(" AND t1.APELLIDO2_01 = ?");
			params.add(solicitantes.getApellido201());
		}
		if (solicitantes != null && solicitantes.getSexo01() != null) {
			where.append(" AND t1.SEXO_01 = ?");
			params.add(solicitantes.getSexo01());
		}
		if (solicitantes != null && solicitantes.getfNacimiento01() != null) {
			where.append(" AND t1.F_NACIMIENTO_01 = ?");
			params.add(solicitantes.getfNacimiento01());
		}
		if (solicitantes != null && solicitantes.getNumss01() != null) {
			where.append(" AND t1.NUMSS_01 = ?");
			params.add(solicitantes.getNumss01());
		}
		if (solicitantes != null && solicitantes.getNumtis01() != null) {
			where.append(" AND t1.NUMTIS_01 = ?");
			params.add(solicitantes.getNumtis01());
		}
		if (solicitantes != null && solicitantes.getfAltaTeleasistencia01() != null) {
			where.append(" AND t1.F_ALTA_TELEASISTENCIA_01 = ?");
			params.add(solicitantes.getfAltaTeleasistencia01());
		}
		if (solicitantes != null && solicitantes.getfAltaTeleasistenciaDesde() != null) {
			where.append(" AND t1.F_ALTA_TELEASISTENCIA_01 > ?");
			params.add(solicitantes.getfAltaTeleasistenciaDesde());
		}
		if (solicitantes != null && solicitantes.getfAltaTeleasistenciaHasta() != null) {
			where.append(" AND t1.F_ALTA_TELEASISTENCIA_01 < ?");
			params.add(solicitantes.getfAltaTeleasistenciaHasta());
		}
		if (solicitantes != null && solicitantes.getBeneficiario01() != null) {
			where.append(" AND t1.BENEFICIARIO_01 = ?");
			params.add(solicitantes.getBeneficiario01());
		}
		if (solicitantes != null && solicitantes.getfBeneficiario01() != null) {
			where.append(" AND t1.F_BENEFICIARIO_01 = ?");
			params.add(solicitantes.getfBeneficiario01());
		}
		if (solicitantes != null && solicitantes.getfBaja01() != null) {
			where.append(" AND t1.F_BAJA_01 = ?");
			params.add(solicitantes.getfBaja01());
		}
		if (solicitantes != null && solicitantes.getfInicio01() != null) {
			where.append(" AND t1.F_INICIO_01 = ?");
			params.add(solicitantes.getfInicio01());
		}
		if (solicitantes != null && solicitantes.getNumAbonado01() != null) {
			where.append(" AND t1.NUM_ABONADO_01 = ?");
			params.add(solicitantes.getNumAbonado01());
		}
		if (solicitantes != null && solicitantes.getObservaciones01() != null) {
			where.append(" AND t1.OBSERVACIONES_01 = ?");
			params.add(solicitantes.getObservaciones01());
		}
		if (solicitantes != null && solicitantes.getNoReintentar01() != null) {
			where.append(" AND t1.NO_REINTENTAR_01 = ?");
			params.add(solicitantes.getNoReintentar01());
		}
		if (solicitantes != null && solicitantes.getIdiomaServicio01() != null) {
			where.append(" AND t1.IDIOMA_SERVICIO_01 = ?");
			params.add(solicitantes.getIdiomaServicio01());
		}
		if (solicitantes != null && solicitantes.getIdiomaSolicitante01() != null) {
			where.append(" AND t1.IDIOMA_SOLICITANTE_01 = ?");
			params.add(solicitantes.getIdiomaSolicitante01());
		}
		if (solicitantes != null && solicitantes.getOtroIdioma01() != null) {
			where.append(" AND t1.OTRO_IDIOMA_01 = ?");
			params.add(solicitantes.getOtroIdioma01());
		}
		if (solicitantes != null && solicitantes.getTlfnoServicio01() != null) {
			where.append(" AND t1.TLFNO_SERVICIO_01 = ?");
			params.add(solicitantes.getTlfnoServicio01());
		}
		if (solicitantes != null && solicitantes.getTlfnoMovil01() != null) {
			where.append(" AND t1.TLFNO_MOVIL_01 = ?");
			params.add(solicitantes.getTlfnoMovil01());
		}
		if (solicitantes != null && solicitantes.getEmail01() != null) {
			where.append(" AND t1.EMAIL_01 = ?");
			params.add(solicitantes.getEmail01());
		}
		if (solicitantes != null && solicitantes.getTipoBeneficiario01() != null) {
			where.append(" AND t1.TIPO_BENEFICIARIO_01 = ?");
			params.add(solicitantes.getTipoBeneficiario01());
		}
		if (solicitantes != null && solicitantes.getMantenerInst01() != null) {
			where.append(" AND t1.MANTENER_INST_01 = ?");
			params.add(solicitantes.getMantenerInst01());
		}
		if (solicitantes != null && solicitantes.getExencion01() != null) {
			where.append(" AND t1.EXENCION_01 = ?");
			params.add(solicitantes.getExencion01());
		}
		if (solicitantes != null && solicitantes.getExoneracion01() != null) {
			where.append(" AND t1.EXONERACION_01 = ?");
			params.add(solicitantes.getExoneracion01());
		}
		if (solicitantes != null && solicitantes.getInstalado01() != null) {
			where.append(" AND t1.INSTALADO_01 = ?");
			params.add(solicitantes.getExoneracion01());
		}
		if (solicitantes != null && solicitantes.getIdMotivoBaja01() != null) {
			where.append(" AND t1.ID_MOTIVO_BAJA_01 = ?");
			params.add(solicitantes.getIdMotivoBaja01());
		}
		if (solicitantes != null && solicitantes.getUsuAlta01() != null) {
			where.append(" AND t1.USU_ALTA_01 = ?");
			params.add(solicitantes.getUsuAlta01());
		}
		if (solicitantes != null && solicitantes.getUsuModif01() != null) {
			where.append(" AND t1.USU_MODIF_01 = ?");
			params.add(solicitantes.getUsuModif01());
		}
		if (solicitantes != null && solicitantes.getfAlta01() != null) {
			where.append(" AND t1.F_ALTA_01 = ?");
			params.add(solicitantes.getfAlta01());
		}
		if (solicitantes != null && solicitantes.getfModif01() != null) {
			where.append(" AND t1.F_MODIF_01 = ?");
			params.add(solicitantes.getfModif01());
		}
		if (solicitantes != null && solicitantes.getfRetirada01() != null) {
			where.append(" AND t1.F_RETIRADA_01 = ?");
			params.add(solicitantes.getfRetirada01());
		}

		if (solicitantes != null && TipoSolicitantes.ACTIVO_SI.equals(solicitantes.getActivo())) {
			where.append(" AND t1.F_BAJA_01 is null AND BENEFICIARIO_01 = 1 ");
		} else if (solicitantes != null && TipoSolicitantes.ACTIVO_NO.equals(solicitantes.getActivo())) {
			where.append(" AND (t1.F_BAJA_01 is not null OR (BENEFICIARIO_01 = 0 OR BENEFICIARIO_01 is null)) ");
		}

		if (solicitantes != null && solicitantes.getExpSolicitud() != null
				&& solicitantes.getExpSolicitud().getIdProcedimiento00() != null) {
			if (ProcedimientosEnum.ALTA.getId().equals(solicitantes.getExpSolicitud().getIdProcedimiento00())
					|| ProcedimientosEnum.X87_TEA_1.getId()
							.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())) {
				// Al obtener los datos del solicitante nos encontramos con que hay solicitantes
				// sin expediente de la migración a la x87
				where.append(
						" AND (t7.ID_PROCEDIMIENTO_00 = ? OR t7.ID_PROCEDIMIENTO_00 = ? OR  t7.ID_PROCEDIMIENTO_00 IS NULL)");
				params.add(ProcedimientosEnum.ALTA.getId());
				params.add(ProcedimientosEnum.X87_TEA_1.getId());
			} else if (ProcedimientosEnum.BAJA.getId().equals(solicitantes.getExpSolicitud().getIdProcedimiento00())
					|| ProcedimientosEnum.X87_TEA_2.getId()
							.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())) {

				where.append(" AND (t7.ID_PROCEDIMIENTO_00 = ? OR t7.ID_PROCEDIMIENTO_00 = ? )");
				params.add(ProcedimientosEnum.BAJA.getId());
				params.add(ProcedimientosEnum.X87_TEA_2.getId());
			} else if (ProcedimientosEnum.REVISION_PRECIO.getId()
					.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())
					|| ProcedimientosEnum.X87_TEA_4.getId()
							.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())) {

				where.append(" AND (t7.ID_PROCEDIMIENTO_00 = ? OR t7.ID_PROCEDIMIENTO_00 = ? )");
				params.add(ProcedimientosEnum.REVISION_PRECIO.getId());
				params.add(ProcedimientosEnum.X87_TEA_4.getId());
			} else {

				where.append(" AND t7.ID_PROCEDIMIENTO_00 = ?");
				params.add(solicitantes.getExpSolicitud().getIdProcedimiento00());
			}
		}

		Map<String, Object> mapWhere = new HashMap<String, Object>();
		mapWhere.put("query", where);
		mapWhere.put("params", params);

		return mapWhere;
	}
	// CHECKSTYLE:ON CyclomaticComplexity - Generación de código de UDA

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * Solicitantes entity
	 *
	 * @param solicitantes Solicitantes Bean with the criteria values to filter by.
	 * @param startsWith   Boolean
	 * @return Map created with two keys key query stores the sql query syntax key
	 *         params stores the parameter values to be used in the condition
	 *         sentence.
	 */

	private Map<String, Object> getWhereLikeMapBeneficiariosSolicitantes(Solicitantes solicitantes,
			Boolean startsWith) {

		StringBuilder where = new StringBuilder(SolicitantesDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (solicitantes != null && solicitantes.getIdSolicitante01() != null) {
			where.append(" AND t1.ID_SOLICITANTE_01 = ?");
			params.add(solicitantes.getIdSolicitante01());
		}
		if (solicitantes != null && solicitantes.getIdentificador01() != null) {
			where.append(" AND UPPER(t1.IDENTIFICADOR_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getIdentificador01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getIdentificador01().toUpperCase() + "%");
			}
			where.append(" AND t1.IDENTIFICADOR_01 IS NOT NULL");
		}

		Map<String, Object> mapWhere = new HashMap<String, Object>();
		mapWhere.put("query", where);
		mapWhere.put("params", params);

		return mapWhere;
	}

	// CHECKSTYLE:OFF CyclomaticComplexity - Generación de código de UDA
	private Map<String, Object> getWhereLikeMap(Solicitantes solicitantes, Boolean startsWith) {

		StringBuilder where = new StringBuilder(SolicitantesDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (solicitantes != null && solicitantes.getIdSolicitante01() != null) {
			where.append(" AND t1.ID_SOLICITANTE_01 = ?");
			params.add(solicitantes.getIdSolicitante01());
		}

		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getIdValoracion08() != null) {
			where.append(" AND t6.ID_VALORACION_08 = ?");
			params.add(solicitantes.getValoraciones().getIdValoracion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getfValoracion08() != null) {
			where.append(" AND t6.F_VALORACION_08 = ?");
			params.add(solicitantes.getValoraciones().getfValoracion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getTipoValoracion08() != null) {
			where.append(" AND t6.TIPO_VALORACION_08 = ?");
			params.add(solicitantes.getValoraciones().getTipoValoracion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getContratoActuacion08() != null) {
			where.append(" AND t6.CONTRATO_ACTUACION_08 = ?");
			params.add(solicitantes.getValoraciones().getContratoActuacion08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getIdNivelSoporte08() != null) {
			where.append(" AND t6.ID_NIVEL_SOPORTE_08 = ?");
			params.add(solicitantes.getValoraciones().getIdNivelSoporte08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getAltoRiesgo08() != null) {
			where.append(" AND t6.ALTO_RIESGO_08 = ?");
			params.add(solicitantes.getValoraciones().getAltoRiesgo08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getNivelMaltrato08() != null) {
			where.append(" AND t6.NIVEL_MALTRATO_08 = ?");
			params.add(solicitantes.getValoraciones().getNivelMaltrato08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getNivelSuicidio08() != null) {
			where.append(" AND t6.NIVEL_SUICIDIO_08 = ?");
			params.add(solicitantes.getValoraciones().getNivelSuicidio08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getPeriodicidadPropuesta08() != null) {
			where.append(" AND t6.PERIODICIDAD_PROPUESTA_08 = ?");
			params.add(solicitantes.getValoraciones().getPeriodicidadPropuesta08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getPeriodicidadAcordada08() != null) {
			where.append(" AND t6.PERIODICIDAD_ACORDADA_08 = ?");
			params.add(solicitantes.getValoraciones().getPeriodicidadAcordada08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getPropuestaAceptada08() != null) {
			where.append(" AND t6.PROPUESTA_ACEPTADA_08 = ?");
			params.add(solicitantes.getValoraciones().getPropuestaAceptada08());
		}

		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getIdSolicitante08() != null) {
			where.append(" AND t6.ID_SOLICITANTE_08 = ?");
			params.add(solicitantes.getValoraciones().getIdSolicitante08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getUsuHistorico08() != null) {
			where.append(" AND UPPER(t6.USU_HISTORICO_08) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getValoraciones().getUsuHistorico08().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getValoraciones().getUsuHistorico08().toUpperCase() + "%");
			}
			where.append(" AND t6.USU_HISTORICO_08 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getfHistorico08() != null) {
			where.append(" AND t6.F_HISTORICO_08 = ?");
			params.add(solicitantes.getValoraciones().getfHistorico08());
		}

		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getfAlta08() != null) {
			where.append(" AND t6.F_ALTA_08 = ?");
			params.add(solicitantes.getValoraciones().getfAlta08());
		}
		if (solicitantes != null && solicitantes.getValoraciones() != null
				&& solicitantes.getValoraciones().getUsuAlta08() != null) {
			where.append(" AND t6.USU_ALTA_08 = ?");
			params.add(solicitantes.getValoraciones().getUsuAlta08());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getIdCuenta05() != null) {
			where.append(" AND t3.ID_CUENTA_05 = ?");
			params.add(solicitantes.getCuentas().getIdCuenta05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getNumCuenta05() != null) {
			where.append(" AND UPPER(t3.NUM_CUENTA_05) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getCuentas().getNumCuenta05().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getCuentas().getNumCuenta05().toUpperCase() + "%");
			}
			where.append(" AND t3.NUM_CUENTA_05 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getCodTipoIdenTitular05() != null) {
			where.append(" AND UPPER(t3.COD_TIPO_IDEN_TITULAR_05) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getCuentas().getCodTipoIdenTitular05().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getCuentas().getCodTipoIdenTitular05().toUpperCase() + "%");
			}
			where.append(" AND t3.COD_TIPO_IDEN_TITULAR_05 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getIdenTitular05() != null) {
			where.append(" AND UPPER(t3.IDEN_TITULAR_05) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getCuentas().getIdenTitular05().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getCuentas().getIdenTitular05().toUpperCase() + "%");
			}
			where.append(" AND t3.IDEN_TITULAR_05 IS NOT NULL");
		}

		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getIdSolicitante05() != null) {
			where.append(" AND t3.ID_SOLICITANTE_05 = ?");
			params.add(solicitantes.getCuentas().getIdSolicitante05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getUsuHistorico05() != null) {
			where.append(" AND UPPER(t3.USU_HISTORICO_05) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getCuentas().getUsuHistorico05().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getCuentas().getUsuHistorico05().toUpperCase() + "%");
			}
			where.append(" AND t3.USU_HISTORICO_05 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getfHistorico05() != null) {
			where.append(" AND t3.F_HISTORICO_05 = ?");
			params.add(solicitantes.getCuentas().getfHistorico05());
		}

		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getfAlta05() != null) {
			where.append(" AND t3.F_ALTA_05 = ?");
			params.add(solicitantes.getCuentas().getfAlta05());
		}
		if (solicitantes != null && solicitantes.getCuentas() != null
				&& solicitantes.getCuentas().getUsuAlta05() != null) {
			where.append(" AND UPPER(t3.USU_ALTA_05) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getCuentas().getUsuAlta05().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getCuentas().getUsuAlta05().toUpperCase() + "%");
			}
			where.append(" AND t3.USU_ALTA_05 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getIdPerfil07() != null) {
			where.append(" AND t4.ID_PERFIL_07 = ?");
			params.add(solicitantes.getPerfiles().getIdPerfil07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getPisosTutelados() != null
				&& solicitantes.getPerfiles().getPisosTutelados().getIdPiso32() != null) {
			where.append(" AND t4.ID_PISO_07 = ?");
			params.add(solicitantes.getPerfiles().getPisosTutelados().getIdPiso32());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getMayor65Dep07() != null) {
			where.append(" AND t4.MAYOR_65_DEP_07 = ?");
			params.add(solicitantes.getPerfiles().getMayor65Dep07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getMayor65RiesgoDep07() != null) {
			where.append(" AND t4.MAYOR_65_RIESGO_DEP_07 = ?");
			params.add(solicitantes.getPerfiles().getMayor65RiesgoDep07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getMayor75Sola07() != null) {
			where.append(" AND t4.MAYOR_75_SOLA_07 = ?");
			params.add(solicitantes.getPerfiles().getMayor75Sola07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getDisIntelectual07() != null) {
			where.append(" AND t4.DIS_INTELECTUAL_07 = ?");
			params.add(solicitantes.getPerfiles().getDisIntelectual07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getDisFisica07() != null) {
			where.append(" AND t4.DIS_FISICA_07 = ?");
			params.add(solicitantes.getPerfiles().getDisFisica07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getDisSensorial07() != null) {
			where.append(" AND t4.DIS_SENSORIAL_07 = ?");
			params.add(solicitantes.getPerfiles().getDisSensorial07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getEnfMental07() != null) {
			where.append(" AND t4.ENF_MENTAL_07 = ?");
			params.add(solicitantes.getPerfiles().getEnfMental07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getRiesgoAislamiento07() != null) {
			where.append(" AND t4.RIESGO_AISLAMIENTO_07 = ?");
			params.add(solicitantes.getPerfiles().getRiesgoAislamiento07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getPisoTutelado07() != null) {
			where.append(" AND t4.PISO_TUTELADO_07 = ?");
			params.add(solicitantes.getPerfiles().getPisoTutelado07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getfAlta07() != null) {
			where.append(" AND t4.F_ALTA_07 = ?");
			params.add(solicitantes.getPerfiles().getfAlta07());
		}
		if (solicitantes != null && solicitantes.getPerfiles() != null
				&& solicitantes.getPerfiles().getUsuAlta07() != null) {
			where.append(" AND UPPER(t4.USU_ALTA_07) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getPerfiles().getUsuAlta07().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getPerfiles().getUsuAlta07().toUpperCase() + "%");
			}
			where.append(" AND t4.USU_ALTA_07 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdDireccion06() != null) {
			where.append(" AND t5.ID_DIRECCION_06 = ?");
			params.add(solicitantes.getDirecciones().getIdDireccion06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getCalle06() != null) {
			where.append(" AND UPPER(t5.CALLE_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getCalle06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getCalle06().toUpperCase() + "%");
			}
			where.append(" AND t5.CALLE_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getCp06() != null) {
			where.append(" AND UPPER(t5.CP_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getCp06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getCp06().toUpperCase() + "%");
			}
			where.append(" AND t5.CP_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdCalle06() != null) {
			where.append(" AND t5.ID_CALLE_06 = ?");
			params.add(solicitantes.getDirecciones().getIdCalle06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdLocalidad06() != null) {
			where.append(" AND t5.ID_LOCALIDAD_06 = ?");
			params.add(solicitantes.getDirecciones().getIdLocalidad06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdMunicipio06() != null) {
			where.append(" AND UPPER(t5.ID_MUNICIPIO_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getIdMunicipio06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getIdMunicipio06().toUpperCase() + "%");
			}
			where.append(" AND t5.ID_MUNICIPIO_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdPais06() != null) {
			where.append(" AND UPPER(t5.ID_PAIS_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getIdPais06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getIdPais06().toUpperCase() + "%");
			}
			where.append(" AND t5.ID_PAIS_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdPortal06() != null) {
			where.append(" AND UPPER(t5.ID_PORTAL_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getIdPortal06() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getIdPortal06() + "%");
			}
			where.append(" AND t5.ID_PORTAL_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdProvincia06() != null) {
			where.append(" AND UPPER(t5.ID_PROVINCIA_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getIdProvincia06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getIdProvincia06().toUpperCase() + "%");
			}
			where.append(" AND t5.ID_PROVINCIA_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getLetra06() != null) {
			where.append(" AND UPPER(t5.LETRA_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getLetra06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getLetra06().toUpperCase() + "%");
			}
			where.append(" AND t5.LETRA_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getLocalidad06() != null) {
			where.append(" AND UPPER(t5.LOCALIDAD_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getLocalidad06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getLocalidad06().toUpperCase() + "%");
			}
			where.append(" AND t5.LOCALIDAD_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getMunicipio06() != null) {
			where.append(" AND UPPER(t5.MUNICIPIO_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getMunicipio06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getMunicipio06().toUpperCase() + "%");
			}
			where.append(" AND t5.MUNICIPIO_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getPais06() != null) {
			where.append(" AND UPPER(t5.PAIS_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getPais06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getPais06().toUpperCase() + "%");
			}
			where.append(" AND t5.PAIS_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getPiso06() != null) {
			where.append(" AND UPPER(t5.PISO_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getPiso06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getPiso06().toUpperCase() + "%");
			}
			where.append(" AND t5.PISO_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getPortal06() != null) {
			where.append(" AND UPPER(t5.PORTAL_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getPortal06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getPortal06().toUpperCase() + "%");
			}
			where.append(" AND t5.PORTAL_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getEscalera06() != null) {
			where.append(" AND UPPER(t5.ESCALERA_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getEscalera06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getEscalera06().toUpperCase() + "%");
			}
			where.append(" AND t5.ESCALERA_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getProvincia06() != null) {
			where.append(" AND UPPER(t5.PROVINCIA_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getProvincia06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getProvincia06().toUpperCase() + "%");
			}
			where.append(" AND t5.PROVINCIA_06 IS NOT NULL");
		}

		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getIdSolicitante06() != null) {
			where.append(" AND t5.ID_SOLICITANTE_06 = ?");
			params.add(solicitantes.getDirecciones().getIdSolicitante06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getUsuHistorico06() != null) {
			where.append(" AND UPPER(t5.USU_HISTORICO_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getUsuHistorico06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getUsuHistorico06().toUpperCase() + "%");
			}
			where.append(" AND t5.USU_HISTORICO_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getfHistorico06() != null) {
			where.append(" AND t5.F_HISTORICO_06 = ?");
			params.add(solicitantes.getDirecciones().getfHistorico06());
		}

		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getfAlta06() != null) {
			where.append(" AND t5.F_ALTA_06 = ?");
			params.add(solicitantes.getDirecciones().getfAlta06());
		}
		if (solicitantes != null && solicitantes.getDirecciones() != null
				&& solicitantes.getDirecciones().getUsuAlta06() != null) {
			where.append(" AND UPPER(t5.USU_ALTA_06) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getDirecciones().getUsuAlta06().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getDirecciones().getUsuAlta06().toUpperCase() + "%");
			}
			where.append(" AND t5.USU_ALTA_06 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getTipoIdentificador01() != null) {
			where.append(" AND UPPER(t1.TIPO_IDENTIFICADOR_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getTipoIdentificador01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getTipoIdentificador01().toUpperCase() + "%");
			}
			where.append(" AND t1.TIPO_IDENTIFICADOR_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getIdentificador01() != null) {
			where.append(" AND UPPER(t1.IDENTIFICADOR_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getIdentificador01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getIdentificador01().toUpperCase() + "%");
			}
			where.append(" AND t1.IDENTIFICADOR_01 IS NOT NULL");
		}

		// No mostrar los solicitantes "ficticios" (los que vienen de papal0 sin
		// completar)
		where.append(" AND UPPER(t1.IDENTIFICADOR_01) NOT like ? ESCAPE  '\\'");
		params.add("%" + ValoresDefectoBandejaPapel0.IDENTIFICADOR.toUpperCase() + "%");

		if (solicitantes != null && solicitantes.getNombre01() != null) {
			where.append(" AND UPPER(t1.NOMBRE_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getNombre01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getNombre01().toUpperCase() + "%");
			}
			where.append(" AND t1.NOMBRE_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getApellido101() != null) {
			where.append(" AND UPPER(t1.APELLIDO1_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getApellido101().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getApellido101().toUpperCase() + "%");
			}
			where.append(" AND t1.APELLIDO1_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getApellido201() != null) {
			where.append(" AND UPPER(t1.APELLIDO2_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getApellido201().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getApellido201().toUpperCase() + "%");
			}
			where.append(" AND t1.APELLIDO2_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getSexo01() != null) {
			where.append(" AND UPPER(t1.SEXO_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getSexo01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getSexo01().toUpperCase() + "%");
			}
			where.append(" AND t1.SEXO_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getfNacimiento01() != null) {
			where.append(" AND t1.F_NACIMIENTO_01 = ?");
			params.add(solicitantes.getfNacimiento01());
		}
		if (solicitantes != null && solicitantes.getNumss01() != null) {
			where.append(" AND UPPER(t1.NUMSS_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getNumss01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getNumss01().toUpperCase() + "%");
			}
			where.append(" AND t1.NUMSS_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getNumtis01() != null) {
			where.append(" AND UPPER(t1.NUMTIS_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getNumtis01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getNumtis01().toUpperCase() + "%");
			}
			where.append(" AND t1.NUMTIS_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getfAltaTeleasistencia01() != null) {
			where.append(" AND t1.F_ALTA_TELEASISTENCIA_01 = ?");
			params.add(solicitantes.getfAltaTeleasistencia01());
		}
		if (solicitantes != null && solicitantes.getfAltaTeleasistenciaDesde() != null) {
			where.append(" AND t1.F_ALTA_TELEASISTENCIA_01 >= ?");
			params.add(solicitantes.getfAltaTeleasistenciaDesde());
		}
		if (solicitantes != null && solicitantes.getfAltaTeleasistenciaHasta() != null) {
			where.append(" AND t1.F_ALTA_TELEASISTENCIA_01 <= ?");
			params.add(solicitantes.getfAltaTeleasistenciaHasta());
		}
		if (solicitantes != null && solicitantes.getBeneficiario01() != null) {
			where.append(" AND t1.BENEFICIARIO_01 = ?");
			params.add(solicitantes.getBeneficiario01());
		}
		if (solicitantes != null && solicitantes.getfBeneficiario01() != null) {
			where.append(" AND t1.F_BENEFICIARIO_01 = ?");
			params.add(solicitantes.getfBeneficiario01());
		}
		if (solicitantes != null && solicitantes.getfBaja01() != null) {
			where.append(" AND t1.F_BAJA_01 = ?");
			params.add(solicitantes.getfBaja01());
		}
//		if (solicitantes != null && solicitantes.getfInicio01() != null) {
//			where.append(" AND t1.F_INICIO_01 = ?");
//			params.add(solicitantes.getfInicio01());
//		}

		if (solicitantes != null && solicitantes.getNumAbonado01() != null) {
			where.append(" AND UPPER(t1.NUM_ABONADO_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getNumAbonado01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getNumAbonado01().toUpperCase() + "%");
			}
			where.append(" AND t1.NUM_ABONADO_01 IS NOT NULL");
		}

		if (solicitantes != null && solicitantes.getObservaciones01() != null) {
			where.append(" AND UPPER(t1.OBSERVACIONES_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getObservaciones01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getObservaciones01().toUpperCase() + "%");
			}
			where.append(" AND t1.OBSERVACIONES_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getNoReintentar01() != null) {
			where.append(" AND t1.NO_REINTENTAR_01 = ?");
			params.add(solicitantes.getNoReintentar01());
		}
		if (solicitantes != null && solicitantes.getIdiomaServicio01() != null) {
			where.append(" AND t1.IDIOMA_SERVICIO_01 = ?");
			params.add(solicitantes.getIdiomaServicio01());
		}
		if (solicitantes != null && solicitantes.getIdiomaSolicitante01() != null) {
			where.append(" AND t1.IDIOMA_SOLICITANTE_01 = ?");
			params.add(solicitantes.getIdiomaSolicitante01());
		}
		if (solicitantes != null && solicitantes.getOtroIdioma01() != null) {
			where.append(" AND UPPER(t1.OTRO_IDIOMA_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getOtroIdioma01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getOtroIdioma01().toUpperCase() + "%");
			}
			where.append(" AND t1.OTRO_IDIOMA_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getTlfnoServicio01() != null) {
			where.append(" AND UPPER(t1.TLFNO_SERVICIO_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getTlfnoServicio01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getTlfnoServicio01().toUpperCase() + "%");
			}
			where.append(" AND t1.TLFNO_SERVICIO_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getTlfnoMovil01() != null) {
			where.append(" AND UPPER(t1.TLFNO_MOVIL_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getTlfnoMovil01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getTlfnoMovil01().toUpperCase() + "%");
			}
			where.append(" AND t1.TLFNO_MOVIL_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getEmail01() != null) {
			where.append(" AND UPPER(t1.EMAIL_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getEmail01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getEmail01().toUpperCase() + "%");
			}
			where.append(" AND t1.EMAIL_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getTipoBeneficiario01() != null) {
			where.append(" AND t1.TIPO_BENEFICIARIO_01 = ?");
			params.add(solicitantes.getTipoBeneficiario01());
		}
		if (solicitantes != null && solicitantes.getMantenerInst01() != null) {
			where.append(" AND t1.MANTENER_INST_01 = ?");
			params.add(solicitantes.getMantenerInst01());
		}
		if (solicitantes != null && solicitantes.getExencion01() != null) {
			where.append(" AND t1.EXENCION_01 = ?");
			params.add(solicitantes.getExencion01());
		}
		if (solicitantes != null && solicitantes.getExoneracion01() != null) {
			where.append(" AND t1.EXONERACION_01 = ?");
			params.add(solicitantes.getExoneracion01());
		}
		if (solicitantes != null && solicitantes.getfRetirada01() != null) {
			where.append(" AND t1.F_RETIRADA_01 = ?");
			params.add(solicitantes.getfRetirada01());
		}
		if (solicitantes != null && solicitantes.getUsuAlta01() != null) {
			where.append(" AND UPPER(t1.USU_ALTA_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getUsuAlta01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getUsuAlta01().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_ALTA_01 IS NOT NULL");
		}
		if (solicitantes != null && solicitantes.getUsuModif01() != null) {
			where.append(" AND UPPER(t1.USU_MODIF_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(solicitantes.getUsuModif01().toUpperCase() + "%");
			} else {
				params.add("%" + solicitantes.getUsuModif01().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_MODIF_01 IS NOT NULL");
		}

		if (solicitantes != null && solicitantes.getIdMotivoBaja01() != null) {
			where.append(" AND t1.ID_MOTIVO_BAJA_01 = ?");
			params.add(solicitantes.getIdMotivoBaja01());
		}

		if (solicitantes != null && solicitantes.getfAlta01() != null) {
			where.append(" AND t1.F_ALTA_01 = ?");
			params.add(solicitantes.getfAlta01());
		}
		if (solicitantes != null && solicitantes.getfInicioDesde() != null) {
			where.append(" AND t1.F_INICIO_01 >= ?");
			params.add(solicitantes.getfInicioDesde());
		}
		if (solicitantes != null && solicitantes.getfInicioHasta() != null) {
			where.append(" AND t1.F_INICIO_01 <= ?");
			params.add(solicitantes.getfInicioHasta());
		}
		if (solicitantes != null && solicitantes.getfBajaDesde() != null) {
			where.append(" AND t1.F_BAJA_01 >= ?");
			params.add(solicitantes.getfBajaDesde());
		}
		if (solicitantes != null && solicitantes.getfBajaHasta() != null) {
			where.append(" AND t1.F_BAJA_01 <= ?");
			params.add(solicitantes.getfBajaHasta());
		}
		if (solicitantes != null && solicitantes.getfModif01() != null) {
			where.append(" AND t1.F_MODIF_01 = ?");
			params.add(solicitantes.getfModif01());
		}
		if (solicitantes != null && solicitantes.getSinAltaServicio() != null) {
			if (Constantes.sinAltaServicio.SIN_ALTA_SERVICIO_SI == solicitantes.getSinAltaServicio()) {
				where.append(" AND t1.F_INICIO_01 IS NULL");
			} // else if (Constantes.sinAltaServicio.SIN_ALTA_SERVICIO_NO ==
				// solicitantes.getSinAltaServicio()) {
				// where.append(" AND t1.F_ALTA_01 IS NOT NULL");
				// }

		}

		if (solicitantes != null && TipoSolicitantes.ACTIVO_SI.equals(solicitantes.getActivo())) {
			where.append(" AND t1.F_BAJA_01 is null AND BENEFICIARIO_01 = 1 ");
		} else if (solicitantes != null && TipoSolicitantes.ACTIVO_NO.equals(solicitantes.getActivo())) {
			where.append(" AND (t1.F_BAJA_01 is not null OR (BENEFICIARIO_01 = 0 OR BENEFICIARIO_01 is null)) ");
		}

		if (solicitantes != null && solicitantes.getInterInstTerminal() != null) {
			if (Constantes.interInstTerminal.INTER_INST_TERMINAL_SI.equals(solicitantes.getInterInstTerminal())) {
				/*
				 * Se comprueba que el solicitante tenga al menos una intervencion de tipo
				 * "Instalación de alta", y su fecha de inicio en el servicio no sea nula
				 */
				where.append(" AND EXISTS (SELECT 1 FROM INTERVENCIONES inter WHERE")
						.append(" t1.ID_SOLICITANTE_01 = inter.ID_SOLICITANTE_25")
						.append(" AND inter.ID_TIPO_INTERVENCION_25 = 1").append(") ");
				where.append(" AND t1.F_INICIO_01 IS NOT NULL");
			} else if (Constantes.interInstTerminal.INTER_INST_TERMINAL_NO
					.equals(solicitantes.getInterInstTerminal())) {
				where.append(" AND NOT EXISTS (SELECT 1 FROM INTERVENCIONES inter WHERE")
						.append(" t1.ID_SOLICITANTE_01 = inter.ID_SOLICITANTE_25")
						.append(" AND inter.ID_TIPO_INTERVENCION_25 = 1").append(") ");
				where.append(" AND t1.F_INICIO_01 IS NULL");
			}

		}

		if (solicitantes != null && solicitantes.getExencion01() != null) {
			if (Constantes.exencionPago.EXENCION_PAGO_SI == solicitantes.getExencion01()) {
				where.append(" AND t1.EXENCION_01 = 1 ");
			} else if (Constantes.exencionPago.EXENCION_PAGO_NO == solicitantes.getExencion01()) {
				where.append(" AND t1.EXENCION_01 = 0 ");
			}

		}

		if (solicitantes != null && solicitantes.getInstalado01() != null) {
			where.append(" AND t1.INSTALADO_01 = ?");
			params.add(solicitantes.getExencion01());
		}
		if (solicitantes != null && solicitantes.getExpSolicitud() != null
				&& solicitantes.getExpSolicitud().getIdProcedimiento00() != null) {
			if (ProcedimientosEnum.ALTA.getId().equals(solicitantes.getExpSolicitud().getIdProcedimiento00())
					|| ProcedimientosEnum.X87_TEA_1.getId()
							.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())) {
				// Al obtener los datos del solicitante nos encontramos con que hay solicitantes
				// sin expediente de la migración a la x87
				where.append(
						" AND (t7.ID_PROCEDIMIENTO_00 = ? OR t7.ID_PROCEDIMIENTO_00 = ? OR  t7.ID_PROCEDIMIENTO_00 IS NULL)");
				params.add(ProcedimientosEnum.ALTA.getId());
				params.add(ProcedimientosEnum.X87_TEA_1.getId());
			} else if (ProcedimientosEnum.BAJA.getId().equals(solicitantes.getExpSolicitud().getIdProcedimiento00())
					|| ProcedimientosEnum.X87_TEA_2.getId()
							.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())) {

				where.append(" AND (t7.ID_PROCEDIMIENTO_00 = ? OR t7.ID_PROCEDIMIENTO_00 = ? )");
				params.add(ProcedimientosEnum.BAJA.getId());
				params.add(ProcedimientosEnum.X87_TEA_2.getId());
			} else if (ProcedimientosEnum.REVISION_PRECIO.getId()
					.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())
					|| ProcedimientosEnum.X87_TEA_4.getId()
							.equals(solicitantes.getExpSolicitud().getIdProcedimiento00())) {

				where.append(" AND (t7.ID_PROCEDIMIENTO_00 = ? OR t7.ID_PROCEDIMIENTO_00 = ? )");
				params.add(ProcedimientosEnum.REVISION_PRECIO.getId());
				params.add(ProcedimientosEnum.X87_TEA_4.getId());
			} else {

				where.append(" AND t7.ID_PROCEDIMIENTO_00 = ?");
				params.add(solicitantes.getExpSolicitud().getIdProcedimiento00());
			}
		}

		Map<String, Object> mapWhere = new HashMap<String, Object>();
		mapWhere.put("query", where);
		mapWhere.put("params", params);

		return mapWhere;
	}
	// CHECKSTYLE:ON CyclomaticComplexity - Generación de código de UDA

	/**
	 * StringBuilder initilization value
	 */
	public static final int STRING_BUILDER_INIT = 4096;

	@Override
	public Boolean isSolAlta(Solicitantes filter) {
		String query = "SELECT COUNT(*) FROM SOLICITANTES t1 WHERE UPPER(t1.IDENTIFICADOR_01) = UPPER(?) AND BENEFICIARIO_01 = 1 AND (F_BAJA_01 IS NULL OR (F_BAJA_01 IS NOT NULL AND F_BAJA_01 > sysdate)) ";
		List<Object> params = new ArrayList<Object>();
		params.add(filter.getIdentificador01());
		Long nSolicitantes = this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);

		return nSolicitantes > 0 ? true : false;
	}

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	public Solicitantes updateTabSolicitudPapel0(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET ID_CUENTA_01=?, ID_PERFIL_01=?, ID_DIRECCION_01=?, TIPO_IDENTIFICADOR_01=?, "
				+ "IDENTIFICADOR_01=UPPER(?), NOMBRE_01=?, APELLIDO1_01=?, APELLIDO2_01=?, SEXO_01=?, F_NACIMIENTO_01=?, NUMSS_01=?, NUMTIS_01=?, "
				+ " OBSERVACIONES_01=?, "
				+ "OTRO_IDIOMA_01 = ?, TLFNO_SERVICIO_01 = ?, TLFNO_MOVIL_01 = ?, EMAIL_01 = ?, "
				+ "MANTENER_INST_01 = ?, " + "USU_MODIF_01=?,  F_MODIF_01=?  WHERE ID_SOLICITANTE_01=?";
		Object getCuentasIdCuenta05Aux = null;
		if (solicitantes.getCuentas() != null && solicitantes.getCuentas().getIdCuenta05() != null) {
			getCuentasIdCuenta05Aux = solicitantes.getCuentas().getIdCuenta05();
		}
		Object getPerfilesIdPerfil07Aux = null;
		if (solicitantes.getPerfiles() != null && solicitantes.getPerfiles().getIdPerfil07() != null) {
			getPerfilesIdPerfil07Aux = solicitantes.getPerfiles().getIdPerfil07();
		}
		Object getDireccionesIdDireccion06Aux = null;
		if (solicitantes.getDirecciones() != null && solicitantes.getDirecciones().getIdDireccion06() != null) {
			getDireccionesIdDireccion06Aux = solicitantes.getDirecciones().getIdDireccion06();
		}
		this.jdbcTemplate.update(query, getCuentasIdCuenta05Aux, getPerfilesIdPerfil07Aux,
				getDireccionesIdDireccion06Aux, solicitantes.getTipoIdentificador01(),
				solicitantes.getIdentificador01(), solicitantes.getNombre01(), solicitantes.getApellido101(),
				solicitantes.getApellido201(), solicitantes.getSexo01(), solicitantes.getfNacimiento01(),
				solicitantes.getNumss01(), solicitantes.getNumtis01(), solicitantes.getObservaciones01(),
				solicitantes.getOtroIdioma01(), solicitantes.getTlfnoServicio01(), solicitantes.getTlfnoMovil01(),
				solicitantes.getEmail01(), solicitantes.getMantenerInst01(), solicitantes.getUsuModif01(),
				solicitantes.getfModif01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Transactional(readOnly = true)
	public List<Solicitantes> findSameDirectionBenefActivo(Direcciones direccion, String identificador,
			String tlfnoServicio01, TableRequestDto tableRequestDto) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_SOLICITANTE_01 IDSOLICITANTE01,t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01,t1.IDENTIFICADOR_01 IDENTIFICADOR01,t1.NOMBRE_01 NOMBRE01,t1.APELLIDO1_01 APELLIDO101,t1.APELLIDO2_01 APELLIDO201,t1.SEXO_01 SEXO01,t1.F_NACIMIENTO_01 FNACIMIENTO01,t1.NUMSS_01 NUMSS01,t1.NUMTIS_01 NUMTIS01,t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01,t1.BENEFICIARIO_01 BENEFICIARIO01,t1.F_BENEFICIARIO_01 FBENEFICIARIO01,t1.F_BAJA_01 FBAJA01,t1.F_INICIO_01 FINICIO01,t1.NUM_ABONADO_01 NUMABONADO01,t1.OBSERVACIONES_01 OBSERVACIONES01,t1.NO_REINTENTAR_01 NOREINTENTAR01,t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01, t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01,t1.USU_MODIF_01 USUMODIF01,t1.F_ALTA_01 FALTA01,t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01,t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 , t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06,t5.CALLE_06 DIRECCIONESCALLE06,t5.CP_06 DIRECCIONESCP06,t5.ID_CALLE_06 DIRECCIONESIDCALLE06,t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t5.ID_PAIS_06 DIRECCIONESIDPAIS06,t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06,t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06,t5.LETRA_06 DIRECCIONESLETRA06,t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06,t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06,t5.PAIS_06 DIRECCIONESPAIS06,t5.PISO_06 DIRECCIONESPISO06,t5.PORTAL_06 DIRECCIONESPORTAL06,t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06,t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06,t5.F_ALTA_06 DIRECCIONESFALTA06,t5.USU_ALTA_06 DIRECCIONESUSUALTA06  ");
		query.append("FROM solicitantes  t1 left join direcciones   t5 on (t1.id_direccion_01 = t5.id_direccion_06) ");

		// Where clause & Params
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND BENEFICIARIO_01 = 1 AND F_BAJA_01 IS NULL AND UPPER(IDENTIFICADOR_01) <> UPPER(?) AND  (("
						+ " t5.PISO_06 like ? AND UPPER(t5.LETRA_06) = UPPER(?) ");

		List<Object> params = new ArrayList<Object>();
		params.add(identificador);
		params.add(direccion.getPiso06());
		params.add(direccion.getLetra06());

		if (!Utilidades.esNulo(direccion.getIdCalle06())) {
			where.append(" AND t5.ID_CALLE_06 = ? ");
			params.add(direccion.getIdCalle06());
		} else if (!Utilidades.esBlancoNulo(direccion.getCalle06())) {
			where.append(" AND TRIM(UPPER(t5.CALLE_06)) = TRIM(UPPER(?)) ");
			params.add(direccion.getCalle06());
		} else {
			ManagerErrors.manageError("Faltan datos para hacer el match");
		}

		if (!Utilidades.esNulo(direccion.getIdPortal06())) {
			where.append(" AND ((t5.ID_PORTAL_06 = ? )");
			params.add(direccion.getIdPortal06());
			if (!Utilidades.esBlancoNulo(direccion.getPortal06())) {
				where.append(" OR TRIM(UPPER(t5.PORTAL_06)) = TRIM(UPPER(?))) ");
				params.add(direccion.getPortal06());
			} else {
				where.append(")");
			}
		} else if (Utilidades.esNulo(direccion.getIdPortal06()) && !Utilidades.esBlancoNulo(direccion.getPortal06())) {
			where.append(" AND TRIM(UPPER(t5.PORTAL_06)) = TRIM(UPPER(?)) ");
			params.add(direccion.getPortal06());
		} else {
			ManagerErrors.manageError("Faltan datos para hacer el match");
		}

		where.append(") " + "OR (TLFNO_SERVICIO_01 = ?) ) ");
		params.add(tlfnoServicio01);

		query.append(where);

		if (tableRequestDto != null) {
			query = TableManager.getPaginationQuery(tableRequestDto, query, SolicitantesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		return (List<Solicitantes>) this.jdbcTemplate.query(query.toString(), this.rwMapFindSameDir, params.toArray());

	}

	/**
	 * Counts rows in the Solicitantes table using like.
	 *
	 * @param solicitantes Solicitantes
	 * @param startsWith   Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findSameDirectionBenefActivoCount(Direcciones direccion, String identificador, String tlfnoServicio01) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) ");
		query.append("FROM solicitantes  t1 left join direcciones   t5 on (t1.id_direccion_01 = t5.id_direccion_06) ");

		// Where clause & Params
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND BENEFICIARIO_01 = 1 AND F_BAJA_01 IS NULL AND UPPER(IDENTIFICADOR_01) <> UPPER(?) AND "
						+ " ( ( " + "  t5.PISO_06 like ? AND UPPER(t5.LETRA_06) = UPPER(?) ");

		List<Object> params = new ArrayList<Object>();
		params.add(identificador);
		params.add(direccion.getPiso06());
		params.add(direccion.getLetra06());

		if (!Utilidades.esNulo(direccion.getIdCalle06())) {
			where.append(" AND t5.ID_CALLE_06 = ? ");
			params.add(direccion.getIdCalle06());
		} else if (!Utilidades.esBlancoNulo(direccion.getCalle06())) {
			where.append(" AND TRIM(UPPER(t5.CALLE_06)) = TRIM(UPPER(?)) ");
			params.add(direccion.getCalle06());
		} else {
			ManagerErrors.manageError("Faltan datos para hacer el match");
		}

		if (!Utilidades.esNulo(direccion.getIdPortal06())) {
			where.append(" AND t5.ID_PORTAL_06 = ? ");
			params.add(direccion.getIdPortal06());
		} else if (!Utilidades.esBlancoNulo(direccion.getPortal06())) {
			where.append(" AND TRIM(UPPER(t5.PORTAL_06)) = TRIM(UPPER(?)) ");
			params.add(direccion.getPortal06());
		} else {
			ManagerErrors.manageError("Faltan datos para hacer el match");
		}

		where.append(") " + "OR (TLFNO_SERVICIO_01 = ?) ) ");
		params.add(tlfnoServicio01);

		query.append(where);

		return this.jdbcTemplate.queryForObject(query.toString(), params.toArray(), Long.class);
	}

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Override
	public Solicitantes updateIdiomaServicio(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET IDIOMA_SERVICIO_01 = ? WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getIdiomaServicio01(), solicitantes.getIdSolicitante01());

		return solicitantes;
	}

	@Transactional(readOnly = true)
	public Solicitantes findBeneficiarioByFolderId(String folderId) {
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.IDENTIFICADOR_01 IDENTIFICADOR01, t2.ID_EXPEDIENTE_00 IDEXPEDIENTE00, t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01 ");
		query.append("FROM SOLICITANTES t1, EXPEDIENTES t2 ");

		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_SOLICITANTE_01 = t2.ID_SOLICITANTE_00 AND t2.FOLDER_ID_00 = ?");

		query.append(where);

		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query.toString(), this.rwMapByFolderId, folderId);
		return (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);
	}

	@Override
	public boolean tieneExpedienteInciado(Long idSolicitante01) {
		StringBuilder query = new StringBuilder(
				"SELECT COUNT(*) FROM EXPEDIENTES WHERE ID_SOLICITANTE_00 = ? AND ID_ESTADO_00 NOT IN(?, ?, ?, ?) AND ID_PROCEDIMIENTO_00 IN(?, ?, ?, ?)  ");
		List<Object> params = new ArrayList<Object>();
		params.add(idSolicitante01);
		params.add(EstadosExpedienteEnum.CERRADO.getId());
		params.add(EstadosExpedienteEnum.ARCHIVADO.getId());
		params.add(EstadosExpedienteEnum.PEND_CERRAR.getId());
		params.add(EstadosExpedienteEnum.PEND_ARCHIVAR.getId());
		params.add(ProcedimientosEnum.ALTA.getId());
		params.add(ProcedimientosEnum.REVISION_PRECIO.getId());
		params.add(ProcedimientosEnum.X87_TEA_1.getId());
		params.add(ProcedimientosEnum.X87_TEA_4.getId());
		Long numeroExpedientesAbiertos = this.jdbcTemplate.queryForObject(query.toString(), params.toArray(),
				Long.class);
		if (numeroExpedientesAbiertos == 0) {
			return false;
		} else {
			return true;
		}
	}

	@Override
	public boolean tieneExpedienteInciado(String procedimiento, String identificador01) {
		StringBuilder query = new StringBuilder(
				"SELECT COUNT(*) FROM EXPEDIENTES t1  LEFT JOIN SOLICITANTES t2 ON (t1.id_solicitante_00 = t2.id_solicitante_01) WHERE t2.IDENTIFICADOR_01 = ? AND t1.ID_ESTADO_00 NOT IN(?,?,?,?,?,?) AND t1.ID_PROCEDIMIENTO_00  = ?  ");
		List<Object> params = new ArrayList<Object>();
		params.add(identificador01);

		params.add(EstadosExpedienteEnum.PEND_COMPLETAR.getId());
		params.add(EstadosExpedienteEnum.PEND_APERTURA.getId());
		params.add(EstadosExpedienteEnum.CERRADO.getId());
		params.add(EstadosExpedienteEnum.ARCHIVADO.getId());
		params.add(EstadosExpedienteEnum.PEND_ARCHIVAR.getId());
		params.add(EstadosExpedienteEnum.TRAMITACION.getId());

		params.add(procedimiento);
		Long numeroExpedientesAbiertos = this.jdbcTemplate.queryForObject(query.toString(), params.toArray(),
				Long.class);
		if (numeroExpedientesAbiertos == 0) {
			return false;
		} else {
			return true;
		}
	}

	@Override
	public Solicitantes updateDatosExpediente(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET  F_NACIMIENTO_01=?, NUMSS_01=?, NUMTIS_01=? , OTRO_IDIOMA_01 = ?,TLFNO_SERVICIO_01 = ?,TLFNO_MOVIL_01 = ?,EMAIL_01 = ? WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getfNacimiento01(), solicitantes.getNumss01(),
				solicitantes.getNumtis01(), solicitantes.getOtroIdioma01(), solicitantes.getTlfnoServicio01(),
				solicitantes.getTlfnoMovil01(), solicitantes.getEmail01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateFNac(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET  F_NACIMIENTO_01=?  WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getfNacimiento01(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes findBeneficiarioPorIdSolicitante(Solicitantes solicitantes) {

		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.TIPO_IDENTIFICADOR_01 TIPOIDENTIFICADOR01, t1.IDENTIFICADOR_01 IDENTIFICADOR01, t1.NOMBRE_01 NOMBRE01, t1.APELLIDO1_01 APELLIDO101, t1.APELLIDO2_01 APELLIDO201, t1.SEXO_01 SEXO01, t1.F_NACIMIENTO_01 FNACIMIENTO01, t1.NUMSS_01 NUMSS01, t1.NUMTIS_01 NUMTIS01, t1.F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01, t1.BENEFICIARIO_01 BENEFICIARIO01, t1.F_BENEFICIARIO_01 FBENEFICIARIO01, t1.F_BAJA_01 FBAJA01, t1.F_INICIO_01 FINICIO01, t1.NUM_ABONADO_01 NUMABONADO01, t1.OBSERVACIONES_01 OBSERVACIONES01, t1.NO_REINTENTAR_01 NOREINTENTAR01, t1.IDIOMA_SERVICIO_01 IDIOMASERVICIO01, t1.OTRO_IDIOMA_01 OTROIDIOMA01, t1.TLFNO_SERVICIO_01 TLFNOSERVICIO01, t1.TLFNO_MOVIL_01 TLFNOMOVIL01, t1.EMAIL_01 EMAIL01, t1.TIPO_BENEFICIARIO_01 TIPOBENEFICIARIO01, t1.USU_ALTA_01 USUALTA01, t1.USU_MODIF_01 USUMODIF01, t1.F_ALTA_01 FALTA01, t1.F_MODIF_01 FMODIF01,t1.F_RETIRADA_01 FRETIRADA01, t1.MANTENER_INST_01 MANTENERINST01, t1.EXENCION_01 EXENCION01, t1.EXONERACION_01 EXONERACION01, t1.INSTALADO_01 INSTALADO01, t1.ID_MOTIVO_BAJA_01 IDMOTIVOBAJA01, t1.F_PRIMERA_VISITA_01 FPRIMERAVISITA01, t1.IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01  ,t1.MOTIVO_EXONERACION_01 MOTIVOEXONERACION01,t1.F_EXONERACION_01 FEXONERACION01, ");
		query.append(
				" t3.ID_CUENTA_05 CUENTASIDCUENTA05, t3.NUM_CUENTA_05 CUENTASNUMCUENTA05, t3.COD_TIPO_IDEN_TITULAR_05 CUENTASCODTIPOIDENTITULAR05, t3.IDEN_TITULAR_05 CUENTASIDENTITULAR05,  t3.ID_SOLICITANTE_05 CUENTASIDSOLICITANTE05, t3.USU_HISTORICO_05 CUENTASUSUHISTORICO05, t3.F_HISTORICO_05 CUENTASFHISTORICO05, t3.F_ALTA_05 CUENTASFALTA05, t3.USU_ALTA_05 CUENTASUSUALTA05, NOMBRE_TIT_CUENTA_05 NOMBRETITCUENTA05, APELLIDO1_TIT_CUENTA_05 APELLIDO1TITCUENTA05, APELLIDO2_TIT_CUENTA_05 APELLIDO2TITCUENTA05,");
		query.append(
				" t4.ID_PERFIL_07 PERFILESIDPERFIL07, t4.MAYOR_65_DEP_07 PERFILESMAYOR65DEP07, t4.MAYOR_65_RIESGO_DEP_07 PERFILESMAYOR65RIESGODEP07, t4.MAYOR_75_SOLA_07 PERFILESMAYOR75SOLA07, t4.DIS_INTELECTUAL_07 PERFILESDISINTELECTUAL07, t4.DIS_FISICA_07 PERFILESDISFISICA07, t4.DIS_SENSORIAL_07 PERFILESDISSENSORIAL07, t4.ENF_MENTAL_07 PERFILESENFMENTAL07, t4.RIESGO_AISLAMIENTO_07 PERFILESRIESGOAISLAMIENTO07, t4.PISO_TUTELADO_07 PERFILESPISOTUTELADO07, t4.F_ALTA_07 PERFILESFALTA07, t4.USU_ALTA_07 PERFILESUSUALTA07, t4.ID_PISO_07 PERFILESIDPISO07,");
		query.append(
				" t5.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t5.CALLE_06 DIRECCIONESCALLE06, t5.CP_06 DIRECCIONESCP06, t5.ID_CALLE_06 DIRECCIONESIDCALLE06, t5.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06, t5.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06, t5.ID_PAIS_06 DIRECCIONESIDPAIS06, t5.ID_PORTAL_06 DIRECCIONESIDPORTAL06, t5.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t5.LETRA_06 DIRECCIONESLETRA06, t5.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t5.MUNICIPIO_06 DIRECCIONESMUNICIPIO06, t5.PAIS_06 DIRECCIONESPAIS06, t5.PISO_06 DIRECCIONESPISO06, t5.PORTAL_06 DIRECCIONESPORTAL06, t5.ESCALERA_06 DIRECCIONESESCALERA06, t5.PROVINCIA_06 DIRECCIONESPROVINCIA06, t5.ID_SOLICITANTE_06 DIRECCIONESIDSOLICITANTE06, t5.USU_HISTORICO_06 DIRECCIONESUSUHISTORICO06, t5.F_HISTORICO_06 DIRECCIONESFHISTORICO06, t5.F_ALTA_06 DIRECCIONESFALTA06, t5.USU_ALTA_06 DIRECCIONESUSUALTA06,");
		query.append(
				" t6.ID_VALORACION_08 VALIDVALORACION08, t6.F_VALORACION_08 VALFVALORACION08, t6.TIPO_VALORACION_08 VALTIPOVALORACION08, t6.CONTRATO_ACTUACION_08 VALCONTRATOACTUACION08, t6.MODO_VALORACION_08 VALMODOVALORACION08, t6.ID_NIVEL_SOPORTE_08 VALIDNIVELSOPORTE08, t6.ALTO_RIESGO_08 VALALTORIESGO08, t6.NIVEL_MALTRATO_08 VALNIVELMALTRATO08, t6.NIVEL_SUICIDIO_08 VALNIVELSUICIDIO08, t6.PERIODICIDAD_PROPUESTA_08 VALPERIODICIDADPROPUESTA08, t6.PERIODICIDAD_ACORDADA_08 VALPERIODICIDADACORDADA08, t6.PROPUESTA_ACEPTADA_08 VALPROPUESTAACEPTADA08, t6.ID_SOLICITANTE_08 VALIDSOLICITANTE08, t6.USU_HISTORICO_08 VALUSUHISTORICO08, t6.F_HISTORICO_08 VALFHISTORICO08,t6.MOTIVO_RETRASO_08 ValMOTIVORETRASO08, t6.F_ALTA_08 VALFALTA08, t6.USU_ALTA_08 VALUSUALTA08,");
		query.append("t8.ds_e provincianoradesceu, t8.ds_c provincianoradesces,");//
		query.append("t9.DS_O municipionoradesc, ");
		query.append("t10.TIPO_VIA calleTipoVia,t10.ds_o calleDescripcion,");
		query.append("t11.DS_O localidadNORADesc,");
		query.append("t12.NUMERO portalNumNORADesc,t12.BIS portalBisNORADesc,t12.BLOQUE portalBloqueNORADesc, ");
		query.append("t13.DESC_ES_58 NIVELSOPORTEDESCES, t13.DESC_EU_58 NIVELSOPORTEDESCEU");
		query.append(
				" ,t16.ID_INSTALACION_52 IDINSTALACION52, t16.F_INSTALACION_52 FINSTALACION52, t16.MOTIV_INST_FUERA_PLAZO_52 MOTIVINSTFUERAPLAZO52 ");

		query.append(" FROM SOLICITANTES t1 ");
		query.append(" LEFT JOIN CUENTAS t3 ON (t1.ID_CUENTA_01= t3.ID_CUENTA_05) ");
		query.append(" LEFT JOIN PERFILES t4 ON (t1.ID_PERFIL_01= t4.ID_PERFIL_07) ");
		query.append(" LEFT JOIN DIRECCIONES t5 ON (t1.ID_DIRECCION_01= t5.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN VALORACIONES t6 ON (t1.ID_VALORACION_01= t6.ID_VALORACION_08) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t13 ON (t6.ID_NIVEL_SOPORTE_08= t13.ID_NIVEL_SOPORTE_58) ");
		query.append("LEFT JOIN T17_PROVINCIA t8 ON (t5.ID_PROVINCIA_06 = t8.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t9 ON (t5.ID_MUNICIPIO_06= t9.ID AND t5.id_provincia_06 = t9.PROVINCIA_ID) ");
		query.append(
				"LEFT JOIN T17_CALLE t10 ON (t5.ID_CALLE_06 = t10.id AND t5.id_provincia_06 = t10.provincia_id AND t5.id_municipio_06 = t10.municipio_id) ");
		query.append(
				"LEFT JOIN T17_LOCALIDAD t11 ON ( t5.ID_LOCALIDAD_06 = t11.id AND t5.id_provincia_06 = t11.PROVINCIA_ID AND t5.id_municipio_06 = t11.MUNICIPIO_ID) ");
		query.append("LEFT JOIN T17_PORTAL t12 ON ( t5.ID_PORTAL_06 = t12.id AND t5.id_calle_06 = t12.CALLE_ID) ");
		query.append(
				" LEFT JOIN INSTALACIONES t16 ON (t1.ID_SOLICITANTE_01 = t16.ID_SOLICITANTE_52 AND t16.F_HISTORICO_52 IS NULL) ");

		query.append(
				" WHERE t1.IDENTIFICADOR_01 = (SELECT st.IDENTIFICADOR_01 FROM SOLICITANTES st where st.ID_SOLICITANTE_01 = ?) AND BENEFICIARIO_01 = 1 AND (F_BAJA_01 IS NULL OR (F_BAJA_01 IS NOT NULL AND F_BAJA_01 > sysdate))");

		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query.toString(), this.rwMapProvinciasDesc,
				solicitantes.getIdSolicitante01());
		Solicitantes result = (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);

		try {
			Ad74aDataBaseAudit.terminarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		return result;
	}

	@Override
	public Solicitantes updateDenegacionServicio(Solicitantes solFilter) {
		String query = "UPDATE SOLICITANTES SET  ES_DENEGACION_SERVICIO_01=?  WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solFilter.getEsDenegacionServicio01(), solFilter.getIdSolicitante01());
		return solFilter;

	}

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Override
	public Solicitantes updateFromValoracion(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder("UPDATE SOLICITANTES SET ");

		List<Object> params = new ArrayList<>();
		query.append(""); // los obligatorios
		if (solicitantes.getTipoBeneficiario01() != null) {
			query.append("TIPO_BENEFICIARIO_01=?");
			params.add(solicitantes.getTipoBeneficiario01());
		}
		if (solicitantes.getValoraciones() != null && solicitantes.getValoraciones().getIdValoracion08() != null) {
			query.append(" , ID_VALORACION_01=?");
			params.add(solicitantes.getValoraciones().getIdValoracion08());
		}
		if (solicitantes.getIdiomaServicio01() != null) {
			query.append(" , IDIOMA_SERVICIO_01=?");
			params.add(solicitantes.getIdiomaServicio01());
		}

		query.append(" , OTRO_IDIOMA_01=?");
		params.add(solicitantes.getOtroIdioma01());

		if (solicitantes.getIdiomaSolicitante01() != null) {
			query.append(" , IDIOMA_SOLICITANTE_01=?");
			params.add(solicitantes.getIdiomaSolicitante01());
		}

		// Solo se actualizará en la valoración inicial
		if (solicitantes.getfPrimeraVisita01() != null) {
			query.append(" , F_PRIMERA_VISITA_01=?");
			params.add(solicitantes.getfPrimeraVisita01());
		}

		// Opcionales
		if (solicitantes.getEmail01() != null) {
			query.append(" , EMAIL_01=?");
			params.add(solicitantes.getEmail01());
		}

		if (solicitantes.getTlfnoMovil01() != null) {
			query.append(" , TLFNO_MOVIL_01=?");
			params.add(solicitantes.getTlfnoMovil01());
		}

		if (solicitantes.getTlfnoServicio01() != null) {
			query.append(" , TLFNO_SERVICIO_01=?");
			params.add(solicitantes.getTlfnoServicio01());
		}

		query.append(" WHERE ID_SOLICITANTE_01=? ");
		params.add(solicitantes.getIdSolicitante01());

		this.jdbcTemplate.update(query.toString(), params.toArray());
		return solicitantes;
	}

	@Override
	public Solicitantes updateNoReintentar(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET NO_REINTENTAR_01 = ?,MOTIVO_EXONERACION_01=? WHERE ID_SOLICITANTE_01 = ?";

		this.jdbcTemplate.update(query, solicitantes.getNoReintentar01(), solicitantes.getMotivoExoneracion01(),
				solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public void updateTabPrestacionServicio(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET F_ALTA_TELEASISTENCIA_01 = ?, F_BAJA_01=?, F_INICIO_01=?,ID_MOTIVO_BAJA_01=?  WHERE ID_SOLICITANTE_01 = ?";

		this.jdbcTemplate.update(query, solicitantes.getfAltaTeleasistencia01(), solicitantes.getfBaja01(),
				solicitantes.getfInicio01(), solicitantes.getIdMotivoBaja01(), solicitantes.getIdSolicitante01());
	}

	@Override
	public Solicitantes anularBaja(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET F_BAJA_01 = NULL, F_BAJA_PS_01 = NULL,BENEFICIARIO_01 = 1  WHERE ID_SOLICITANTE_01 = ?";

		this.jdbcTemplate.update(query, solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes updateExencion(Solicitantes solicitante) {
		String query = "UPDATE SOLICITANTES SET EXENCION_01 =?  WHERE ID_SOLICITANTE_01 = ?";

		this.jdbcTemplate.update(query, solicitante.getExencion01(), solicitante.getIdSolicitante01());
		return solicitante;
	}

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Override
	public Solicitantes updateFromWSBajaInstalacion(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder("UPDATE SOLICITANTES SET ");

		List<Object> params = new ArrayList<>();
		query.append(""); // los obligatorios
		if (solicitantes.getfRetirada01() != null) {
			query.append("F_RETIRADA_01=?");
			params.add(solicitantes.getfRetirada01());
		}

		query.append(" WHERE ID_SOLICITANTE_01=? ");
		params.add(solicitantes.getIdSolicitante01());

		this.jdbcTemplate.update(query.toString(), params.toArray());
		return solicitantes;
	}

	@Override
	public Solicitantes esBeneficiario(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.IDENTIFICADOR_01 IDENTIFICADOR01, t1.BENEFICIARIO_01 BENEFICIARIO01, "
						+ "F_ALTA_TELEASISTENCIA_01 FALTATELEASISTENCIA01, F_BAJA_01 FBAJA01");
		query.append(" FROM SOLICITANTES t1 ");
		query.append(" WHERE UPPER(t1.IDENTIFICADOR_01) = ? AND t1.BENEFICIARIO_01 = " + Constantes.UNO);

		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query.toString(), this.rwMapEsBeneficiario,
				solicitantes.getIdentificador01());
		return (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);
	}

	@Override
	public BeneficiarioWS datosBeneficiario(Solicitantes solicitantes) {

		StringBuilder query = new StringBuilder(
				"SELECT t1.IDENTIFICADOR_01 IDENTIFICADOR01, t1.ID_SOLICITANTE_01 IDSOLICITANTE01, t1.F_INICIO_01 FECHAALTABENEFICIARIO, "
						+ "CASE WHEN t1.exencion_01=0 THEN 'NO' " + "ELSE 'SI' " + "END AS EXENTOPAGO, ");
		query.append("T1.F_BAJA_01 FECHABAJABENEFICIARIO, NVL(T1.ID_MOTIVO_BAJA_01,0) MOTIVOBAJA ");
		query.append("FROM   SOLICITANTES   T1 WHERE UPPER(t1.IDENTIFICADOR_01) = ? AND t1.BENEFICIARIO_01 = "
				+ Constantes.UNO);

		List<BeneficiarioWS> solicitantesList = this.jdbcTemplate.query(query.toString(), this.rwMapDtosBeneficiario,
				solicitantes.getIdentificador01());
		return DataAccessUtils.uniqueResult(solicitantesList);
	}

	@Override
	public List<BeneficiarioActividadWS> datosActividadBeneficiario(Solicitantes solicitantes) {
		StringBuilder query = new StringBuilder("");
		// alarmas de dispositivos
		query.append(" SELECT IDTIPO, FECHA, CANTIDAD, TIPO, IDSOLICITANTE ");
		query.append("FROM ( ");
		query.append(
				// " SELECT ID_DISPOSITIVO_35 IDTIPO,MAX(T24.F_ALARMA_24) FECHA,T35.DESC_ES_35,
				// COUNT(*) CANTIDAD, 'D' TIPO, T24.ID_SOLICITANTE_24 IDSOLICITANTE");
				" SELECT ID_DISPOSITIVO_35 IDTIPO,MAX(T24.F_ALARMA_24) FECHA,T35.DESC_ES_35, "
						+ " (select count(*) from ALARMAS TA where TA.ID_SOLICITANTE_24=T24.ID_SOLICITANTE_24 and TA.ID_DISPOSITIVO_24=T35.ID_DISPOSITIVO_35 and TA.F_ALARMA_24 >= ADD_MONTHS(SYSDATE, - 6)) CANTIDAD, 'D' TIPO, T24.ID_SOLICITANTE_24 IDSOLICITANTE");
		query.append(" FROM ALARMAS T24 INNER JOIN SOLICITANTES T1 ON T24.ID_SOLICITANTE_24 = T1.ID_SOLICITANTE_01");
		query.append(
				" LEFT OUTER JOIN DISPOSITIVOS T35 ON T24.ID_DISPOSITIVO_24 = T35.ID_DISPOSITIVO_35 WHERE ID_LLAMADA_24 IS NULL");
		query.append(
				// " AND T24.ID_SOLICITANTE_24= T1.ID_SOLICITANTE_01 AND T24.ID_DISPOSITIVO_24
				// IN (1,2, 3, 4 ,5, 9, 10, 11) AND t24.F_ALARMA_24 >= ADD_MONTHS(SYSDATE, -6)
				// ");
				" AND T24.ID_SOLICITANTE_24= T1.ID_SOLICITANTE_01 AND T24.ID_DISPOSITIVO_24 IN (1,2, 3, 4 ,5, 9, 10, 11) ");
		query.append(" GROUP BY ID_DISPOSITIVO_35,T35.DESC_ES_35,T24.ID_SOLICITANTE_24");
		// alarmas de llamadas
		query.append(" UNION ");
		query.append(
				// "SELECT T3.ID_SUBTIPO_LLAMADA_29 IDTIPO,MAX(T24.F_ALARMA_24),T6.DESC_ES_56,
				// COUNT(*) CANTIDAD, 'A' TIPO, T24.ID_SOLICITANTE_24 IDSOLICITANTE");
				"SELECT T3.ID_SUBTIPO_LLAMADA_29 IDTIPO,MAX(T24.F_ALARMA_24),T6.DESC_ES_56, "
						+ " (select count(*) from ALARMAS TA,llamadas tb  where TA.ID_SOLICITANTE_24=T24.ID_SOLICITANTE_24 and TA.id_llamada_24 = TB.id_llamada_29 AND TB.id_subtipo_llamada_29=t3.id_subtipo_llamada_29 and TA.F_ALARMA_24 >= ADD_MONTHS(SYSDATE, - 6) "
						+ " ) CANTIDAD, 'A' TIPO, T24.ID_SOLICITANTE_24 IDSOLICITANTE");

		query.append(" FROM ALARMAS T24 ");
		query.append(" LEFT OUTER JOIN SOLICITANTES T1 ON T24.ID_SOLICITANTE_24 = T1.ID_SOLICITANTE_01 ");
		query.append(" LEFT OUTER JOIN MAESTRO_TIPO_ALARMA T48 ON T24.ID_TIPO_ALARMA_24 = T48.ID_TIPO_ALARMA_48 ");
		query.append(" LEFT OUTER JOIN LLAMADAS T3 ON T24.ID_LLAMADA_24 = T3.ID_LLAMADA_29 ");
		query.append(" LEFT OUTER JOIN MAESTRO_TIPO_LLAMADA T5 ON T5.ID_TIPO_LLAMADA_55 = T3.ID_TIPO_LLAMADA_29 ");
		query.append(
				" LEFT OUTER JOIN MAESTRO_SUBTPO_LLAMADA T6 ON T3.ID_SUBTIPO_LLAMADA_29 = T6.ID_SUBTIPO_LLAMADA_56 ");
		query.append(" WHERE ID_LLAMADA_24 IS NOT NULL AND T3.ID_SUBTIPO_LLAMADA_29 IN (5, 6, 8 , 21, 22, 25, 31, 32)");
		// query.append(" AND t24.F_ALARMA_24 >= ADD_MONTHS(SYSDATE, -6) ");
		query.append(" GROUP BY T3.ID_TIPO_LLAMADA_29, T3.ID_SUBTIPO_LLAMADA_29,T6.DESC_ES_56, T24.ID_SOLICITANTE_24 ");

		// emergencias
		query.append(" UNION ");
		// query.append(" SELECT T46.ID_TIPO_EMERGENCIA_46 IDTIPO,
		// MAX(T27.F_EMERGENCIA_27) FULTEMER, T46.DESC_ES_46, ");
		query.append(" SELECT T27.ID_TIPO_EMERGENCIA_27 IDTIPO, MAX(T27.F_EMERGENCIA_27) FULTEMER, T46.DESC_ES_46, ");
		// query.append(" COUNT(T46.ID_TIPO_EMERGENCIA_46) CANTIDAD, 'E' TIPO,
		// T27.ID_SOLICITANTE_27 IDSOLICITANTE ");
		query.append(
				" (SELECT COUNT(*) FROM EMERGENCIAS TA  WHERE TA.ID_SOLICITANTE_27=T27.ID_SOLICITANTE_27 AND TA.ID_TIPO_EMERGENCIA_27 = T27.ID_TIPO_EMERGENCIA_27 AND TA.F_EMERGENCIA_27 >= ADD_MONTHS(SYSDATE, - 6) "
						+ "            ) CANTIDAD, ");
		query.append(" 'E' TIPO, T27.ID_SOLICITANTE_27 IDSOLICITANTE ");
		query.append(" FROM EMERGENCIAS T27 ");
		query.append(" INNER JOIN MAESTRO_EMERGENCIAS T46 ON T27.ID_TIPO_EMERGENCIA_27 = T46.ID_TIPO_EMERGENCIA_46 ");
		// query.append(" AND t27.f_emergencia_27 >= ADD_MONTHS(SYSDATE, -6) ");
		query.append(" AND T46.ID_TIPO_EMERGENCIA_46 IN (1, 2,3, 4, 5, 6, 7) ");
		query.append(" GROUP BY T27.ID_TIPO_EMERGENCIA_27,T46.DESC_ES_46,T27.ID_SOLICITANTE_27 ");
		query.append(" ) ");
		query.append("WHERE IDSOLICITANTE = ? ");
		return this.jdbcTemplate.query(query.toString(), this.rwMapActividadBeneficiario,
				solicitantes.getIdSolicitante01());
	}

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	@Override
	public Solicitantes updatePerfil(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES SET ID_PERFIL_01 = ? WHERE ID_SOLICITANTE_01=?";

		this.jdbcTemplate.update(query, solicitantes.getIdPerfil01(), solicitantes.getIdSolicitante01());

		return solicitantes;
	}

	@Override
	public Solicitantes updateExoneracion(Solicitantes solicitantes) {
		String query = "UPDATE SOLICITANTES "
				+ " SET EXONERACION_01 = ?,MOTIVO_EXONERACION_01=?,F_EXONERACION_01=TRUNC(SYSDATE),F_MODIF_01=SYSDATE,USU_MODIF_01=? "
				+ " WHERE ID_SOLICITANTE_01 = ?";

		this.jdbcTemplate.update(query, solicitantes.getExoneracion01(), solicitantes.getMotivoExoneracion01(),
				UtilSeguridad.getNameUsuarioConectado(), solicitantes.getIdSolicitante01());
		return solicitantes;
	}

	@Override
	public Solicitantes getFechaBaja(Solicitantes solicitantes) {
		String query = "SELECT F_BAJA_01 FBAJA01 FROM SOLICITANTES WHERE ID_SOLICITANTE_01=?";

		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query.toString(), this.rwMapFBaja,
				solicitantes.getIdSolicitante01());
		Solicitantes result = (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);
		return result;
	}

	@Override
	public Solicitantes getTabDatosBeneficiarios(Solicitantes solicitantes) {
		String query = "SELECT id_solicitante_01 IDSOLICITANTE01, apellido1_01 APELLIDO101, apellido2_01 APELLIDO201, nombre_01 NOMBRE01, "
				+ "f_nacimiento_01 FNACIMIENTO01, tipo_beneficiario_01 TIPOBENEFICIARIO01, sexo_01 SEXO01, tlfno_servicio_01 TLFNOSERVICIO01, "
				+ "tlfno_movil_01 TLFNOMOVIL01, email_01 EMAIL01, numss_01 NUMSS01, numtis_01 NUMTIS01, "
				+ "IDIOMA_SERVICIO_01 IDIOMASERVICIO01, IDIOMA_SOLICITANTE_01 IDIOMASOLICITANTE01, ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04"

				+ " FROM SOLICITANTES LEFT JOIN DEPENDENCIA ON (ID_SOLICITANTE_01 = ID_SOLICITANTE_04) "
				+ " WHERE id_solicitante_01 = ? AND F_HISTORICO_04 IS NULL ";

		List<Solicitantes> solicitantesList = this.jdbcTemplate.query(query, this.rwMapTabDatosBeneficiarios,
				solicitantes.getIdSolicitante01());
		Solicitantes result = (Solicitantes) DataAccessUtils.uniqueResult(solicitantesList);
		return result;
	}
}
