package com.ejie.m62fb.dao;

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

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

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

import com.ejie.m62fb.model.M62fbDisponibilidadVivs;
import com.ejie.m62fb.util.UdaUtils;
import com.ejie.x38.dto.Pagination;

/**
 * M62fbDisponibilidadVivsDaoImpl generated by UDA, 17-oct-2012 15:45:50.
 * 
XXXX
 */

@Repository
@Transactional
public class M62fbDisponibilidadVivsDaoImpl implements
		M62fbDisponibilidadVivsDao {
	private JdbcTemplate jdbcTemplate;
	private RowMapper<M62fbDisponibilidadVivs> rwMap = new RowMapper<M62fbDisponibilidadVivs>() {
		public M62fbDisponibilidadVivs mapRow(ResultSet resultSet, int rowNum)
				throws SQLException {
			return new M62fbDisponibilidadVivs(
					resultSet.getBigDecimal("NUMVIVIENDA"),
					resultSet.getString("NUMEXPEDIENTE"),
					resultSet.getString("NUMULTEXPEDPROMO"),
					resultSet.getString("NUMVIVPROMO"),
					resultSet.getString("CODPROVINCIA"),
					resultSet.getString("CODMUNICIPIO"),
					resultSet.getString("INDVIVADAPTADA"),
					resultSet.getInt("NUMDORMITORIOS"),
					resultSet.getBigDecimal("SUPUTILVIV"),
					resultSet.getString("CODREGACCESO"),
					resultSet.getBigDecimal("IDEELEMENTOGAR"),
					resultSet.getString("NUMGARPROMO"),
					resultSet.getBigDecimal("SUPUTILGAR"),
					resultSet.getBigDecimal("IDEELEMENTOTRAS"),
					resultSet.getString("NUMTRASPROMO"),
					resultSet.getBigDecimal("SUPUTILTRAS"),
					resultSet.getBigDecimal("IMCPVPTOTAL"),
					resultSet.getLong("NUMULTPROP"),
					resultSet.getString("INDRENUNCIAULTPROP"),
					resultSet.getString("INDREVOCACIONULTPROP"),
					resultSet.getString("INDRENUNOREVOCULTPROP"),
					resultSet.getBigDecimal("IDPERSOULTPROP"),
					resultSet.getString("NOMULTPROP"),
					resultSet.getLong("NUMULTINQ"),
					resultSet.getDate("FECFINULTINQ"),
					resultSet.getInt("IDPERSOULTINQ"),
					resultSet.getString("NOMULTINQ"),
					resultSet.getInt("IDR38ULTRES"),
					resultSet.getInt("NUMACUERDOULTRES"),
					resultSet.getString("INDRESERVATEMPULTRES"),
					resultSet.getDate("FECRESERVAULTRES"),
					resultSet.getDate("FECFINRESERVAULTRES"),
					resultSet.getString("TEXOBSERVACIONESULTRES"),
					resultSet.getString("INDDISPONIBLE"),
					resultSet.getString("CODSITUACION"),
					resultSet.getDate("FECINCORPORACIONCAT"),
					resultSet.getDate("FECINISITUACION"),
					resultSet.getDate("FECFINSITUACION"),
					resultSet.getInt("IDPERSONAADJU"),
					resultSet.getString("CODSITOFERTA"),
					resultSet.getDate("FECOFERTA"),
					resultSet.getDate("FECFINALIZACION"),
					resultSet.getDate("FECDECLINACION"),
					resultSet.getDate("FECACEPTACION"),
					resultSet.getBigDecimal("IDM62R45T0"),
					resultSet.getString("CODREGTENENCIA"),
					resultSet.getString("NOMADJUDICATARIO"),
					resultSet.getString("DESPROVINCIA"),
					resultSet.getString("DESMUNICIPIO"),
					resultSet.getString("DESREGACCESO"),
					resultSet.getString("DESREGTENENCIA"),
					resultSet.getString("DESSITOFERTA"),
					resultSet.getString("DESSITUACIONCAT"),
					resultSet.getString("TEXOBSERVACIONES"),
					resultSet.getString("EXCLUIDA"),
					resultSet.getDate("FECEXCLU"),
					resultSet.getBigDecimal("NUMSECCION"),
					resultSet.getString("CODEXPEDPROMO"),
					resultSet.getDate("FECPUBLICBOPV"),
					resultSet.getDate("FECCIERREREG"),
					resultSet.getDate("FECSORTEO"),
					resultSet.getBigDecimal("CSECUPRO"));
		}
	};

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

	/**
	 * Inserts a single row in the M62fbDisponibilidadVivs table.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            Pagination
	 * @return M62fbDisponibilidadVivs
	 */
	public M62fbDisponibilidadVivs add(
			M62fbDisponibilidadVivs m62fbdisponibilidadvivs) {
		String query = "INSERT INTO M62R01V0S00_DISP_VIVS (NUM_VIVIENDA, NUM_EXPEDIENTE, NUM_ULT_EXPED_PROMO, NUM_VIV_PROMO, COD_PROVINCIA, COD_MUNICIPIO, IND_VIV_ADAPTADA, NUM_DORMITORIOS, SUP_UTIL_VIV, COD_REG_ACCESO, IDE_ELEMENTO_GAR, NUM_GAR_PROMO, SUP_UTIL_GAR, IDE_ELEMENTO_TRAS, NUM_TRAS_PROMO, SUP_UTIL_TRAS, IMC_PVP_TOTAL, NUM_ULT_PROP, IND_RENUNCIA_ULT_PROP, IND_REVOCACION_ULT_PROP, IND_RENUN_O_REVOC_ULT_PROP, ID_PERSO_ULT_PROP, NOM_ULT_PROP, NUM_ULT_INQ, FEC_FIN_ULT_INQ, ID_PERSO_ULT_INQ, NOM_ULT_INQ, ID_R38_ULT_RES, NUM_ACUERDO_ULT_RES, IND_RESERVA_TEMP_ULT_RES, FEC_RESERVA_ULT_RES, FEC_FIN_RESERVA_ULT_RES, TEX_OBSERVACIONES_ULT_RES, IND_DISPONIBLE, COD_SITUACION, FEC_INI_SITUACION, FEC_FIN_SITUACION, ID_PERSONA_ADJU, COD_SIT_OFERTA, FEC_OFERTA, FEC_FINALIZACION, FEC_DECLINACION, FEC_ACEPTACION) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
		this.jdbcTemplate.update(query,
				m62fbdisponibilidadvivs.getNumVivienda(),
				m62fbdisponibilidadvivs.getNumExpediente(),
				m62fbdisponibilidadvivs.getNumUltExpedPromo(),
				m62fbdisponibilidadvivs.getNumVivPromo(),
				m62fbdisponibilidadvivs.getCodProvincia(),
				m62fbdisponibilidadvivs.getCodMunicipio(),
				m62fbdisponibilidadvivs.getIndVivAdaptada(),
				m62fbdisponibilidadvivs.getNumDormitorios(),
				m62fbdisponibilidadvivs.getSupUtilViv(),
				m62fbdisponibilidadvivs.getCodRegAcceso(),
				m62fbdisponibilidadvivs.getIdeElementoGar(),
				m62fbdisponibilidadvivs.getNumGarPromo(),
				m62fbdisponibilidadvivs.getSupUtilGar(),
				m62fbdisponibilidadvivs.getIdeElementoTras(),
				m62fbdisponibilidadvivs.getNumTrasPromo(),
				m62fbdisponibilidadvivs.getSupUtilTras(),
				m62fbdisponibilidadvivs.getImcPvpTotal(),
				m62fbdisponibilidadvivs.getNumUltProp(),
				m62fbdisponibilidadvivs.getIndRenunciaUltProp(),
				m62fbdisponibilidadvivs.getIndRevocacionUltProp(),
				m62fbdisponibilidadvivs.getIndRenunORevocUltProp(),
				m62fbdisponibilidadvivs.getIdPersoUltProp(),
				m62fbdisponibilidadvivs.getNomUltProp(),
				m62fbdisponibilidadvivs.getNumUltInq(),
				m62fbdisponibilidadvivs.getFecFinUltInq(),
				m62fbdisponibilidadvivs.getIdPersoUltInq(),
				m62fbdisponibilidadvivs.getNomUltInq(),
				m62fbdisponibilidadvivs.getIdR38UltRes(),
				m62fbdisponibilidadvivs.getNumAcuerdoUltRes(),
				m62fbdisponibilidadvivs.getIndReservaTempUltRes(),
				m62fbdisponibilidadvivs.getFecReservaUltRes(),
				m62fbdisponibilidadvivs.getFecFinReservaUltRes(),
				m62fbdisponibilidadvivs.getTexObservacionesUltRes(),
				m62fbdisponibilidadvivs.getIndDisponible(),
				m62fbdisponibilidadvivs.getCodSituacion(),
				m62fbdisponibilidadvivs.getFecIniSituacion(),
				m62fbdisponibilidadvivs.getFecFinSituacion(),
				m62fbdisponibilidadvivs.getIdPersonaAdju(),
				m62fbdisponibilidadvivs.getCodSitOferta(),
				m62fbdisponibilidadvivs.getFecOferta(),
				m62fbdisponibilidadvivs.getFecFinalizacion(),
				m62fbdisponibilidadvivs.getFecDeclinacion(),
				m62fbdisponibilidadvivs.getFecAceptacion());
		return m62fbdisponibilidadvivs;
	}

	/**
	 * Updates a single row in the M62fbDisponibilidadVivs table.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            Pagination
	 * @return M62fbDisponibilidadVivs
	 */
	public M62fbDisponibilidadVivs update(
			M62fbDisponibilidadVivs m62fbdisponibilidadvivs) {
		String query = "UPDATE M62R01V0S00_DISP_VIVS SET  WHERE NUM_VIVIENDA=? AND NUM_EXPEDIENTE=? AND NUM_ULT_EXPED_PROMO=? AND NUM_VIV_PROMO=? AND COD_PROVINCIA=? AND COD_MUNICIPIO=? AND IND_VIV_ADAPTADA=? AND NUM_DORMITORIOS=? AND SUP_UTIL_VIV=? AND COD_REG_ACCESO=? AND IDE_ELEMENTO_GAR=? AND NUM_GAR_PROMO=? AND SUP_UTIL_GAR=? AND IDE_ELEMENTO_TRAS=? AND NUM_TRAS_PROMO=? AND SUP_UTIL_TRAS=? AND IMC_PVP_TOTAL=? AND NUM_ULT_PROP=? AND IND_RENUNCIA_ULT_PROP=? AND IND_REVOCACION_ULT_PROP=? AND IND_RENUN_O_REVOC_ULT_PROP=? AND ID_PERSO_ULT_PROP=? AND NOM_ULT_PROP=? AND NUM_ULT_INQ=? AND FEC_FIN_ULT_INQ=? AND ID_PERSO_ULT_INQ=? AND NOM_ULT_INQ=? AND ID_R38_ULT_RES=? AND NUM_ACUERDO_ULT_RES=? AND IND_RESERVA_TEMP_ULT_RES=? AND FEC_RESERVA_ULT_RES=? AND FEC_FIN_RESERVA_ULT_RES=? AND TEX_OBSERVACIONES_ULT_RES=? AND IND_DISPONIBLE=? AND COD_SITUACION=? AND FEC_INI_SITUACION=? AND FEC_FIN_SITUACION=? AND ID_PERSONA_ADJU=? AND COD_SIT_OFERTA=? AND FEC_OFERTA=? AND FEC_FINALIZACION=? AND FEC_DECLINACION=? AND FEC_ACEPTACION=?";
		this.jdbcTemplate.update(query,
				m62fbdisponibilidadvivs.getNumVivienda(),
				m62fbdisponibilidadvivs.getNumExpediente(),
				m62fbdisponibilidadvivs.getNumUltExpedPromo(),
				m62fbdisponibilidadvivs.getNumVivPromo(),
				m62fbdisponibilidadvivs.getCodProvincia(),
				m62fbdisponibilidadvivs.getCodMunicipio(),
				m62fbdisponibilidadvivs.getIndVivAdaptada(),
				m62fbdisponibilidadvivs.getNumDormitorios(),
				m62fbdisponibilidadvivs.getSupUtilViv(),
				m62fbdisponibilidadvivs.getCodRegAcceso(),
				m62fbdisponibilidadvivs.getIdeElementoGar(),
				m62fbdisponibilidadvivs.getNumGarPromo(),
				m62fbdisponibilidadvivs.getSupUtilGar(),
				m62fbdisponibilidadvivs.getIdeElementoTras(),
				m62fbdisponibilidadvivs.getNumTrasPromo(),
				m62fbdisponibilidadvivs.getSupUtilTras(),
				m62fbdisponibilidadvivs.getImcPvpTotal(),
				m62fbdisponibilidadvivs.getNumUltProp(),
				m62fbdisponibilidadvivs.getIndRenunciaUltProp(),
				m62fbdisponibilidadvivs.getIndRevocacionUltProp(),
				m62fbdisponibilidadvivs.getIndRenunORevocUltProp(),
				m62fbdisponibilidadvivs.getIdPersoUltProp(),
				m62fbdisponibilidadvivs.getNomUltProp(),
				m62fbdisponibilidadvivs.getNumUltInq(),
				m62fbdisponibilidadvivs.getFecFinUltInq(),
				m62fbdisponibilidadvivs.getIdPersoUltInq(),
				m62fbdisponibilidadvivs.getNomUltInq(),
				m62fbdisponibilidadvivs.getIdR38UltRes(),
				m62fbdisponibilidadvivs.getNumAcuerdoUltRes(),
				m62fbdisponibilidadvivs.getIndReservaTempUltRes(),
				m62fbdisponibilidadvivs.getFecReservaUltRes(),
				m62fbdisponibilidadvivs.getFecFinReservaUltRes(),
				m62fbdisponibilidadvivs.getTexObservacionesUltRes(),
				m62fbdisponibilidadvivs.getIndDisponible(),
				m62fbdisponibilidadvivs.getCodSituacion(),
				m62fbdisponibilidadvivs.getFecIniSituacion(),
				m62fbdisponibilidadvivs.getFecFinSituacion(),
				m62fbdisponibilidadvivs.getIdPersonaAdju(),
				m62fbdisponibilidadvivs.getCodSitOferta(),
				m62fbdisponibilidadvivs.getFecOferta(),
				m62fbdisponibilidadvivs.getFecFinalizacion(),
				m62fbdisponibilidadvivs.getFecDeclinacion(),
				m62fbdisponibilidadvivs.getFecAceptacion());
		return m62fbdisponibilidadvivs;
	}

	/**
	 * Finds a single row in the M62fbDisponibilidadVivs table.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            Pagination
	 * @return M62fbDisponibilidadVivs
	 */
	@Transactional(readOnly = true, timeout = 500)
	public M62fbDisponibilidadVivs find(
			M62fbDisponibilidadVivs m62fbdisponibilidadvivs) {
		String query = "SELECT t1.NUM_VIVIENDA NUMVIVIENDA, t1.NUM_EXPEDIENTE NUMEXPEDIENTE, t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO, TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO, t1.COD_PROVINCIA CODPROVINCIA, t1.COD_MUNICIPIO CODMUNICIPIO, t1.IND_VIV_ADAPTADA INDVIVADAPTADA, t1.NUM_DORMITORIOS NUMDORMITORIOS, t1.SUP_UTIL_VIV SUPUTILVIV, t1.COD_REG_ACCESO CODREGACCESO, t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR, t1.NUM_GAR_PROMO NUMGARPROMO, t1.SUP_UTIL_GAR SUPUTILGAR, t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS, t1.NUM_TRAS_PROMO NUMTRASPROMO, t1.SUP_UTIL_TRAS SUPUTILTRAS, t1.IMC_PVP_TOTAL IMCPVPTOTAL, t1.NUM_ULT_PROP NUMULTPROP, t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP, t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP, t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP, t1.ID_PERSO_ULT_PROP IDPERSOULTPROP, t1.NOM_ULT_PROP NOMULTPROP, t1.NUM_ULT_INQ NUMULTINQ, t1.FEC_FIN_ULT_INQ FECFINULTINQ, t1.ID_PERSO_ULT_INQ IDPERSOULTINQ, t1.NOM_ULT_INQ NOMULTINQ, t1.ID_R38_ULT_RES IDR38ULTRES, t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES, t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES, t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES, t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES, t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES, t1.IND_DISPONIBLE INDDISPONIBLE, t1.COD_SITUACION CODSITUACION, t1.FEC_INI_SITUACION FECINISITUACION, t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT, t1.FEC_FIN_SITUACION FECFINSITUACION, t1.ID_PERSONA_ADJU IDPERSONAADJU, t1.COD_SIT_OFERTA CODSITOFERTA, t1.FEC_OFERTA FECOFERTA, t1.FEC_FINALIZACION FECFINALIZACION, t1.FEC_DECLINACION FECDECLINACION, t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC  WHERE t1.NUM_VIVIENDA = ?   AND t1.NUM_EXPEDIENTE = ?   AND t1.NUM_ULT_EXPED_PROMO = ?   AND t1.NUM_VIV_PROMO = ?   AND t1.COD_PROVINCIA = ?   AND t1.COD_MUNICIPIO = ?   AND t1.IND_VIV_ADAPTADA = ?   AND t1.NUM_DORMITORIOS = ?   AND t1.SUP_UTIL_VIV = ?   AND t1.COD_REG_ACCESO = ?   AND t1.IDE_ELEMENTO_GAR = ?   AND t1.NUM_GAR_PROMO = ?   AND t1.SUP_UTIL_GAR = ?   AND t1.IDE_ELEMENTO_TRAS = ?   AND t1.NUM_TRAS_PROMO = ?   AND t1.SUP_UTIL_TRAS = ?   AND t1.IMC_PVP_TOTAL = ?   AND t1.NUM_ULT_PROP = ?   AND t1.IND_RENUNCIA_ULT_PROP = ?   AND t1.IND_REVOCACION_ULT_PROP = ?   AND t1.IND_RENUN_O_REVOC_ULT_PROP = ?   AND t1.ID_PERSO_ULT_PROP = ?   AND t1.NOM_ULT_PROP = ?   AND t1.NUM_ULT_INQ = ?   AND t1.FEC_FIN_ULT_INQ = ?   AND t1.ID_PERSO_ULT_INQ = ?   AND t1.NOM_ULT_INQ = ?   AND t1.ID_R38_ULT_RES = ?   AND t1.NUM_ACUERDO_ULT_RES = ?   AND t1.IND_RESERVA_TEMP_ULT_RES = ?   AND t1.FEC_RESERVA_ULT_RES = ?   AND t1.FEC_FIN_RESERVA_ULT_RES = ?   AND t1.TEX_OBSERVACIONES_ULT_RES = ?   AND t1.IND_DISPONIBLE = ?   AND t1.COD_SITUACION = ?   AND t1.FEC_INCORPORACION_CAT = ?   AND t1.FEC_INI_SITUACION = ?   AND t1.FEC_FIN_SITUACION = ?   AND t1.ID_PERSONA_ADJU = ?   AND t1.COD_SIT_OFERTA = ?   AND t1.FEC_OFERTA = ?   AND t1.FEC_FINALIZACION = ?   AND t1.FEC_DECLINACION = ?   AND t1.FEC_ACEPTACION = ? AND t1.COD_REG_TENENCIA = ? AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ";
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		List<M62fbDisponibilidadVivs> m62fbdisponibilidadvivsList = this.jdbcTemplate
				.query(query, this.rwMap,
						m62fbdisponibilidadvivs.getNumVivienda(),
						m62fbdisponibilidadvivs.getNumExpediente(),
						m62fbdisponibilidadvivs.getNumUltExpedPromo(),
						m62fbdisponibilidadvivs.getNumVivPromo(),
						m62fbdisponibilidadvivs.getCodProvincia(),
						m62fbdisponibilidadvivs.getCodMunicipio(),
						m62fbdisponibilidadvivs.getIndVivAdaptada(),
						m62fbdisponibilidadvivs.getNumDormitorios(),
						m62fbdisponibilidadvivs.getSupUtilViv(),
						m62fbdisponibilidadvivs.getCodRegAcceso(),
						m62fbdisponibilidadvivs.getIdeElementoGar(),
						m62fbdisponibilidadvivs.getNumGarPromo(),
						m62fbdisponibilidadvivs.getSupUtilGar(),
						m62fbdisponibilidadvivs.getIdeElementoTras(),
						m62fbdisponibilidadvivs.getNumTrasPromo(),
						m62fbdisponibilidadvivs.getSupUtilTras(),
						m62fbdisponibilidadvivs.getImcPvpTotal(),
						m62fbdisponibilidadvivs.getNumUltProp(),
						m62fbdisponibilidadvivs.getIndRenunciaUltProp(),
						m62fbdisponibilidadvivs.getIndRevocacionUltProp(),
						m62fbdisponibilidadvivs.getIndRenunORevocUltProp(),
						m62fbdisponibilidadvivs.getIdPersoUltProp(),
						m62fbdisponibilidadvivs.getNomUltProp(),
						m62fbdisponibilidadvivs.getNumUltInq(),
						m62fbdisponibilidadvivs.getFecFinUltInq(),
						m62fbdisponibilidadvivs.getIdPersoUltInq(),
						m62fbdisponibilidadvivs.getNomUltInq(),
						m62fbdisponibilidadvivs.getIdR38UltRes(),
						m62fbdisponibilidadvivs.getNumAcuerdoUltRes(),
						m62fbdisponibilidadvivs.getIndReservaTempUltRes(),
						m62fbdisponibilidadvivs.getFecReservaUltRes(),
						m62fbdisponibilidadvivs.getFecFinReservaUltRes(),
						m62fbdisponibilidadvivs.getTexObservacionesUltRes(),
						m62fbdisponibilidadvivs.getIndDisponible(),
						m62fbdisponibilidadvivs.getCodSituacion(),
						m62fbdisponibilidadvivs.getFecIniSituacion(),
						m62fbdisponibilidadvivs.getFecFinSituacion(),
						m62fbdisponibilidadvivs.getIdPersonaAdju(),
						m62fbdisponibilidadvivs.getCodSitOferta(),
						m62fbdisponibilidadvivs.getFecOferta(),
						m62fbdisponibilidadvivs.getFecFinalizacion(),
						m62fbdisponibilidadvivs.getFecDeclinacion(),
						m62fbdisponibilidadvivs.getFecAceptacion(),
						m62fbdisponibilidadvivs.getIdM62r45t0(),
						m62fbdisponibilidadvivs.getCodRegTenencia());
		return (M62fbDisponibilidadVivs) DataAccessUtils
				.uniqueResult(m62fbdisponibilidadvivsList);
	}

	/**
	 * Removes a single row in the M62fbDisponibilidadVivs table.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            Pagination
	 * @return
	 */
	public void remove(M62fbDisponibilidadVivs m62fbdisponibilidadvivs) {
		String query = "DELETE FROM M62R01V0S00_DISP_VIVS WHERE NUM_VIVIENDA=? AND NUM_EXPEDIENTE=? AND NUM_ULT_EXPED_PROMO=? AND NUM_VIV_PROMO=? AND COD_PROVINCIA=? AND COD_MUNICIPIO=? AND IND_VIV_ADAPTADA=? AND NUM_DORMITORIOS=? AND SUP_UTIL_VIV=? AND COD_REG_ACCESO=? AND IDE_ELEMENTO_GAR=? AND NUM_GAR_PROMO=? AND SUP_UTIL_GAR=? AND IDE_ELEMENTO_TRAS=? AND NUM_TRAS_PROMO=? AND SUP_UTIL_TRAS=? AND IMC_PVP_TOTAL=? AND NUM_ULT_PROP=? AND IND_RENUNCIA_ULT_PROP=? AND IND_REVOCACION_ULT_PROP=? AND IND_RENUN_O_REVOC_ULT_PROP=? AND ID_PERSO_ULT_PROP=? AND NOM_ULT_PROP=? AND NUM_ULT_INQ=? AND FEC_FIN_ULT_INQ=? AND ID_PERSO_ULT_INQ=? AND NOM_ULT_INQ=? AND ID_R38_ULT_RES=? AND NUM_ACUERDO_ULT_RES=? AND IND_RESERVA_TEMP_ULT_RES=? AND FEC_RESERVA_ULT_RES=? AND FEC_FIN_RESERVA_ULT_RES=? AND TEX_OBSERVACIONES_ULT_RES=? AND IND_DISPONIBLE=? AND COD_SITUACION=? AND FEC_INI_SITUACION=? AND FEC_FIN_SITUACION=? AND ID_PERSONA_ADJU=? AND COD_SIT_OFERTA=? AND FEC_OFERTA=? AND FEC_FINALIZACION=? AND FEC_DECLINACION=? AND FEC_ACEPTACION=?";

		this.jdbcTemplate.update(query,
				m62fbdisponibilidadvivs.getNumVivienda(),
				m62fbdisponibilidadvivs.getNumExpediente(),
				m62fbdisponibilidadvivs.getNumUltExpedPromo(),
				m62fbdisponibilidadvivs.getNumVivPromo(),
				m62fbdisponibilidadvivs.getCodProvincia(),
				m62fbdisponibilidadvivs.getCodMunicipio(),
				m62fbdisponibilidadvivs.getIndVivAdaptada(),
				m62fbdisponibilidadvivs.getNumDormitorios(),
				m62fbdisponibilidadvivs.getSupUtilViv(),
				m62fbdisponibilidadvivs.getCodRegAcceso(),
				m62fbdisponibilidadvivs.getIdeElementoGar(),
				m62fbdisponibilidadvivs.getNumGarPromo(),
				m62fbdisponibilidadvivs.getSupUtilGar(),
				m62fbdisponibilidadvivs.getIdeElementoTras(),
				m62fbdisponibilidadvivs.getNumTrasPromo(),
				m62fbdisponibilidadvivs.getSupUtilTras(),
				m62fbdisponibilidadvivs.getImcPvpTotal(),
				m62fbdisponibilidadvivs.getNumUltProp(),
				m62fbdisponibilidadvivs.getIndRenunciaUltProp(),
				m62fbdisponibilidadvivs.getIndRevocacionUltProp(),
				m62fbdisponibilidadvivs.getIndRenunORevocUltProp(),
				m62fbdisponibilidadvivs.getIdPersoUltProp(),
				m62fbdisponibilidadvivs.getNomUltProp(),
				m62fbdisponibilidadvivs.getNumUltInq(),
				m62fbdisponibilidadvivs.getFecFinUltInq(),
				m62fbdisponibilidadvivs.getIdPersoUltInq(),
				m62fbdisponibilidadvivs.getNomUltInq(),
				m62fbdisponibilidadvivs.getIdR38UltRes(),
				m62fbdisponibilidadvivs.getNumAcuerdoUltRes(),
				m62fbdisponibilidadvivs.getIndReservaTempUltRes(),
				m62fbdisponibilidadvivs.getFecReservaUltRes(),
				m62fbdisponibilidadvivs.getFecFinReservaUltRes(),
				m62fbdisponibilidadvivs.getTexObservacionesUltRes(),
				m62fbdisponibilidadvivs.getIndDisponible(),
				m62fbdisponibilidadvivs.getCodSituacion(),
				m62fbdisponibilidadvivs.getFecIniSituacion(),
				m62fbdisponibilidadvivs.getFecFinSituacion(),
				m62fbdisponibilidadvivs.getIdPersonaAdju(),
				m62fbdisponibilidadvivs.getCodSitOferta(),
				m62fbdisponibilidadvivs.getFecOferta(),
				m62fbdisponibilidadvivs.getFecFinalizacion(),
				m62fbdisponibilidadvivs.getFecDeclinacion(),
				m62fbdisponibilidadvivs.getFecAceptacion());
	}

	/**
	 * Removes a single row in the M62fbr46s0s00 table.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            Pagination
	 * @return
	 */
	public void removeVivOfer(M62fbDisponibilidadVivs m62fbdisponibilidadvivs) {
		String query = "DELETE FROM M62R46T0S00 WHERE NUM_VIVIENDA=? AND ID_M62R45T0=? ";
		this.jdbcTemplate.update(query,
				m62fbdisponibilidadvivs.getNumVivienda(),
				m62fbdisponibilidadvivs.getIdM62r45t0());
	}

	/**
	 * Finds a List of rows in the M62fbDisponibilidadVivs table.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            M62fbDisponibilidadVivs
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAll(
			M62fbDisponibilidadVivs m62fbdisponibilidadvivs,
			Pagination pagination) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(m62fbdisponibilidadvivs);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

		if (pagination != null) {
			query = pagination.getPaginationQuery(query);
		}

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

	/**
	 * Counts rows in the M62fbDisponibilidadVivs table.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            M62fbDisponibilidadVivs
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllCount(M62fbDisponibilidadVivs m62fbdisponibilidadvivs) {
		StringBuilder query = new StringBuilder(
				"SELECT COUNT(1) FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(m62fbdisponibilidadvivs);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

	/**
	 * Finds rows in the M62fbDisponibilidadVivs table using like.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            M62fbDisponibilidadVivs
	 * @param pagination
	 *            Pagination
	 * @param startsWith
	 *            Boolean
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAllLike(
			M62fbDisponibilidadVivs m62fbdisponibilidadvivs,
			Pagination pagination, Boolean startsWith) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(
				m62fbdisponibilidadvivs, startsWith);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

		if (pagination != null) {
			query = pagination.getPaginationQuery(query);
		}

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

	/**
	 * Counts rows in the M62fbDisponibilidadVivs table using like.
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            M62fbDisponibilidadVivs
	 * @param startsWith
	 *            Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllLikeCount(
			M62fbDisponibilidadVivs m62fbdisponibilidadvivs, Boolean startsWith) {
		StringBuilder query = new StringBuilder(
				"SELECT COUNT(1) FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(
				m62fbdisponibilidadvivs, startsWith);
		StringBuilder where = new StringBuilder(
				" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

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

		StringBuffer where = new StringBuffer(
				M62fbDisponibilidadVivsDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumVivienda() != null) {
			where.append(" AND t1.NUM_VIVIENDA = ?");
			params.add(m62fbdisponibilidadvivs.getNumVivienda());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumExpediente() != null) {

			where.append(" AND UPPER(t1.NUM_EXPEDIENTE)  like '"
					+ m62fbdisponibilidadvivs.getNumExpediente().toUpperCase()
					+ "'");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumUltExpedPromo() != null) {
			where.append(" AND UPPER(t1.NUM_ULT_EXPED_PROMO) like ? ESCAPE '\\'");
			params.add(m62fbdisponibilidadvivs.getNumUltExpedPromo());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumVivPromo() != null) {
			where.append(" AND t1.NUM_VIV_PROMO = ?");
			params.add(m62fbdisponibilidadvivs.getNumVivPromo());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodProvincia() != null) {
			where.append(" AND t1.COD_PROVINCIA = ?");
			params.add(m62fbdisponibilidadvivs.getCodProvincia());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodMunicipio() != null) {
			where.append(" AND t1.COD_MUNICIPIO = ?");
			params.add(m62fbdisponibilidadvivs.getCodMunicipio());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndVivAdaptada() != null) {
			where.append(" AND t1.IND_VIV_ADAPTADA = ?");
			params.add(m62fbdisponibilidadvivs.getIndVivAdaptada());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumDormitorios() != null) {
			where.append(" AND t1.NUM_DORMITORIOS = ?");
			params.add(m62fbdisponibilidadvivs.getNumDormitorios());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getSupUtilViv() != null) {
			where.append(" AND t1.SUP_UTIL_VIV = ?");
			params.add(m62fbdisponibilidadvivs.getSupUtilViv());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodRegAcceso() != null) {
			where.append(" AND t1.COD_REG_ACCESO = ?");
			params.add(m62fbdisponibilidadvivs.getCodRegAcceso());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodRegTenencia() != null) {
			where.append(" AND t1.COD_REG_TENENCIA = ?");
			params.add(m62fbdisponibilidadvivs.getCodRegTenencia());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdeElementoGar() != null) {
			where.append(" AND t1.IDE_ELEMENTO_GAR = ?");
			params.add(m62fbdisponibilidadvivs.getIdeElementoGar());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumGarPromo() != null) {
			where.append(" AND t1.NUM_GAR_PROMO = ?");
			params.add(m62fbdisponibilidadvivs.getNumGarPromo());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getSupUtilGar() != null) {
			where.append(" AND t1.SUP_UTIL_GAR = ?");
			params.add(m62fbdisponibilidadvivs.getSupUtilGar());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdeElementoTras() != null) {
			where.append(" AND t1.IDE_ELEMENTO_TRAS = ?");
			params.add(m62fbdisponibilidadvivs.getIdeElementoTras());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumTrasPromo() != null) {
			where.append(" AND t1.NUM_TRAS_PROMO = ?");
			params.add(m62fbdisponibilidadvivs.getNumTrasPromo());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getSupUtilTras() != null) {
			where.append(" AND t1.SUP_UTIL_TRAS = ?");
			params.add(m62fbdisponibilidadvivs.getSupUtilTras());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getImcPvpTotal() != null) {
			where.append(" AND t1.IMC_PVP_TOTAL = ?");
			params.add(m62fbdisponibilidadvivs.getImcPvpTotal());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumUltProp() != null) {
			where.append(" AND t1.NUM_ULT_PROP = ?");
			params.add(m62fbdisponibilidadvivs.getNumUltProp());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndRenunciaUltProp() != null) {
			where.append(" AND t1.IND_RENUNCIA_ULT_PROP = ?");
			params.add(m62fbdisponibilidadvivs.getIndRenunciaUltProp());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndRevocacionUltProp() != null) {
			where.append(" AND t1.IND_REVOCACION_ULT_PROP = ?");
			params.add(m62fbdisponibilidadvivs.getIndRevocacionUltProp());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndRenunORevocUltProp() != null) {
			where.append(" AND t1.IND_RENUN_O_REVOC_ULT_PROP = ?");
			params.add(m62fbdisponibilidadvivs.getIndRenunORevocUltProp());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdPersoUltProp() != null) {
			where.append(" AND t1.ID_PERSO_ULT_PROP = ?");
			params.add(m62fbdisponibilidadvivs.getIdPersoUltProp());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNomUltProp() != null) {
			where.append(" AND t1.NOM_ULT_PROP = ?");
			params.add(m62fbdisponibilidadvivs.getNomUltProp());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumUltInq() != null) {
			where.append(" AND t1.NUM_ULT_INQ = ?");
			params.add(m62fbdisponibilidadvivs.getNumUltInq());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinUltInq() != null) {
			where.append(" AND t1.FEC_FIN_ULT_INQ = ?");
			params.add(m62fbdisponibilidadvivs.getFecFinUltInq());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdPersoUltInq() != null) {
			where.append(" AND t1.ID_PERSO_ULT_INQ = ?");
			params.add(m62fbdisponibilidadvivs.getIdPersoUltInq());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNomUltInq() != null) {
			where.append(" AND t1.NOM_ULT_INQ = ?");
			params.add(m62fbdisponibilidadvivs.getNomUltInq());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdR38UltRes() != null) {
			where.append(" AND t1.ID_R38_ULT_RES = ?");
			params.add(m62fbdisponibilidadvivs.getIdR38UltRes());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumAcuerdoUltRes() != null) {
			where.append(" AND t1.NUM_ACUERDO_ULT_RES = ?");
			params.add(m62fbdisponibilidadvivs.getNumAcuerdoUltRes());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndReservaTempUltRes() != null) {
			where.append(" AND t1.IND_RESERVA_TEMP_ULT_RES = ?");
			params.add(m62fbdisponibilidadvivs.getIndReservaTempUltRes());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecReservaUltRes() != null) {
			where.append(" AND t1.FEC_RESERVA_ULT_RES = ?");
			params.add(m62fbdisponibilidadvivs.getFecReservaUltRes());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinReservaUltRes() != null) {
			where.append(" AND t1.FEC_FIN_RESERVA_ULT_RES = ?");
			params.add(m62fbdisponibilidadvivs.getFecFinReservaUltRes());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getTexObservacionesUltRes() != null) {
			where.append(" AND t1.TEX_OBSERVACIONES_ULT_RES = ?");
			params.add(m62fbdisponibilidadvivs.getTexObservacionesUltRes());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndDisponible() != null) {
			where.append(" AND t1.IND_DISPONIBLE = ?");
			params.add(m62fbdisponibilidadvivs.getIndDisponible());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodSituacion() != null) {
			where.append(" AND t1.COD_SITUACION = ?");
			params.add(m62fbdisponibilidadvivs.getCodSituacion());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecIncorporacionCat() != null) {
			where.append(" AND t1.FEC_INCORPORACION_CAT = ?");
			params.add(m62fbdisponibilidadvivs.getFecIncorporacionCat());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecIniSituacion() != null) {
			where.append(" AND t1.FEC_INI_SITUACION = ?");
			params.add(m62fbdisponibilidadvivs.getFecIniSituacion());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinSituacion() != null) {
			where.append(" AND t1.FEC_FIN_SITUACION = ?");
			params.add(m62fbdisponibilidadvivs.getFecFinSituacion());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdPersonaAdju() != null) {
			where.append(" AND t1.ID_PERSONA_ADJU = ?");
			params.add(m62fbdisponibilidadvivs.getIdPersonaAdju());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodSitOferta() != null) {
			where.append(" AND t1.COD_SIT_OFERTA = ?");
			params.add(m62fbdisponibilidadvivs.getCodSitOferta());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecOferta() != null) {
			where.append(" AND t1.FEC_OFERTA = ?");
			params.add(m62fbdisponibilidadvivs.getFecOferta());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinalizacion() != null) {
			where.append(" AND t1.FEC_FINALIZACION = ?");
			params.add(m62fbdisponibilidadvivs.getFecFinalizacion());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecDeclinacion() != null) {
			where.append(" AND t1.FEC_DECLINACION = ?");
			params.add(m62fbdisponibilidadvivs.getFecDeclinacion());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecAceptacion() != null) {
			where.append(" AND t1.FEC_ACEPTACION = ?");
			params.add(m62fbdisponibilidadvivs.getFecAceptacion());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdM62r45t0() != null) {
			where.append(" AND t1.ID_M62R45T0 = ?");
			params.add(m62fbdisponibilidadvivs.getIdM62r45t0());
		}

		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 M62fbDisponibilidadVivs entity
	 * 
	 * @param m62fbdisponibilidadvivs
	 *            M62fbDisponibilidadVivs 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, ?> getWhereLikeMap(
			M62fbDisponibilidadVivs m62fbdisponibilidadvivs, Boolean startsWith) {

		StringBuffer where = new StringBuffer(
				M62fbDisponibilidadVivsDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumVivienda() != null) {
			where.append(" AND t1.NUM_VIVIENDA = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumExpediente() != null) {

			where.append(" AND UPPER(t1.NUM_EXPEDIENTE)  like '"
					+ m62fbdisponibilidadvivs.getNumExpediente().toUpperCase()
					+ "'");

			where.append(" AND t1.NUM_EXPEDIENTE IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumUltExpedPromo() != null) {
			where.append(" AND UPPER(t1.NUM_ULT_EXPED_PROMO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getNumUltExpedPromo()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getNumUltExpedPromo()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.NUM_ULT_EXPED_PROMO IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumVivPromo() != null) {
			where.append(" AND UPPER(t1.NUM_VIV_PROMO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getNumVivPromo()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getNumVivPromo()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.NUM_VIV_PROMO IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodProvincia() != null) {
			where.append(" AND UPPER(t1.COD_PROVINCIA) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getCodProvincia()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getCodProvincia()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.COD_PROVINCIA IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodMunicipio() != null) {
			where.append(" AND UPPER(t1.COD_MUNICIPIO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getCodMunicipio()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getCodMunicipio()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.COD_MUNICIPIO IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndVivAdaptada() != null) {
			where.append(" AND UPPER(t1.IND_VIV_ADAPTADA) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getIndVivAdaptada()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getIndVivAdaptada()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.IND_VIV_ADAPTADA IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumDormitorios() != null) {
			where.append(" AND t1.NUM_DORMITORIOS = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getSupUtilViv() != null) {
			where.append(" AND t1.SUP_UTIL_VIV = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodRegAcceso() != null) {
			where.append(" AND UPPER(t1.COD_REG_ACCESO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getCodRegAcceso()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getCodRegAcceso()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.COD_REG_ACCESO IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodRegTenencia() != null) {
			where.append(" AND t1.COD_REG_TENENCIA = ? ");
			params.add(m62fbdisponibilidadvivs.getCodRegTenencia());
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdeElementoGar() != null) {
			where.append(" AND t1.IDE_ELEMENTO_GAR = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumGarPromo() != null) {
			where.append(" AND UPPER(t1.NUM_GAR_PROMO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getNumGarPromo()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getNumGarPromo()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.NUM_GAR_PROMO IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getSupUtilGar() != null) {
			where.append(" AND t1.SUP_UTIL_GAR = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdeElementoTras() != null) {
			where.append(" AND t1.IDE_ELEMENTO_TRAS = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumTrasPromo() != null) {
			where.append(" AND UPPER(t1.NUM_TRAS_PROMO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getNumTrasPromo()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getNumTrasPromo()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.NUM_TRAS_PROMO IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getSupUtilTras() != null) {
			where.append(" AND t1.SUP_UTIL_TRAS = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getImcPvpTotal() != null) {
			where.append(" AND t1.IMC_PVP_TOTAL = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumUltProp() != null) {
			where.append(" AND t1.NUM_ULT_PROP = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndRenunciaUltProp() != null) {
			where.append(" AND UPPER(t1.IND_RENUNCIA_ULT_PROP) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getIndRenunciaUltProp()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getIndRenunciaUltProp()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.IND_RENUNCIA_ULT_PROP IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndRevocacionUltProp() != null) {
			where.append(" AND UPPER(t1.IND_REVOCACION_ULT_PROP) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getIndRevocacionUltProp()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getIndRevocacionUltProp()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.IND_REVOCACION_ULT_PROP IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndRenunORevocUltProp() != null) {
			where.append(" AND UPPER(t1.IND_RENUN_O_REVOC_ULT_PROP) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getIndRenunORevocUltProp()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getIndRenunORevocUltProp()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.IND_RENUN_O_REVOC_ULT_PROP IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdPersoUltProp() != null) {
			where.append(" AND t1.ID_PERSO_ULT_PROP = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNomUltProp() != null) {
			where.append(" AND UPPER(t1.NOM_ULT_PROP) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getNomUltProp()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getNomUltProp().toUpperCase()
						+ "%");
			}
			where.append(" AND t1.NOM_ULT_PROP IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumUltInq() != null) {
			where.append(" AND t1.NUM_ULT_INQ = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinUltInq() != null) {
			where.append(" AND t1.FEC_FIN_ULT_INQ = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdPersoUltInq() != null) {
			where.append(" AND t1.ID_PERSO_ULT_INQ = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNomUltInq() != null) {
			where.append(" AND UPPER(t1.NOM_ULT_INQ) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getNomUltInq().toUpperCase()
						+ "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getNomUltInq().toUpperCase()
						+ "%");
			}
			where.append(" AND t1.NOM_ULT_INQ IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdR38UltRes() != null) {
			where.append(" AND t1.ID_R38_ULT_RES = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getNumAcuerdoUltRes() != null) {
			where.append(" AND t1.NUM_ACUERDO_ULT_RES = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndReservaTempUltRes() != null) {
			where.append(" AND UPPER(t1.IND_RESERVA_TEMP_ULT_RES) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getIndReservaTempUltRes()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getIndReservaTempUltRes()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.IND_RESERVA_TEMP_ULT_RES IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecReservaUltRes() != null) {
			where.append(" AND t1.FEC_RESERVA_ULT_RES = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinReservaUltRes() != null) {
			where.append(" AND t1.FEC_FIN_RESERVA_ULT_RES = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getTexObservacionesUltRes() != null) {
			where.append(" AND UPPER(t1.TEX_OBSERVACIONES_ULT_RES) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getTexObservacionesUltRes()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getTexObservacionesUltRes()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.TEX_OBSERVACIONES_ULT_RES IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIndDisponible() != null) {
			where.append(" AND UPPER(t1.IND_DISPONIBLE) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getIndDisponible()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getIndDisponible()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.IND_DISPONIBLE IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodSituacion() != null) {
			where.append(" AND UPPER(t1.COD_SITUACION) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getCodSituacion()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getCodSituacion()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.COD_SITUACION IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecIncorporacionCat() != null) {
			where.append(" AND t1.FEC_INCORPORACION_CAT = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecIniSituacion() != null) {
			where.append(" AND t1.FEC_INI_SITUACION = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinSituacion() != null) {
			where.append(" AND t1.FEC_FIN_SITUACION = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdPersonaAdju() != null) {
			where.append(" AND t1.ID_PERSONA_ADJU = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getCodSitOferta() != null) {
			where.append(" AND UPPER(t1.COD_SIT_OFERTA) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(m62fbdisponibilidadvivs.getCodSitOferta()
						.toUpperCase() + "%");
			} else {
				params.add("%"
						+ m62fbdisponibilidadvivs.getCodSitOferta()
								.toUpperCase() + "%");
			}
			where.append(" AND t1.COD_SIT_OFERTA IS NOT NULL");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecOferta() != null) {
			where.append(" AND t1.FEC_OFERTA = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecFinalizacion() != null) {
			where.append(" AND t1.FEC_FINALIZACION = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecDeclinacion() != null) {
			where.append(" AND t1.FEC_DECLINACION = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getFecAceptacion() != null) {
			where.append(" AND t1.FEC_ACEPTACION = ?");
		}
		if (m62fbdisponibilidadvivs != null
				&& m62fbdisponibilidadvivs.getIdM62r45t0() != null) {
			where.append(" AND t1.ID_M62R45T0 = ?");
			params.add(m62fbdisponibilidadvivs.getIdM62r45t0());
		}

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

		return mapWhere;
	}

	/**
	 * Finds rows in the catalogo table using like.
	 * 
	 * @param numVivienda
	 *            BigDecimal
	 * @param numExpediente
	 *            String
	 * @param fecIncorporacionCatDesde
	 *            Date
	 * @param fecIncorporacionCatHasta
	 *            Date
	 * @param codProvincia
	 *            String
	 * @param codMunicipio
	 *            String
	 * @param fecIniSituacionDesde
	 *            Date
	 * @param fecIniSituacionHasta
	 *            Date
	 * @param codSituacion
	 *            String
	 * @param fecFinSituacionDesde
	 *            Date
	 * @param fecFinSituacionHasta
	 *            Date
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	public List<M62fbDisponibilidadVivs> findAllPersonalizado(
			BigDecimal numVivienda, String numExpediente,
			Date fecIncorporacionCatDesde, Date fecIncorporacionCatHasta,
			String codProvincia, String codMunicipio,
			Date fecIniSituacionDesde, Date fecIniSituacionHasta,
			String codSituacion, Date fecFinSituacionDesde,
			Date fecFinSituacionHasta, Pagination pagination) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer(
				"SELECT   t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltro(numVivienda, numExpediente,
						fecIncorporacionCatDesde, fecIncorporacionCatHasta,
						codProvincia, codMunicipio, fecIniSituacionDesde,
						fecIniSituacionHasta, codSituacion,
						fecFinSituacionDesde, fecFinSituacionHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		// order
		StringBuffer order = new StringBuffer(3000);
		if (pagination != null) {
			if (pagination.getSort() != null) {
				order.append(" ORDER BY " + pagination.getSort() + " "
						+ pagination.getAscDsc());
				query.append(order);
			}
			query = new StringBuffer(UdaUtils.getQueryLimits(
					pagination, query.toString()));
		}
		return (List<M62fbDisponibilidadVivs>) this.jdbcTemplate.query(
				query.toString(), rwMap, params.toArray());
	}

	/**
	 * Counts rows in the catalogo .
	 * 
	 * @param numVivienda
	 *            BigDecimal
	 * @param numExpediente
	 *            String
	 * @param fecIncorporacionCatDesde
	 *            Date
	 * @param fecIncorporacionCatHasta
	 *            Date
	 * @param codProvincia
	 *            String
	 * @param codMunicipio
	 *            String
	 * @param fecIniSituacionDesde
	 *            Date
	 * @param fecIniSituacionHasta
	 *            Date
	 * @param codSituacion
	 *            String
	 * @param fecFinSituacionDesde
	 *            Date
	 * @param fecFinSituacionHasta
	 *            Date
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllPersonalizadoCount(BigDecimal numVivienda,
			String numExpediente, Date fecIncorporacionCatDesde,
			Date fecIncorporacionCatHasta, String codProvincia,
			String codMunicipio, Date fecIniSituacionDesde,
			Date fecIniSituacionHasta, String codSituacion,
			Date fecFinSituacionDesde, Date fecFinSituacionHasta) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer("SELECT COUNT(1) ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltro(numVivienda, numExpediente,
						fecIncorporacionCatDesde, fecIncorporacionCatHasta,
						codProvincia, codMunicipio, fecIniSituacionDesde,
						fecIniSituacionHasta, codSituacion,
						fecFinSituacionDesde, fecFinSituacionHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}

	/**
	 * Crea la where para el filtro personalizado
	 * 
	 * @param numVivienda
	 *            BigDecimal
	 * @param numExpediente
	 *            String
	 * @param fecIncorporacionCatDesde
	 *            Date
	 * @param fecIncorporacionCatHasta
	 *            Date
	 * @param codProvincia
	 *            String
	 * @param codMunicipio
	 *            String
	 * @param fecIniSituacionDesde
	 *            Date
	 * @param fecIniSituacionHasta
	 *            Date
	 * @param codSituacion
	 *            String
	 * @param fecFinSituacionDesde
	 *            Date
	 * @param fecFinSituacionHasta
	 *            Date
	 * @return HashMap
	 */
	private HashMap<String, Object> getWhereFiltro(BigDecimal numVivienda,
			String numExpediente, Date fecIncorporacionCatDesde,
			Date fecIncorporacionCatHasta, String codProvincia,
			String codMunicipio, Date fecIniSituacionDesde,
			Date fecIniSituacionHasta, String codSituacion,
			Date fecFinSituacionDesde, Date fecFinSituacionHasta) {
		StringBuffer where = new StringBuffer(3000);
		List<Object> params = new ArrayList<Object>();
		HashMap<String, Object> hm = new HashMap<String, Object>();

		if (numVivienda != null) {
			where.append(" AND t1.NUM_VIVIENDA = ?");
			params.add(numVivienda);
		}
		if (numExpediente != null) {

			where.append(" AND UPPER(t1.NUM_EXPEDIENTE)  like '"
					+ numExpediente.toUpperCase() + "'");
		}
		if (fecIncorporacionCatDesde != null) {
			where.append(" AND t1.FEC_INCORPORACION_CAT >= ?");
			params.add(fecIncorporacionCatDesde);
		}
		if (fecIncorporacionCatHasta != null) {
			where.append(" AND t1.FEC_INCORPORACION_CAT <= ?");
			params.add(fecIncorporacionCatHasta);
		}
		if (codProvincia != null) {
			where.append(" AND t1.COD_PROVINCIA = ?");
			params.add(codProvincia);
		}
		if (codMunicipio != null) {
			where.append(" AND t1.COD_MUNICIPIO = ?");
			params.add(codMunicipio);
		}
		if (fecIniSituacionDesde != null) {
			where.append(" AND t1.FEC_INI_SITUACION >= ?");
			params.add(fecIniSituacionDesde);
		}
		if (fecIniSituacionHasta != null) {
			where.append(" AND t1.FEC_INI_SITUACION <= ?");
			params.add(fecIniSituacionHasta);
		}
		if (fecFinSituacionDesde != null) {
			where.append(" AND t1.FEC_FIN_SITUACION >= ?");
			params.add(fecFinSituacionDesde);
		}
		if (fecFinSituacionHasta != null) {
			where.append(" AND t1.FEC_FIN_SITUACION <= ?");
			params.add(fecFinSituacionHasta);
		}
		if (codSituacion != null) {
			where.append(" AND t1.COD_SITUACION = ?");
			params.add(codSituacion);
		}
		hm.put("where", where.toString());
		hm.put("params", params);
		return hm;
	}

	/**
	 * Finds rows in the catalogoVivDisp table using like.
	 * 
	 * @param numViviendaFiltro
	 *            Long
	 * @param numExpedienteFiltro
	 *            String
	 * @param codProvinciaFiltro
	 *            String
	 * @param codMunicipioFiltro
	 *            String
	 * @param codRegAccesoFiltro
	 *            String
	 * @param indVivAdaptadaFiltro
	 *            String
	 * @param numDormitoriosDesdeFiltro
	 *            Integer
	 * @param numDormitoriosHastaFiltro
	 *            Integer
	 * @param supUtilVivDesdeFiltro
	 *            BigDecimal
	 * @param supUtilVivHastaFiltro
	 *            BigDecimal
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAllPersonalizadoVivDisp(
			BigDecimal numVivienda, String numExpediente, String codProvincia,
			String codMunicipio, String codRegAcceso, String codRegTenencia,
			String indVivAdaptada, Integer numDormitoriosDesde,
			Integer numDormitoriosHasta, BigDecimal supUtilVivDesde,
			BigDecimal supUtilVivHasta, BigDecimal idR45, Pagination pagination) {
		StringBuffer where = new StringBuffer(3000);
		if (idR45 != null) {
			where.append(" WHERE 1=1 AND t1.COD_SITUACION IS NOT NULL AND (NVL(t1.ID_M62R45T0,0) <> "
					+ idR45.toString()
					+ ") AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		} else {
			where.append(" WHERE 1=1 AND t1.COD_SITUACION IS NOT NULL AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		}
		StringBuffer query = new StringBuffer(
				"SELECT   t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivDisp(numVivienda, numExpediente, codProvincia,
						codMunicipio, codRegAcceso, codRegTenencia,
						indVivAdaptada, numDormitoriosDesde,
						numDormitoriosHasta, supUtilVivDesde, supUtilVivHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		// order
		StringBuffer order = new StringBuffer(3000);
		if (pagination != null) {
			if (pagination.getSort() != null) {
				order.append(" ORDER BY " + pagination.getSort() + " "
						+ pagination.getAscDsc());
				query.append(order);
			}
			query = new StringBuffer(UdaUtils.getQueryLimits(
					pagination, query.toString()));
		}
		return (List<M62fbDisponibilidadVivs>) this.jdbcTemplate.query(
				query.toString(), rwMap, params.toArray());
	}

	/**
	 * Counts rows in the catalogo .
	 * 
	 * @param numViviendaFiltro
	 *            Long
	 * @param numExpedienteFiltro
	 *            String
	 * @param codProvinciaFiltro
	 *            String
	 * @param codMunicipioFiltro
	 *            String
	 * @param codRegAccesoFiltro
	 *            String
	 * @param indVivAdaptadaFiltro
	 *            String
	 * @param numDormitoriosDesdeFiltro
	 *            BigDecimal
	 * @param numDormitoriosHastaFiltro
	 *            BigDecimal
	 * @param supUtilVivDesdeFiltro
	 *            BigDecimal
	 * @param supUtilVivHastaFiltro
	 *            BigDecimal
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllPersonalizadoVivDispCount(BigDecimal numVivienda,
			String numExpediente, String codProvincia, String codMunicipio,
			String codRegAcceso, String codRegTenencia, String indVivAdaptada,
			Integer numDormitoriosDesde, Integer numDormitoriosHasta,
			BigDecimal supUtilVivDesde, BigDecimal supUtilVivHasta,
			BigDecimal idR45) {
		StringBuffer where = new StringBuffer(3000);
		if (idR45 != null) {
			where.append(" WHERE 1=1 AND t1.COD_SITUACION IS NOT NULL AND (NVL(t1.ID_M62R45T0,0) <> "
					+ idR45.toString()
					+ ") AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		} else {
			where.append(" WHERE 1=1 AND t1.COD_SITUACION IS NOT NULL AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");
		}
		StringBuffer query = new StringBuffer("SELECT COUNT(1) ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1,(SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10 , M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivDisp(numVivienda, numExpediente, codProvincia,
						codMunicipio, codRegAcceso, codRegTenencia,
						indVivAdaptada, numDormitoriosDesde,
						numDormitoriosHasta, supUtilVivDesde, supUtilVivHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}

	/**
	 * Crea la where para el filtro personalizado de viv disp
	 * 
	 * @param numViviendaFiltro
	 *            Long
	 * @param numExpedienteFiltro
	 *            String
	 * @param codProvinciaFiltro
	 *            String
	 * @param codMunicipioFiltro
	 *            String
	 * @param codRegAccesoFiltro
	 *            String
	 * @param indVivAdaptadaFiltro
	 *            String
	 * @param numDormitoriosDesdeFiltro
	 *            BigDecimal
	 * @param numDormitoriosHastaFiltro
	 *            BigDecimal
	 * @param supUtilVivDesdeFiltro
	 *            BigDecimal
	 * @param supUtilVivHastaFiltro
	 *            BigDecimal
	 * @return HashMap
	 */
	private HashMap<String, Object> getWhereFiltroVivDisp(
			BigDecimal numVivienda, String numExpediente, String codProvincia,
			String codMunicipio, String codRegAcceso, String codRegTenencia,
			String indVivAdaptada, Integer numDormitoriosDesde,
			Integer numDormitoriosHasta, BigDecimal supUtilVivDesde,
			BigDecimal supUtilVivHasta) {
		StringBuffer where = new StringBuffer(3000);
		List<Object> params = new ArrayList<Object>();
		HashMap<String, Object> hm = new HashMap<String, Object>();

		if (numVivienda != null) {
			where.append(" AND t1.NUM_VIVIENDA = ?");
			params.add(numVivienda);
		}
		if (numExpediente != null && numExpediente.toString() != "") {
			where.append(" AND UPPER(t1.NUM_EXPEDIENTE)  like '"
					+ numExpediente.toUpperCase() + "'");
		}
		if (codProvincia != null) {
			where.append(" AND t1.COD_PROVINCIA = ?");
			params.add(codProvincia);
		}
		if (codMunicipio != null) {
			where.append(" AND t1.COD_MUNICIPIO = ?");
			params.add(codMunicipio);
		}
		if (codRegAcceso != null) {
			where.append(" AND t1.COD_REG_ACCESO = ?");
			params.add(codRegAcceso);
		}
		if (codRegTenencia != null) {
			where.append(" AND t1.COD_REG_TENENCIA = ?");
			params.add(codRegTenencia);
		}
		if (indVivAdaptada != null) {
			where.append(" AND t1.IND_VIV_ADAPTADA = ?");
			params.add(indVivAdaptada);
		}
		if (numDormitoriosDesde != null) {
			where.append(" AND t1.NUM_DORMITORIOS >= ?");
			params.add(numDormitoriosDesde);
		}
		if (numDormitoriosHasta != null) {
			where.append(" AND t1.NUM_DORMITORIOS <= ?");
			params.add(numDormitoriosHasta);
		}
		if (supUtilVivDesde != null) {
			where.append(" AND t1.SUP_UTIL_VIV >= ?");
			params.add(supUtilVivDesde);
		}
		if (supUtilVivHasta != null) {
			where.append(" AND t1.SUP_UTIL_VIV <= ?");
			params.add(supUtilVivHasta);
		}
		/* where.append(" AND t1.COD_SITUACION = 'D' "); */
		hm.put("where", where.toString());
		hm.put("params", params);
		return hm;
	}

	/**
	 * Finds rows in the catalogoVivEnOfer table using like.
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAllPersonalizadoVivEnOfer(
			BigDecimal idM62r45t0, Pagination pagination) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer(
				"SELECT   t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R46T0S00 t2, M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivEnOfer(idM62r45t0));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		// order
		StringBuffer order = new StringBuffer(3000);
		if (pagination != null) {
			if (pagination.getSort() != null) {
				order.append(" ORDER BY " + pagination.getSort() + " "
						+ pagination.getAscDsc());
				query.append(order);
			}
			query = new StringBuffer(UdaUtils.getQueryLimits(
					pagination, query.toString()));
		}
		return (List<M62fbDisponibilidadVivs>) this.jdbcTemplate.query(
				query.toString(), rwMap, params.toArray());
	}

	/**
	 * Counts rows in the catalogoVivEnOfer .
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllPersonalizadoVivEnOferCount(BigDecimal idM62r45t0) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+)  ");

		StringBuffer query = new StringBuffer("SELECT COUNT(1) ");
		query.append("FROM M62R46T0S00 t2, M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivEnOfer(idM62r45t0));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}

	/**
	 * Crea la where para el filtro personalizado de viv en oferta
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return HashMap
	 */
	private HashMap<String, Object> getWhereFiltroVivEnOfer(
			BigDecimal idM62r45t0) {
		StringBuffer where = new StringBuffer(3000);
		List<Object> params = new ArrayList<Object>();
		HashMap<String, Object> hm = new HashMap<String, Object>();

		if (idM62r45t0 != null) {
			where.append(" AND t2.ID_M62R45T0 = ? AND t2.NUM_VIVIENDA = t1.NUM_VIVIENDA ");
			params.add(idM62r45t0);
		} else {
			/* para que no devuelva nada */
			where.append(" AND t2.ID_M62R45T0 = -1 AND t2.NUM_VIVIENDA = t1.NUM_VIVIENDA ");
		}
		hm.put("where", where.toString());
		hm.put("params", params);
		return hm;
	}

	/**
	 * Finds rows in the findAllListadoDeVivParaOfertar table using like.
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAllListadoDeVivParaOfertar(
			BigDecimal idM62r45t0, Pagination pagination) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer(
				"SELECT   t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereListadoDeVivParaOfertar(idM62r45t0));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		// order
		StringBuffer order = new StringBuffer(3000);
		if (pagination != null) {
			if (pagination.getSort() != null) {
				order.append(" ORDER BY " + pagination.getSort() + " "
						+ pagination.getAscDsc());
				query.append(order);
			}
			query = new StringBuffer(UdaUtils.getQueryLimits(
					pagination, query.toString()));
		}
		return (List<M62fbDisponibilidadVivs>) this.jdbcTemplate.query(
				query.toString(), rwMap, params.toArray());
	}

	/**
	 * Counts rows in the catalogoVivEnOfer .
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllListadoDeVivParaOfertarCount(BigDecimal idM62r45t0) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer("SELECT COUNT(1) ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereListadoDeVivParaOfertar(idM62r45t0));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}

	/**
	 * Crea la where para el filtro personalizado de viv en oferta
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return HashMap
	 */

	private HashMap<String, Object> getWhereListadoDeVivParaOfertar(
			BigDecimal idM62r45t0) {
		StringBuffer where = new StringBuffer(3000);
		List<Object> params = new ArrayList<Object>();
		HashMap<String, Object> hm = new HashMap<String, Object>();

		where.append(" AND t1.COD_SITUACION = 'D' ");
		hm.put("where", where.toString());
		hm.put("params", params);
		return hm;
	}

	/**
	 * Finds rows in the findAllListadoParaIncEnCatalogo table using like.
	 * 
	 * @param numViviendaFiltro
	 *            Long
	 * @param numExpedienteFiltro
	 *            String
	 * @param codProvinciaFiltro
	 *            String
	 * @param codMunicipioFiltro
	 *            String
	 * @param codRegAccesoFiltro
	 *            String
	 * @param indVivAdaptadaFiltro
	 *            String
	 * @param numDormitoriosDesdeFiltro
	 *            Integer
	 * @param numDormitoriosHastaFiltro
	 *            Integer
	 * @param supUtilVivDesdeFiltro
	 *            BigDecimal
	 * @param supUtilVivHastaFiltro
	 *            BigDecimal
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAllListadoParaIncEnCatalogo(
			BigDecimal numVivienda, String numExpediente, String codProvincia,
			String codMunicipio, String codRegAcceso, String codRegTenencia,
			String indVivAdaptada, Integer numDormitoriosDesde,
			Integer numDormitoriosHasta, BigDecimal supUtilVivDesde,
			BigDecimal supUtilVivHasta, Pagination pagination) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.NUM_VIVIENDA NOT IN (SELECT t3.NUM_VIVIENDA FROM M62R44T0S00 t3) AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer(
				"SELECT   t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivDisp(numVivienda, numExpediente, codProvincia,
						codMunicipio, codRegAcceso, codRegTenencia,
						indVivAdaptada, numDormitoriosDesde,
						numDormitoriosHasta, supUtilVivDesde, supUtilVivHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		// order
		StringBuffer order = new StringBuffer(3000);
		if (pagination != null) {
			if (pagination.getSort() != null) {
				order.append(" ORDER BY " + pagination.getSort() + " "
						+ pagination.getAscDsc());
				query.append(order);
			}
			query = new StringBuffer(UdaUtils.getQueryLimits(
					pagination, query.toString()));
		}
		return (List<M62fbDisponibilidadVivs>) this.jdbcTemplate.query(
				query.toString(), rwMap, params.toArray());
	}

	/**
	 * Counts rows in the findAllListadoParaIncEnCatalogoCount .
	 * 
	 * @param numViviendaFiltro
	 *            Long
	 * @param numExpedienteFiltro
	 *            String
	 * @param codProvinciaFiltro
	 *            String
	 * @param codMunicipioFiltro
	 *            String
	 * @param codRegAccesoFiltro
	 *            String
	 * @param indVivAdaptadaFiltro
	 *            String
	 * @param numDormitoriosDesdeFiltro
	 *            Integer
	 * @param numDormitoriosHastaFiltro
	 *            Integer
	 * @param supUtilVivDesdeFiltro
	 *            BigDecimal
	 * @param supUtilVivHastaFiltro
	 *            BigDecimal
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllListadoParaIncEnCatalogoCount(BigDecimal numVivienda,
			String numExpediente, String codProvincia, String codMunicipio,
			String codRegAcceso, String codRegTenencia, String indVivAdaptada,
			Integer numDormitoriosDesde, Integer numDormitoriosHasta,
			BigDecimal supUtilVivDesde, BigDecimal supUtilVivHasta) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.NUM_VIVIENDA NOT IN (SELECT t3.NUM_VIVIENDA FROM M62R44T0S00 t3) AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer("SELECT COUNT(1) ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivDisp(numVivienda, numExpediente, codProvincia,
						codMunicipio, codRegAcceso, codRegTenencia,
						indVivAdaptada, numDormitoriosDesde,
						numDormitoriosHasta, supUtilVivDesde, supUtilVivHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}

	/**
	 * Finds rows in the catalogoVivEnOfer table using like.
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAllPersonalizadoVivEnCatalogo(
			BigDecimal numVivienda, String numExpediente,
			String fecIncCatDesde, String fecIncCatHasta, String codProvincia,
			String codMunicipio, String codSitCat, String fecIniSitDesde,
			String fecIniSitHasta, String fecFinSitDesde,
			String fecFinSitHasta, Pagination pagination) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.NUM_VIVIENDA = t2.NUM_VIVIENDA AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer(
				"SELECT   t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, M62R44T0S00 t2, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivEnCatalogo(numVivienda, numExpediente,
						fecIncCatDesde, fecIncCatHasta, codProvincia,
						codMunicipio, codSitCat, fecIniSitDesde,
						fecIniSitHasta, fecFinSitDesde, fecFinSitHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		// order
		StringBuffer order = new StringBuffer(3000);
		if (pagination != null) {
			if (pagination.getSort() != null) {
				order.append(" ORDER BY " + pagination.getSort() + " "
						+ pagination.getAscDsc());
				query.append(order);
			}
			query = new StringBuffer(UdaUtils.getQueryLimits(
					pagination, query.toString()));
		}
		return (List<M62fbDisponibilidadVivs>) this.jdbcTemplate.query(
				query.toString(), rwMap, params.toArray());
	}

	/**
	 * Counts rows in the catalogoVivEnOfer .
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllPersonalizadoVivEnCatalogoCount(BigDecimal numVivienda,
			String numExpediente, String fecIncCatDesde, String fecIncCatHasta,
			String codProvincia, String codMunicipio, String codSitCat,
			String fecIniSitDesde, String fecIniSitHasta,
			String fecFinSitDesde, String fecFinSitHasta) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.NUM_VIVIENDA = t2.NUM_VIVIENDA AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer("SELECT COUNT(1) ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, M62R44T0S00 t2, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivEnCatalogo(numVivienda, numExpediente,
						fecIncCatDesde, fecIncCatHasta, codProvincia,
						codMunicipio, codSitCat, fecIniSitDesde,
						fecIniSitHasta, fecFinSitDesde, fecFinSitHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}

	/**
	 * Crea la where para el filtro personalizado de viv en oferta
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return HashMap
	 */
	private HashMap<String, Object> getWhereFiltroVivEnCatalogo(

	BigDecimal numVivienda, String numExpediente, String fecIncCatDesde,
			String fecIncCatHasta, String codProvincia, String codMunicipio,
			String codSitCat, String fecIniSitDesde, String fecIniSitHasta,
			String fecFinSitDesde, String fecFinSitHasta) {
		StringBuffer where = new StringBuffer(3000);
		List<Object> params = new ArrayList<Object>();
		HashMap<String, Object> hm = new HashMap<String, Object>();

		if (numVivienda != null) {
			where.append(" AND t1.NUM_VIVIENDA = ?");
			params.add(numVivienda);
		}
		if (numExpediente != null) {
			// numExpediente.replace('*', '%');
			/*
			 * Pattern patron = Pattern.compile("/[*]/g"); // creamos el Matcher
			 * a partir del patron, la cadena como parametro Matcher exp =
			 * patron.matcher(numExpediente); // invocamos el metodo replaceAll
			 * String prueba = exp.replaceAll("%");
			 * numExpediente.replaceAll("/[*]/g", "/[%]/g");
			 */
			/*
			 * String[] ar = numExpediente.split("/[*]/g"); int n = ar.length;
			 * String prueba = ""; for (int i = 0; i < (n - 1); i++) { prueba +=
			 * ar[i] + "%"; }
			 */

			where.append(" AND UPPER(t1.NUM_EXPEDIENTE)  like '"
					+ numExpediente.toUpperCase() + "'");
			// params.add(exp.replaceAll("%"));
			// params.add(numExpediente);
		}
		if (fecIncCatDesde != null) {
			where.append(" AND t1.FEC_INCORPORACION_CAT >= TO_DATE (? , 'DD/MM/YYYY')");
			params.add(fecIncCatDesde);
		}
		if (fecIncCatHasta != null) {
			where.append(" AND t1.FEC_INCORPORACION_CAT <= TO_DATE (? , 'DD/MM/YYYY')");
			params.add(fecIncCatHasta);
		}
		if (codProvincia != null) {
			where.append(" AND t1.COD_PROVINCIA = ?");
			params.add(codProvincia);
		}
		if (codMunicipio != null) {
			where.append(" AND t1.COD_MUNICIPIO = ?");
			params.add(codMunicipio);
		}
		if (fecIniSitDesde != null) {
			where.append(" AND t1.FEC_INI_SITUACION >= TO_DATE (? , 'DD/MM/YYYY')");
			params.add(fecIniSitDesde);
		}
		if (fecIniSitHasta != null) {
			where.append(" AND t1.FEC_INI_SITUACION <= TO_DATE (? , 'DD/MM/YYYY')");
			params.add(fecIniSitHasta);
		}
		if (fecFinSitDesde != null) {
			where.append(" AND t1.FEC_FIN_SITUACION >= TO_DATE (? , 'DD/MM/YYYY')");
			params.add(fecFinSitDesde);
		}
		if (fecFinSitHasta != null) {
			where.append(" AND t1.FEC_FIN_SITUACION <= TO_DATE (? , 'DD/MM/YYYY')");
			params.add(fecFinSitHasta);
		}
		if (codSitCat != null) {
			where.append(" AND t1.COD_SITUACION = ?");
			params.add(codSitCat);
		}

		hm.put("where", where.toString());
		hm.put("params", params);
		return hm;
	}

	// Obtener datos para exportar al excel de ofertas
	/**
	 * Finds rows in the findAllPersonalizadoVivEnOferExcel table using like.
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @param pagination
	 *            Pagination
	 * @return List
	 */
	@Transactional(readOnly = true, timeout = 500)
	public List<M62fbDisponibilidadVivs> findAllPersonalizadoVivEnOferExcel(
			BigDecimal idR45, BigDecimal idPersona, String codSitOferta,
			Date fecOfertaDesde, Date fecOfertaHasta, Date fecAceptacionDesde,
			Date fecAceptacionHasta, Date fecFinalizacionDesde,
			Date fecFinalizacionHasta, Date fecDeclinacionDesde,
			Date fecDeclinacionHasta, Pagination pagination) {
		StringBuffer where = new StringBuffer(3000);

		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA AND t1.COD_SITUACION = SC.COD_TABLA(+) ");

		StringBuffer query = new StringBuffer(
				"SELECT t1.NUM_VIVIENDA NUMVIVIENDA,t1.NUM_EXPEDIENTE NUMEXPEDIENTE,t1.NUM_ULT_EXPED_PROMO NUMULTEXPEDPROMO,TO_NUMBER(t1.NUM_VIV_PROMO) NUMVIVPROMO,t1.COD_PROVINCIA CODPROVINCIA,t1.COD_MUNICIPIO CODMUNICIPIO,t1.IND_VIV_ADAPTADA INDVIVADAPTADA,t1.NUM_DORMITORIOS NUMDORMITORIOS,t1.SUP_UTIL_VIV SUPUTILVIV,t1.COD_REG_ACCESO CODREGACCESO,t1.IDE_ELEMENTO_GAR IDEELEMENTOGAR,t1.NUM_GAR_PROMO NUMGARPROMO,t1.SUP_UTIL_GAR SUPUTILGAR,t1.IDE_ELEMENTO_TRAS IDEELEMENTOTRAS,t1.NUM_TRAS_PROMO NUMTRASPROMO,t1.SUP_UTIL_TRAS SUPUTILTRAS,t1.IMC_PVP_TOTAL IMCPVPTOTAL,t1.NUM_ULT_PROP NUMULTPROP,t1.IND_RENUNCIA_ULT_PROP INDRENUNCIAULTPROP,t1.IND_REVOCACION_ULT_PROP INDREVOCACIONULTPROP,t1.IND_RENUN_O_REVOC_ULT_PROP INDRENUNOREVOCULTPROP,t1.ID_PERSO_ULT_PROP IDPERSOULTPROP,t1.NOM_ULT_PROP NOMULTPROP,t1.NUM_ULT_INQ NUMULTINQ,t1.FEC_FIN_ULT_INQ FECFINULTINQ,t1.ID_PERSO_ULT_INQ IDPERSOULTINQ,t1.NOM_ULT_INQ NOMULTINQ,t1.ID_R38_ULT_RES IDR38ULTRES,t1.NUM_ACUERDO_ULT_RES NUMACUERDOULTRES,t1.IND_RESERVA_TEMP_ULT_RES INDRESERVATEMPULTRES,t1.FEC_RESERVA_ULT_RES FECRESERVAULTRES,t1.FEC_FIN_RESERVA_ULT_RES FECFINRESERVAULTRES,t1.TEX_OBSERVACIONES_ULT_RES TEXOBSERVACIONESULTRES,t1.IND_DISPONIBLE INDDISPONIBLE,t1.COD_SITUACION CODSITUACION,t1.FEC_INCORPORACION_CAT FECINCORPORACIONCAT,t1.FEC_INI_SITUACION FECINISITUACION,t1.FEC_FIN_SITUACION FECFINSITUACION,t1.ID_PERSONA_ADJU IDPERSONAADJU,t1.COD_SIT_OFERTA CODSITOFERTA,t1.FEC_OFERTA FECOFERTA,t1.FEC_FINALIZACION FECFINALIZACION,t1.FEC_DECLINACION FECDECLINACION,t1.FEC_ACEPTACION FECACEPTACION, t1.ID_M62R45T0 IDM62R45T0, t1.COD_REG_TENENCIA CODREGTENENCIA, t1.NOM_ADJUDICATARIO NOMADJUDICATARIO, A10.DES_PROVI_CAS DESPROVINCIA, A10.DES_MUNIC_CAS DESMUNICIPIO, RA.DES_TABLA_CAS DESREGACCESO, RT.DES_TABLA_CAS DESREGTENENCIA, SO.DES_TABLA_CAS DESSITOFERTA, SC.DES_TABLA_CAS DESSITUACIONCAT, t1.TEX_OBSERVACIONES TEXOBSERVACIONES, t1.EXCLUIDA EXCLUIDA, t1.FECEXCLU FECEXCLU, t1.NUMSECCION NUMSECCION, t1.COD_EXPED_PROMO CODEXPEDPROMO, t1.FEC_PUBLIC_BOPV FECPUBLICBOPV, t1.FEC_CIERRE_REG FECCIERREREG, t1.FEC_SORTEO FECSORTEO, t1.CSECUPRO CSECUPRO  ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivEnOferExcel(idR45, idPersona, codSitOferta,
						fecOfertaDesde, fecOfertaHasta, fecAceptacionDesde,
						fecAceptacionHasta, fecFinalizacionDesde,
						fecFinalizacionHasta, fecDeclinacionDesde,
						fecDeclinacionHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		// order
		StringBuffer order = new StringBuffer(3000);
		if (pagination != null) {
			if (pagination.getSort() != null) {
				order.append(" ORDER BY " + pagination.getSort() + " "
						+ pagination.getAscDsc());
				query.append(order);
			}
			query = new StringBuffer(UdaUtils.getQueryLimits(
					pagination, query.toString()));
		}
		return (List<M62fbDisponibilidadVivs>) this.jdbcTemplate.query(
				query.toString(), rwMap, params.toArray());
	}

	/**
	 * Counts rows in the catalogoVivEnOfer .
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return Long
	 */
	@Transactional(readOnly = true, timeout = 500)
	public Long findAllPersonalizadoVivEnOferExcelCount(BigDecimal idR45,
			BigDecimal idPersona, String codSitOferta, Date fecOfertaDesde,
			Date fecOfertaHasta, Date fecAceptacionDesde,
			Date fecAceptacionHasta, Date fecFinalizacionDesde,
			Date fecFinalizacionHasta, Date fecDeclinacionDesde,
			Date fecDeclinacionHasta) {
		StringBuffer where = new StringBuffer(3000);
		where.append(" WHERE 1=1 AND t1.COD_PROVINCIA=A10.COD_PROVINCIA AND t1.COD_MUNICIPIO = A10.COD_MUNICIPIO AND t1.COD_REG_TENENCIA = RT.COD_TABLA AND t1.COD_REG_ACCESO = RA.COD_TABLA AND t1.COD_SIT_OFERTA = SO.COD_TABLA(+) AND t1.COD_SITUACION = SC.COD_TABLA(+)  ");

		StringBuffer query = new StringBuffer("SELECT COUNT(1) ");
		query.append("FROM M62R01V0S00_DISP_VIVS t1, (SELECT a.cod_provincia, a.des_provi_cas, a.des_provi_eus, a.dec_provi_cas, a.dec_provi_eus, b.cod_municipio, b.des_munic_cas, b.des_munic_eus, b.dec_munic_cas, b.dec_munic_eus FROM m62a09v0s00_provincias a, m62a10v0s00_municipios b WHERE a.cod_provincia IN ('01', '20', '48') AND a.cod_provincia = b.cod_provincia) a10, M62P28V0S00_REG_ACC_USO RA, M62P28V0S00_REG_TENENCIA RT, M62P28V0S00_SITUACION_OFE SO, M62P28V0S00_SITUACION_VIV SC ");
		// que espere 4 minutos para dar un timeout
		// this.jdbcTemplate.setQueryTimeout(240);
		HashMap<String, Object> hm = new HashMap<String, Object>(
				getWhereFiltroVivEnOferExcel(idR45, idPersona, codSitOferta,
						fecOfertaDesde, fecOfertaHasta, fecAceptacionDesde,
						fecAceptacionHasta, fecFinalizacionDesde,
						fecFinalizacionHasta, fecDeclinacionDesde,
						fecDeclinacionHasta));
		where.append(hm.get("where").toString());
		query.append(where.toString());
		List<Object> params = (List<Object>) hm.get("params");
		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}

	/**
	 * Crea la where para el filtro personalizado de viv en oferta
	 * 
	 * @param idM62r45t0
	 *            Long
	 * @return HashMap
	 */
	private HashMap<String, Object> getWhereFiltroVivEnOferExcel(
			BigDecimal idR45, BigDecimal idPersona, String codSitOferta,
			Date fecOfertaDesde, Date fecOfertaHasta, Date fecAceptacionDesde,
			Date fecAceptacionHasta, Date fecFinalizacionDesde,
			Date fecFinalizacionHasta, Date fecDeclinacionDesde,
			Date fecDeclinacionHasta) {
		StringBuffer where = new StringBuffer(3000);
		List<Object> params = new ArrayList<Object>();
		HashMap<String, Object> hm = new HashMap<String, Object>();

		if (idR45 != null) {
			where.append(" AND t1.ID_M62R45T0 = ? ");
			params.add(idR45);
		} else { // para que no devuelva nada
			where.append(" AND t1.ID_M62R45T0 IS NOT NULL ");
		}
		if (idPersona != null) {
			where.append(" AND t1.ID_PERSONA_ADJU = ?");
			params.add(idPersona);
		}
		if (codSitOferta != null) {
			where.append(" AND UPPER(t1.COD_SIT_OFERTA) like ? ESCAPE  '\\'");
			params.add("%" + codSitOferta.toUpperCase() + "%");
			where.append(" AND t1.COD_SIT_OFERTA IS NOT NULL");
		}
		if (fecOfertaDesde != null) {
			where.append(" AND t1.FEC_OFERTA >= ?");
			params.add(fecOfertaDesde);
		}
		if (fecOfertaHasta != null) {
			where.append(" AND t1.FEC_OFERTA <= ?");
			params.add(fecOfertaHasta);
		}
		if (fecAceptacionDesde != null) {
			where.append(" AND t1.FEC_ACEPTACION >= ?");
			params.add(fecAceptacionDesde);
		}
		if (fecAceptacionHasta != null) {
			where.append(" AND t1.FEC_ACEPTACION <= ?");
			params.add(fecAceptacionHasta);
		}
		if (fecFinalizacionDesde != null) {
			where.append(" AND t1.FEC_FINALIZACION >= ?");
			params.add(fecFinalizacionDesde);
		}
		if (fecFinalizacionHasta != null) {
			where.append(" AND t1.FEC_FINALIZACION <= ?");
			params.add(fecFinalizacionHasta);
		}
		if (fecDeclinacionDesde != null) {
			where.append(" AND t1.FEC_DECLINACION >= ?");
			params.add(fecDeclinacionDesde);
		}
		if (fecDeclinacionHasta != null) {
			where.append(" AND t1.FEC_DECLINACION <= ?");
			params.add(fecDeclinacionHasta);
		}
		where.append(" ORDER BY t1.ID_M62R45T0, t1.COD_PROVINCIA, t1.COD_MUNICIPIO ");

		hm.put("where", where.toString());
		hm.put("params", params);
		return hm;
	}

	// CHECKSTYLE:ON CyclomaticComplexity - Generación de código de UDA

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