package com.ejie.ad74a.dao;

import java.sql.PreparedStatement;
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.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.bea.core.repackaged.springframework.beans.factory.annotation.Autowired;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.MaestroNivSoporte;
import com.ejie.ad74a.model.Pagos;
import com.ejie.ad74a.model.PagosBeneficiario;
import com.ejie.ad74a.model.PrestadorServicio;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.model.comun.Municipio;
import com.ejie.ad74a.model.comun.Provincia;
import com.ejie.ad74a.util.UtilSQL;
import com.ejie.x38.dao.RowNumResultSetExtractor;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableManager;
import com.ejie.x38.dto.TableManagerJerarquia;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * PagosBeneficiarioDaoImpl generated by UDA, 04-oct-2023 9:26:03.
 * 
 * @author UDA
 */

@Repository
@Transactional
public class PagosBeneficiarioDaoImpl implements PagosBeneficiarioDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDPAGOBENEFICIARIO75", "ANYOPAGO74", "MESPAGO74",
			"RAZONSOCIAL73", "NUMDIAS75", "TARIFA75", "IMPORTE", "SOLICITANTESIDSOLICITANTE01",
			"MAESTRONIVSOPORTEIDNIVELSOPORTE58", "PAGOSIDPAGO74", "FALTA75", "USUALTA75", "FMODIF75", "USUMODIF75",
			"SOLIDENTIFICADOR01" };

	private JdbcTemplate jdbcTemplate;

	public static final String SEQUENCE_PAGOS_BENEFICIARIO = "SEQ_PAGOS_BENEFICIARIO";

	@Autowired
	PrestadorServicioDao prestadorServicioDao;
	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<PagosBeneficiario> rwMap = new RowMapper<PagosBeneficiario>() {
		public PagosBeneficiario mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			PagosBeneficiario pagosBeneficiario = new PagosBeneficiario(
					UtilSQL.getLong(resultSet, "IDPAGOBENEFICIARIO75"));
			pagosBeneficiario.setNumDias75(UtilSQL.getLong(resultSet, "NUMDIAS75"));
			pagosBeneficiario.setfAlta75(resultSet.getDate("FALTA75"));
			pagosBeneficiario.setUsuAlta75(resultSet.getString("USUALTA75"));
			pagosBeneficiario.setfModif75(resultSet.getDate("FMODIF75"));
			pagosBeneficiario.setUsuModif75(resultSet.getString("USUMODIF75"));
			pagosBeneficiario.setTarifa75(resultSet.getBigDecimal("TARIFA75"));
			pagosBeneficiario.setIdGradoDependencia(UtilSQL.getLong(resultSet, "IDGRADODEPENDENCIA04"));

			Solicitantes solicitantes = new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE75"));
			solicitantes.setIdentificador01(resultSet.getString("SOLIDENTIFICADOR01"));
			solicitantes.setNombre01(resultSet.getString("SOLNOMBRE01"));
			solicitantes.setApellido101(resultSet.getString("SOLAPELLIDO101"));
			solicitantes.setApellido201(resultSet.getString("SOLAPELLIDO201"));
			solicitantes.setfAltaTeleasistencia01(resultSet.getDate("SOLFALTATELEASISTENCIA01"));
			solicitantes.setfInicio01(resultSet.getDate("SOLFINICIO01"));
			solicitantes.setfBajaPs01(resultSet.getDate("SOLFBAJAPS01"));

			Direcciones dir = new Direcciones();
			dir.setProvinciaNORA(new Provincia(resultSet.getString("IDPROVINCIA"), resultSet.getString("DSCPROV"),
					resultSet.getString("DSEPROV"), resultSet.getString("AUTONOMIAID")));
			dir.setMunicipioNORA(new Municipio(resultSet.getString("IDMUNICIPIO"), resultSet.getString("DSOMUN"),
					resultSet.getString("IDPROVINCIA")));
			solicitantes.setDirecciones(dir);
			pagosBeneficiario.setSolicitantes(solicitantes);

			Pagos pagos = new Pagos(UtilSQL.getLong(resultSet, "IDPAGO75"));
			// t7.ID_PRESTADOR_74 IDPRESTADOR74, ");
			pagos.setAnyoPago74(resultSet.getLong("ANYOPAGO74"));
			pagos.setMesPago74(resultSet.getString("MESPAGO74"));
			PrestadorServicio prestadorServicio = new PrestadorServicio(resultSet.getLong("IDPRESTADOR74"));
			prestadorServicio.setRazonSocial73(resultSet.getString("RAZONSOCIAL73"));
			pagos.setPrestadorServicio(prestadorServicio);
			pagosBeneficiario.setPagos(pagos);

			MaestroNivSoporte maestroNivSoporte = new MaestroNivSoporte(UtilSQL.getLong(resultSet, "IDNIVELSOPORTE75"));
			maestroNivSoporte.setDescEs58(resultSet.getString("NIVSOPDESCES58"));
			maestroNivSoporte.setDescEu58(resultSet.getString("NIVSOPDESCEU58"));
			pagosBeneficiario.setMaestroNivSoporte(maestroNivSoporte);

			return pagosBeneficiario;
		}
	};

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

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

			PagosBeneficiario pagosbeneficiario = new PagosBeneficiario(
					UtilSQL.getLong(resultSet, "IDPAGOBENEFICIARIO75"),
					new Solicitantes(UtilSQL.getLong(resultSet, "IDSOLICITANTE75"), null,
							resultSet.getString("SOLIDENTIFICADOR01"), resultSet.getString("SOLNOMBRE01"),
							resultSet.getString("SOLAPELLIDO101"), resultSet.getString("SOLAPELLIDO201"), null, null,
							null, null, resultSet.getDate("SOLFALTATELEASISTENCIA01"), null, null, null, null, null,
							null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
							null, null, null, null, UtilSQL.getInt(resultSet, "ESDENEGACIONSERVICIO01"), null, null,
							null, null, null),
					new Pagos(UtilSQL.getLong(resultSet, "IDPAGO75")), UtilSQL.getLong(resultSet, "NUMDIAS75"),
					resultSet.getDate("FALTA75"), resultSet.getString("USUALTA75"), resultSet.getDate("FMODIF75"),
					resultSet.getString("USUMODIF75"),
					new MaestroNivSoporte(UtilSQL.getLong(resultSet, "IDNIVELSOPORTE75")),
					resultSet.getBigDecimal("TARIFA75"), UtilSQL.getLong(resultSet, "IDGRADODEPENDENCIA04"));

			pagosbeneficiario.getSolicitantes().setfBajaPs01(resultSet.getDate("SOLFBAJAPS01"));

			JerarquiaDto<PagosBeneficiario> jerarquia = new JerarquiaDto<>();
			jerarquia.setModel(pagosbeneficiario);
			jerarquia.setLevel(resultSet.getBigDecimal("LEVEL").intValue());
			jerarquia.setParentNodes(resultSet.getString("PARENTNODES"));
			jerarquia.setIsLeaf(Boolean.parseBoolean(resultSet.getString("ISLEAF")));
			jerarquia.setFilter(Boolean.parseBoolean(resultSet.getString("FILTER")));
			return jerarquia;
		}
	};

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

	/*
	 * OPERACIONES CRUD
	 */

	/**
	 * Inserts a single row in the PagosBeneficiario table.
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @return PagosBeneficiario
	 */
	public PagosBeneficiario add(PagosBeneficiario pagosbeneficiario) {

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		String query = "INSERT INTO PAGOS_BENEFICIARIO (ID_PAGO_BENEFICIARIO_75, ID_SOLICITANTE_75, ID_PAGO_75, NUM_DIAS_75, TARIFA_75, ID_NIVEL_SOPORTE_75, F_ALTA_75, USU_ALTA_75, F_MODIF_75, USU_MODIF_75) "
				+ "VALUES (" + SEQUENCE_PAGOS_BENEFICIARIO
				+ ".NEXTVAL,:idSolicitante,:idPago,:numDias,:tarifa,:idNivelSoporte,:fAlta,:usuAlta,:fModif,:usuModif)";

		Object getSolicitantesIdSolicitanteAux = null;
		if (pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getIdSolicitante01() != null) {
			getSolicitantesIdSolicitanteAux = pagosbeneficiario.getSolicitantes().getIdSolicitante01();
		}
		Object getPagosIdPagoAux = null;
		if (pagosbeneficiario.getPagos() != null && pagosbeneficiario.getPagos().getIdPago74() != null) {
			getPagosIdPagoAux = pagosbeneficiario.getPagos().getIdPago74();
		}
		Object getNivelSoporteIdNivelSoporteAux = null;
		if (pagosbeneficiario.getMaestroNivSoporte() != null
				&& pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58() != null) {
			getNivelSoporteIdNivelSoporteAux = pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58();
		}

		MapSqlParameterSource parameters = new MapSqlParameterSource()
				.addValue("idSolicitante", getSolicitantesIdSolicitanteAux).addValue("idPago", getPagosIdPagoAux)
				.addValue("numDias", pagosbeneficiario.getNumDias75())
				.addValue("tarifa", pagosbeneficiario.getTarifa75())
				.addValue("idNivelSoporte", getNivelSoporteIdNivelSoporteAux)
				.addValue("fAlta", pagosbeneficiario.getfAlta75()).addValue("usuAlta", pagosbeneficiario.getUsuAlta75())
				.addValue("fModif", pagosbeneficiario.getfModif75())
				.addValue("usuModif", pagosbeneficiario.getUsuModif75());

		NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
		namedParameterJdbcTemplate.update(query, parameters, generatedKeyHolder,
				new String[] { "ID_PAGO_BENEFICIARIO_75" });
		pagosbeneficiario.setIdPagoBeneficiario75(generatedKeyHolder.getKey().longValue());

		return pagosbeneficiario;
	}

	/**
	 * Updates a single row in the PagosBeneficiario table.
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @return PagosBeneficiario
	 */
	public PagosBeneficiario update(PagosBeneficiario pagosbeneficiario) {
		String query = "UPDATE PAGOS_BENEFICIARIO " + "SET TARIFA_75=?, " + "ID_SOLICITANTE_75=?, " + "ID_PAGO_75=?, "
				+ "NUM_DIAS_75=?, " + "F_ALTA_75=?, " + "USU_ALTA_75=?, " + "F_MODIF_75=?, " + "USU_MODIF_75=?, "
				+ "ID_NIVEL_SOPORTE_75=? " + "WHERE ID_PAGO_BENEFICIARIO_75=?";

		Object getSolicitantesIdSolicitanteAux = null;
		if (pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getIdSolicitante01() != null) {
			getSolicitantesIdSolicitanteAux = pagosbeneficiario.getSolicitantes().getIdSolicitante01();
		}
		Object getPagosIdPagoAux = null;
		if (pagosbeneficiario.getPagos() != null && pagosbeneficiario.getPagos().getIdPago74() != null) {
			getPagosIdPagoAux = pagosbeneficiario.getPagos().getIdPago74();
		}
		Object getNivelSoporteIdNivelSoporteAux = null;
		if (pagosbeneficiario.getMaestroNivSoporte() != null
				&& pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58() != null) {
			getNivelSoporteIdNivelSoporteAux = pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58();
		}

		this.jdbcTemplate.update(query, pagosbeneficiario.getTarifa75(), getSolicitantesIdSolicitanteAux,
				getPagosIdPagoAux, pagosbeneficiario.getNumDias75(), pagosbeneficiario.getfAlta75(),
				pagosbeneficiario.getUsuAlta75(), pagosbeneficiario.getfModif75(), pagosbeneficiario.getUsuModif75(),
				getNivelSoporteIdNivelSoporteAux, pagosbeneficiario.getIdPagoBeneficiario75());
		return pagosbeneficiario;
	}

	/**
	 * Finds a single row in the PagosBeneficiario table.
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @return PagosBeneficiario
	 */
	@Transactional(readOnly = true)
	public PagosBeneficiario find(PagosBeneficiario pagosbeneficiario) {
		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + " t1.TARIFA_75 TARIFA75 "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01, t2.F_INICIO_01 SOLFINICIO01, "
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58 ");

		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t3.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

		List<PagosBeneficiario> pagosbeneficiarioList = this.jdbcTemplate.query(query.toString(), this.rwMap,
				pagosbeneficiario.getIdPagoBeneficiario75());
		return (PagosBeneficiario) DataAccessUtils.uniqueResult(pagosbeneficiarioList);
	}

	/**
	 * Removes a single row in the PagosBeneficiario table.
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @return
	 */
	public void remove(PagosBeneficiario pagosbeneficiario) {
		String query = "DELETE FROM PAGOS_BENEFICIARIO " + "WHERE ID_PAGO_BENEFICIARIO_75=?";
		this.jdbcTemplate.update(query, pagosbeneficiario.getIdPagoBeneficiario75());
	}

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

		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + "t1.TARIFA_75 TARIFA75, "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01, t2.F_INICIO_01 SOLFINICIO01, "
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58 ");

		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

		// Where clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterPagosBeneficiario, startsWith);
		StringBuilder where = new StringBuilder(query + " WHERE 1=1 ");
		where.append(mapaWhere.get("query"));

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

		StringBuilder sbMultipleSQL = TableManager.getSelectMultipleQuery(tableRequestDto, PagosBeneficiario.class,
				params, "ID_PAGO_BENEFICIARIO_75");
		where.append(sbMultipleSQL);

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

	/**
	 * Finds a list of rows in the PagosBeneficiario table.
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @param tableRequestDto   TableRequestDto
	 * @return List<PagosBeneficiario>
	 */
	@Transactional(readOnly = true)
	public List<PagosBeneficiario> findAll(PagosBeneficiario pagosbeneficiario, TableRequestDto tableRequestDto) {
		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + "t1.TARIFA_75 TARIFA75, "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01, t2.F_INICIO_01 SOLFINICIO01, "
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58 ");

		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

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

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

		if (tableRequestDto != null) {
			// COMPROBACIÓN POR UN ERROR QUE ESTABA DANDO A LA HORA DE ORDENAR POR DOS
			// COLUMNAS, ESTABA RECOGIENDO EL NOMBRE DEL RUP_TABLE EN VEZ DE EL NOMBRE DE LA
			// COLUMNA
			if (tableRequestDto.getSidx() != null) {
				tableRequestDto.setSidx(tableRequestDto.getSidx().replace("pagos.mesPago74", "MESPAGO74"));
				tableRequestDto.setSidx(tableRequestDto.getSidx().replace("pagos.anyoPago74", "ANYOPAGO74"));
			}
			query = TableManager.getPaginationQuery(tableRequestDto, query,
					PagosBeneficiarioDaoImpl.ORDER_BY_WHITE_LIST);
		}

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

	@Transactional(readOnly = true)
	public List<PagosBeneficiario> findAllXCL(PagosBeneficiario pagosbeneficiario, TableRequestDto tableRequestDto) {
		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + "t1.TARIFA_75 TARIFA75, "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01, t2.F_INICIO_01 SOLFINICIO01, "
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58 ");

		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

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

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

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

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

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

		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + "t1.TARIFA_75 TARIFA75, "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01, t2.F_INICIO_01 SOLFINICIO01, "
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t7.ANYO_PAGO_74 ANYOPAGO74, t7.MES_PAGO_74 MESPAGO74, t7.ID_PRESTADOR_74 IDPRESTADOR74, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58, ");
		query.append("t9.RAZON_SOCIAL_73 RAZONSOCIAL73 ");

		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");
		query.append(" LEFT JOIN prestador_servicio   t9 ON ( t7.id_prestador_74 = t9.id_prestador_73 ) ");

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

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

		if (tableRequestDto != null) {
			// COMPROBACIÓN POR UN ERROR QUE ESTABA DANDO A LA HORA DE ORDENAR POR DOS
			// COLUMNAS, ESTABA RECOGIENDO EL NOMBRE DEL RUP_TABLE EN VEZ DE EL NOMBRE DE LA
			// COLUMNA
			if (tableRequestDto.getSidx() != null) {
				tableRequestDto.setSidx(tableRequestDto.getSidx().replace("pagos.mesPago74", "MESPAGO74"));
				tableRequestDto.setSidx(tableRequestDto.getSidx().replace("pagos.anyoPago74", "ANYOPAGO74"));
			}
			query = TableManager.getPaginationQuery(tableRequestDto, query,
					PagosBeneficiarioDaoImpl.ORDER_BY_WHITE_LIST);
		}

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

	@Transactional(readOnly = true)
	public List<PagosBeneficiario> findAllLikeXCL(PagosBeneficiario pagosbeneficiario, TableRequestDto tableRequestDto,
			Boolean startsWith) {

		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + "t1.TARIFA_75 TARIFA75, "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01, t2.F_INICIO_01 SOLFINICIO01, "
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t7.ANYO_PAGO_74 ANYOPAGO74, t7.MES_PAGO_74 MESPAGO74, t7.ID_PRESTADOR_74 IDPRESTADOR74, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58, ");
		query.append("t9.RAZON_SOCIAL_73 RAZONSOCIAL73 ");

		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");
		query.append(" LEFT JOIN prestador_servicio   t9 ON ( t7.id_prestador_74 = t9.id_prestador_73 ) ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(pagosbeneficiario, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);
		query.append(" ORDER BY ANYOPAGO74 DESC, MESPAGO74 DESC ");

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

		if (tableRequestDto != null) {
			// COMPROBACIÓN POR UN ERROR QUE ESTABA DANDO A LA HORA DE ORDENAR POR DOS
			// COLUMNAS, ESTABA RECOGIENDO EL NOMBRE DEL RUP_TABLE EN VEZ DE EL NOMBRE DE LA
			// COLUMNA
			if (tableRequestDto.getSidx() != null) {
				tableRequestDto.setSidx(tableRequestDto.getSidx().replace("pagos.mesPago74", "MESPAGO74"));
				tableRequestDto.setSidx(tableRequestDto.getSidx().replace("pagos.anyoPago74", "ANYOPAGO74"));
			}
			query = TableManager.getPaginationQuery(tableRequestDto, query,
					PagosBeneficiarioDaoImpl.ORDER_BY_WHITE_LIST);
		}

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the PagosBeneficiario table.
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(PagosBeneficiario pagosbeneficiario) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

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

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

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

	/**
	 * Counts rows in the PagosBeneficiario table using like.
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @param startsWith        Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(PagosBeneficiario pagosbeneficiario, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) " + "FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

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

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

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

	/**
	 * Reorder the data list of PagosBeneficiario selected for rup_table
	 *
	 * @param pagosbeneficiario PagosBeneficiario
	 * @param tableRequestDto   TableRequestDto
	 * @param startsWith        Boolean
	 * @return List<TableRowDto<PagosBeneficiario>>
	 */
	@Override
	public List<TableRowDto<PagosBeneficiario>> reorderSelection(PagosBeneficiario pagosbeneficiario,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + "t1.TARIFA_75 TARIFA75, "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01,"
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58 ");

		// FROM
		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

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

		// Parámetros de filtrado
		@SuppressWarnings("unchecked")
		List<Object> filterParamList = (List<Object>) mapaWhere.get("params");

		// SQL para la reordenación
		StringBuilder sbReorderSelectionSQL = TableManager.getReorderQuery(query, tableRequestDto,
				PagosBeneficiario.class, filterParamList, "IDPAGOBENEFICIARIO75");

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

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams    PagosBeneficiario
	 * @param searchParams    PagosBeneficiario
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<PagosBeneficiario>>
	 */
	@Override
	public List<TableRowDto<PagosBeneficiario>> search(PagosBeneficiario filterParams, PagosBeneficiario searchParams,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder("SELECT  t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,"
				+ "t1.ID_SOLICITANTE_75 IDSOLICITANTE75," + "t1.ID_PAGO_75 IDPAGO75," + "t1.NUM_DIAS_75 NUMDIAS75,"
				+ "t1.F_ALTA_75 FALTA75," + "t1.USU_ALTA_75 USUALTA75," + "t1.F_MODIF_75 FMODIF75,"
				+ "t1.USU_MODIF_75 USUMODIF75," + "t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75," + "t1.TARIFA_75 TARIFA75, "
				+ "t2.IDENTIFICADOR_01 SOLIDENTIFICADOR01, t2.NOMBRE_01 SOLNOMBRE01, t2.APELLIDO1_01 SOLAPELLIDO101,"
				+ "t2.APELLIDO2_01 SOLAPELLIDO201, t2.F_ALTA_TELEASISTENCIA_01 SOLFALTATELEASISTENCIA01, t2.F_BAJA_PS_01 SOLFBAJAPS01,"
				+ "t3.ID_GRADO_DEPENDENCIA_04 IDGRADODEPENDENCIA04, ");
		query.append(" t4.ID_DIRECCION_06 DIRECCIONESIDDIRECCION06, t4.ID_LOCALIDAD_06 DIRECCIONESIDLOCALIDAD06,");
		query.append(
				"t5.ID IDPROVINCIA, t5.AUTONOMIA_ID AUTONOMIAID, t5.ds_e DSEPROV, t5.ds_c DSCPROV, t5.ds_o DSPROV, ");
		query.append("t6.ID IDMUNICIPIO, t6.DS_O DSOMUN, ");
		query.append("t8.DESC_ES_58 NIVSOPDESCES58, t8.DESC_EU_58 NIVSOPDESCEU58 ");

		// FROM
		query.append("FROM PAGOS_BENEFICIARIO t1 ");
		query.append(" LEFT JOIN SOLICITANTES t2 ON (t1.ID_SOLICITANTE_75 = t2.ID_SOLICITANTE_01) ");
		query.append(" LEFT JOIN DEPENDENCIA t3 ON (t1.ID_SOLICITANTE_75 = t3.ID_SOLICITANTE_04) ");
		query.append(" LEFT JOIN DIRECCIONES t4 ON (t2.ID_DIRECCION_01= t4.ID_DIRECCION_06) ");
		query.append(" LEFT JOIN T17_PROVINCIA t5 ON (t4.ID_PROVINCIA_06 = t5.ID) ");
		query.append(
				" LEFT JOIN T17_MUNICIPIO t6 ON (t4.ID_MUNICIPIO_06= t6.ID AND t4.id_provincia_06 = t6.PROVINCIA_ID) ");
		query.append(" LEFT JOIN PAGOS t7 ON (t1.ID_PAGO_75 = t7.ID_PAGO_74) ");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t8 ON (t1.ID_NIVEL_SOPORTE_75 = t8.ID_NIVEL_SOPORTE_58) ");

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

		// FILTRADO
		Map<String, ?> mapaWhereFilter = this.getWhereLikeMap(filterParams, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhereFilter.get("query"));
		query.append(where);
		// Filter params
		@SuppressWarnings("unchecked")
		List<Object> filterParamList = (List<Object>) mapaWhereFilter.get("params");

		// BUSQUEDA
		Map<String, Object> mapaWhereSearch = this.getWhereLikeMap(searchParams, startsWith);
		String searchSQL = ((StringBuilder) mapaWhereSearch.get("query")).toString();
		// Search params
		@SuppressWarnings("unchecked")
		List<Object> searchParamList = (List<Object>) mapaWhereSearch.get("params");

		// SQL
		StringBuilder sbReorderSelectionSQL = TableManager.getSearchQuery(query, tableRequestDto,
				PagosBeneficiario.class, filterParamList, searchSQL, searchParamList, from_alias,
				"IDPAGOBENEFICIARIO75");

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

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

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

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

	/**
	 * Filter in the hierarchical PagosBeneficiario table.
	 *
	 * @param filterPagosBeneficiario PagosBeneficiario
	 * @param tableRequestDto         TableRequestDto
	 * @return List<JerarquiaDto<PagosBeneficiario>>
	 */
	@Override
	public List<JerarquiaDto<PagosBeneficiario>> findAllLikeJerarquia(PagosBeneficiario filterPagosBeneficiario,
			TableRequestDto tableRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_PAGO_BENEFICIARIO_75 IDPAGOBENEFICIARIO75,t1.ID_SOLICITANTE_75 IDSOLICITANTE75,t1.ID_PAGO_75 IDPAGO75,t1.NUM_DIAS_75 NUMDIAS75,t1.F_ALTA_75 FALTA75,t1.USU_ALTA_75 USUALTA75,t1.F_MODIF_75 FMODIF75,t1.USU_MODIF_75 USUMODIF75,t1.ID_NIVEL_SOPORTE_75 IDNIVELSOPORTE75,t1.TARIFA_75 TARIFA75,t1.ES_DENEGACION_SERVICIO_01 ESDENEGACIONSERVICIO01 ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM PAGOS_BENEFICIARIO t1
		// t2 ");
		List<String> from = new ArrayList<String>();
		from.add("PAGOS_BENEFICIARIO");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterPagosBeneficiario, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "IDPAGOBENEFICIARIO75", "ID_PADRE",
				"NOMBRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "ID", "ID_PADRE", "NOMBRE", from, from_alias, joins, businessFilters, businessParams);

		// PAGINACION
		if (tableRequestDto != null) {
			query = TableManagerJerarquia.getPaginationQuery(tableRequestDto, query,
					PagosBeneficiarioDaoImpl.ORDER_BY_WHITE_LIST);
		}

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

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

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

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterPagosBeneficiario, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "IDPAGOBENEFICIARIO75",
				"ID_PADRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "ID", "ID_PADRE", from, from_alias, joins, businessFilters, businessParams);

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

	/**
	 * Find dependent hierarchical rows
	 *
	 * @param filterPagosBeneficiario PagosBeneficiario
	 * @param tableRequestDto         TableRequestDto
	 * @return List<TableRowDto<PagosBeneficiario>>
	 */
	@Override
	public List<TableRowDto<PagosBeneficiario>> findAllChild(PagosBeneficiario filterPagosBeneficiario,
			TableRequestDto tableRequestDto) {

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

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

		// JOINS TABLAS
		/*
		 * Ejemplo de como indicar joins entre las tablas de la query
		 */
		/*
		 * StringBuilder joins = new StringBuilder("");
		 * joins.append("AND T1.ID=T2.ID_T1");
		 */

		// CONDICIONES (negocio)
		/*
		 * Ejemplo de como incluir condiciones de negocio en la consulta de la jerarquía
		 */
		/*
		 * StringBuilder businessFilters = new StringBuilder(); List<Object>
		 * businessParams = new ArrayList<Object>();
		 * businessFilters.append("   AND t1.EJIE = ?  "); businessParams.add("1");
		 */

		// FILTRO
		Map<String, ?> mapaWhere = this.getWhereLikeMap(filterPagosBeneficiario, false);

		// MULTISELECCION
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "IDPAGOBENEFICIARIO75",
				"ID_PADRE", from, from_alias);

		/*
		 * Ejemplo de llamada en caso de indicar joins entre tablas y condiciones de
		 * negocio
		 */
//		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "ID", "ID_PADRE", from, from_alias, joins, businessFilters, businessParams);

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

		return this.jdbcTemplate.query(query.toString(),
				new RowNumResultSetExtractor<PagosBeneficiario>(this.rwMapPK, "IDPAGOBENEFICIARIO75"),
				params.toArray());
	}

	/**
	 * Add multiple rows to PagosBeneficiario
	 * 
	 */
	@Override
	public int addMultiple(List<PagosBeneficiario> listaPagosBeneficiarios) {
		StringBuilder query = new StringBuilder(
				"INSERT INTO PAGOS_BENEFICIARIO (ID_PAGO_BENEFICIARIO_75, ID_SOLICITANTE_75, ID_PAGO_75, NUM_DIAS_75, TARIFA_75, ID_NIVEL_SOPORTE_75, F_ALTA_75, USU_ALTA_75, F_MODIF_75, USU_MODIF_75) ");
		query.append("VALUES (" + SEQUENCE_PAGOS_BENEFICIARIO + ".NEXTVAL,?,?,?,?,?,?,?,?,?)");

		int[] resultado = this.jdbcTemplate.batchUpdate(query.toString(), new BatchPreparedStatementSetter() {

			@Override
			public void setValues(PreparedStatement ps, int pos) throws SQLException {
				PagosBeneficiario pagoBeneficiario = listaPagosBeneficiarios.get(pos);

				if (pagoBeneficiario.getSolicitantes() != null
						&& pagoBeneficiario.getSolicitantes().getIdSolicitante01() != null) {
					ps.setLong(1, pagoBeneficiario.getSolicitantes().getIdSolicitante01());
				} else {
					ps.setObject(1, null);
				}
				if (pagoBeneficiario.getPagos() != null && pagoBeneficiario.getPagos().getIdPago74() != null) {
					ps.setLong(2, pagoBeneficiario.getPagos().getIdPago74());
				} else {
					ps.setObject(2, null);
				}
				ps.setLong(3, pagoBeneficiario.getNumDias75());
				if (pagoBeneficiario.getTarifa75() != null) {
					ps.setBigDecimal(4, pagoBeneficiario.getTarifa75());
				} else {
					ps.setObject(4, null);
				}
				if (pagoBeneficiario.getMaestroNivSoporte() != null
						&& pagoBeneficiario.getMaestroNivSoporte().getIdNivelSoporte58() != null) {
					ps.setLong(5, pagoBeneficiario.getMaestroNivSoporte().getIdNivelSoporte58());
				} else {
					ps.setObject(5, null);
				}
				if (pagoBeneficiario.getfAlta75() == null) {
					ps.setObject(6, null);
				} else {
					ps.setDate(6, new java.sql.Date(pagoBeneficiario.getfAlta75().getTime()));
				}
				ps.setString(7, pagoBeneficiario.getUsuAlta75());
				if (pagoBeneficiario.getfModif75() == null) {
					ps.setObject(8, null);
				} else {
					ps.setDate(8, new java.sql.Date(pagoBeneficiario.getfModif75().getTime()));
				}
				ps.setString(9, pagoBeneficiario.getUsuModif75());
			}

			@Override
			public int getBatchSize() {
				return listaPagosBeneficiarios.size();
			}
		});

		return resultado == null ? 0 : resultado.length;
	}

	/*
	 * MÉTODOS PRIVADOS
	 */

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

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

		if (pagosbeneficiario != null && pagosbeneficiario.getIdPagoBeneficiario75() != null) {
			where.append(" AND t1.ID_PAGO_BENEFICIARIO_75 = ?");
			params.add(pagosbeneficiario.getIdPagoBeneficiario75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getTarifa75() != null) {
			where.append(" AND t1.TARIFA_75 = ?");
			params.add(pagosbeneficiario.getTarifa75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getIdSolicitante01() != null) {
			where.append(" AND t1.ID_SOLICITANTE_75 = ?");
			params.add(pagosbeneficiario.getSolicitantes().getIdSolicitante01());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getIdentificador01() != null) {
			where.append(" AND UPPER(t2.IDENTIFICADOR_01) = UPPER(?)");
			params.add(pagosbeneficiario.getSolicitantes().getIdentificador01());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getNombre01() != null) {
			where.append(" AND t2.NOMBRE_01 = ?");
			params.add(pagosbeneficiario.getSolicitantes().getNombre01());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getDirecciones() != null
				&& pagosbeneficiario.getSolicitantes().getDirecciones().getIdProvincia06() != null) {
			where.append(" AND t5.ID = ?");
			params.add(pagosbeneficiario.getSolicitantes().getDirecciones().getIdProvincia06());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaDesde() != null) {
			where.append(" AND t2.F_ALTA_TELEASISTENCIA_01 >= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaDesde());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaHasta() != null) {
			where.append(" AND TRUNC(t2.F_ALTA_TELEASISTENCIA_01) <= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaHasta());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfBajaPsDesde() != null) {
			where.append(" AND t2.F_BAJA_PS_01 >= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfBajaPsDesde());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfBajaPsHasta() != null) {
			where.append(" AND TRUNC(t2.F_BAJA_PS_01) <= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfBajaPsHasta());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getPagos() != null
				&& pagosbeneficiario.getPagos().getIdPago74() != null) {
			where.append(" AND t1.ID_PAGO_75 = ?");
			params.add(pagosbeneficiario.getPagos().getIdPago74());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getPagos() != null
				&& pagosbeneficiario.getPagos().getMesPago74() != null) {
			where.append(" AND t7.MES_PAGO_74 = ?");
			params.add(pagosbeneficiario.getPagos().getMesPago74());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getPagos() != null
				&& pagosbeneficiario.getPagos().getAnyoPago74() != null) {
			where.append(" AND t7.ANYO_PAGO_74 = ?");
			params.add(pagosbeneficiario.getPagos().getAnyoPago74());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getNumDias75() != null) {
			where.append(" AND t1.NUM_DIAS_75 = ?");
			params.add(pagosbeneficiario.getNumDias75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getfAlta75() != null) {
			where.append(" AND t1.F_ALTA_75 = ?");
			params.add(pagosbeneficiario.getfAlta75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getUsuAlta75() != null) {
			where.append(" AND t1.USU_ALTA_75 = ?");
			params.add(pagosbeneficiario.getUsuAlta75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getfModif75() != null) {
			where.append(" AND t1.F_MODIF_75 = ?");
			params.add(pagosbeneficiario.getfModif75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getUsuModif75() != null) {
			where.append(" AND t1.USU_MODIF_75 = ?");
			params.add(pagosbeneficiario.getUsuModif75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getMaestroNivSoporte() != null
				&& pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58() != null) {
			where.append(" AND t1.ID_NIVEL_SOPORTE_75 = ?");
			params.add(pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getIdGradoDependencia() != null) {
			where.append(" AND t3.ID_GRADO_DEPENDENCIA_04 = ?");
			params.add(pagosbeneficiario.getIdGradoDependencia());
		}

		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
	 * PagosBeneficiario entity
	 *
	 * @param pagosbeneficiario PagosBeneficiario Bean with the criteria values to
	 *                          filter by.
	 * @param startsWith        Boolean
	 * @return Map created with two keys key query stores the sql query syntax key
	 *         params stores the parameter values to be used in the condition
	 *         sentence.
	 */
	// CHECKSTYLE:OFF CyclomaticComplexity - Generación de código de UDA
	private Map<String, Object> getWhereLikeMap(PagosBeneficiario pagosbeneficiario, Boolean startsWith) {

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

		if (pagosbeneficiario != null && pagosbeneficiario.getIdPagoBeneficiario75() != null) {
			where.append(" AND t1.ID_PAGO_BENEFICIARIO_75 = ?");
			params.add(pagosbeneficiario.getIdPagoBeneficiario75());
		}
		if (pagosbeneficiario.getTarifa75() != null) {
			where.append(" AND t1.TARIFA_75 = ?");
			params.add(pagosbeneficiario.getTarifa75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getIdSolicitante01() != null) {
			where.append(" AND t1.ID_SOLICITANTE_75 = ?");
			params.add(pagosbeneficiario.getSolicitantes().getIdSolicitante01());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getIdentificador01() != null) {
			where.append(" AND UPPER(t2.IDENTIFICADOR_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pagosbeneficiario.getSolicitantes().getIdentificador01().toUpperCase() + "%");
			} else {
				params.add("%" + pagosbeneficiario.getSolicitantes().getIdentificador01().toUpperCase() + "%");
			}
			where.append(" AND t2.IDENTIFICADOR_01 IS NOT NULL");
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getNombre01() != null) {
			where.append(" AND UPPER(t2.NOMBRE_01) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pagosbeneficiario.getSolicitantes().getNombre01().toUpperCase() + "%");
			} else {
				params.add("%" + pagosbeneficiario.getSolicitantes().getNombre01().toUpperCase() + "%");
			}
			where.append(" AND t2.NOMBRE_01 IS NOT NULL");
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getDirecciones() != null
				&& pagosbeneficiario.getSolicitantes().getDirecciones().getIdProvincia06() != null) {
			where.append(" AND t5.ID = ?");
			params.add(pagosbeneficiario.getSolicitantes().getDirecciones().getIdProvincia06());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaDesde() != null) {
			where.append(" AND t2.F_ALTA_TELEASISTENCIA_01 >= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaDesde());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaHasta() != null) {
			where.append(" AND TRUNC(t2.F_ALTA_TELEASISTENCIA_01) <= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfAltaTeleasistenciaHasta());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfBajaPsDesde() != null) {
			where.append(" AND t2.F_BAJA_PS_01 >= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfBajaPsDesde());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getSolicitantes() != null
				&& pagosbeneficiario.getSolicitantes().getfBajaPsHasta() != null) {
			where.append(" AND TRUNC(t2.F_BAJA_PS_01) <= ?");
			params.add(pagosbeneficiario.getSolicitantes().getfBajaPsHasta());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getPagos() != null
				&& pagosbeneficiario.getPagos().getIdPago74() != null) {
			where.append(" AND t1.ID_PAGO_75 = ?");
			params.add(pagosbeneficiario.getPagos().getIdPago74());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getPagos() != null
				&& pagosbeneficiario.getPagos().getMesPago74() != null) {
			where.append(" AND t7.MES_PAGO_74 = ?");
			params.add(pagosbeneficiario.getPagos().getMesPago74());
		}

		if (pagosbeneficiario != null && pagosbeneficiario.getPagos() != null
				&& pagosbeneficiario.getPagos().getPrestadorServicio() != null
				&& pagosbeneficiario.getPagos().getPrestadorServicio().getIdPrestador73() != null) {
			where.append(" AND t7.ID_PRESTADOR_74 = ?");
			params.add(pagosbeneficiario.getPagos().getPrestadorServicio().getIdPrestador73());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getPagos() != null
				&& pagosbeneficiario.getPagos().getAnyoPago74() != null) {
			where.append(" AND t7.ANYO_PAGO_74 = ?");
			params.add(pagosbeneficiario.getPagos().getAnyoPago74());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getNumDias75() != null) {
			where.append(" AND t1.NUM_DIAS_75 = ?");
			params.add(pagosbeneficiario.getNumDias75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getfAlta75() != null) {
			where.append(" AND t1.F_ALTA_75 = ?");
			params.add(pagosbeneficiario.getfAlta75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getUsuAlta75() != null) {
			where.append(" AND UPPER(t1.USU_ALTA_75) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pagosbeneficiario.getUsuAlta75().toUpperCase() + "%");
			} else {
				params.add("%" + pagosbeneficiario.getUsuAlta75().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_ALTA_75 IS NOT NULL");
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getfModif75() != null) {
			where.append(" AND t1.F_MODIF_75 = ?");
			params.add(pagosbeneficiario.getfModif75());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getUsuModif75() != null) {
			where.append(" AND UPPER(t1.USU_MODIF_75) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(pagosbeneficiario.getUsuModif75().toUpperCase() + "%");
			} else {
				params.add("%" + pagosbeneficiario.getUsuModif75().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_MODIF_75 IS NOT NULL");
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getMaestroNivSoporte() != null
				&& pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58() != null) {
			where.append(" AND t1.ID_NIVEL_SOPORTE_75 = ?");
			params.add(pagosbeneficiario.getMaestroNivSoporte().getIdNivelSoporte58());
		}
		if (pagosbeneficiario != null && pagosbeneficiario.getIdGradoDependencia() != null) {
			where.append(" AND t3.ID_GRADO_DEPENDENCIA_04 = ?");
			params.add(pagosbeneficiario.getIdGradoDependencia());
		}

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

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

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