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.beans.factory.annotation.Autowired;
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.InformeSocial;
import com.ejie.ad74a.model.Informes;
import com.ejie.ad74a.service.InformeSocialService;
import com.ejie.ad74a.util.UtilSQL;
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;

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

@Repository
@Transactional
public class InformeSocialDaoImpl implements InformeSocialDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDINFSOCIAL02", "FINFORME02", "SOLA02",
			"ESTASOLAMANANA02", "ESTASOLATARDE02", "ESTASOLANOCHE02", "RELACIONENTORNO02", "FAMILIARFALLECIDO02",
			"VINCULOFALLECIDO02", "VISITASFAMILIA02", "VISITASAMIGOS02", "FRECUENCIASALIDAS02", "PERIODOSINVISITAS02",
			"TIEMPOSINVISITAS02", "OBSERVACIONES02", "OBSERVACIONESPS02", "APRECIACION02", "IDINFORME02",
			"TIPOIDENTIFICADOR02", "IDENTIFICADOR02", "NOMBRE02", "APELLIDO102", "APELLIDO202", "FALTA02" };

	private JdbcTemplate jdbcTemplate;

	public static final String SEQUENCE_INFORME_SOCIAL = "SEQ_INFORME_SOCIAL";

	@Autowired
	InformeSocialService informeSocialService;

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<InformeSocial> rwMap = new RowMapper<InformeSocial>() {
		public InformeSocial mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			InformeSocial informeSocial = new InformeSocial();
			informeSocial.setIdInfSocial02(UtilSQL.getLong(resultSet, "IDINFSOCIAL02"));
			informeSocial.setfInforme02(resultSet.getDate("FINFORME02"));
			informeSocial.setNombre02(resultSet.getString("NOMBRE02"));
			informeSocial.setApellido102(resultSet.getString("APELLIDO102"));
			informeSocial.setApellido202(resultSet.getString("APELLIDO202"));
			informeSocial.setSola02(UtilSQL.getInt(resultSet, "SOLA02"));
			informeSocial.setEstaSolaManana02(UtilSQL.getInt(resultSet, "ESTASOLAMANANA02"));
			informeSocial.setEstaSolaTarde02(UtilSQL.getInt(resultSet, "ESTASOLATARDE02"));
			informeSocial.setEstaSolaNoche02(UtilSQL.getInt(resultSet, "ESTASOLANOCHE02"));
			informeSocial.setRelacionEntorno02(UtilSQL.getInt(resultSet, "RELACIONENTORNO02"));
			informeSocial.setFamiliarFallecido02(UtilSQL.getInt(resultSet, "FAMILIARFALLECIDO02"));
			informeSocial.setVinculoFallecido02(resultSet.getString("VINCULOFALLECIDO02"));
			informeSocial.setVisitasFamilia02(UtilSQL.getInt(resultSet, "VISITASFAMILIA02"));
			informeSocial.setVisitasAmigos02(UtilSQL.getInt(resultSet, "VISITASAMIGOS02"));
			informeSocial.setFrecuenciaSalidas02(UtilSQL.getInt(resultSet, "FRECUENCIASALIDAS02"));
			informeSocial.setPeriodoSinVisitas02(UtilSQL.getInt(resultSet, "PERIODOSINVISITAS02"));
			informeSocial.setTiempoSinVisitas02(UtilSQL.getInt(resultSet, "TIEMPOSINVISITAS02"));
			informeSocial.setObservaciones02(resultSet.getString("OBSERVACIONES02"));
			informeSocial.setObservacionesPs02(resultSet.getString("OBSERVACIONESPS02"));
			informeSocial.setApreciacion02(UtilSQL.getInt(resultSet, "APRECIACION02"));
			informeSocial.setIdInforme02(UtilSQL.getLong(resultSet, "IDINFORME02"));
			informeSocial.setfAlta02(resultSet.getDate("FALTA02"));
			informeSocial.setUsuAlta02(resultSet.getString("USUALTA02"));

			return informeSocial;
		}
	};

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

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

			InformeSocial informesocial = new InformeSocial(UtilSQL.getLong(resultSet, "IDINFSOCIAL02"),
					resultSet.getDate("FINFORME02"), UtilSQL.getInt(resultSet, "SOLA02"),
					UtilSQL.getInt(resultSet, "ESTASOLAMANANA02"), UtilSQL.getInt(resultSet, "ESTASOLATARDE02"),
					UtilSQL.getInt(resultSet, "ESTASOLANOCHE02"), UtilSQL.getInt(resultSet, "RELACIONENTORNO02"),
					UtilSQL.getInt(resultSet, "FAMILIARFALLECIDO02"), resultSet.getString("VINCULOFALLECIDO02"),
					UtilSQL.getInt(resultSet, "VISITASFAMILIA02"), UtilSQL.getInt(resultSet, "VISITASAMIGOS02"),
					UtilSQL.getInt(resultSet, "FRECUENCIASALIDAS02"), UtilSQL.getInt(resultSet, "PERIODOSINVISITAS02"),
					UtilSQL.getInt(resultSet, "TIEMPOSINVISITAS02"), resultSet.getString("OBSERVACIONES02"),
					resultSet.getString("OBSERVACIONESPS02"), UtilSQL.getInt(resultSet, "APRECIACION02"),
					UtilSQL.getLong(resultSet, "IDINFORME02"), resultSet.getString("ISTIPOIDENTIFICADOR02"),
					resultSet.getString("ISIDENTIFICADOR02"), resultSet.getString("ISNOMBRE02"),
					resultSet.getString("ISAPELLIDO102"), resultSet.getString("ISAPELLIDO202"),
					resultSet.getDate("FALTA02"), resultSet.getString("USUALTA02"));

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

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		String query = "INSERT INTO INFORME_SOCIAL (ID_INF_SOCIAL_02, F_INFORME_02, SOLA_02, ESTA_SOLA_MANANA_02, ESTA_SOLA_TARDE_02, ESTA_SOLA_NOCHE_02, RELACION_ENTORNO_02, FAMILIAR_FALLECIDO_02, VINCULO_FALLECIDO_02, VISITAS_FAMILIA_02, VISITAS_AMIGOS_02, FRECUENCIA_SALIDAS_02, PERIODO_SIN_VISITAS_02, TIEMPO_SIN_VISITAS_02, OBSERVACIONES_02, OBSERVACIONES_PS_02, APRECIACION_02, ID_INFORME_02, TIPO_IDENTIFICADOR_02, IDENTIFICADOR_02, NOMBRE_02, APELLIDO1_02, APELLIDO2_02, F_ALTA_02, USU_ALTA_02) "
				+ "VALUES (" + SEQUENCE_INFORME_SOCIAL
				+ ".NEXTVAL,:fInforme,:sola,:estaSolaManyana,:estaSolaTarde,:estaSolaNoche,:relacionEntorno,:familiarFallecido,:vinculo,:visFamilia,:visAmigos,:frecuencia,"
				+ ":periodoSinVis,:tiempoSinVis,:obser,:obserPs,:apreciacion,:idInforme, :tipoIden, :identificador, :nombre, :ape1, :ape2, sysdate, :usuAlta)";

		MapSqlParameterSource parameters = new MapSqlParameterSource()
				.addValue("fInforme", informesocial.getfInforme02()).addValue("sola", informesocial.getSola02())
				.addValue("estaSolaManyana", informesocial.getEstaSolaManana02())
				.addValue("estaSolaTarde", informesocial.getEstaSolaTarde02())
				.addValue("estaSolaNoche", informesocial.getEstaSolaNoche02())
				.addValue("relacionEntorno", informesocial.getRelacionEntorno02())
				.addValue("familiarFallecido", informesocial.getFamiliarFallecido02())
				.addValue("vinculo", informesocial.getVinculoFallecido02())
				.addValue("visFamilia", informesocial.getVisitasFamilia02())
				.addValue("visAmigos", informesocial.getVisitasAmigos02())
				.addValue("frecuencia", informesocial.getFrecuenciaSalidas02())
				.addValue("periodoSinVis", informesocial.getPeriodoSinVisitas02())
				.addValue("tiempoSinVis", informesocial.getTiempoSinVisitas02())
				.addValue("obser", informesocial.getObservaciones02())
				.addValue("obserPs", informesocial.getObservacionesPs02())
				.addValue("apreciacion", informesocial.getApreciacion02())
				.addValue("idInforme", informesocial.getIdInforme02())
				.addValue("tipoIden", informesocial.getTipoIdentificador02())
				.addValue("identificador", informesocial.getIdentificador02())
				.addValue("nombre", informesocial.getNombre02()).addValue("ape1", informesocial.getApellido102())
				.addValue("ape2", informesocial.getApellido202()).addValue("usuAlta", informesocial.getUsuAlta02());

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

		informesocial.setIdInfSocial02(generatedKeyHolder.getKey().longValue());
		return informesocial;
	}

	public Informes addInformeInformeSocial(Informes informes) {

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		String query = "INSERT INTO INFORME_SOCIAL (ID_INF_SOCIAL_02, F_INFORME_02, SOLA_02, ESTA_SOLA_MANANA_02, ESTA_SOLA_TARDE_02, ESTA_SOLA_NOCHE_02, RELACION_ENTORNO_02, FAMILIAR_FALLECIDO_02, VINCULO_FALLECIDO_02, VISITAS_FAMILIA_02, VISITAS_AMIGOS_02, FRECUENCIA_SALIDAS_02, PERIODO_SIN_VISITAS_02, TIEMPO_SIN_VISITAS_02, OBSERVACIONES_02, OBSERVACIONES_PS_02, APRECIACION_02, ID_INFORME_02, TIPO_IDENTIFICADOR_02, IDENTIFICADOR_02, NOMBRE_02, APELLIDO1_02, APELLIDO2_02, F_ALTA_02, USU_ALTA_02) "
				+ "VALUES (" + SEQUENCE_INFORME_SOCIAL
				+ ".NEXTVAL,:fInforme,:sola,:estaSolaManyana,:estaSolaTarde,:estaSolaNoche,:relacionEntorno,:familiarFallecido,"
				+ ":vinculo,:visFamilia,:visAmigos,:frecuencia,"
				+ ":periodoSinVis,:tiempoSinVis,:obser,:obserPs,:apreciacion,:idInforme, :tipoIden,UPPER(:identificador), :nombre, :ape1, :ape2, sysdate, :usualta)";

		MapSqlParameterSource parameters = new MapSqlParameterSource()
				.addValue("fInforme", informes.getInformeSocial().getfInforme02())
				.addValue("sola", informes.getInformeSocial().getSola02())
				.addValue("estaSolaManyana", informes.getInformeSocial().getEstaSolaManana02())
				.addValue("estaSolaTarde", informes.getInformeSocial().getEstaSolaTarde02())
				.addValue("estaSolaNoche", informes.getInformeSocial().getEstaSolaNoche02())
				.addValue("relacionEntorno", informes.getInformeSocial().getRelacionEntorno02())
				.addValue("familiarFallecido", informes.getInformeSocial().getFamiliarFallecido02())
				.addValue("vinculo", informes.getInformeSocial().getVinculoFallecido02())
				.addValue("visFamilia", informes.getInformeSocial().getVisitasFamilia02())
				.addValue("visAmigos", informes.getInformeSocial().getVisitasAmigos02())
				.addValue("frecuencia", informes.getInformeSocial().getFrecuenciaSalidas02())
				.addValue("periodoSinVis", informes.getInformeSocial().getPeriodoSinVisitas02())
				.addValue("tiempoSinVis", informes.getInformeSocial().getTiempoSinVisitas02())
				.addValue("obser", informes.getInformeSocial().getObservaciones02())
				.addValue("obserPs", informes.getInformeSocial().getObservacionesPs02())
				.addValue("apreciacion", informes.getInformeSocial().getApreciacion02())
				.addValue("idInforme", informes.getIdInforme16())
				.addValue("tipoIden", informes.getInformeSocial().getTipoIdentificador02())
				.addValue("identificador", informes.getInformeSocial().getIdentificador02())
				.addValue("nombre", informes.getInformeSocial().getNombre02())
				.addValue("ape1", informes.getInformeSocial().getApellido102())
				.addValue("ape2", informes.getInformeSocial().getApellido202())
				.addValue("usualta", informes.getInformeSocial().getUsuAlta02());

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

		informes.getInformeSocial().setIdInfSocial02(generatedKeyHolder.getKey().longValue());
		// this.informeSocialService.addInformeInformeSocial(informes);
		return informes;
	}

	/**
	 * Updates a single row in the InformeSocial table.
	 *
	 * @param informesocial InformeSocial
	 * @return InformeSocial
	 */
	public InformeSocial update(InformeSocial informesocial) {
		String query = "UPDATE INFORME_SOCIAL SET SOLA_02=?, ESTA_SOLA_MANANA_02=?, ESTA_SOLA_TARDE_02=?, ESTA_SOLA_NOCHE_02=?, RELACION_ENTORNO_02=?, FAMILIAR_FALLECIDO_02=?, VINCULO_FALLECIDO_02=?, "
				+ "VISITAS_FAMILIA_02=?, VISITAS_AMIGOS_02=?, FRECUENCIA_SALIDAS_02=?, PERIODO_SIN_VISITAS_02=?, TIEMPO_SIN_VISITAS_02=?, "
				+ "OBSERVACIONES_02=?, OBSERVACIONES_PS_02=?, APRECIACION_02=?, TIPO_IDENTIFICADOR_02 = ?, IDENTIFICADOR_02 = UPPER(?), NOMBRE_02 = ?, "
				+ "APELLIDO1_02 = ?, APELLIDO2_02 = ?, F_INFORME_02 =? WHERE ID_INF_SOCIAL_02=?";
		this.jdbcTemplate.update(query, informesocial.getSola02(), informesocial.getEstaSolaManana02(),
				informesocial.getEstaSolaTarde02(), informesocial.getEstaSolaNoche02(),
				informesocial.getRelacionEntorno02(), informesocial.getFamiliarFallecido02(),
				informesocial.getVinculoFallecido02(), informesocial.getVisitasFamilia02(),
				informesocial.getVisitasAmigos02(), informesocial.getFrecuenciaSalidas02(),
				informesocial.getPeriodoSinVisitas02(), informesocial.getTiempoSinVisitas02(),
				informesocial.getObservaciones02(), informesocial.getObservacionesPs02(),
				informesocial.getApreciacion02(), informesocial.getTipoIdentificador02(),
				informesocial.getIdentificador02(), informesocial.getNombre02(), informesocial.getApellido102(),
				informesocial.getApellido202(), informesocial.getfInforme02(), informesocial.getIdInfSocial02());
		return informesocial;
	}

	/**
	 * Updates a single row in the InformeSocial table.
	 *
	 * @param informesocial InformeSocial
	 * @return InformeSocial
	 */
	public InformeSocial updateInformeSocial(InformeSocial informesocial) {
		String query = "UPDATE INFORME_SOCIAL SET SOLA_02=?, ESTA_SOLA_MANANA_02=?, ESTA_SOLA_TARDE_02=?, ESTA_SOLA_NOCHE_02=?, "
				+ "RELACION_ENTORNO_02=?, FAMILIAR_FALLECIDO_02=?, VINCULO_FALLECIDO_02=?, VISITAS_FAMILIA_02=?, VISITAS_AMIGOS_02=?, FRECUENCIA_SALIDAS_02=?, PERIODO_SIN_VISITAS_02=?, "
				+ "TIEMPO_SIN_VISITAS_02=?, OBSERVACIONES_02=?, OBSERVACIONES_PS_02=?, APRECIACION_02=?"
				+ ", TIPO_IDENTIFICADOR_02 = UPPER(?), IDENTIFICADOR_02 = ?, NOMBRE_02 = ?, APELLIDO1_02 = ?, APELLIDO2_02 = ?"
				+ "WHERE ID_INF_SOCIAL_02=?";
		this.jdbcTemplate.update(query, informesocial.getSola02(), informesocial.getEstaSolaManana02(),
				informesocial.getEstaSolaTarde02(), informesocial.getEstaSolaNoche02(),
				informesocial.getRelacionEntorno02(), informesocial.getFamiliarFallecido02(),
				informesocial.getVinculoFallecido02(), informesocial.getVisitasFamilia02(),
				informesocial.getVisitasAmigos02(), informesocial.getFrecuenciaSalidas02(),
				informesocial.getPeriodoSinVisitas02(), informesocial.getTiempoSinVisitas02(),
				informesocial.getObservaciones02(), informesocial.getObservacionesPs02(),
				informesocial.getApreciacion02(), informesocial.getTipoIdentificador02(),
				informesocial.getIdentificador02(), informesocial.getNombre02(), informesocial.getApellido102(),
				informesocial.getApellido202(), informesocial.getIdInfSocial02());
		return informesocial;
	}

	/**
	 * Finds a single row in the InformeSocial table.
	 *
	 * @param informesocial InformeSocial
	 * @return InformeSocial
	 */
	@Transactional(readOnly = true)
	public InformeSocial find(InformeSocial informesocial) {
		String query = "SELECT t1.ID_INF_SOCIAL_02 IDINFSOCIAL02, t1.F_INFORME_02 FINFORME02, t1.SOLA_02 SOLA02, t1.ESTA_SOLA_MANANA_02 ESTASOLAMANANA02, t1.ESTA_SOLA_TARDE_02 ESTASOLATARDE02, t1.ESTA_SOLA_NOCHE_02 ESTASOLANOCHE02, t1.RELACION_ENTORNO_02 RELACIONENTORNO02, t1.FAMILIAR_FALLECIDO_02 FAMILIARFALLECIDO02, t1.VINCULO_FALLECIDO_02 VINCULOFALLECIDO02, t1.VISITAS_FAMILIA_02 VISITASFAMILIA02, t1.VISITAS_AMIGOS_02 VISITASAMIGOS02, t1.FRECUENCIA_SALIDAS_02 FRECUENCIASALIDAS02, t1.PERIODO_SIN_VISITAS_02 PERIODOSINVISITAS02, t1.TIEMPO_SIN_VISITAS_02 TIEMPOSINVISITAS02, t1.OBSERVACIONES_02 OBSERVACIONES02, t1.OBSERVACIONES_PS_02 OBSERVACIONESPS02, t1.APRECIACION_02 APRECIACION02, t1.ID_INFORME_02 IDINFORME02, t1.TIPO_IDENTIFICADOR_02 TIPOIDENTIFICADOR02, t1.IDENTIFICADOR_02 IDENTIFICADOR02, t1.NOMBRE_02 NOMBRE02, t1.APELLIDO1_02 APELLIDO102, t1.APELLIDO2_02 APELLIDO202, t1.F_ALTA_02 FALTA02, t1.USU_ALTA_02 USUALTA02 FROM INFORME_SOCIAL t1  WHERE t1.ID_INF_SOCIAL_02 = ?  ";

		List<InformeSocial> informesocialList = this.jdbcTemplate.query(query, this.rwMap,
				informesocial.getIdInfSocial02());
		return (InformeSocial) DataAccessUtils.uniqueResult(informesocialList);
	}

	/**
	 * Removes a single row in the InformeSocial table.
	 *
	 * @param informesocial InformeSocial
	 * @return
	 */
	public void remove(InformeSocial informesocial) {
		String query = "DELETE FROM INFORME_SOCIAL WHERE ID_INF_SOCIAL_02=?";
		this.jdbcTemplate.update(query, informesocial.getIdInfSocial02());
	}

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

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_INF_SOCIAL_02 IDINFSOCIAL02, t1.F_INFORME_02 FINFORME02, t1.SOLA_02 SOLA02, t1.ESTA_SOLA_MANANA_02 ESTASOLAMANANA02, t1.ESTA_SOLA_TARDE_02 ESTASOLATARDE02, t1.ESTA_SOLA_NOCHE_02 ESTASOLANOCHE02, t1.RELACION_ENTORNO_02 RELACIONENTORNO02, t1.FAMILIAR_FALLECIDO_02 FAMILIARFALLECIDO02, t1.VINCULO_FALLECIDO_02 VINCULOFALLECIDO02, t1.VISITAS_FAMILIA_02 VISITASFAMILIA02, t1.VISITAS_AMIGOS_02 VISITASAMIGOS02, t1.FRECUENCIA_SALIDAS_02 FRECUENCIASALIDAS02, t1.PERIODO_SIN_VISITAS_02 PERIODOSINVISITAS02, t1.TIEMPO_SIN_VISITAS_02 TIEMPOSINVISITAS02, t1.OBSERVACIONES_02 OBSERVACIONES02, t1.OBSERVACIONES_PS_02 OBSERVACIONESPS02, t1.APRECIACION_02 APRECIACION02, t1.ID_INFORME_02 IDINFORME02, t1.TIPO_IDENTIFICADOR_02 TIPOIDENTIFICADOR02, t1.IDENTIFICADOR_02 IDENTIFICADOR02, t1.NOMBRE_02 NOMBRE02, t1.APELLIDO1_02 APELLIDO102, t1.APELLIDO2_02 APELLIDO202, t1.F_ALTA_02 FALTA02, t1.USU_ALTA_02 USUALTA02");
		query.append(" FROM INFORME_SOCIAL t1  ");
		// Where clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterInformeSocial, 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, InformeSocial.class, params,
				"ID_INF_SOCIAL_02");
		where.append(sbMultipleSQL);

		return this.jdbcTemplate.query(where.toString(), this.rwMap, params.toArray());
	}

	/**
	 * Finds a list of rows in the InformeSocial table.
	 *
	 * @param informesocial   InformeSocial
	 * @param tableRequestDto TableRequestDto
	 * @return List<InformeSocial>
	 */
	@Transactional(readOnly = true)
	public List<InformeSocial> findAll(InformeSocial informesocial, TableRequestDto tableRequestDto) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_INF_SOCIAL_02 IDINFSOCIAL02,t1.F_INFORME_02 FINFORME02, t1.SOLA_02 SOLA02,t1.ESTA_SOLA_MANANA_02 ESTASOLAMANANA02,t1.ESTA_SOLA_TARDE_02 ESTASOLATARDE02,t1.ESTA_SOLA_NOCHE_02 ESTASOLANOCHE02,t1.RELACION_ENTORNO_02 RELACIONENTORNO02,t1.FAMILIAR_FALLECIDO_02 FAMILIARFALLECIDO02,t1.VINCULO_FALLECIDO_02 VINCULOFALLECIDO02,t1.VISITAS_FAMILIA_02 VISITASFAMILIA02,t1.VISITAS_AMIGOS_02 VISITASAMIGOS02,t1.FRECUENCIA_SALIDAS_02 FRECUENCIASALIDAS02,t1.PERIODO_SIN_VISITAS_02 PERIODOSINVISITAS02,t1.TIEMPO_SIN_VISITAS_02 TIEMPOSINVISITAS02,t1.OBSERVACIONES_02 OBSERVACIONES02,t1.OBSERVACIONES_PS_02 OBSERVACIONESPS02,t1.APRECIACION_02 APRECIACION02,t1.ID_INFORME_02 IDINFORME02, t1.TIPO_IDENTIFICADOR_02 TIPOIDENTIFICADOR02, t1.IDENTIFICADOR_02 IDENTIFICADOR02, t1.NOMBRE_02 NOMBRE02, t1.APELLIDO1_02 APELLIDO102, t1.APELLIDO2_02 APELLIDO202,t1.F_ALTA_02 FALTA02, t1.USU_ALTA_02 USUALTA02 ");
		query.append("FROM INFORME_SOCIAL t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(informesocial);
		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, InformeSocialDaoImpl.ORDER_BY_WHITE_LIST);
		}

		return (List<InformeSocial>) this.jdbcTemplate.query(query.toString(), this.rwMap, params.toArray());
	}

	/**
	 * Finds rows in the InformeSocial table using like.
	 *
	 * @param informesocial   InformeSocial
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<InformeSocial>
	 */
	@Transactional(readOnly = true)
	public List<InformeSocial> findAllLike(InformeSocial informesocial, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_INF_SOCIAL_02 IDINFSOCIAL02,t1.F_INFORME_02 FINFORME02,t1.SOLA_02 SOLA02,t1.ESTA_SOLA_MANANA_02 ESTASOLAMANANA02,t1.ESTA_SOLA_TARDE_02 ESTASOLATARDE02,t1.ESTA_SOLA_NOCHE_02 ESTASOLANOCHE02,t1.RELACION_ENTORNO_02 RELACIONENTORNO02,t1.FAMILIAR_FALLECIDO_02 FAMILIARFALLECIDO02,t1.VINCULO_FALLECIDO_02 VINCULOFALLECIDO02,t1.VISITAS_FAMILIA_02 VISITASFAMILIA02,t1.VISITAS_AMIGOS_02 VISITASAMIGOS02,t1.FRECUENCIA_SALIDAS_02 FRECUENCIASALIDAS02,t1.PERIODO_SIN_VISITAS_02 PERIODOSINVISITAS02,t1.TIEMPO_SIN_VISITAS_02 TIEMPOSINVISITAS02,t1.OBSERVACIONES_02 OBSERVACIONES02,t1.OBSERVACIONES_PS_02 OBSERVACIONESPS02,t1.APRECIACION_02 APRECIACION02,t1.ID_INFORME_02 IDINFORME02, t1.TIPO_IDENTIFICADOR_02 TIPOIDENTIFICADOR02, t1.IDENTIFICADOR_02 IDENTIFICADOR02, t1.NOMBRE_02 NOMBRE02, t1.APELLIDO1_02 APELLIDO102, t1.APELLIDO2_02 APELLIDO202, t1.F_ALTA_02 FALTA02, t1.USU_ALTA_02 USUALTA02 ");
		query.append("FROM INFORME_SOCIAL t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(informesocial, 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, InformeSocialDaoImpl.ORDER_BY_WHITE_LIST);
		}

		return (List<InformeSocial>) this.jdbcTemplate.query(query.toString(), this.rwMap, params.toArray());
	}

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the InformeSocial table.
	 *
	 * @param informesocial InformeSocial
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(InformeSocial informesocial) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM INFORME_SOCIAL t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(informesocial);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

	@Transactional(readOnly = true)
	public Long maxIdInforme16() {
		StringBuilder query = new StringBuilder("select max(ID_INFORME_16)+1 FROM AD74A16T00");

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

	/**
	 * Counts rows in the InformeSocial table using like.
	 *
	 * @param informesocial InformeSocial
	 * @param startsWith    Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(InformeSocial informesocial, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM INFORME_SOCIAL t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(informesocial, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		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 InformeSocial selected for rup_table
	 *
	 * @param informesocial   InformeSocial
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<InformeSocial>>
	 */
	@Override
	public List<TableRowDto<InformeSocial>> reorderSelection(InformeSocial informesocial,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_INF_SOCIAL_02 IDINFSOCIAL02,t1.F_INFORME_02 FINFORME02,t1.SOLA_02 SOLA02,t1.ESTA_SOLA_MANANA_02 ESTASOLAMANANA02,t1.ESTA_SOLA_TARDE_02 ESTASOLATARDE02,t1.ESTA_SOLA_NOCHE_02 ESTASOLANOCHE02,t1.RELACION_ENTORNO_02 RELACIONENTORNO02,t1.FAMILIAR_FALLECIDO_02 FAMILIARFALLECIDO02,t1.VINCULO_FALLECIDO_02 VINCULOFALLECIDO02,t1.VISITAS_FAMILIA_02 VISITASFAMILIA02,t1.VISITAS_AMIGOS_02 VISITASAMIGOS02,t1.FRECUENCIA_SALIDAS_02 FRECUENCIASALIDAS02,t1.PERIODO_SIN_VISITAS_02 PERIODOSINVISITAS02,t1.TIEMPO_SIN_VISITAS_02 TIEMPOSINVISITAS02,t1.OBSERVACIONES_02 OBSERVACIONES02,t1.OBSERVACIONES_PS_02 OBSERVACIONESPS02,t1.APRECIACION_02 APRECIACION02,t1.ID_INFORME_02 IDINFORME02, t1.TIPO_IDENTIFICADOR_02 TIPOIDENTIFICADOR02, t1.IDENTIFICADOR_02 IDENTIFICADOR02, t1.NOMBRE_02 NOMBRE02, t1.APELLIDO1_02 APELLIDO102, t1.APELLIDO2_02 APELLIDO202,t1.F_ALTA_02 FALTA02 ");
		// FROM
		query.append("FROM INFORME_SOCIAL t1 ");
		// FILTRADO
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(informesocial, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		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, InformeSocial.class,
				filterParamList, "IDINFSOCIAL02");

		return this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<InformeSocial>(this.rwMapPK, tableRequestDto), filterParamList.toArray());
	}

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams    InformeSocial
	 * @param searchParams    InformeSocial
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<InformeSocial>>
	 */
	@Override
	public List<TableRowDto<InformeSocial>> search(InformeSocial filterParams, InformeSocial searchParams,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_INF_SOCIAL_02 IDINFSOCIAL02,t1.F_INFORME_02 FINFORME02,t1.SOLA_02 SOLA02,t1.ESTA_SOLA_MANANA_02 ESTASOLAMANANA02,t1.ESTA_SOLA_TARDE_02 ESTASOLATARDE02,t1.ESTA_SOLA_NOCHE_02 ESTASOLANOCHE02,t1.RELACION_ENTORNO_02 RELACIONENTORNO02,t1.FAMILIAR_FALLECIDO_02 FAMILIARFALLECIDO02,t1.VINCULO_FALLECIDO_02 VINCULOFALLECIDO02,t1.VISITAS_FAMILIA_02 VISITASFAMILIA02,t1.VISITAS_AMIGOS_02 VISITASAMIGOS02,t1.FRECUENCIA_SALIDAS_02 FRECUENCIASALIDAS02,t1.PERIODO_SIN_VISITAS_02 PERIODOSINVISITAS02,t1.TIEMPO_SIN_VISITAS_02 TIEMPOSINVISITAS02,t1.OBSERVACIONES_02 OBSERVACIONES02,t1.OBSERVACIONES_PS_02 OBSERVACIONESPS02,t1.APRECIACION_02 APRECIACION02,t1.ID_INFORME_02 IDINFORME02, t1.TIPO_IDENTIFICADOR_02 TIPOIDENTIFICADOR02, t1.IDENTIFICADOR_02 IDENTIFICADOR02, t1.NOMBRE_02 NOMBRE02, t1.APELLIDO1_02 APELLIDO102, t1.APELLIDO2_02 APELLIDO202, t1.F_ALTA_02 FALTA02 ");
		// FROM
		query.append("FROM INFORME_SOCIAL t1 ");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");

		// FILTRADO
		Map<String, ?> mapaWhereFilter = this.getWhereLikeMap(filterParams, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		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, InformeSocial.class,
				filterParamList, searchSQL, searchParamList, from_alias, "IDINFSOCIAL02");

		return this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<InformeSocial>(this.rwMapPK, tableRequestDto), filterParamList.toArray());
	}

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

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

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

	/**
	 * Filter in the hierarchical InformeSocial table.
	 *
	 * @param filterInformeSocial InformeSocial
	 * @param tableRequestDto     TableRequestDto
	 * @return List<JerarquiaDto<InformeSocial>>
	 */
	@Override
	public List<JerarquiaDto<InformeSocial>> findAllLikeJerarquia(InformeSocial filterInformeSocial,
			TableRequestDto tableRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_INF_SOCIAL_02 IDINFSOCIAL02,t1.F_INFORME_02 FINFORME02,t1.SOLA_02 SOLA02,t1.ESTA_SOLA_MANANA_02 ESTASOLAMANANA02,t1.ESTA_SOLA_TARDE_02 ESTASOLATARDE02,t1.ESTA_SOLA_NOCHE_02 ESTASOLANOCHE02,t1.RELACION_ENTORNO_02 RELACIONENTORNO02,t1.FAMILIAR_FALLECIDO_02 FAMILIARFALLECIDO02,t1.VINCULO_FALLECIDO_02 VINCULOFALLECIDO02,t1.VISITAS_FAMILIA_02 VISITASFAMILIA02,t1.VISITAS_AMIGOS_02 VISITASAMIGOS02,t1.FRECUENCIA_SALIDAS_02 FRECUENCIASALIDAS02,t1.PERIODO_SIN_VISITAS_02 PERIODOSINVISITAS02,t1.TIEMPO_SIN_VISITAS_02 TIEMPOSINVISITAS02,t1.OBSERVACIONES_02 OBSERVACIONES02,t1.OBSERVACIONES_PS_02 OBSERVACIONESPS02,t1.APRECIACION_02 APRECIACION02,t1.ID_INFORME_02 IDINFORME02, t1.TIPO_IDENTIFICADOR_02 TIPOIDENTIFICADOR02, t1.IDENTIFICADOR_02 IDENTIFICADOR02, t1.NOMBRE_02 NOMBRE02, t1.APELLIDO1_02 APELLIDO102, t1.APELLIDO2_02 APELLIDO202,t1.F_ALTA_02 FALTA02, t1.USU_ALTA_02 USUALTA02 ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM INFORME_SOCIAL t1 ");
		List<String> from = new ArrayList<String>();
		from.add("INFORME_SOCIAL");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");

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

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

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

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

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

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

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

		// FROM
		// StringBuilder from = new StringBuilder("FROM INFORME_SOCIAL t1 ");
		List<String> from = new ArrayList<String>();
		from.add("INFORME_SOCIAL");

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

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

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

	/*
	 * MÉTODOS PRIVADOS
	 */

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

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

		if (informesocial != null && informesocial.getIdInfSocial02() != null) {
			where.append(" AND t1.ID_INF_SOCIAL_02 = ?");
			params.add(informesocial.getIdInfSocial02());
		}
		if (informesocial != null && informesocial.getfInforme02() != null) {
			where.append(" AND t1.F_INFORME_02 = ?");
			params.add(informesocial.getfInforme02());
		}
		if (informesocial != null && informesocial.getUsuario() != null
				&& informesocial.getUsuario().getAyuntamiento() != null) {
			where.append(" AND t1.ID_ AYUNTAMIENTO_02 = ?");
			params.add(informesocial.getUsuario().getAyuntamiento());
		}
		if (informesocial != null && informesocial.getSola02() != null) {
			where.append(" AND t1.SOLA_02 = ?");
			params.add(informesocial.getSola02());
		}
		if (informesocial != null && informesocial.getEstaSolaManana02() != null) {
			where.append(" AND t1.ESTA_SOLA_MANANA_02 = ?");
			params.add(informesocial.getEstaSolaManana02());
		}
		if (informesocial != null && informesocial.getEstaSolaTarde02() != null) {
			where.append(" AND t1.ESTA_SOLA_TARDE_02 = ?");
			params.add(informesocial.getEstaSolaTarde02());
		}
		if (informesocial != null && informesocial.getEstaSolaNoche02() != null) {
			where.append(" AND t1.ESTA_SOLA_NOCHE_02 = ?");
			params.add(informesocial.getEstaSolaNoche02());
		}
		if (informesocial != null && informesocial.getRelacionEntorno02() != null) {
			where.append(" AND t1.RELACION_ENTORNO_02 = ?");
			params.add(informesocial.getRelacionEntorno02());
		}
		if (informesocial != null && informesocial.getFamiliarFallecido02() != null) {
			where.append(" AND t1.FAMILIAR_FALLECIDO_02 = ?");
			params.add(informesocial.getFamiliarFallecido02());
		}
		if (informesocial != null && informesocial.getVinculoFallecido02() != null) {
			where.append(" AND t1.VINCULO_FALLECIDO_02 = ?");
			params.add(informesocial.getVinculoFallecido02());
		}
		if (informesocial != null && informesocial.getVisitasFamilia02() != null) {
			where.append(" AND t1.VISITAS_FAMILIA_02 = ?");
			params.add(informesocial.getVisitasFamilia02());
		}
		if (informesocial != null && informesocial.getVisitasAmigos02() != null) {
			where.append(" AND t1.VISITAS_AMIGOS_02 = ?");
			params.add(informesocial.getVisitasAmigos02());
		}
		if (informesocial != null && informesocial.getFrecuenciaSalidas02() != null) {
			where.append(" AND t1.FRECUENCIA_SALIDAS_02 = ?");
			params.add(informesocial.getFrecuenciaSalidas02());
		}
		if (informesocial != null && informesocial.getPeriodoSinVisitas02() != null) {
			where.append(" AND t1.PERIODO_SIN_VISITAS_02 = ?");
			params.add(informesocial.getPeriodoSinVisitas02());
		}
		if (informesocial != null && informesocial.getTiempoSinVisitas02() != null) {
			where.append(" AND t1.TIEMPO_SIN_VISITAS_02 = ?");
			params.add(informesocial.getTiempoSinVisitas02());
		}
		if (informesocial != null && informesocial.getObservaciones02() != null) {
			where.append(" AND t1.OBSERVACIONES_02 = ?");
			params.add(informesocial.getObservaciones02());
		}
		if (informesocial != null && informesocial.getObservacionesPs02() != null) {
			where.append(" AND t1.OBSERVACIONES_PS_02 = ?");
			params.add(informesocial.getObservacionesPs02());
		}
		if (informesocial != null && informesocial.getApreciacion02() != null) {
			where.append(" AND t1.APRECIACION_02 = ?");
			params.add(informesocial.getApreciacion02());
		}

		if (informesocial != null && informesocial.getIdInforme02() != null) {
			where.append(" AND t1.ID_INFORME_02 = ?");
			params.add(informesocial.getIdInforme02());
		}
		if (informesocial != null && informesocial.getTipoIdentificador02() != null) {
			where.append(" AND t1.TIPO_IDENTIFICADOR_02 = ?");
			params.add(informesocial.getTipoIdentificador02());
		}
		if (informesocial != null && informesocial.getIdentificador02() != null) {
			where.append(" AND UPPER(t1.IDENTIFICADOR_02) = UPPER(?)");
			params.add(informesocial.getIdentificador02());
		}
		if (informesocial != null && informesocial.getNombre02() != null) {
			where.append(" AND t1.NOMBRE_02 = ?");
			params.add(informesocial.getNombre02());
		}
		if (informesocial != null && informesocial.getApellido102() != null) {
			where.append(" AND t1.APELLIDO1_02 = ?");
			params.add(informesocial.getApellido102());
		}
		if (informesocial != null && informesocial.getApellido202() != null) {
			where.append(" AND t1.APELLIDO2_02 = ?");
			params.add(informesocial.getApellido202());
		}

		if (informesocial != null && informesocial.getfAlta02() != null) {
			where.append(" AND t1.F_ALTA_02 = ?");
			params.add(informesocial.getfAlta02());
		}

		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
	 * InformeSocial entity
	 *
	 * @param informesocial InformeSocial 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(InformeSocial informesocial, Boolean startsWith) {

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

		if (informesocial != null && informesocial.getIdInfSocial02() != null) {
			where.append(" AND t1.ID_INF_SOCIAL_02 = ?");
			params.add(informesocial.getIdInfSocial02());
		}
		if (informesocial != null && informesocial.getfInforme02() != null) {
			where.append(" AND t1.F_INFORME_02 = ?");
			params.add(informesocial.getfInforme02());
		}
		if (informesocial != null && informesocial.getUsuario() != null
				&& informesocial.getUsuario().getAyuntamiento() != null) {
			where.append(" AND t1.ID_ AYUNTAMIENTO_02 = ?");
			params.add(informesocial.getUsuario().getAyuntamiento());
		}
		if (informesocial != null && informesocial.getSola02() != null) {
			where.append(" AND t1.SOLA_02 = ?");
			params.add(informesocial.getSola02());
		}
		if (informesocial != null && informesocial.getEstaSolaManana02() != null) {
			where.append(" AND t1.ESTA_SOLA_MANANA_02 = ?");
			params.add(informesocial.getEstaSolaManana02());
		}
		if (informesocial != null && informesocial.getEstaSolaTarde02() != null) {
			where.append(" AND t1.ESTA_SOLA_TARDE_02 = ?");
			params.add(informesocial.getEstaSolaTarde02());
		}
		if (informesocial != null && informesocial.getEstaSolaNoche02() != null) {
			where.append(" AND t1.ESTA_SOLA_NOCHE_02 = ?");
			params.add(informesocial.getEstaSolaNoche02());
		}
		if (informesocial != null && informesocial.getRelacionEntorno02() != null) {
			where.append(" AND t1.RELACION_ENTORNO_02 = ?");
			params.add(informesocial.getRelacionEntorno02());
		}
		if (informesocial != null && informesocial.getFamiliarFallecido02() != null) {
			where.append(" AND t1.FAMILIAR_FALLECIDO_02 = ?");
			params.add(informesocial.getFamiliarFallecido02());
		}
		if (informesocial != null && informesocial.getVinculoFallecido02() != null) {
			where.append(" AND UPPER(t1.VINCULO_FALLECIDO_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getVinculoFallecido02().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getVinculoFallecido02().toUpperCase() + "%");
			}
			where.append(" AND t1.VINCULO_FALLECIDO_02 IS NOT NULL");
		}
		if (informesocial != null && informesocial.getVisitasFamilia02() != null) {
			where.append(" AND t1.VISITAS_FAMILIA_02 = ?");
			params.add(informesocial.getVisitasFamilia02());
		}
		if (informesocial != null && informesocial.getVisitasAmigos02() != null) {
			where.append(" AND t1.VISITAS_AMIGOS_02 = ?");
			params.add(informesocial.getVisitasAmigos02());
		}
		if (informesocial != null && informesocial.getFrecuenciaSalidas02() != null) {
			where.append(" AND t1.FRECUENCIA_SALIDAS_02 = ?");
			params.add(informesocial.getFrecuenciaSalidas02());
		}
		if (informesocial != null && informesocial.getPeriodoSinVisitas02() != null) {
			where.append(" AND t1.PERIODO_SIN_VISITAS_02 = ?");
			params.add(informesocial.getPeriodoSinVisitas02());
		}
		if (informesocial != null && informesocial.getTiempoSinVisitas02() != null) {
			where.append(" AND t1.TIEMPO_SIN_VISITAS_02 = ?");
			params.add(informesocial.getTiempoSinVisitas02());
		}
		if (informesocial != null && informesocial.getObservaciones02() != null) {
			where.append(" AND UPPER(t1.OBSERVACIONES_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getObservaciones02().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getObservaciones02().toUpperCase() + "%");
			}
			where.append(" AND t1.OBSERVACIONES_02 IS NOT NULL");
		}
		if (informesocial != null && informesocial.getObservacionesPs02() != null) {
			where.append(" AND UPPER(t1.OBSERVACIONES_PS_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getObservacionesPs02().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getObservacionesPs02().toUpperCase() + "%");
			}
			where.append(" AND t1.OBSERVACIONES_PS_02 IS NOT NULL");
		}
		if (informesocial != null && informesocial.getApreciacion02() != null) {
			where.append(" AND t1.APRECIACION_02 = ?");
			params.add(informesocial.getApreciacion02());
		}

		if (informesocial != null && informesocial.getIdInforme02() != null) {
			where.append(" AND t1.ID_INFORME_02 = ?");
			params.add(informesocial.getIdInforme02());
		}
		if (informesocial != null && informesocial.getTipoIdentificador02() != null) {
			where.append(" AND UPPER(t1.TIPO_IDENTIFICADOR_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getTipoIdentificador02().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getTipoIdentificador02().toUpperCase() + "%");
			}
			where.append(" AND t1.TIPO_IDENTIFICADOR_02 IS NOT NULL");
		}
		if (informesocial != null && informesocial.getIdentificador02() != null) {
			where.append(" AND UPPER(t1.IDENTIFICADOR_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getIdentificador02().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getIdentificador02().toUpperCase() + "%");
			}
			where.append(" AND t1.IDENTIFICADOR_02 IS NOT NULL");
		}
		if (informesocial != null && informesocial.getNombre02() != null) {
			where.append(" AND UPPER(t1.NOMBRE_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getNombre02().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getNombre02().toUpperCase() + "%");
			}
			where.append(" AND t1.NOMBRE_02 IS NOT NULL");
		}
		if (informesocial != null && informesocial.getApellido102() != null) {
			where.append(" AND UPPER(t1.APELLIDO1_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getApellido102().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getApellido102().toUpperCase() + "%");
			}
			where.append(" AND t1.APELLIDO1_02 IS NOT NULL");
		}
		if (informesocial != null && informesocial.getApellido202() != null) {
			where.append(" AND UPPER(t1.APELLIDO2_02) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(informesocial.getApellido202().toUpperCase() + "%");
			} else {
				params.add("%" + informesocial.getApellido202().toUpperCase() + "%");
			}
			where.append(" AND t1.APELLIDO2_02 IS NOT NULL");
		}

		if (informesocial != null && informesocial.getfAlta02() != null) {
			where.append(" AND t1.F_ALTA_02 = ?");
			params.add(informesocial.getfAlta02());
		}

		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;
}
