package com.ejie.m62fb.dao.registroVPP;

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

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

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

import com.ejie.m62fb.utils.constants.IberErrorsMsgConstants;
import com.ejie.m62fb.utils.error.UFException;
import com.ejie.m62fb.dao.SQLGenericas;
import com.ejie.m62fb.dao.registroVPP.plsql.M62FuncionesPLSQL;
import com.ejie.m62fb.model.AlojamientoDotacional;
import com.ejie.m62fb.model.tipos.TipoAcceso;
import com.ejie.m62fb.model.tipos.TipoAdjudicacion;
import com.ejie.m62fb.model.tipos.TipoComoAdjudicacion;
import com.ejie.m62fb.model.tipos.TipoIniciativa;
import com.ejie.m62fb.model.tipos.TipoPromotor;
import com.ejie.m62fb.model.tipos.TipoPropietarios;
import com.ejie.m62fb.model.tipos.TipoQuienAdjudicacion;
import com.ejie.m62fb.model.tipos.TipoRegulacion;
import com.ejie.m62fb.utils.sql.BDUtils;
import com.ejie.m62fb.utils.sql.UtilsResulSet;
import com.ejie.x38.dto.JQGridManager;
import com.ejie.x38.dto.JQGridRequestDto;

/**
 * AlojamientoDotacionalDaoImpl.
 * 
XXXX
 */
@Repository
@Transactional
public class AlojamientoDotacionalDaoImpl implements AlojamientoDotacionalDao {
	private JdbcTemplate jdbcTemplate;
	/*
	 * ROW_MAPPERS
	 */
	private final RowMapper<Integer> rwMapAD = new RowMapper<Integer>() {
		@Override
		public Integer mapRow(ResultSet resultSet, int rowNum)
				throws SQLException {

			return resultSet.getInt("ID_ALOJ_REG");
		}
	};
	/*
	 * ROW_MAPPERS
	 */
	private final RowMapper<AlojamientoDotacional> rwMap = new RowMapper<AlojamientoDotacional>() {
		@Override
		public AlojamientoDotacional mapRow(ResultSet resultSet, int rowNum)
				throws SQLException {

			AlojamientoDotacional alojDot = new AlojamientoDotacional();

			// IdAlojReg
			alojDot.setIdAlojReg(UtilsResulSet.getInteger(resultSet,
					"IDALOJREG"));
			// IdAlojamiento
			alojDot.setIdAlojamiento(UtilsResulSet.getInteger(resultSet,
					"IDALOJAMIENTO"));
			// NumExpediente
			alojDot.setNumExpediente(resultSet.getString("NUMEXPEDIENTE"));
			// CodAlojamiento
			alojDot.setCodAlojamiento(resultSet.getString("CODALOJAMIENTO"));
			// IdEmplazamiento
			alojDot.setIdEmplazamiento(UtilsResulSet.getInteger(resultSet,
					"IDEMPLAZAMIENTO"));

			// SupUtilAloj
			alojDot.setSupUtilAloj(resultSet.getBigDecimal("SUPUTILALOJ"));
			// IndAlojAdaptada
			alojDot.setIndAlojAdaptada(UtilsResulSet.getIndicadorSN(resultSet,
					"INDALOJADAPTADA"));
			// NumDormitorios
			alojDot.setNumDormitorios(UtilsResulSet.getInteger(resultSet,
					"NUMDORMITORIOS"));
			// NumBanyos
			alojDot.setNumBanyos(UtilsResulSet.getInteger(resultSet,
					"NUMBANYOS"));
			// NumFijoIbi
			alojDot.setNumFijoIbi(resultSet.getString("NUMFIJOIBI"));
			// CodRefCatastral
			alojDot.setCodRefCatastral(resultSet.getString("CODREFCATASTRAL"));

			// Tipo Regulacion (R09)
			alojDot.setTipoRegulacion(new TipoRegulacion(resultSet
					.getString("NUMTIPOREGULACION")));
			// Tipo Acceso (R09)
			alojDot.setTipoAcceso(new TipoAcceso(resultSet
					.getString("NUMTIPOREGACCESO")));
			// Tipo Iniciativa (R09)
			alojDot.setTipoIniciativa(new TipoIniciativa(resultSet
					.getString("NUMCLAINICIATIVA")));
			// Tipo Promotor (R09)
			alojDot.setTipoPromotor(new TipoPromotor(resultSet
					.getString("NUMTIPOPROMOTOR")));
			// Tipo Propietarios (R09)
			alojDot.setTipoPropietarios(new TipoPropietarios(resultSet
					.getString("NUMTIPOPROPIETARIO")));
			// Tipo Adjudicacion (R09)
			alojDot.setTipoAdjudicacion(new TipoAdjudicacion(resultSet
					.getString("NUMADJUDICACION")));
			// Tipo QuienAdjudicacion (R09)
			alojDot.setTipoQuienAdjudicacion(new TipoQuienAdjudicacion(
					resultSet.getString("NUMADJQUIEN")));
			// Tipo ComoAdjudicacion (R09)
			alojDot.setTipoComoAdjudicacion(new TipoComoAdjudicacion(resultSet
					.getString("NUMADJCOMO")));

			// TexObservaciones
			alojDot.setTexObservaciones(resultSet.getString("TEXOBSERVACIONES"));
			// FecIniGestion
			alojDot.setFecIniGestion(resultSet.getTimestamp("FECINIGESTION"));
			// FecFinGestion
			alojDot.setFecFinGestion(resultSet.getTimestamp("FECFINGESTION"));
			// NumOrganoGestor
			alojDot.setNumOrganoGestor(resultSet
					.getBigDecimal("NUMORGANOGESTOR"));
			// FecEnvOrgGestor
			alojDot.setFecEnvOrgGestor(resultSet
					.getTimestamp("FECENVORGGESTOR"));

			// Direccion
			alojDot.setDireccion(UtilsResulSet.getDireccionCompleta(resultSet,
					AlojamientoDotacionalDaoSql.ALIAS_DIR));

			// AbstractM62FBModel
			UtilsResulSet.getAbstractClass(resultSet, alojDot,
					AlojamientoDotacionalDaoSql.ALIAS);

			return alojDot;
		}
	};

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

