package com.ejie.ad74a.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
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.model.Ayuntamientos;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.Perfiles;
import com.ejie.ad74a.model.PisosTutelados;
import com.ejie.ad74a.util.Ad74aDataBaseAudit;
import com.ejie.ad74a.util.UtilSQL;
import com.ejie.ad74a.util.comun.UtilSeguridad;
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;

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

@Repository
@Transactional
public class PerfilesDaoImpl implements PerfilesDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDPERFIL07", "MAYOR65DEP07",
			"MAYOR65RIESGODEP07", "MAYOR75SOLA07", "DISINTELECTUAL07", "DISFISICA07", "DISSENSORIAL07", "ENFMENTAL07",
			"RIESGOAISLAMIENTO07", "PISOTUTELADO07", "FALTA07", "USUALTA07", "PISOSTUTELADOSIDPISO32",
			"PISOSTUTELADOSDENOMINACION32", "PISOSTUTELADOSUSUALTA32", "PISOSTUTELADOSUSUMODIF32",
			"PISOSTUTELADOSFALTA32", "PISOSTUTELADOSFMODIF32", "PISOSTUTELADOSFBAJA32", "PISOSTUTELADOSIDDIRECCION32",
			"PISOSTUTELADOSIDAYUNTAMIENTO32" };

	private JdbcTemplate jdbcTemplate;

	public static final String SEQUENCE_PERFIL = "SEQ_PERFILES";

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<Perfiles> rwMap = new RowMapper<Perfiles>() {
		public Perfiles mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new Perfiles(UtilSQL.getLong(resultSet, "IDPERFIL07"), UtilSQL.getInt(resultSet, "MAYOR65DEP07"),
					UtilSQL.getInt(resultSet, "MAYOR65RIESGODEP07"), UtilSQL.getInt(resultSet, "MAYOR75SOLA07"),
					UtilSQL.getInt(resultSet, "DISINTELECTUAL07"), UtilSQL.getInt(resultSet, "DISFISICA07"),
					UtilSQL.getInt(resultSet, "DISSENSORIAL07"), UtilSQL.getInt(resultSet, "ENFMENTAL07"),
					UtilSQL.getInt(resultSet, "RIESGOAISLAMIENTO07"), UtilSQL.getInt(resultSet, "PISOTUTELADO07"),
					resultSet.getDate("FALTA07"), resultSet.getString("USUALTA07"),
					new PisosTutelados(UtilSQL.getLong(resultSet, "PisosTuteladosIDPISO32"),
							resultSet.getString("PisosTuteladosDENOMINACION32"),
							new Direcciones(UtilSQL.getLong(resultSet, "PisosTuteladosIDDIRECCION32"), null, null, null,
									null, null, null, null, null, null, null, null, null, null, null, null, null, null,
									null, null, null, null, null, null, null),
							resultSet.getString("PisosTuteladosUSUALTA32"),
							resultSet.getString("PisosTuteladosUSUMODIF32"), resultSet.getDate("PisosTuteladosFALTA32"),
							resultSet.getDate("PisosTuteladosFMODIF32"), resultSet.getDate("PisosTuteladosFBAJA32"),
							new Ayuntamientos(UtilSQL.getLong(resultSet, "PisosTuteladosIDAYUNTAMIENTO32"), null, null,
									null, null, null, null, null, null, null, null, null, null, null, null, null, null,
									null, null, null, null, null, null, null)));
		}
	};

	private RowMapper<Perfiles> rwMapPK = new RowMapper<Perfiles>() {
		public Perfiles mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new Perfiles(UtilSQL.getLong(resultSet, "IDPERFIL07"));
		}
	};

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

			Perfiles perfiles = new Perfiles(UtilSQL.getLong(resultSet, "IDPERFIL07"),
					UtilSQL.getInt(resultSet, "MAYOR65DEP07"), UtilSQL.getInt(resultSet, "MAYOR65RIESGODEP07"),
					UtilSQL.getInt(resultSet, "MAYOR75SOLA07"), UtilSQL.getInt(resultSet, "DISINTELECTUAL07"),
					UtilSQL.getInt(resultSet, "DISFISICA07"), UtilSQL.getInt(resultSet, "DISSENSORIAL07"),
					UtilSQL.getInt(resultSet, "ENFMENTAL07"), UtilSQL.getInt(resultSet, "RIESGOAISLAMIENTO07"),
					UtilSQL.getInt(resultSet, "PISOTUTELADO07"), resultSet.getDate("FALTA07"),
					resultSet.getString("USUALTA07"),
					new PisosTutelados(UtilSQL.getLong(resultSet, "PisosTuteladosIDPISO32"),
							resultSet.getString("PisosTuteladosDENOMINACION32"),
							new Direcciones(UtilSQL.getLong(resultSet, "PisosTuteladosIDDIRECCION32"), null, null, null,
									null, null, null, null, null, null, null, null, null, null, null, null, null, null,
									null, null, null, null, null, null, null),
							resultSet.getString("PisosTuteladosUSUALTA32"),
							resultSet.getString("PisosTuteladosUSUMODIF32"), resultSet.getDate("PisosTuteladosFALTA32"),
							resultSet.getDate("PisosTuteladosFMODIF32"), resultSet.getDate("PisosTuteladosFBAJA32"),
							new Ayuntamientos(UtilSQL.getLong(resultSet, "PisosTuteladosIDAYUNTAMIENTO32"), null, null,
									null, null, null, null, null, null, null, null, null, null, null, null, null, null,
									null, null, null, null, null, null, null)));

			JerarquiaDto<Perfiles> jerarquia = new JerarquiaDto<Perfiles>();
			jerarquia.setModel(perfiles);
			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 Perfiles table.
	 *
	 * @param perfiles Perfiles
	 * @return Perfiles
	 */
	public Perfiles add(Perfiles perfiles) {

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

		}

		String usuario = null;
		try {

			usuario = UtilSeguridad.getUsuarioConectado().getUserName();
		} catch (Exception e) {
			usuario = com.ejie.ad74a.constantes.Constantes.COD_APLICACION;
		}

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		String query = "INSERT INTO PERFILES (ID_PERFIL_07, ID_PISO_07, MAYOR_65_DEP_07, MAYOR_65_RIESGO_DEP_07, MAYOR_75_SOLA_07, DIS_INTELECTUAL_07, DIS_FISICA_07, DIS_SENSORIAL_07, ENF_MENTAL_07, RIESGO_AISLAMIENTO_07, PISO_TUTELADO_07, F_ALTA_07, USU_ALTA_07) "
				+ "VALUES (" + SEQUENCE_PERFIL
				+ ".NEXTVAL,:idPiso,:mayor65Dep,:mayor65Riesgo,:mayor75Sola,:disIntelec,:disFisica,:disSensorial,:enfMental,:riesgoAisl,:pisoTutelado,SYSDATE,:usuAlta)";
		Object getPisosTuteladosIdPiso32Aux = null;
		if (perfiles.getPisosTutelados() != null && perfiles.getPisosTutelados().getIdPiso32() != null) {
			getPisosTuteladosIdPiso32Aux = perfiles.getPisosTutelados().getIdPiso32();
		}

		MapSqlParameterSource parameters = new MapSqlParameterSource().addValue("idPiso", getPisosTuteladosIdPiso32Aux)
				.addValue("mayor65Dep", null != perfiles.getMayor65Dep07() ? perfiles.getMayor65Dep07() : 0)
				.addValue("mayor65Riesgo",
						null != perfiles.getMayor65RiesgoDep07() ? perfiles.getMayor65RiesgoDep07() : 0)
				.addValue("mayor75Sola", null != perfiles.getMayor75Sola07() ? perfiles.getMayor75Sola07() : 0)
				.addValue("disIntelec", null != perfiles.getDisIntelectual07() ? perfiles.getDisIntelectual07() : 0)
				.addValue("disFisica", null != perfiles.getDisFisica07() ? perfiles.getDisFisica07() : 0)
				.addValue("disSensorial", null != perfiles.getDisSensorial07() ? perfiles.getDisSensorial07() : 0)
				.addValue("enfMental", null != perfiles.getEnfMental07() ? perfiles.getEnfMental07() : 0)
				.addValue("riesgoAisl",
						null != perfiles.getRiesgoAislamiento07() ? perfiles.getRiesgoAislamiento07() : 0)
				.addValue("pisoTutelado", null != perfiles.getPisoTutelado07() ? perfiles.getPisoTutelado07() : 0)
				.addValue("usuAlta", usuario);

		NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
		namedParameterJdbcTemplate.update(query, parameters, generatedKeyHolder, new String[] { "ID_PERFIL_07" });
		perfiles.setIdPerfil07(generatedKeyHolder.getKey().longValue());

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

		}
		return perfiles;
	}

	/**
	 * Updates a single row in the Perfiles table.
	 *
	 * @param perfiles Perfiles
	 * @return Perfiles
	 */
	public Perfiles update(Perfiles perfiles) {

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

		}

		String query = "UPDATE PERFILES SET ID_PISO_07=?, MAYOR_65_DEP_07=?, MAYOR_65_RIESGO_DEP_07=?, MAYOR_75_SOLA_07=?, DIS_INTELECTUAL_07=?, DIS_FISICA_07=?, DIS_SENSORIAL_07=?, ENF_MENTAL_07=?, RIESGO_AISLAMIENTO_07=?, PISO_TUTELADO_07=? WHERE ID_PERFIL_07=?";
		Object getPisosTuteladosIdPiso32Aux = null;
		if (perfiles.getPisosTutelados() != null && perfiles.getPisosTutelados().getIdPiso32() != null) {
			getPisosTuteladosIdPiso32Aux = perfiles.getPisosTutelados().getIdPiso32();
		}
		this.jdbcTemplate.update(query, getPisosTuteladosIdPiso32Aux, //
				null != perfiles.getMayor65Dep07() ? perfiles.getMayor65Dep07() : 0, //
				null != perfiles.getMayor65RiesgoDep07() ? perfiles.getMayor65RiesgoDep07() : 0, //
				null != perfiles.getMayor75Sola07() ? perfiles.getMayor75Sola07() : 0, //
				null != perfiles.getDisIntelectual07() ? perfiles.getDisIntelectual07() : 0, //
				null != perfiles.getDisFisica07() ? perfiles.getDisFisica07() : 0, //
				null != perfiles.getDisSensorial07() ? perfiles.getDisSensorial07() : 0, //
				null != perfiles.getEnfMental07() ? perfiles.getEnfMental07() : 0, //
				null != perfiles.getRiesgoAislamiento07() ? perfiles.getRiesgoAislamiento07() : 0, //
				null != perfiles.getPisoTutelado07() ? perfiles.getPisoTutelado07() : 0, //
				perfiles.getIdPerfil07());

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

		}
		return perfiles;
	}

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

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

		}

		String query = "SELECT t1.ID_PERFIL_07 IDPERFIL07, t1.MAYOR_65_DEP_07 MAYOR65DEP07, t1.MAYOR_65_RIESGO_DEP_07 MAYOR65RIESGODEP07, t1.MAYOR_75_SOLA_07 MAYOR75SOLA07, t1.DIS_INTELECTUAL_07 DISINTELECTUAL07, t1.DIS_FISICA_07 DISFISICA07, t1.DIS_SENSORIAL_07 DISSENSORIAL07, t1.ENF_MENTAL_07 ENFMENTAL07, t1.RIESGO_AISLAMIENTO_07 RIESGOAISLAMIENTO07, t1.PISO_TUTELADO_07 PISOTUTELADO07, t1.F_ALTA_07 FALTA07, t1.USU_ALTA_07 USUALTA07, t2.ID_PISO_32 PISOSTUTELADOSIDPISO32, t2.DENOMINACION_32 PISOSTUTELADOSDENOMINACION32, t2.USU_ALTA_32 PISOSTUTELADOSUSUALTA32, t2.USU_MODIF_32 PISOSTUTELADOSUSUMODIF32, t2.F_ALTA_32 PISOSTUTELADOSFALTA32, t2.F_MODIF_32 PISOSTUTELADOSFMODIF32, t2.F_BAJA_32 PISOSTUTELADOSFBAJA32, t2.ID_DIRECCION_32 PISOSTUTELADOSIDDIRECCION32, t2.ID_AYUNTAMIENTO_32 PISOSTUTELADOSIDAYUNTAMIENTO32 FROM PERFILES t1 , PISOS_TUTELADOS t2  WHERE t1.ID_PERFIL_07 = ?   AND t1.ID_PISO_07= t2.ID_PISO_32(+)";

		List<Perfiles> perfilesList = this.jdbcTemplate.query(query, this.rwMap, perfiles.getIdPerfil07());

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

		}

		Perfiles result = (Perfiles) DataAccessUtils.uniqueResult(perfilesList);
		return result;
	}

	/**
	 * Removes a single row in the Perfiles table.
	 *
	 * @param perfiles Perfiles
	 * @return
	 */
	public void remove(Perfiles perfiles) {

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

		}

		String query = "DELETE FROM PERFILES WHERE ID_PERFIL_07=?";
		this.jdbcTemplate.update(query, perfiles.getIdPerfil07());

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

		}
	}

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

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

		}

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PERFIL_07 IDPERFIL07, t1.MAYOR_65_DEP_07 MAYOR65DEP07, t1.MAYOR_65_RIESGO_DEP_07 MAYOR65RIESGODEP07, t1.MAYOR_75_SOLA_07 MAYOR75SOLA07, t1.DIS_INTELECTUAL_07 DISINTELECTUAL07, t1.DIS_FISICA_07 DISFISICA07, t1.DIS_SENSORIAL_07 DISSENSORIAL07, t1.ENF_MENTAL_07 ENFMENTAL07, t1.RIESGO_AISLAMIENTO_07 RIESGOAISLAMIENTO07, t1.PISO_TUTELADO_07 PISOTUTELADO07, t1.F_ALTA_07 FALTA07, t1.USU_ALTA_07 USUALTA07, t2.ID_PISO_32 PISOSTUTELADOSIDPISO32, t2.DENOMINACION_32 PISOSTUTELADOSDENOMINACION32, t2.USU_ALTA_32 PISOSTUTELADOSUSUALTA32, t2.USU_MODIF_32 PISOSTUTELADOSUSUMODIF32, t2.F_ALTA_32 PISOSTUTELADOSFALTA32, t2.F_MODIF_32 PISOSTUTELADOSFMODIF32, t2.F_BAJA_32 PISOSTUTELADOSFBAJA32, t2.ID_DIRECCION_32 PISOSTUTELADOSIDDIRECCION32, t2.ID_AYUNTAMIENTO_32 PISOSTUTELADOSIDAYUNTAMIENTO32");
		query.append(" FROM PERFILES t1 , PISOS_TUTELADOS t2  ");
		// Where clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterPerfiles, 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, Perfiles.class, params,
				"ID_PERFIL_07");
		where.append(sbMultipleSQL);

		List<Perfiles> 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 Perfiles table.
	 *
	 * @param perfiles        Perfiles
	 * @param tableRequestDto TableRequestDto
	 * @return List<Perfiles>
	 */
	@Transactional(readOnly = true)
	public List<Perfiles> findAll(Perfiles perfiles, TableRequestDto tableRequestDto) {
		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_PERFIL_07 IDPERFIL07,t1.MAYOR_65_DEP_07 MAYOR65DEP07,t1.MAYOR_65_RIESGO_DEP_07 MAYOR65RIESGODEP07,t1.MAYOR_75_SOLA_07 MAYOR75SOLA07,t1.DIS_INTELECTUAL_07 DISINTELECTUAL07,t1.DIS_FISICA_07 DISFISICA07,t1.DIS_SENSORIAL_07 DISSENSORIAL07,t1.ENF_MENTAL_07 ENFMENTAL07,t1.RIESGO_AISLAMIENTO_07 RIESGOAISLAMIENTO07,t1.PISO_TUTELADO_07 PISOTUTELADO07,t1.F_ALTA_07 FALTA07,t1.USU_ALTA_07 USUALTA07,t2.ID_PISO_32 PISOSTUTELADOSIDPISO32,t2.DENOMINACION_32 PISOSTUTELADOSDENOMINACION32,t2.USU_ALTA_32 PISOSTUTELADOSUSUALTA32,t2.USU_MODIF_32 PISOSTUTELADOSUSUMODIF32,t2.F_ALTA_32 PISOSTUTELADOSFALTA32,t2.F_MODIF_32 PISOSTUTELADOSFMODIF32, t2.F_BAJA_32 PISOSTUTELADOSFBAJA32,t2.ID_DIRECCION_32 PISOSTUTELADOSIDDIRECCION32,t2.ID_AYUNTAMIENTO_32 PISOSTUTELADOSIDAYUNTAMIENTO32 ");
		query.append("FROM PERFILES t1 ,PISOS_TUTELADOS t2 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(perfiles);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_PISO_07= t2.ID_PISO_32(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

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

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

		}
		return result;
	}

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

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

		}

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_PERFIL_07 IDPERFIL07,t1.MAYOR_65_DEP_07 MAYOR65DEP07,t1.MAYOR_65_RIESGO_DEP_07 MAYOR65RIESGODEP07,t1.MAYOR_75_SOLA_07 MAYOR75SOLA07,t1.DIS_INTELECTUAL_07 DISINTELECTUAL07,t1.DIS_FISICA_07 DISFISICA07,t1.DIS_SENSORIAL_07 DISSENSORIAL07,t1.ENF_MENTAL_07 ENFMENTAL07,t1.RIESGO_AISLAMIENTO_07 RIESGOAISLAMIENTO07,t1.PISO_TUTELADO_07 PISOTUTELADO07,t1.F_ALTA_07 FALTA07,t1.USU_ALTA_07 USUALTA07,t2.ID_PISO_32 PISOSTUTELADOSIDPISO32,t2.DENOMINACION_32 PISOSTUTELADOSDENOMINACION32,t2.USU_ALTA_32 PISOSTUTELADOSUSUALTA32,t2.USU_MODIF_32 PISOSTUTELADOSUSUMODIF32,t2.F_ALTA_32 PISOSTUTELADOSFALTA32,t2.F_MODIF_32 PISOSTUTELADOSFMODIF32, t2.F_BAJA_32 PISOSTUTELADOSFBAJA32,t2.ID_DIRECCION_32 PISOSTUTELADOSIDDIRECCION32,t2.ID_AYUNTAMIENTO_32 PISOSTUTELADOSIDAYUNTAMIENTO32 ");
		query.append("FROM PERFILES t1 ,PISOS_TUTELADOS t2 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(perfiles, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_PISO_07= t2.ID_PISO_32(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

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

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

		}
		return result;
	}

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the Perfiles table.
	 *
	 * @param perfiles Perfiles
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(Perfiles perfiles) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM PERFILES t1 , PISOS_TUTELADOS t2 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(perfiles);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_PISO_07= t2.ID_PISO_32(+) ");
		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 Perfiles table using like.
	 *
	 * @param perfiles   Perfiles
	 * @param startsWith Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(Perfiles perfiles, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM PERFILES t1 ,PISOS_TUTELADOS t2 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(perfiles, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_PISO_07= t2.ID_PISO_32(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

	/**
	 * Reorder the data list of Perfiles selected for rup_table
	 *
	 * @param perfiles        Perfiles
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<Perfiles>>
	 */
	@Override
	public List<TableRowDto<Perfiles>> reorderSelection(Perfiles perfiles, TableRequestDto tableRequestDto,
			Boolean startsWith) {

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

		}

		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PERFIL_07 IDPERFIL07,t1.MAYOR_65_DEP_07 MAYOR65DEP07,t1.MAYOR_65_RIESGO_DEP_07 MAYOR65RIESGODEP07,t1.MAYOR_75_SOLA_07 MAYOR75SOLA07,t1.DIS_INTELECTUAL_07 DISINTELECTUAL07,t1.DIS_FISICA_07 DISFISICA07,t1.DIS_SENSORIAL_07 DISSENSORIAL07,t1.ENF_MENTAL_07 ENFMENTAL07,t1.RIESGO_AISLAMIENTO_07 RIESGOAISLAMIENTO07,t1.PISO_TUTELADO_07 PISOTUTELADO07,t1.F_ALTA_07 FALTA07,t1.USU_ALTA_07 USUALTA07,t2.ID_PISO_32 PISOSTUTELADOSIDPISO32,t2.DENOMINACION_32 PISOSTUTELADOSDENOMINACION32,t2.USU_ALTA_32 PISOSTUTELADOSUSUALTA32,t2.USU_MODIF_32 PISOSTUTELADOSUSUMODIF32,t2.F_ALTA_32 PISOSTUTELADOSFALTA32,t2.F_MODIF_32 PISOSTUTELADOSFMODIF32, t2.F_BAJA_32 PISOSTUTELADOSFBAJA32,t2.ID_DIRECCION_32 PISOSTUTELADOSIDDIRECCION32,t2.ID_AYUNTAMIENTO_32 PISOSTUTELADOSIDAYUNTAMIENTO32 ");
		// FROM
		query.append("FROM PERFILES t1 ,PISOS_TUTELADOS t2 ");
		// FILTRADO
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(perfiles, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_PISO_07= t2.ID_PISO_32(+) ");
		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, Perfiles.class,
				filterParamList, "IDPERFIL07");

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

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

		}
		return result;
	}

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

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

		}

		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PERFIL_07 IDPERFIL07,t1.MAYOR_65_DEP_07 MAYOR65DEP07,t1.MAYOR_65_RIESGO_DEP_07 MAYOR65RIESGODEP07,t1.MAYOR_75_SOLA_07 MAYOR75SOLA07,t1.DIS_INTELECTUAL_07 DISINTELECTUAL07,t1.DIS_FISICA_07 DISFISICA07,t1.DIS_SENSORIAL_07 DISSENSORIAL07,t1.ENF_MENTAL_07 ENFMENTAL07,t1.RIESGO_AISLAMIENTO_07 RIESGOAISLAMIENTO07,t1.PISO_TUTELADO_07 PISOTUTELADO07,t1.F_ALTA_07 FALTA07,t1.USU_ALTA_07 USUALTA07,t2.ID_PISO_32 PISOSTUTELADOSIDPISO32,t2.DENOMINACION_32 PISOSTUTELADOSDENOMINACION32,t2.USU_ALTA_32 PISOSTUTELADOSUSUALTA32,t2.USU_MODIF_32 PISOSTUTELADOSUSUMODIF32,t2.F_ALTA_32 PISOSTUTELADOSFALTA32,t2.F_MODIF_32 PISOSTUTELADOSFMODIF32, t2.F_BAJA_32 PISOSTUTELADOSFBAJA32,t2.ID_DIRECCION_32 PISOSTUTELADOSIDDIRECCION32,t2.ID_AYUNTAMIENTO_32 PISOSTUTELADOSIDAYUNTAMIENTO32 ");
		// FROM
		query.append("FROM PERFILES t1 ,PISOS_TUTELADOS t2 ");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");

		// FILTRADO
		Map<String, ?> mapaWhereFilter = this.getWhereLikeMap(filterParams, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_PISO_07= t2.ID_PISO_32(+) ");
		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, Perfiles.class,
				filterParamList, searchSQL, searchParamList, from_alias, "IDPERFIL07");

		List<TableRowDto<Perfiles>> result = this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<Perfiles>(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) {

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

		}
		StringBuilder sbRemoveMultipleSQL = TableManager.getRemoveMultipleQuery(tableRequestDto, Perfiles.class,
				"PERFILES", new String[] { "IDPERFIL07" });

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

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

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

		}
	}

	/**
	 * Filter in the hierarchical Perfiles table.
	 *
	 * @param filterPerfiles  Perfiles
	 * @param tableRequestDto TableRequestDto
	 * @return List<JerarquiaDto<Perfiles>>
	 */
	@Override
	public List<JerarquiaDto<Perfiles>> findAllLikeJerarquia(Perfiles filterPerfiles, TableRequestDto tableRequestDto) {

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

		}

		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PERFIL_07 IDPERFIL07,t1.MAYOR_65_DEP_07 MAYOR65DEP07,t1.MAYOR_65_RIESGO_DEP_07 MAYOR65RIESGODEP07,t1.MAYOR_75_SOLA_07 MAYOR75SOLA07,t1.DIS_INTELECTUAL_07 DISINTELECTUAL07,t1.DIS_FISICA_07 DISFISICA07,t1.DIS_SENSORIAL_07 DISSENSORIAL07,t1.ENF_MENTAL_07 ENFMENTAL07,t1.RIESGO_AISLAMIENTO_07 RIESGOAISLAMIENTO07,t1.PISO_TUTELADO_07 PISOTUTELADO07,t1.F_ALTA_07 FALTA07,t1.USU_ALTA_07 USUALTA07,t2.ID_PISO_32 PISOSTUTELADOSIDPISO32,t2.DENOMINACION_32 PISOSTUTELADOSDENOMINACION32,t2.USU_ALTA_32 PISOSTUTELADOSUSUALTA32,t2.USU_MODIF_32 PISOSTUTELADOSUSUMODIF32,t2.F_ALTA_32 PISOSTUTELADOSFALTA32,t2.F_MODIF_32 PISOSTUTELADOSFMODIF32, t2.F_BAJA_32 PISOSTUTELADOSFBAJA32,t2.ID_DIRECCION_32 PISOSTUTELADOSIDDIRECCION32,t2.ID_AYUNTAMIENTO_32 PISOSTUTELADOSIDAYUNTAMIENTO32 ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM PERFILES t1 ,PISOS_TUTELADOS t2
		// ");
		List<String> from = new ArrayList<String>();
		from.add("PERFILES");
		from.add("PISOS_TUTELADOS");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");

		// 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(filterPerfiles, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "IDPERFIL07", "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,
					PerfilesDaoImpl.ORDER_BY_WHITE_LIST);
		}

		List<?> params = (List<?>) mapaWhere.get("params");
		List<JerarquiaDto<Perfiles>> result = this.jdbcTemplate.query(query.toString(), this.rwMapJerarquia,
				params.toArray());

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

		}
		return result;
	}

	/**
	 * Count rows in hierarchy
	 *
	 * @param filterPerfiles  Perfiles
	 * @param tableRequestDto TableRequestDto
	 * @return Long
	 */
	@Override
	public Long findAllLikeCountJerarquia(Perfiles filterPerfiles, TableRequestDto tableRequestDto) {
		// FROM
		// StringBuilder from = new StringBuilder("FROM PERFILES t1 ,PISOS_TUTELADOS t2
		// ");
		List<String> from = new ArrayList<String>();
		from.add("PERFILES");
		from.add("PISOS_TUTELADOS");

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

		// 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(filterPerfiles, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "IDPERFIL07", "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 filterPerfiles  Perfiles
	 * @param tableRequestDto TableRequestDto
	 * @return List<TableRowDto<Perfiles>>
	 */
	@Override
	public List<TableRowDto<Perfiles>> findAllChild(Perfiles filterPerfiles, TableRequestDto tableRequestDto) {

		// FROM
		// StringBuilder from = new StringBuilder("FROM PERFILES t1 ,PISOS_TUTELADOS t2
		// ");
		List<String> from = new ArrayList<String>();
		from.add("PERFILES");
		from.add("PISOS_TUTELADOS");

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

		// 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(filterPerfiles, false);

		// MULTISELECCION
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "IDPERFIL07",
				"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<Perfiles>(this.rwMapPK, "IDPERFIL07"), params.toArray());
	}

	/*
	 * MÉTODOS PRIVADOS
	 */

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * Perfiles entity
	 *
	 * @param perfiles Perfiles 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(Perfiles perfiles) {

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

		if (perfiles != null && perfiles.getIdPerfil07() != null) {
			where.append(" AND t1.ID_PERFIL_07 = ?");
			params.add(perfiles.getIdPerfil07());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getIdPiso32() != null) {
			where.append(" AND t2.ID_PISO_32 = ?");
			params.add(perfiles.getPisosTutelados().getIdPiso32());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getDirecciones() != null
				&& perfiles.getPisosTutelados().getDirecciones().getIdDireccion06() != null) {
			where.append(" AND t2.ID_DIRECCION_32 = ?");
			params.add(perfiles.getPisosTutelados().getDirecciones().getIdDireccion06());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getAyuntamientos() != null
				&& perfiles.getPisosTutelados().getAyuntamientos().getIdAyuntamiento31() != null) {
			where.append(" AND t2.ID_AYUNTAMIENTO_32 = ?");
			params.add(perfiles.getPisosTutelados().getAyuntamientos().getIdAyuntamiento31());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getDenominacion32() != null) {
			where.append(" AND t2.DENOMINACION_32 = ?");
			params.add(perfiles.getPisosTutelados().getDenominacion32());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getUsuAlta32() != null) {
			where.append(" AND t2.USU_ALTA_32 = ?");
			params.add(perfiles.getPisosTutelados().getUsuAlta32());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getUsuModif32() != null) {
			where.append(" AND t2.USU_MODIF_32 = ?");
			params.add(perfiles.getPisosTutelados().getUsuModif32());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getfAlta32() != null) {
			where.append(" AND t2.F_ALTA_32 = ?");
			params.add(perfiles.getPisosTutelados().getfAlta32());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getfModif32() != null) {
			where.append(" AND t2.F_MODIF_32 = ?");
			params.add(perfiles.getPisosTutelados().getfModif32());
		}
		if (perfiles != null && perfiles.getMayor65Dep07() != null) {
			where.append(" AND t1.MAYOR_65_DEP_07 = ?");
			params.add(perfiles.getMayor65Dep07());
		}
		if (perfiles != null && perfiles.getMayor65RiesgoDep07() != null) {
			where.append(" AND t1.MAYOR_65_RIESGO_DEP_07 = ?");
			params.add(perfiles.getMayor65RiesgoDep07());
		}
		if (perfiles != null && perfiles.getMayor75Sola07() != null) {
			where.append(" AND t1.MAYOR_75_SOLA_07 = ?");
			params.add(perfiles.getMayor75Sola07());
		}
		if (perfiles != null && perfiles.getDisIntelectual07() != null) {
			where.append(" AND t1.DIS_INTELECTUAL_07 = ?");
			params.add(perfiles.getDisIntelectual07());
		}
		if (perfiles != null && perfiles.getDisFisica07() != null) {
			where.append(" AND t1.DIS_FISICA_07 = ?");
			params.add(perfiles.getDisFisica07());
		}
		if (perfiles != null && perfiles.getDisSensorial07() != null) {
			where.append(" AND t1.DIS_SENSORIAL_07 = ?");
			params.add(perfiles.getDisSensorial07());
		}
		if (perfiles != null && perfiles.getEnfMental07() != null) {
			where.append(" AND t1.ENF_MENTAL_07 = ?");
			params.add(perfiles.getEnfMental07());
		}
		if (perfiles != null && perfiles.getRiesgoAislamiento07() != null) {
			where.append(" AND t1.RIESGO_AISLAMIENTO_07 = ?");
			params.add(perfiles.getRiesgoAislamiento07());
		}
		if (perfiles != null && perfiles.getPisoTutelado07() != null) {
			where.append(" AND t1.PISO_TUTELADO_07 = ?");
			params.add(perfiles.getPisoTutelado07());
		}
		if (perfiles != null && perfiles.getfAlta07() != null) {
			where.append(" AND t1.F_ALTA_07 = ?");
			params.add(perfiles.getfAlta07());
		}
		if (perfiles != null && perfiles.getUsuAlta07() != null) {
			where.append(" AND t1.USU_ALTA_07 = ?");
			params.add(perfiles.getUsuAlta07());
		}

		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
	 * Perfiles entity
	 *
	 * @param perfiles   Perfiles 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.
	 */
	// CHECKSTYLE:OFF CyclomaticComplexity - Generación de código de UDA
	private Map<String, Object> getWhereLikeMap(Perfiles perfiles, Boolean startsWith) {

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

		if (perfiles != null && perfiles.getIdPerfil07() != null) {
			where.append(" AND t1.ID_PERFIL_07 = ?");
			params.add(perfiles.getIdPerfil07());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getIdPiso32() != null) {
			where.append(" AND t2.ID_PISO_32 = ?");
			params.add(perfiles.getPisosTutelados().getIdPiso32());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getDirecciones() != null
				&& perfiles.getPisosTutelados().getDirecciones().getIdDireccion06() != null) {
			where.append(" AND t2.ID_DIRECCION_32 = ?");
			params.add(perfiles.getPisosTutelados().getDirecciones().getIdDireccion06());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getAyuntamientos() != null
				&& perfiles.getPisosTutelados().getAyuntamientos().getIdAyuntamiento31() != null) {
			where.append(" AND t2.ID_AYUNTAMIENTO_32 = ?");
			params.add(perfiles.getPisosTutelados().getAyuntamientos().getIdAyuntamiento31());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getDenominacion32() != null) {
			where.append(" AND UPPER(t2.DENOMINACION_32) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(perfiles.getPisosTutelados().getDenominacion32().toUpperCase() + "%");
			} else {
				params.add("%" + perfiles.getPisosTutelados().getDenominacion32().toUpperCase() + "%");
			}
			where.append(" AND t2.DENOMINACION_32 IS NOT NULL");
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getUsuAlta32() != null) {
			where.append(" AND UPPER(t2.USU_ALTA_32) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(perfiles.getPisosTutelados().getUsuAlta32().toUpperCase() + "%");
			} else {
				params.add("%" + perfiles.getPisosTutelados().getUsuAlta32().toUpperCase() + "%");
			}
			where.append(" AND t2.USU_ALTA_32 IS NOT NULL");
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getUsuModif32() != null) {
			where.append(" AND UPPER(t2.USU_MODIF_32) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(perfiles.getPisosTutelados().getUsuModif32().toUpperCase() + "%");
			} else {
				params.add("%" + perfiles.getPisosTutelados().getUsuModif32().toUpperCase() + "%");
			}
			where.append(" AND t2.USU_MODIF_32 IS NOT NULL");
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getfAlta32() != null) {
			where.append(" AND t2.F_ALTA_32 = ?");
			params.add(perfiles.getPisosTutelados().getfAlta32());
		}
		if (perfiles != null && perfiles.getPisosTutelados() != null
				&& perfiles.getPisosTutelados().getfModif32() != null) {
			where.append(" AND t2.F_MODIF_32 = ?");
			params.add(perfiles.getPisosTutelados().getfModif32());
		}
		if (perfiles != null && perfiles.getMayor65Dep07() != null) {
			where.append(" AND t1.MAYOR_65_DEP_07 = ?");
			params.add(perfiles.getMayor65Dep07());
		}
		if (perfiles != null && perfiles.getMayor65RiesgoDep07() != null) {
			where.append(" AND t1.MAYOR_65_RIESGO_DEP_07 = ?");
			params.add(perfiles.getMayor65RiesgoDep07());
		}
		if (perfiles != null && perfiles.getMayor75Sola07() != null) {
			where.append(" AND t1.MAYOR_75_SOLA_07 = ?");
			params.add(perfiles.getMayor75Sola07());
		}
		if (perfiles != null && perfiles.getDisIntelectual07() != null) {
			where.append(" AND t1.DIS_INTELECTUAL_07 = ?");
			params.add(perfiles.getDisIntelectual07());
		}
		if (perfiles != null && perfiles.getDisFisica07() != null) {
			where.append(" AND t1.DIS_FISICA_07 = ?");
			params.add(perfiles.getDisFisica07());
		}
		if (perfiles != null && perfiles.getDisSensorial07() != null) {
			where.append(" AND t1.DIS_SENSORIAL_07 = ?");
			params.add(perfiles.getDisSensorial07());
		}
		if (perfiles != null && perfiles.getEnfMental07() != null) {
			where.append(" AND t1.ENF_MENTAL_07 = ?");
			params.add(perfiles.getEnfMental07());
		}
		if (perfiles != null && perfiles.getRiesgoAislamiento07() != null) {
			where.append(" AND t1.RIESGO_AISLAMIENTO_07 = ?");
			params.add(perfiles.getRiesgoAislamiento07());
		}
		if (perfiles != null && perfiles.getPisoTutelado07() != null) {
			where.append(" AND t1.PISO_TUTELADO_07 = ?");
			params.add(perfiles.getPisoTutelado07());
		}
		if (perfiles != null && perfiles.getfAlta07() != null) {
			where.append(" AND t1.F_ALTA_07 = ?");
			params.add(perfiles.getfAlta07());
		}
		if (perfiles != null && perfiles.getUsuAlta07() != null) {
			where.append(" AND UPPER(t1.USU_ALTA_07) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(perfiles.getUsuAlta07().toUpperCase() + "%");
			} else {
				params.add("%" + perfiles.getUsuAlta07().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_ALTA_07 IS NOT NULL");
		}

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

		return mapWhere;
	}

	/**
	 * Updates a single row in the Perfiles table.
	 *
	 * @param perfiles Perfiles
	 * @return Perfiles
	 */
	public Perfiles updatePerfil(Perfiles perfiles) {

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

		}

		String query = "UPDATE PERFILES SET ID_PISO_07=?, MAYOR_65_DEP_07=?, MAYOR_65_RIESGO_DEP_07=?, MAYOR_75_SOLA_07=?, DIS_INTELECTUAL_07=?, "
				+ "DIS_FISICA_07=?, DIS_SENSORIAL_07=?, ENF_MENTAL_07=?, RIESGO_AISLAMIENTO_07=?, PISO_TUTELADO_07=? WHERE ID_PERFIL_07=?";
		Object getPisosTuteladosIdPiso32Aux = null;
		if (perfiles.getPisosTutelados() != null && perfiles.getPisosTutelados().getIdPiso32() != null) {
			getPisosTuteladosIdPiso32Aux = perfiles.getPisosTutelados().getIdPiso32();
		}
		this.jdbcTemplate.update(query, getPisosTuteladosIdPiso32Aux,
				null != perfiles.getMayor65Dep07() ? perfiles.getMayor65Dep07() : 0, //
				null != perfiles.getMayor65RiesgoDep07() ? perfiles.getMayor65RiesgoDep07() : 0, //
				null != perfiles.getMayor75Sola07() ? perfiles.getMayor75Sola07() : 0, //
				null != perfiles.getDisIntelectual07() ? perfiles.getDisIntelectual07() : 0, //
				null != perfiles.getDisFisica07() ? perfiles.getDisFisica07() : 0, //
				null != perfiles.getDisSensorial07() ? perfiles.getDisSensorial07() : 0, //
				null != perfiles.getEnfMental07() ? perfiles.getEnfMental07() : 0, //
				null != perfiles.getRiesgoAislamiento07() ? perfiles.getRiesgoAislamiento07() : 0, //
				null != perfiles.getPisoTutelado07() ? perfiles.getPisoTutelado07() : 0, //
				perfiles.getIdPerfil07());

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

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

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

	@Override
	public Perfiles updateBloquePerfilesPisosTut(Perfiles perfiles) {
		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}

		String query = "UPDATE PERFILES SET ID_PISO_07=?, MAYOR_65_DEP_07=?, MAYOR_65_RIESGO_DEP_07=?, MAYOR_75_SOLA_07=?, DIS_INTELECTUAL_07=?, DIS_FISICA_07=?, DIS_SENSORIAL_07=?, ENF_MENTAL_07=?, RIESGO_AISLAMIENTO_07=?, PISO_TUTELADO_07=? WHERE ID_PERFIL_07=?";
		Object getPisosTuteladosIdPiso32Aux = null;
		if (perfiles.getPisosTutelados() != null && perfiles.getPisosTutelados().getIdPiso32() != null) {
			getPisosTuteladosIdPiso32Aux = perfiles.getPisosTutelados().getIdPiso32();
		}
		this.jdbcTemplate.update(query, getPisosTuteladosIdPiso32Aux,
				null != perfiles.getMayor65Dep07() ? perfiles.getMayor65Dep07() : 0, //
				null != perfiles.getMayor65RiesgoDep07() ? perfiles.getMayor65RiesgoDep07() : 0, //
				null != perfiles.getMayor75Sola07() ? perfiles.getMayor75Sola07() : 0, //
				null != perfiles.getDisIntelectual07() ? perfiles.getDisIntelectual07() : 0, //
				null != perfiles.getDisFisica07() ? perfiles.getDisFisica07() : 0, //
				null != perfiles.getDisSensorial07() ? perfiles.getDisSensorial07() : 0, //
				null != perfiles.getEnfMental07() ? perfiles.getEnfMental07() : 0, //
				null != perfiles.getRiesgoAislamiento07() ? perfiles.getRiesgoAislamiento07() : 0, //
				null != perfiles.getPisoTutelado07() ? perfiles.getPisoTutelado07() : 0, //
				perfiles.getIdPerfil07());

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

		}
		return perfiles;
	}

	public Perfiles updatePisoTutelado(Perfiles perfiles) {
		try {
			Ad74aDataBaseAudit.identificarUsuarioAuditor(jdbcTemplate);
		} catch (Exception e) {

		}
		String query = "UPDATE PERFILES SET ID_PISO_07=?, PISO_TUTELADO_07=? WHERE ID_PERFIL_07=?";
		Object getPisosTuteladosIdPiso32Aux = null;
		if (perfiles.getPisosTutelados() != null && perfiles.getPisosTutelados().getIdPiso32() != null) {
			getPisosTuteladosIdPiso32Aux = perfiles.getPisosTutelados().getIdPiso32();
		}
		this.jdbcTemplate.update(query, getPisosTuteladosIdPiso32Aux,
				null != perfiles.getPisoTutelado07() ? perfiles.getPisoTutelado07() : 0, perfiles.getIdPerfil07());

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

		}
		return perfiles;
	}
}
