/*
* Copyright 2021 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANT�?AS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.ad74a.dao;

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

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

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

import com.ejie.ad74a.dao.comun.UtilDAO;
import com.ejie.ad74a.exceptions.ManagerErrors;
import com.ejie.ad74a.model.Ayuntamientos;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.PisosTutelados;
import com.ejie.ad74a.model.comun.Calle;
import com.ejie.ad74a.model.comun.Localidad;
import com.ejie.ad74a.model.comun.Municipio;
import com.ejie.ad74a.model.comun.Portal;
import com.ejie.ad74a.model.comun.Provincia;
import com.ejie.ad74a.util.UtilSQL;
import com.ejie.ad74a.util.comun.Utilidades;
import com.ejie.x38.dao.RowNumResultSetExtractor;
import com.ejie.x38.dto.TableManager;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * PisosTuteladosDaoImpl generated by UDA, 22-may-2023 16:38:14.
 * 
 * @author UDA
 */

@Repository
@Transactional
public class PisosTuteladosDaoImpl implements PisosTuteladosDao {

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

	protected static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDPISO32", "DENOMINACION32", "IDDIRECCION32",
			"USUALTA32", "USUMODIF32", "FALTA32", "FMODIF32", "FBAJA32", "AYUNTAMIENTOSIDAYUNTAMIENTO31",
			"AYUNTAMIENTOSCIF31", "AYUNTAMIENTOSDESCES31", "AYUNTAMIENTOSDESCEU31", "AYUNTAMIENTOSNUMCUENTA31",
			"AYUNTAMIENTOSPERIODICIDAD31", "AYUNTAMIENTOSCONTACTO31", "AYUNTAMIENTOSTELEFONO31",
			"AYUNTAMIENTOSFORMAPAGO31", "AYUNTAMIENTOSFAUTORIZACION31", "AYUNTAMIENTOSDIAFACTURACION31",
			"AYUNTAMIENTOSIDMANCOMUNIDAD31", "AYUNTAMIENTOSIDPROVINCIA31", "AYUNTAMIENTOSIDMUNICIPIO31",
			"AYUNTAMIENTOSCP31", "AYUNTAMIENTOSDIRECCION31", "AYUNTAMIENTOSDIR331", "AYUNTAMIENTOSEMAIL31",
			"AYUNTAMIENTOSFBAJA31", "AYUNTAMIENTOSBAJA31", "AYUNTAMIENTOSUSUALTA31", "AYUNTAMIENTOSUSUMODIF31",
			"AYUNTAMIENTOSFALTA31", "AYUNTAMIENTOSFMODIF31", "DIRECCIONESIDMUNICIPIO06", "DIRECCIONESIDPROVINCIA06",
			"DIRECCIONESCP06", "DIRECCIONESLOCALIDAD06", "DIRECCIONESCALLE06", "DIRECCIONESPORTAL06",
			"DIRECCIONESLETRA06", "provincianoradesces", "provincianoradesceu", "municipionoradesc",
			"ayuntamientosdesces", "ayuntamientosdesceu" };

	private JdbcTemplate jdbcTemplate;

	public static final String SEQUENCE_PISOS_TUTELADOS = "SEQ_PISOS_TUTELADOS";

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<PisosTutelados> rwMap = new RowMapper<PisosTutelados>() {
		public PisosTutelados mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			PisosTutelados pisosTutelados = new PisosTutelados(UtilSQL.getLong(resultSet, "IDPISO32"));
			pisosTutelados.setDenominacion32(resultSet.getString("DENOMINACION32"));
			pisosTutelados.setUsuAlta32(resultSet.getString("USUALTA32"));
			pisosTutelados.setUsuModif32(resultSet.getString("USUMODIF32"));
			pisosTutelados.setfAlta32(resultSet.getDate("FALTA32"));
			pisosTutelados.setfModif32(resultSet.getDate("FMODIF32"));
			pisosTutelados.setfBaja32(resultSet.getDate("FBAJA32"));

			Ayuntamientos ayuntamientos = new Ayuntamientos(UtilSQL.getLong(resultSet, "AyuntamientosIDAYUNTAMIENTO31"),
					resultSet.getString("AYUNTAMIENTOSDESCES31"), resultSet.getString("AYUNTAMIENTOSDESCEU31"));

			if (UtilDAO.hasColumn(resultSet, "AYUNTAMIENTOSCIF31")) {
				ayuntamientos.setCif31(resultSet.getString("AYUNTAMIENTOSCIF31"));
			}

			Direcciones direcciones = new Direcciones(UtilSQL.getLong(resultSet, "IDDIRECCION32"));
			direcciones.setIdMunicipio06(resultSet.getString("DIRECCIONESIDMUNICIPIO06"));
			direcciones.setIdProvincia06(resultSet.getString("DIRECCIONESIDPROVINCIA06"));
			direcciones.setCp06(resultSet.getString("DIRECCIONESCP06"));
			direcciones.setPiso06(resultSet.getString("PISO06"));
			direcciones.setLocalidad06(resultSet.getString("DIRECCIONESLOCALIDAD06"));
			direcciones.setCalle06(resultSet.getString("DIRECCIONESCALLE06"));
			direcciones.setPortal06(resultSet.getString("DIRECCIONESPORTAL06"));
			direcciones.setLetra06(resultSet.getString("DIRECCIONESLETRA06"));
			Provincia provincia = new Provincia(resultSet.getString("DIRECCIONESIDPROVINCIA06"),
					resultSet.getString("provincianoradesces"), resultSet.getString("provincianoradesceu"), null);
			Municipio municipio = new Municipio(resultSet.getString("DIRECCIONESIDMUNICIPIO06"),
					resultSet.getString("municipionoradesc"), resultSet.getString("DIRECCIONESIDPROVINCIA06"));
			Localidad localidad = new Localidad(resultSet.getString("idprovincia"), resultSet.getString("idmunicipio"),
					resultSet.getLong("idlocalidad"), resultSet.getString("localidadnoradesc"));
			Calle calle = new Calle(resultSet.getString("idprovincia"), resultSet.getString("idmunicipiocalle"),
					resultSet.getLong("codcalle"), resultSet.getLong("idcalle"),
					resultSet.getString("descripcioncalle"), resultSet.getString("tipoviacalle"),
					resultSet.getString("idtitoviacalle"), resultSet.getString("calletxt"));
			Portal portal = new Portal(resultSet.getLong("codportal"), resultSet.getString("bloque"),
					resultSet.getLong("numero"), resultSet.getString("bis"), resultSet.getLong("idcalleportal"),
					resultSet.getLong("idlocalidadcalle"), resultSet.getString("codigopostalcalle"),
					resultSet.getBigDecimal("idtramocalle"));

			direcciones.setProvinciaNORA(provincia);
			direcciones.setMunicipioNORA(municipio);
			direcciones.setLocalidadNORA(localidad);
			direcciones.setCalleNORA(calle);
			direcciones.setPortalNORA(portal);
			pisosTutelados.setDirecciones(direcciones);
			pisosTutelados.setAyuntamientos(ayuntamientos);

			return pisosTutelados;
		}
	};

	private RowMapper<PisosTutelados> rwMapIsPisoTut = new RowMapper<PisosTutelados>() {
		public PisosTutelados mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			PisosTutelados pisosTutelados = new PisosTutelados(UtilSQL.getLong(resultSet, "IDPISO32"));

			return pisosTutelados;
		}
	};

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

	/**
	 * 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 PisosTutelados table.
	 *
	 * @param pisostutelados PisosTutelados
	 *
	 * @return PisosTutelados
	 */
	public PisosTutelados add(PisosTutelados pisostutelados) {

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		String query = "INSERT INTO PISOS_TUTELADOS (ID_PISO_32, ID_AYUNTAMIENTO_32, DENOMINACION_32, ID_DIRECCION_32, USU_ALTA_32, USU_MODIF_32, F_ALTA_32, F_MODIF_32, F_BAJA_32) "
				+ "VALUES (" + SEQUENCE_PISOS_TUTELADOS
				+ ".NEXTVAL,:idAyuntamiento,:denominacion,:idDireccion,:usuAlta,:usuModif,:fAlta,:fModif,:fBaja)";

		Object getAyuntamientosIdAyuntamiento31Aux = null;
		if (pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getIdAyuntamiento31() != null) {
			getAyuntamientosIdAyuntamiento31Aux = pisostutelados.getAyuntamientos().getIdAyuntamiento31();
		}
		Object getDireccionesIdDireccion06Aux = null;
		if (pisostutelados.getDirecciones() != null && pisostutelados.getDirecciones().getIdDireccion06() != null) {
			getDireccionesIdDireccion06Aux = pisostutelados.getDirecciones().getIdDireccion06();
		}

		MapSqlParameterSource parameters = new MapSqlParameterSource()
				.addValue("idAyuntamiento", getAyuntamientosIdAyuntamiento31Aux)
				.addValue("denominacion", pisostutelados.getDenominacion32())
				.addValue("idDireccion", getDireccionesIdDireccion06Aux)
				.addValue("usuAlta", pisostutelados.getUsuAlta32()).addValue("usuModif", pisostutelados.getUsuModif32())
				.addValue("fAlta", pisostutelados.getfAlta32()).addValue("fModif", pisostutelados.getfModif32())
				.addValue("fBaja", pisostutelados.getfBaja32());

		NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
		namedParameterJdbcTemplate.update(query, parameters, generatedKeyHolder, new String[] { "ID_PISO_32" });
		pisostutelados.setIdPiso32(generatedKeyHolder.getKey().longValue());

		return pisostutelados;
	}

	/**
	 * Updates a single row in the PisosTutelados table.
	 *
	 * @param pisostutelados PisosTutelados
	 *
	 * @return PisosTutelados
	 */
	public PisosTutelados update(PisosTutelados pisostutelados) {
		String query = "UPDATE PISOS_TUTELADOS SET ID_AYUNTAMIENTO_32=?, DENOMINACION_32=?, ID_DIRECCION_32=?, USU_MODIF_32=?, F_MODIF_32=?, F_BAJA_32=? WHERE ID_PISO_32=?";
		Object getAyuntamientosIdAyuntamiento31Aux = null;
		if (pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getIdAyuntamiento31() != null) {
			getAyuntamientosIdAyuntamiento31Aux = pisostutelados.getAyuntamientos().getIdAyuntamiento31();
		}
		Object getDireccionesIdDireccion06Aux = null;
		if (pisostutelados.getDirecciones() != null && pisostutelados.getDirecciones().getIdDireccion06() != null) {
			getDireccionesIdDireccion06Aux = pisostutelados.getDirecciones().getIdDireccion06();
		}
		Calendar today = Calendar.getInstance();
		today.set(Calendar.HOUR_OF_DAY, 0);
		if (pisostutelados.getBaja() != null && pisostutelados.getBaja().equals("1")) {
			pisostutelados.setfBaja32(today.getTime());
		} else if (pisostutelados.getBaja() != null && pisostutelados.getBaja().equals("0")) {
			pisostutelados.setfBaja32(null);
		}

		this.jdbcTemplate.update(query, getAyuntamientosIdAyuntamiento31Aux, pisostutelados.getDenominacion32(),
				getDireccionesIdDireccion06Aux, pisostutelados.getUsuModif32(), pisostutelados.getfModif32(),
				pisostutelados.getfBaja32(), pisostutelados.getIdPiso32());
		return pisostutelados;
	}

	/**
	 * Finds a single row in the PisosTutelados table.
	 *
	 * @param pisostutelados PisosTutelados
	 *
	 * @return PisosTutelados
	 */
	@Transactional(readOnly = true)
	public PisosTutelados find(PisosTutelados pisostutelados) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_PISO_32 IDPISO32,t1.DENOMINACION_32 DENOMINACION32,t1.ID_DIRECCION_32 IDDIRECCION32,t1.USU_ALTA_32 USUALTA32,t1.USU_MODIF_32 USUMODIF32,t1.F_ALTA_32 FALTA32,t1.F_MODIF_32 FMODIF32, t1.F_BAJA_32 FBAJA32, "
						+ "t2.ID_AYUNTAMIENTO_31 AYUNTAMIENTOSIDAYUNTAMIENTO31,t2.CIF_31 AYUNTAMIENTOSCIF31,t2.DESC_ES_31 AYUNTAMIENTOSDESCES31,t2.DESC_EU_31 AYUNTAMIENTOSDESCEU31,t2.NUM_CUENTA_31 AYUNTAMIENTOSNUMCUENTA31,t2.PERIODICIDAD_31 AYUNTAMIENTOSPERIODICIDAD31,t2.CONTACTO_31 AYUNTAMIENTOSCONTACTO31,t2.F_BAJA_31 AYUNTAMIENTOSFBAJA31,t2.BAJA_31 AYUNTAMIENTOSBAJA31,t2.USU_ALTA_31 AYUNTAMIENTOSUSUALTA31,t2.USU_MODIF_31 AYUNTAMIENTOSUSUMODIF31,t2.F_ALTA_31 AYUNTAMIENTOSFALTA31,t2.F_MODIF_31 AYUNTAMIENTOSFMODIF31, "
						+ "t3.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t3.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t3.CP_06 DIRECCIONESCP06, t3.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t3.CALLE_06 DIRECCIONESCALLE06, t3.PORTAL_06 DIRECCIONESPORTAL06, t3.PISO_06 PISO06, t3.LETRA_06 DIRECCIONESLETRA06, "//
						+ "t4.ds_e provincianoradesceu, t4.ds_c provincianoradesces, "//
						+ "t5.DS_O municipionoradesc, t6.DS_O localidadnoradesc, t6.PROVINCIA_ID idprovincia, t6.MUNICIPIO_ID idmunicipio, t6.ID idlocalidad, "
						+ "t7.PROVINCIA_ID idprovinciacalle, t7.MUNICIPIO_ID idmunicipiocalle, t7.CALLE_COD codcalle, t7.ID idcalle, t7.DS_O descripcioncalle, t7.TIPO_VIA tipoviacalle, t7.TIPO_VIA_ID idtitoviacalle, t7.DS_E calletxt, "
						+ "t8.ID codportal, t8.BLOQUE bloque, t8.NUMERO numero, t8.BIS bis, t8.CALLE_ID idcalleportal, t8.LOCALIDAD_ID idlocalidadcalle, t8.CODIGO_POSTAL codigopostalcalle, t8.TRAMO_ID idtramocalle ");

		// FROM
		query.append("FROM PISOS_TUTELADOS t1 ");
		query.append("LEFT JOIN AYUNTAMIENTOS t2 ON (t1.ID_AYUNTAMIENTO_32= t2.ID_AYUNTAMIENTO_31) ");
		query.append("LEFT JOIN DIRECCIONES t3 ON (t1.ID_DIRECCION_32= t3.ID_DIRECCION_06) ");
		query.append("LEFT JOIN T17_PROVINCIA t4 ON (t3.ID_PROVINCIA_06 = t4.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t5 ON (t3.ID_MUNICIPIO_06= t5.ID AND t3.id_provincia_06 = t5.PROVINCIA_ID) ");
		query.append("LEFT JOIN T17_LOCALIDAD t6 ON (t3.ID_LOCALIDAD_06 = t6.ID) ");
		query.append("LEFT JOIN T17_CALLE t7 ON (t3.ID_CALLE_06 = t7.ID) ");
		query.append("LEFT JOIN T17_PORTAL t8 ON (t3.ID_PORTAL_06 = t8.ID) ");

		query.append("WHERE t1.ID_PISO_32 = ?");

		List<PisosTutelados> pisostuteladosList = this.jdbcTemplate.query(query.toString(), this.rwMap,
				pisostutelados.getIdPiso32());
		return DataAccessUtils.uniqueResult(pisostuteladosList);
	}

	/**
	 * Removes a single row in the PisosTutelados table.
	 *
	 * @param pisostutelados PisosTutelados
	 */
	public void remove(PisosTutelados pisostutelados) {
		String query = "DELETE FROM PISOS_TUTELADOS WHERE ID_PISO_32=?";
		this.jdbcTemplate.update(query, pisostutelados.getIdPiso32());
	}

	/**
	 * Updates a single row in the PisosTutelados table.
	 *
	 * @param pisosTutelados PisosTutelados
	 *
	 * @return PisosTutelados
	 */
	public PisosTutelados darBaja(PisosTutelados pisosTutelados) {
		String query = "UPDATE PISOS_TUTELADOS SET F_BAJA_32=?, F_MODIF_32=?, USU_MODIF_32=? WHERE ID_PISO_32=?";
		this.jdbcTemplate.update(query, pisosTutelados.getfBaja32(), pisosTutelados.getfModif32(),
				pisosTutelados.getUsuModif32(), pisosTutelados.getIdPiso32());
		return pisosTutelados;
	}

	public List<PisosTutelados> getMultiple(PisosTutelados filterPisosTutelados, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PISO_32 IDPISO32, t1.DENOMINACION_32 DENOMINACION32, t1.ID_DIRECCION_32 IDDIRECCION32, t1.USU_ALTA_32 USUALTA32, t1.USU_MODIF_32 USUMODIF32, t1.F_ALTA_32 FALTA32, t1.F_MODIF_32 FMODIF32, t1.F_BAJA_32 FBAJA32, t2.ID_AYUNTAMIENTO_31 AYUNTAMIENTOSIDAYUNTAMIENTO31, t2.CIF_31 AYUNTAMIENTOSCIF31, t2.DESC_ES_31 AYUNTAMIENTOSDESCES31,t2.DESC_EU_31 AYUNTAMIENTOSDESCEU31, t2.NUM_CUENTA_31 AYUNTAMIENTOSNUMCUENTA31, t2.PERIODICIDAD_31 AYUNTAMIENTOSPERIODICIDAD31, t2.CONTACTO_31 AYUNTAMIENTOSCONTACTO31, t2.F_BAJA_31 AYUNTAMIENTOSFBAJA31, t2.BAJA_31 AYUNTAMIENTOSBAJA31, t2.USU_ALTA_31 AYUNTAMIENTOSUSUALTA31, t2.USU_MODIF_31 AYUNTAMIENTOSUSUMODIF31, t2.F_ALTA_31 AYUNTAMIENTOSFALTA31, t2.F_MODIF_31 AYUNTAMIENTOSFMODIF31 ");
		// FROM
		query.append("FROM PISOS_TUTELADOS t1 , AYUNTAMIENTOS t2 , DIRECCIONES t3 ");
		// WHERE clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterPisosTutelados, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

		StringBuilder sbMultipleSQL = query.append(
				TableManager.getSelectMultipleQuery(tableRequestDto, PisosTutelados.class, params, "id_piso_32"));

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

	/**
	 * Finds a list of rows in the PisosTutelados table.
	 *
	 * @param pisostutelados  PisosTutelados
	 * @param tableRequestDto TableRequestDto
	 *
	 * @return List<PisosTutelados>
	 */
	@Transactional(readOnly = true)
	public List<PisosTutelados> findAll(PisosTutelados pisostutelados, TableRequestDto tableRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_PISO_32 IDPISO32,t1.DENOMINACION_32 DENOMINACION32,t1.ID_DIRECCION_32 IDDIRECCION32,t1.USU_ALTA_32 USUALTA32,t1.USU_MODIF_32 USUMODIF32,t1.F_ALTA_32 FALTA32,t1.F_MODIF_32 FMODIF32, t1.F_BAJA_32 FBAJA32, "
						+ "t2.ID_AYUNTAMIENTO_31 AYUNTAMIENTOSIDAYUNTAMIENTO31,t2.CIF_31 AYUNTAMIENTOSCIF31,t2.DESC_ES_31 AYUNTAMIENTOSDESCES31,t2.DESC_EU_31 AYUNTAMIENTOSDESCEU31,t2.NUM_CUENTA_31 AYUNTAMIENTOSNUMCUENTA31,t2.PERIODICIDAD_31 AYUNTAMIENTOSPERIODICIDAD31,t2.CONTACTO_31 AYUNTAMIENTOSCONTACTO31,t2.F_BAJA_31 AYUNTAMIENTOSFBAJA31,t2.BAJA_31 AYUNTAMIENTOSBAJA31,t2.USU_ALTA_31 AYUNTAMIENTOSUSUALTA31,t2.USU_MODIF_31 AYUNTAMIENTOSUSUMODIF31,t2.F_ALTA_31 AYUNTAMIENTOSFALTA31,t2.F_MODIF_31 AYUNTAMIENTOSFMODIF31, "
						+ "t3.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t3.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t3.CP_06 DIRECCIONESCP06, t3.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t3.CALLE_06 DIRECCIONESCALLE06, t3.PORTAL_06 DIRECCIONESPORTAL06, t3.PISO_06 PISO06, t3.LETRA_06 DIRECCIONESLETRA06, "//
						+ "t4.ds_e provincianoradesceu, t4.ds_c provincianoradesces, "//
						+ "t5.DS_O municipionoradesc, t6.DS_O localidadnoradesc, t6.PROVINCIA_ID idprovincia, t6.MUNICIPIO_ID idmunicipio, t6.ID idlocalidad, "
						+ "t7.PROVINCIA_ID idprovinciacalle, t7.MUNICIPIO_ID idmunicipiocalle, t7.CALLE_COD codcalle, t7.ID idcalle, t7.DS_O descripcioncalle, t7.TIPO_VIA tipoviacalle, t7.TIPO_VIA_ID idtitoviacalle, t7.DS_E calletxt, "
						+ "t8.ID codportal, t8.BLOQUE bloque, t8.NUMERO numero, t8.BIS bis, t8.CALLE_ID idcalleportal, t8.LOCALIDAD_ID idlocalidadcalle, t8.CODIGO_POSTAL codigopostalcalle, t8.TRAMO_ID idtramocalle ");

		// FROM
		query.append("FROM PISOS_TUTELADOS t1 ");
		query.append("LEFT JOIN AYUNTAMIENTOS t2 ON (t1.ID_AYUNTAMIENTO_32= t2.ID_AYUNTAMIENTO_31) ");
		query.append("LEFT JOIN DIRECCIONES t3 ON (t1.ID_DIRECCION_32= t3.ID_DIRECCION_06) ");
		query.append("LEFT JOIN T17_PROVINCIA t4 ON (t3.ID_PROVINCIA_06 = t4.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t5 ON (t3.ID_MUNICIPIO_06= t5.ID AND t3.id_provincia_06 = t5.PROVINCIA_ID) ");
		query.append("LEFT JOIN T17_LOCALIDAD t6 ON (t3.ID_LOCALIDAD_06 = t6.ID) ");
		query.append("LEFT JOIN T17_CALLE t7 ON (t3.ID_CALLE_06 = t7.ID) ");
		query.append("LEFT JOIN T17_PORTAL t8 ON (t3.ID_PORTAL_06 = t8.ID) ");

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

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

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

		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_PISO_32 IDPISO32,t1.DENOMINACION_32 DENOMINACION32,t1.ID_DIRECCION_32 IDDIRECCION32,t1.USU_ALTA_32 USUALTA32,t1.USU_MODIF_32 USUMODIF32,t1.F_ALTA_32 FALTA32,t1.F_MODIF_32 FMODIF32, t1.F_BAJA_32 FBAJA32, "
						+ "t2.ID_AYUNTAMIENTO_31 AYUNTAMIENTOSIDAYUNTAMIENTO31,t2.CIF_31 AYUNTAMIENTOSCIF31,t2.DESC_ES_31 AYUNTAMIENTOSDESCES31,t2.DESC_EU_31 AYUNTAMIENTOSDESCEU31,t2.NUM_CUENTA_31 AYUNTAMIENTOSNUMCUENTA31,t2.PERIODICIDAD_31 AYUNTAMIENTOSPERIODICIDAD31,t2.CONTACTO_31 AYUNTAMIENTOSCONTACTO31,t2.F_BAJA_31 AYUNTAMIENTOSFBAJA31,t2.BAJA_31 AYUNTAMIENTOSBAJA31,t2.USU_ALTA_31 AYUNTAMIENTOSUSUALTA31,t2.USU_MODIF_31 AYUNTAMIENTOSUSUMODIF31,t2.F_ALTA_31 AYUNTAMIENTOSFALTA31,t2.F_MODIF_31 AYUNTAMIENTOSFMODIF31, "
						+ "t3.ID_MUNICIPIO_06 DIRECCIONESIDMUNICIPIO06,t3.ID_PROVINCIA_06 DIRECCIONESIDPROVINCIA06, t3.CP_06 DIRECCIONESCP06, t3.LOCALIDAD_06 DIRECCIONESLOCALIDAD06, t3.CALLE_06 DIRECCIONESCALLE06, t3.PORTAL_06 DIRECCIONESPORTAL06, t3.PISO_06 PISO06, t3.LETRA_06 DIRECCIONESLETRA06, "//
						+ "t4.ds_e provincianoradesceu, t4.ds_c provincianoradesces, "//
						+ "t5.DS_O municipionoradesc, t6.DS_O localidadnoradesc, t6.PROVINCIA_ID idprovincia, t6.MUNICIPIO_ID idmunicipio, t6.ID idlocalidad, "
						+ "t7.PROVINCIA_ID idprovinciacalle, t7.MUNICIPIO_ID idmunicipiocalle, t7.CALLE_COD codcalle, t7.ID idcalle, t7.DS_O descripcioncalle, t7.TIPO_VIA tipoviacalle, t7.TIPO_VIA_ID idtitoviacalle, t7.DS_E calletxt, "
						+ "t8.ID codportal, t8.BLOQUE bloque, t8.NUMERO numero, t8.BIS bis, t8.CALLE_ID idcalleportal, t8.LOCALIDAD_ID idlocalidadcalle, t8.CODIGO_POSTAL codigopostalcalle, t8.TRAMO_ID idtramocalle ");

		// FROM
		query.append("FROM PISOS_TUTELADOS t1 ");
		query.append("LEFT JOIN AYUNTAMIENTOS t2 ON (t1.ID_AYUNTAMIENTO_32= t2.ID_AYUNTAMIENTO_31) ");
		query.append("LEFT JOIN DIRECCIONES t3 ON (t1.ID_DIRECCION_32= t3.ID_DIRECCION_06) ");
		query.append("LEFT JOIN T17_PROVINCIA t4 ON (t3.ID_PROVINCIA_06 = t4.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t5 ON (t3.ID_MUNICIPIO_06= t5.ID AND t3.id_provincia_06 = t5.PROVINCIA_ID) ");
		query.append("LEFT JOIN T17_LOCALIDAD t6 ON (t3.ID_LOCALIDAD_06 = t6.ID) ");
		query.append("LEFT JOIN T17_CALLE t7 ON (t3.ID_CALLE_06 = t7.ID) ");
		query.append("LEFT JOIN T17_PORTAL t8 ON (t3.ID_PORTAL_06 = t8.ID) ");

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the PisosTutelados table.
	 *
	 * @param pisostutelados PisosTutelados
	 *
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(PisosTutelados pisostutelados) {
		// SELECT
		StringBuilder query = new StringBuilder("SELECT COUNT(1) ");
		query.append("FROM PISOS_TUTELADOS t1 ");
		query.append("LEFT JOIN AYUNTAMIENTOS t2 ON (t1.ID_AYUNTAMIENTO_32= t2.ID_AYUNTAMIENTO_31) ");
		query.append("LEFT JOIN DIRECCIONES t3 ON (t1.ID_DIRECCION_32= t3.ID_DIRECCION_06) ");
		query.append("LEFT JOIN T17_PROVINCIA t4 ON (t3.ID_PROVINCIA_06 = t4.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t5 ON (t3.ID_MUNICIPIO_06= t5.ID AND t3.id_provincia_06 = t5.PROVINCIA_ID) ");

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

	/**
	 * Counts rows in the PisosTutelados table using like.
	 *
	 * @param pisostutelados PisosTutelados
	 * @param startsWith     Boolean
	 *
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(PisosTutelados pisostutelados, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder("SELECT COUNT(1) ");
		query.append("FROM PISOS_TUTELADOS t1 ");
		query.append("LEFT JOIN AYUNTAMIENTOS t2 ON (t1.ID_AYUNTAMIENTO_32= t2.ID_AYUNTAMIENTO_31) ");
		query.append("LEFT JOIN DIRECCIONES t3 ON (t1.ID_DIRECCION_32= t3.ID_DIRECCION_06) ");
		query.append("LEFT JOIN T17_PROVINCIA t4 ON (t3.ID_PROVINCIA_06 = t4.ID) ");
		query.append(
				"LEFT JOIN T17_MUNICIPIO t5 ON (t3.ID_MUNICIPIO_06= t5.ID AND t3.id_provincia_06 = t5.PROVINCIA_ID) ");

		// WHERE clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(pisostutelados, 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 PisosTutelados selected for rup_table
	 *
	 * @param pisostutelados  PisosTutelados
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 *
	 * @return List<TableRowDto<PisosTutelados>>
	 */
	@Override
	public List<TableRowDto<PisosTutelados>> reorderSelection(PisosTutelados pisostutelados,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PISO_32 IDPISO32,t1.DENOMINACION_32 DENOMINACION32,t1.ID_DIRECCION_32 IDDIRECCION32,t1.USU_ALTA_32 USUALTA32,t1.USU_MODIF_32 USUMODIF32,t1.F_ALTA_32 FALTA32,t1.F_MODIF_32 FMODIF32, t1.F_BAJA_32 FBAJA32,t2.ID_AYUNTAMIENTO_31 AYUNTAMIENTOSIDAYUNTAMIENTO31,t2.CIF_31 AYUNTAMIENTOSCIF31,t2.DESC_ES_31 AYUNTAMIENTOSDESCES31,t2.DESC_EU_31 AYUNTAMIENTOSDESCEU31,t2.NUM_CUENTA_31 AYUNTAMIENTOSNUMCUENTA31,t2.PERIODICIDAD_31 AYUNTAMIENTOSPERIODICIDAD31,t2.CONTACTO_31 AYUNTAMIENTOSCONTACTO31,t2.F_BAJA_31 AYUNTAMIENTOSFBAJA31,t2.BAJA_31 AYUNTAMIENTOSBAJA31,t2.USU_ALTA_31 AYUNTAMIENTOSUSUALTA31,t2.USU_MODIF_31 AYUNTAMIENTOSUSUMODIF31,t2.F_ALTA_31 AYUNTAMIENTOSFALTA31,t2.F_MODIF_31 AYUNTAMIENTOSFMODIF31 ");
		// FROM
		query.append("FROM PISOS_TUTELADOS t1 ,AYUNTAMIENTOS t2 , DIRECCIONES t3 ");
		// FILTRADO
		// WHERE clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(pisostutelados, startsWith);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.ID_AYUNTAMIENTO_32= t2.ID_AYUNTAMIENTO_31(+) AND t1.ID_DIRECCION_32= t3.ID_DIRECCION_06(+) ");
		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, PisosTutelados.class,
				filterParamList, "idpiso32");

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

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams    PisosTutelados
	 * @param searchParams    PisosTutelados
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 *
	 * @return List<TableRowDto<PisosTutelados>>
	 */
	@Override
	public List<TableRowDto<PisosTutelados>> search(PisosTutelados filterParams, PisosTutelados searchParams,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PISO_32 IDPISO32,t1.DENOMINACION_32 DENOMINACION32,t1.ID_DIRECCION_32 IDDIRECCION32,t1.USU_ALTA_32 USUALTA32,t1.USU_MODIF_32 USUMODIF32,t1.F_ALTA_32 FALTA32,t1.F_MODIF_32 FMODIF32, t1.F_BAJA_32 FBAJA32,t2.ID_AYUNTAMIENTO_31 AYUNTAMIENTOSIDAYUNTAMIENTO31,t2.CIF_31 AYUNTAMIENTOSCIF31,t2.DESC_ES_31 AYUNTAMIENTOSDESCES31,t2.DESC_EU_31 AYUNTAMIENTOSDESCEU31,t2.NUM_CUENTA_31 AYUNTAMIENTOSNUMCUENTA31,t2.PERIODICIDAD_31 AYUNTAMIENTOSPERIODICIDAD31,t2.CONTACTO_31 AYUNTAMIENTOSCONTACTO31,t2.F_BAJA_31 AYUNTAMIENTOSFBAJA31,t2.BAJA_31 AYUNTAMIENTOSBAJA31,t2.USU_ALTA_31 AYUNTAMIENTOSUSUALTA31,t2.USU_MODIF_31 AYUNTAMIENTOSUSUMODIF31,t2.F_ALTA_31 AYUNTAMIENTOSFALTA31,t2.F_MODIF_31 AYUNTAMIENTOSFMODIF31 ");
		// FROM
		query.append("FROM PISOS_TUTELADOS t1 ,AYUNTAMIENTOS t2 , DIRECCIONES t3 ");
		// 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_AYUNTAMIENTO_32= t2.ID_AYUNTAMIENTO_31(+) AND t1.ID_DIRECCION_32= t3.ID_DIRECCION_06(+) ");
		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, PisosTutelados.class,
				filterParamList, searchSQL, searchParamList, from_alias, "IDPISO32");

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

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

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

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

	/**
	 * Es piso tutelado.
	 * 
	 * @param direccion Direcciones
	 * 
	 * @return List<PisosTutelados>
	 */
	@Override
	public List<PisosTutelados> isPisoTutelado(Direcciones direccion) {
		StringBuilder query = new StringBuilder("SELECT  t1.ID_PISO_32 IDPISO32 ");

		// FROM
		query.append("FROM PISOS_TUTELADOS t1, DIRECCIONES t3 ");

		// WHERE clause & Params
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND ID_DIRECCION_06 = ID_DIRECCION_32 AND t3.PISO_06 like ? AND UPPER(t3.LETRA_06) = UPPER(?) ");

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

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

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

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

	@Override
	public List<PisosTutelados> isPisoTuteladoConcreto(Direcciones direccion, Long idPiso32) {
		StringBuilder query = new StringBuilder("SELECT  t1.ID_PISO_32 IDPISO32 ");

		// FROM
		query.append("FROM PISOS_TUTELADOS t1, DIRECCIONES t3 ");

		// WHERE clause & Params
		// StringBuilder where = new StringBuilder(
		// " WHERE 1=1 AND ID_DIRECCION_06 = ID_DIRECCION_32 AND t3.PISO_06 like ? AND
		// UPPER(t3.LETRA_06) = UPPER(?) ");
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND ID_DIRECCION_06 = ID_DIRECCION_32");

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

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

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

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

	/**
	 * Para los pisos, quitar los 0 por delante, por como vienen del toolkit
	 */
	private String parsearPiso(String piso) {

		if (!Utilidades.esBlancoNulo(piso)) {
			return piso.replaceFirst("^0+(?!$)", "");
		}
		return null;
	}

	/*
	 * MÉTODOS PRIVADOS
	 */

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * PisosTutelados entity
	 *
	 * @param pisostutelados PisosTutelados 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.
	 */
	private Map<String, ?> getWhereMap(PisosTutelados pisostutelados) {
		StringBuilder where = new StringBuilder(PisosTuteladosDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (pisostutelados != null && pisostutelados.getIdPiso32() != null) {
			where.append(" AND t1.ID_PISO_32 = ?");
			params.add(pisostutelados.getIdPiso32());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getIdAyuntamiento31() != null) {
			where.append(" AND t2.ID_AYUNTAMIENTO_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getIdAyuntamiento31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getCif31() != null) {
			where.append(" AND t2.CIF_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getCif31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getDescEs31() != null) {
			where.append(" AND t2.DESC_ES_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getDescEs31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getDescEu31() != null) {
			where.append(" AND t2.DESC_EU_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getDescEu31());
		}

		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getNumCuenta31() != null) {
			where.append(" AND t2.NUM_CUENTA_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getNumCuenta31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getPeriodicidad31() != null) {
			where.append(" AND t2.PERIODICIDAD_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getPeriodicidad31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getContacto31() != null) {
			where.append(" AND t2.CONTACTO_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getContacto31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getfBaja31() != null) {
			where.append(" AND t2.F_BAJA_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getfBaja31());
		}
//		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
//				&& pisostutelados.getAyuntamientos().getBaja31() != null) {
//			where.append(" AND t2.BAJA_31 = ?");
//			params.add(pisostutelados.getAyuntamientos().getBaja31());
//		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getUsuAlta31() != null) {
			where.append(" AND t2.USU_ALTA_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getUsuAlta31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getUsuModif31() != null) {
			where.append(" AND t2.USU_MODIF_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getUsuModif31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getfAlta31() != null) {
			where.append(" AND t2.F_ALTA_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getfAlta31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getfModif31() != null) {
			where.append(" AND t2.F_MODIF_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getfModif31());
		}
		if (pisostutelados != null && pisostutelados.getDenominacion32() != null) {
			where.append(" AND t1.DENOMINACION_32 = ?");
			params.add(pisostutelados.getDenominacion32());
		}
		if (pisostutelados != null && pisostutelados.getDirecciones() != null) {
			if (pisostutelados.getDirecciones().getIdDireccion06() != null) {
				where.append(" AND t3.ID_DIRECCION_06 = ?");
				params.add(pisostutelados.getDirecciones().getIdDireccion06());
			}
			if (pisostutelados.getDirecciones().getIdMunicipio06() != null) {
				where.append(" AND t3.ID_MUNICIPIO_06 = ?");
				params.add(pisostutelados.getDirecciones().getIdMunicipio06());
			}
			if (pisostutelados.getDirecciones().getIdProvincia06() != null) {
				where.append(" AND t3.ID_PROVINCIA_06 = ?");
				params.add(pisostutelados.getDirecciones().getIdProvincia06());
			}
		}
		if (pisostutelados != null && pisostutelados.getUsuAlta32() != null) {
			where.append(" AND t1.USU_ALTA_32 = ?");
			params.add(pisostutelados.getUsuAlta32());
		}
		if (pisostutelados != null && pisostutelados.getUsuModif32() != null) {
			where.append(" AND t1.USU_MODIF_32 = ?");
			params.add(pisostutelados.getUsuModif32());
		}
		if (pisostutelados != null && pisostutelados.getfAlta32() != null) {
			where.append(" AND t1.F_ALTA_32 = ?");
			params.add(pisostutelados.getfAlta32());
		}
		if (pisostutelados != null && pisostutelados.getfModif32() != null) {
			where.append(" AND t1.F_MODIF_32 = ?");
			params.add(pisostutelados.getfModif32());
		}
		if (pisostutelados != null && pisostutelados.getfBaja32() != null) {
			where.append(" AND t1.F_BAJA_32 = ?");
			params.add(pisostutelados.getfBaja32());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getBaja() != null) {
			if ("0".equals(pisostutelados.getAyuntamientos().getBaja())) {
				where.append(" AND t2.FBAJA_31 IS NOT NULL");
			} else {
				where.append(" AND t2.FBAJA_31 IS NULL");
			}
		}

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

		return mapWhere;
	}

	/**
	 * Returns a map with the needed value to create the conditions to filter by the
	 * PisosTutelados entity
	 *
	 * @param pisostutelados PisosTutelados Bean with the criteria values to filter
	 *                       by.
	 * @param startsWith     Boolean
	 *
	 * @return Map created with two keys key query stores the sql query syntax key
	 *         params stores the parameter values to be used in the condition
	 *         sentence.
	 */
	private Map<String, Object> getWhereLikeMap(PisosTutelados pisostutelados, Boolean startsWith) {
		StringBuilder where = new StringBuilder(PisosTuteladosDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (pisostutelados != null && pisostutelados.getIdPiso32() != null) {
			where.append(" AND t1.ID_PISO_32 = ?");
			params.add(pisostutelados.getIdPiso32());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getIdAyuntamiento31() != null) {
			where.append(" AND t2.ID_AYUNTAMIENTO_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getIdAyuntamiento31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getCif31() != null) {
			where.append(" AND UPPER(t2.CIF_31) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getAyuntamientos().getCif31().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getAyuntamientos().getCif31().toUpperCase() + "%");
			}
			where.append(" AND t2.CIF_31 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getDescEs31() != null) {
			where.append(" AND UPPER(t2.DESC_ES_31) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getAyuntamientos().getDescEs31().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getAyuntamientos().getDescEs31().toUpperCase() + "%");
			}
			where.append(" AND t2.DESC_ES_31 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getDescEu31() != null) {
			where.append(" AND UPPER(t2.DESC_EU_31) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getAyuntamientos().getDescEu31().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getAyuntamientos().getDescEu31().toUpperCase() + "%");
			}
			where.append(" AND t2.DESC_EU_31 IS NOT NULL");
		}

		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getNumCuenta31() != null) {
			where.append(" AND UPPER(t2.NUM_CUENTA_31) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getAyuntamientos().getNumCuenta31().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getAyuntamientos().getNumCuenta31().toUpperCase() + "%");
			}
			where.append(" AND t2.NUM_CUENTA_31 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getPeriodicidad31() != null) {
			where.append(" AND t2.PERIODICIDAD_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getPeriodicidad31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getContacto31() != null) {
			where.append(" AND UPPER(t2.CONTACTO_31) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getAyuntamientos().getContacto31().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getAyuntamientos().getContacto31().toUpperCase() + "%");
			}
			where.append(" AND t2.CONTACTO_31 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getfBaja31() != null) {
			where.append(" AND t2.F_BAJA_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getfBaja31());
		}
//		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
//				&& pisostutelados.getAyuntamientos().getBaja31() != null) {
//			where.append(" AND UPPER(t2.BAJA_31) like ? ESCAPE  '\\'");
//			if (startsWith) {
//				params.add(pisostutelados.getAyuntamientos().getBaja31().toUpperCase() + "%");
//			} else {
//				params.add("%" + pisostutelados.getAyuntamientos().getBaja31().toUpperCase() + "%");
//			}
//			where.append(" AND t2.BAJA_31 IS NOT NULL");
//		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getUsuAlta31() != null) {
			where.append(" AND UPPER(t2.USU_ALTA_31) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getAyuntamientos().getUsuAlta31().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getAyuntamientos().getUsuAlta31().toUpperCase() + "%");
			}
			where.append(" AND t2.USU_ALTA_31 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getUsuModif31() != null) {
			where.append(" AND UPPER(t2.USU_MODIF_31) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getAyuntamientos().getUsuModif31().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getAyuntamientos().getUsuModif31().toUpperCase() + "%");
			}
			where.append(" AND t2.USU_MODIF_31 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getfAlta31() != null) {
			where.append(" AND t2.F_ALTA_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getfAlta31());
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getfModif31() != null) {
			where.append(" AND t2.F_MODIF_31 = ?");
			params.add(pisostutelados.getAyuntamientos().getfModif31());
		}
		if (pisostutelados != null && pisostutelados.getDenominacion32() != null) {
			where.append(" AND UPPER(t1.DENOMINACION_32) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getDenominacion32().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getDenominacion32().toUpperCase() + "%");
			}
			where.append(" AND t1.DENOMINACION_32 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getDirecciones() != null) {
			if (pisostutelados.getDirecciones().getIdDireccion06() != null) {
				where.append(" AND t3.ID_DIRECCION_06 = ?");
				params.add(pisostutelados.getDirecciones().getIdDireccion06());
			}
			if (pisostutelados.getDirecciones().getIdMunicipio06() != null) {
				where.append(" AND t3.ID_MUNICIPIO_06 = ?");
				params.add(pisostutelados.getDirecciones().getIdMunicipio06());
			}
			if (pisostutelados.getDirecciones().getIdProvincia06() != null) {
				where.append(" AND t3.ID_PROVINCIA_06 = ?");
				params.add(pisostutelados.getDirecciones().getIdProvincia06());
			}
		}

		if (pisostutelados != null && pisostutelados.getUsuAlta32() != null) {
			where.append(" AND UPPER(t1.USU_ALTA_32) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getUsuAlta32().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getUsuAlta32().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_ALTA_32 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getUsuModif32() != null) {
			where.append(" AND UPPER(t1.USU_MODIF_32) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pisostutelados.getUsuModif32().toUpperCase() + "%");
			} else {
				params.add("%" + pisostutelados.getUsuModif32().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_MODIF_32 IS NOT NULL");
		}
		if (pisostutelados != null && pisostutelados.getfAlta32() != null) {
			where.append(" AND t1.F_ALTA_32 = ?");
			params.add(pisostutelados.getfAlta32());
		}
		if (pisostutelados != null && pisostutelados.getfModif32() != null) {
			where.append(" AND t1.F_MODIF_32 = ?");
			params.add(pisostutelados.getfModif32());
		}
		if (pisostutelados != null && pisostutelados.getfBaja32() != null) {
			where.append(" AND t1.F_BAJA_32 = ?");
			params.add(pisostutelados.getfBaja32());
		}
		if (pisostutelados != null && pisostutelados.getBaja() != null) {
			if ("0".equals(pisostutelados.getBaja())) {
				where.append(" AND t1.FBAJA_32 IS NOT NULL");
			} else {
				where.append(" AND t1.FBAJA_32 IS NULL");
			}
		}
		if (pisostutelados != null && pisostutelados.getAyuntamientos() != null
				&& pisostutelados.getAyuntamientos().getBaja() != null) {
			if ("0".equals(pisostutelados.getAyuntamientos().getBaja())) {
				where.append(" AND t2.FBAJA_31 IS NOT NULL");
			} else {
				where.append(" AND t2.FBAJA_31 IS NULL");
			}
		}

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

		return mapWhere;
	}
}