	/*
	 * OPERACIONES CRUD
	 */

	/**
	 * Inserts a single row in the AlojamientoDotacional table.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional
	 * @return AlojamientoDotacional
	 */
	@Override
	public AlojamientoDotacional add(AlojamientoDotacional alojamientoDotacional) {

		String query = AlojamientoDotacionalDaoSql.SQL_INSERT;

		// Preparar Parametros
		List<Object> params = new ArrayList<Object>();

		// NumExpediente
		params.add(alojamientoDotacional.getNumExpediente());
		// CodAlojamiento
		params.add(alojamientoDotacional.getCodAlojamiento());

		// SupUtilAloj
		params.add(alojamientoDotacional.getSupUtilAloj());
		// NumDormitorios
		params.add(alojamientoDotacional.getNumDormitorios());
		// NumBanyos
		params.add(alojamientoDotacional.getNumBanyos());
		// IndAlojAdaptada
		params.add(BDUtils.formatIndicadorToBD(alojamientoDotacional
				.getIndAlojAdaptada()));

		// NumFijoIbi
		params.add(alojamientoDotacional.getNumFijoIbi());
		// CodRefCatastral
		params.add(alojamientoDotacional.getCodRefCatastral());
		// TexObservaciones
		params.add(alojamientoDotacional.getTexObservaciones());

		// TipoRegulacion
		params.add(alojamientoDotacional.getTipoRegulacion() != null ? alojamientoDotacional
				.getTipoRegulacion().getIdElereg() : null);
		// TipoAcceso
		params.add(alojamientoDotacional.getTipoAcceso() != null ? alojamientoDotacional
				.getTipoAcceso().getIdElereg() : null);
		// TipoIniciativa
		params.add(alojamientoDotacional.getTipoIniciativa() != null ? alojamientoDotacional
				.getTipoIniciativa().getIdElereg() : null);
		// TipoPromotor
		params.add(alojamientoDotacional.getTipoPromotor() != null ? alojamientoDotacional
				.getTipoPromotor().getIdElereg() : null);
		// TipoPropietarios
		params.add(alojamientoDotacional.getTipoPropietarios() != null ? alojamientoDotacional
				.getTipoPropietarios().getIdElereg() : null);

		// TipoAdjudicacion
		params.add(alojamientoDotacional.getTipoAdjudicacion() != null ? alojamientoDotacional
				.getTipoAdjudicacion().getIdElereg() : null);
		// TipoQuienAdjudicacion
		params.add(alojamientoDotacional.getTipoQuienAdjudicacion() != null ? alojamientoDotacional
				.getTipoQuienAdjudicacion().getIdElereg() : null);
		// TipoComoAdjudicacion
		params.add(alojamientoDotacional.getTipoComoAdjudicacion() != null ? alojamientoDotacional
				.getTipoComoAdjudicacion().getIdElereg() : null);

		// Direccion
		SQLGenericas.getParamsDireccion(params,
				alojamientoDotacional.getDireccion());

		// AbstractM62FBModel
		SQLGenericas.getParamsAbstractClass(params, alojamientoDotacional);

		// Realizar insert
		this.jdbcTemplate.update(query, params.toArray());

		return alojamientoDotacional;
	}

	/**
	 * Updates a single row in the AlojamientoDotacional table.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional
	 * @return AlojamientoDotacional
	 */
	@Override
	public AlojamientoDotacional update(
			AlojamientoDotacional alojamientoDotacional) {

		String query = AlojamientoDotacionalDaoSql.SQL_UPDATE;

		// Preparar Parametros
		List<Object> params = new ArrayList<Object>();

		// NumExpediente
		params.add(alojamientoDotacional.getNumExpediente());
		// CodAlojamiento
		params.add(alojamientoDotacional.getCodAlojamiento());

		// SupUtilAloj
		params.add(alojamientoDotacional.getSupUtilAloj());
		// NumDormitorios
		params.add(alojamientoDotacional.getNumDormitorios());
		// NumBanyos
		params.add(alojamientoDotacional.getNumBanyos());
		// IndAlojAdaptada
		params.add(BDUtils.formatIndicadorToBD(alojamientoDotacional
				.getIndAlojAdaptada()));

		// NumFijoIbi
		params.add(alojamientoDotacional.getNumFijoIbi());
		// CodRefCatastral
		params.add(alojamientoDotacional.getCodRefCatastral());
		// TexObservaciones
		params.add(alojamientoDotacional.getTexObservaciones());

		// TipoRegulacion
		params.add(alojamientoDotacional.getTipoRegulacion() != null ? alojamientoDotacional
				.getTipoRegulacion().getIdElereg() : null);
		// TipoAcceso
		params.add(alojamientoDotacional.getTipoAcceso() != null ? alojamientoDotacional
				.getTipoAcceso().getIdElereg() : null);
		// TipoIniciativa
		params.add(alojamientoDotacional.getTipoIniciativa() != null ? alojamientoDotacional
				.getTipoIniciativa().getIdElereg() : null);
		// TipoPromotor
		params.add(alojamientoDotacional.getTipoPromotor() != null ? alojamientoDotacional
				.getTipoPromotor().getIdElereg() : null);
		// TipoPropietarios
		params.add(alojamientoDotacional.getTipoPropietarios() != null ? alojamientoDotacional
				.getTipoPropietarios().getIdElereg() : null);

		// TipoAdjudicacion
		params.add(alojamientoDotacional.getTipoAdjudicacion() != null ? alojamientoDotacional
				.getTipoAdjudicacion().getIdElereg() : null);
		// TipoQuienAdjudicacion
		params.add(alojamientoDotacional.getTipoQuienAdjudicacion() != null ? alojamientoDotacional
				.getTipoQuienAdjudicacion().getIdElereg() : null);
		// TipoComoAdjudicacion
		params.add(alojamientoDotacional.getTipoComoAdjudicacion() != null ? alojamientoDotacional
				.getTipoComoAdjudicacion().getIdElereg() : null);

		// Direccion
		SQLGenericas.getParamsDireccion(params,
				alojamientoDotacional.getDireccion());

		// AbstractM62FBModel
		SQLGenericas.getParamsAbstractClass(params, alojamientoDotacional);

		// IdAlojReg
		params.add(alojamientoDotacional.getIdAlojReg());

		// Realizar Update
		this.jdbcTemplate.update(query, params.toArray());

		return alojamientoDotacional;
	}

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

		String query = AlojamientoDotacionalDaoSql.SQL_FIND;

		List<AlojamientoDotacional> alojamientoDotacionalList = this.jdbcTemplate
				.query(query, this.rwMap, alojamientoDotacional.getIdAlojReg());
		return DataAccessUtils.uniqueResult(alojamientoDotacionalList);
	}

	/**
	 * Removes a single row in the AlojamientoDotacional table.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional
	 */
	@Override
	public void remove(AlojamientoDotacional alojamientoDotacional) {
		/*****
		 * Llamada a function que implementa llamada a plsql
		 ****/
		M62FuncionesPLSQL m62FuncionesPLSQL = new M62FuncionesPLSQL(
				this.jdbcTemplate.getDataSource());
		m62FuncionesPLSQL.borrarAlojDotacional(alojamientoDotacional
				.getIdAlojReg());

	}

	/**
	 * Finds a list of rows in the AlojamientoDotacional table.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<AlojamientoDotacional>
	 */
	@Override
	@Transactional(readOnly = true)
	public List<AlojamientoDotacional> findAll(
			AlojamientoDotacional alojamientoDotacional,
			JQGridRequestDto jqGridRequestDto) {

		StringBuilder query;
		StringBuilder where;
		// Comprobar si esta informado el Titular
		if (alojamientoDotacional != null
				&& alojamientoDotacional.getPersona() != null
				&& alojamientoDotacional.getPersona().getIdPersona() != null) {
			query = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_FIND_ALL_CON_TITULAR);
			where = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_WHERE_ALL_CON_TITULAR);
		} else {
			query = new StringBuilder(AlojamientoDotacionalDaoSql.SQL_FIND_ALL);
			where = new StringBuilder(AlojamientoDotacionalDaoSql.SQL_WHERE_ALL);
		}

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

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

		if (jqGridRequestDto != null) {
			query = JQGridManager.getPaginationQuery(jqGridRequestDto, query);
		}

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

	/**
	 * Finds rows in the AlojamientoDotacional table using like.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<AlojamientoDotacional>
	 */
	@Override
	@Transactional(readOnly = true)
	public List<AlojamientoDotacional> findAllLike(
			AlojamientoDotacional alojamientoDotacional,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith) {

		StringBuilder query;
		StringBuilder where;
		// Comprobar si esta informado el Titular
		if (alojamientoDotacional != null
				&& alojamientoDotacional.getPersona() != null
				&& alojamientoDotacional.getPersona().getIdPersona() != null) {
			query = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_FIND_ALL_CON_TITULAR);
			where = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_WHERE_ALL_CON_TITULAR);
		} else {
			query = new StringBuilder(AlojamientoDotacionalDaoSql.SQL_FIND_ALL);
			where = new StringBuilder(AlojamientoDotacionalDaoSql.SQL_WHERE_ALL);
		}

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(alojamientoDotacional,
				startsWith);
		where.append(mapaWhere.get("query"));
		query.append(where);

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

		if (jqGridRequestDto != null) {
			query = JQGridManager.getPaginationQuery(jqGridRequestDto, query);
		}

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the AlojamientoDotacional table.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional
	 * @return Long
	 */
	@Override
	@Transactional(readOnly = true)
	public Long findAllCount(AlojamientoDotacional alojamientoDotacional) {

		StringBuilder query;
		StringBuilder where;
		// Comprobar si esta informado el Titular
		if (alojamientoDotacional != null
				&& alojamientoDotacional.getPersona() != null
				&& alojamientoDotacional.getPersona().getIdPersona() != null) {
			query = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_FIND_ALL_COUNT_CON_TITULAR);
			where = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_WHERE_ALL_CON_TITULAR);
		} else {
			query = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_FIND_ALL_COUNT);
			where = new StringBuilder(AlojamientoDotacionalDaoSql.SQL_WHERE_ALL);
		}

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

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

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

	/**
	 * Counts rows in the AlojamientoDotacional table using like.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional
	 * @param startsWith
	 *            Boolean
	 * @return Long
	 */
	@Override
	@Transactional(readOnly = true)
	public Long findAllLikeCount(AlojamientoDotacional alojamientoDotacional,
			Boolean startsWith) {

		StringBuilder query;
		StringBuilder where;
		// Comprobar si esta informado el Titular
		if (alojamientoDotacional != null
				&& alojamientoDotacional.getPersona() != null
				&& alojamientoDotacional.getPersona().getIdPersona() != null) {
			query = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_FIND_ALL_COUNT_CON_TITULAR);
			where = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_WHERE_ALL_CON_TITULAR);
		} else {
			query = new StringBuilder(
					AlojamientoDotacionalDaoSql.SQL_FIND_ALL_COUNT);
			where = new StringBuilder(AlojamientoDotacionalDaoSql.SQL_WHERE_ALL);
		}

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(alojamientoDotacional,
				startsWith);
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

	/*
	 * MÉTODOS PRIVADOS
	 */

	/**
	 * Returns a map with the needed value to create the conditions to filter by
	 * the AlojamientoDotacional entity
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional Bean with the criteria values to filter
	 *            by.
	 * @return Map created with two keys key query stores the sql query syntax
	 *         key params stores the parameter values to be used in the
	 *         condition sentence.
	 */
	private Map<String, ?> getWhereMap(
			AlojamientoDotacional alojamientoDotacional) {

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

		if (alojamientoDotacional != null) {
			// TODO WHERE_FIND_ALL
		}

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

		return mapWhere;
	}

	/**
	 * Returns a map with the needed value to create the conditions to filter by
	 * the AlojamientoDotacional entity
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional Bean with the criteria values to filter
	 *            by.
	 * @param startsWith
	 *            Boolean
	 * @return Map created with two keys key query stores the sql query syntax
	 *         key params stores the parameter values to be used in the
	 *         condition sentence.
	 */
	private Map<String, Object> getWhereLikeMap(
			AlojamientoDotacional alojamientoDotacional, Boolean startsWith) {

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

		if (alojamientoDotacional != null) {
			// ExpedienteVivienda
			if (alojamientoDotacional.getNumExpediente() != null) {
				BDUtils.crearFiltroLike(where, params,
						AlojamientoDotacionalDaoSql.ALIAS + ".NUM_EXPEDIENTE",
						BDUtils.formatComodinesFiltroToBD(alojamientoDotacional
								.getNumExpediente()), startsWith);
			}
			// CodAlojamiento
			if (alojamientoDotacional.getCodAlojamiento() != null) {
				BDUtils.crearFiltroIgual(where, params,
						AlojamientoDotacionalDaoSql.ALIAS + ".COD_ALOJAMIENTO",
						alojamientoDotacional.getCodAlojamiento());
			}
			// Direccion
			if (alojamientoDotacional.getDireccion() != null) {
				BDUtils.crearFiltroDireccion(where, params,
						AlojamientoDotacionalDaoSql.ALIAS,
						alojamientoDotacional.getDireccion());
			}

			// IdPersona
			if (alojamientoDotacional.getPersona() != null
					&& alojamientoDotacional.getPersona().getIdPersona() != null) {
				BDUtils.crearFiltroIgual(where, params,
						AlojamientoDotacionalDaoSql.ALIAS_INQ_AD
								+ ".ID_PERSONA", alojamientoDotacional
								.getPersona().getIdPersona());
			}
		}

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

		return mapWhere;
	}

	/**
	 * Comprueba si se ha realizado algun cambio en BBDD, si es asi lanza una
	 * excecion.
	 * 
	 * @param alojamientoDotacional
	 *            AlojamientoDotacional(idAlojReg, fecHorUltimaModif)
	 */
	@Override
	@Transactional(readOnly = true)
	public void checkForUpdate(AlojamientoDotacional alojDot) {
		StringBuilder query = new StringBuilder(
				AlojamientoDotacionalDaoSql.SQL_CHECK_FOR_UPDATE);
		if (this.jdbcTemplate.queryForInt(query.toString(),
				alojDot.getIdAlojReg(), alojDot.getFecHorUltimaModif()) == 0) {
			throw new UFException(IberErrorsMsgConstants.CONCURRENCY_MSG);
		}
	}
	/**
	 * Busca el idAlojReg por promocion y num alojamiento
	 * @param numAlojamiento
	 * @param numExpedPromo
	 * @return
	 */
	@Override
	@Transactional(readOnly = true)
	public Integer findIdAlojReg(String numAlojamiento,String numExpedPromo) {
		String query = "SELECT ID_ALOJ_REG FROM DATOS_AD DAD,ALOJAMIENTO_DOTACIONAL AD WHERE DAD.NUM_EXPEDIENTE = '"
				+numExpedPromo + "' AND DAD.ID_ALOJAMIENTO = AD.ID_ALOJAMIENTO AND DAD.COD_ALOJAMIENTO = "+ numAlojamiento;


		List<Integer> expedienteADList = this.jdbcTemplate
				.query(query,rwMapAD);

		// Si la lista tiene datos, cogemos el primer registro
		if (!expedienteADList.isEmpty()) {
			return expedienteADList.get(0);
		} else {
			return null;
		}
	}
}