package com.ejie.ab63.dao;

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

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

import org.springframework.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.ab63.model.DispensaEstablecimiento;
import com.ejie.ab63.model.Establecimiento;
import com.ejie.x38.dao.RowNumResultSetExtractor;
import com.ejie.x38.dto.JQGridManager;
import com.ejie.x38.dto.JQGridManagerJerarquia;
import com.ejie.x38.dto.JQGridRequestDto;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * Ab6320s00DaoImpl  
 * 
 *  
 */

@Repository
@Transactional
public class DispensaEstablecimientoDaoImpl implements DispensaEstablecimientoDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDDISPENSASESTAB", "IDDISPENSA", "FECHADISPENSA",
			"OBSERVACIONESDESCES", "OBSERVACIONESDESCEU", "DISPENSADO", "FECHAREGISTRO", "USUARIOREGISTRO",
			"FECHAULTMODIFICACION", "USUARIOULTMODIFICACION", "AB6301S00IDESTABLECIMIENTO",
			"AB6301S00IDENTIFICADORESTABLEC", "AB6301S00DESCNOMBRE", "AB6301S00VISIBLEWEB", "AB6301S00TEMPORADA",
			"AB6301S00URLWEB", "AB6301S00IDDEFECTOS", "AB6301S00NUMUNIDADESALOJ", "AB6301S00OBSERVACIONES",
			"AB6301S00FECHAAPERTURA", "AB6301S00FECHABAJA", "AB6301S00FECHAINICIERRETEMP",
			"AB6301S00FECHAFINCIERRETEMP", "AB6301S00FECHAVCTOCIERRE", "AB6301S00FECHAULTNOTIFICACION",
			"AB6301S00FECHAULTINSPECCION", "AB6301S00FECHAPROINSPECCION", "AB6301S00FECHAULTACTUALIZACION",
			"AB6301S00FECHACLAUSURA", "AB6301S00FECHAULTREFORMA", "AB6301S00ELIMINADO", "AB6301S00EXPEDIENTEB29",
			"AB6301S00IDPORTALS41", "AB6301S00URLPORTALS41", "AB6301S00FECHACONTROLS41", "AB6301S00NUMINSTALACIONANT",
			"AB6301S00FECHAINSCRIPCION", "AB6301S00NUMINSTALACIONWZ", "AB6301S00OBSERVACIONES2",
			"AB6301S00NOTASMIGRACION", "AB6301S00AGRUPACION", "AB6301S00REFCATASTRAL", "AB6301S00OBSSEGRESPCIVIL",
			"AB6301S00FECHAREGISTRO", "AB6301S00USUARIOREGISTRO", "AB6301S00FECHAULTMODIFICACION",
			"AB6301S00USUARIOULTMODIF", "AB6301S00IDRECURSO", "AB6301S00IDTIPOESTABLECIMIENTO", "AB6301S00IDGRUPO",
			"AB6301S00IDCATEGORIAS", "AB6301S00IDESPECIALIDAD", "AB6301S00IDMODALIDAD", "FOLDERID", "FOLDERNUMBER" };

	private JdbcTemplate jdbcTemplate;

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<DispensaEstablecimiento> rwMap = new RowMapper<DispensaEstablecimiento>() {
		public DispensaEstablecimiento mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new DispensaEstablecimiento(resultSet.getInt("IDDISPENSASESTAB"), resultSet.getDate("FECHADISPENSA"),
					resultSet.getString("OBSERVACIONESDESCES"), resultSet.getString("OBSERVACIONESDESCEU"),
					resultSet.getDate("FECHAREGISTRO"), resultSet.getString("USUARIOREGISTRO"),
					resultSet.getDate("FECHAULTMODIFICACION"), resultSet.getString("USUARIOULTMODIFICACION"),
					new Establecimiento(resultSet.getInt("Ab6301s00IDESTABLECIMIENTO"),
							resultSet.getString("AB6301S00IDENTIFICADORESTABLEC"),
							resultSet.getString("Ab6301s00DESCNOMBRE"), resultSet.getString("Ab6301s00VISIBLEWEB"),
							resultSet.getString("Ab6301s00TEMPORADA"), resultSet.getString("Ab6301s00URLWEB"),
							resultSet.getString("Ab6301s00IDDEFECTOS"), resultSet.getInt("AB6301S00NUMUNIDADESALOJ"),
							resultSet.getString("Ab6301s00OBSERVACIONES"), resultSet.getDate("Ab6301s00FECHAAPERTURA"),
							resultSet.getDate("Ab6301s00FECHABAJA"), resultSet.getDate("Ab6301s00FECHAINICIERRETEMP"),
							resultSet.getDate("Ab6301s00FECHAFINCIERRETEMP"),
							resultSet.getDate("Ab6301s00FECHAVCTOCIERRE"),
							resultSet.getDate("Ab6301s00FECHAULTNOTIFICACION"),
							resultSet.getDate("Ab6301s00FECHAULTINSPECCION"),
							resultSet.getDate("Ab6301s00FECHAPROINSPECCION"),
							resultSet.getDate("Ab6301s00FECHAULTACTUALIZACION"),
							resultSet.getDate("Ab6301s00FECHACLAUSURA"), resultSet.getDate("Ab6301s00FECHAULTREFORMA"),
							resultSet.getString("Ab6301s00ELIMINADO"), resultSet.getString("Ab6301s00EXPEDIENTEB29"),
							resultSet.getLong("Ab6301s00IDPORTALS41"), resultSet.getString("Ab6301s00URLPORTALS41"),
							resultSet.getDate("Ab6301s00FECHACONTROLS41"),
							resultSet.getString("AB6301S00NUMINSTALACIONANT"),
							resultSet.getDate("Ab6301s00FECHAINSCRIPCION"),
							resultSet.getString("Ab6301s00NUMINSTALACIONWZ"),
							resultSet.getString("Ab6301s00OBSERVACIONES2"),
							resultSet.getString("Ab6301s00NOTASMIGRACION"), resultSet.getString("Ab6301s00AGRUPACION"),
							resultSet.getString("Ab6301s00REFCATASTRAL"),
							resultSet.getString("Ab6301s00OBSSEGRESPCIVIL"),
							resultSet.getDate("Ab6301s00FECHAREGISTRO"),
							resultSet.getString("Ab6301s00USUARIOREGISTRO"),
							resultSet.getDate("Ab6301s00FECHAULTMODIFICACION"),
							resultSet.getString("AB6301S00USUARIOULTMODIF"), null, null, null, null, null, null, null,
							null, null, null, null, null, null, null, null, null, null, null, null, null, null, null),
					resultSet.getString("FOLDERID"), resultSet.getString("FOLDERNUMBER"),
					resultSet.getString("DISPENSADO"));
		}
	};

	private RowMapper<DispensaEstablecimiento> rwMapPK = new RowMapper<DispensaEstablecimiento>() {
		public DispensaEstablecimiento mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new DispensaEstablecimiento(resultSet.getInt("IDDISPENSASESTAB"));
		}
	};

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

			DispensaEstablecimiento ab6320s00 = new DispensaEstablecimiento(resultSet.getInt("IDDISPENSASESTAB"),
					resultSet.getDate("FECHADISPENSA"), resultSet.getString("OBSERVACIONESDESCES"),
					resultSet.getString("OBSERVACIONESDESCEU"), resultSet.getDate("FECHAREGISTRO"),
					resultSet.getString("USUARIOREGISTRO"), resultSet.getDate("FECHAULTMODIFICACION"),
					resultSet.getString("USUARIOULTMODIFICACION"),
					new Establecimiento(resultSet.getInt("Ab6301s00IDESTABLECIMIENTO"),
							resultSet.getString("AB6301S00IDENTIFICADORESTABLEC"),
							resultSet.getString("Ab6301s00DESCNOMBRE"), resultSet.getString("Ab6301s00VISIBLEWEB"),
							resultSet.getString("Ab6301s00TEMPORADA"), resultSet.getString("Ab6301s00URLWEB"),
							resultSet.getString("Ab6301s00IDDEFECTOS"), resultSet.getInt("AB6301S00NUMUNIDADESALOJ"),
							resultSet.getString("Ab6301s00OBSERVACIONES"), resultSet.getDate("Ab6301s00FECHAAPERTURA"),
							resultSet.getDate("Ab6301s00FECHABAJA"), resultSet.getDate("Ab6301s00FECHAINICIERRETEMP"),
							resultSet.getDate("Ab6301s00FECHAFINCIERRETEMP"),
							resultSet.getDate("Ab6301s00FECHAVCTOCIERRE"),
							resultSet.getDate("Ab6301s00FECHAULTNOTIFICACION"),
							resultSet.getDate("Ab6301s00FECHAULTINSPECCION"),
							resultSet.getDate("Ab6301s00FECHAPROINSPECCION"),
							resultSet.getDate("Ab6301s00FECHAULTACTUALIZACION"),
							resultSet.getDate("Ab6301s00FECHACLAUSURA"), resultSet.getDate("Ab6301s00FECHAULTREFORMA"),
							resultSet.getString("Ab6301s00ELIMINADO"), resultSet.getString("Ab6301s00EXPEDIENTEB29"),
							resultSet.getLong("Ab6301s00IDPORTALS41"), resultSet.getString("Ab6301s00URLPORTALS41"),
							resultSet.getDate("Ab6301s00FECHACONTROLS41"),
							resultSet.getString("AB6301S00NUMINSTALACIONANT"),
							resultSet.getDate("Ab6301s00FECHAINSCRIPCION"),
							resultSet.getString("Ab6301s00NUMINSTALACIONWZ"),
							resultSet.getString("Ab6301s00OBSERVACIONES2"),
							resultSet.getString("Ab6301s00NOTASMIGRACION"), resultSet.getString("Ab6301s00AGRUPACION"),
							resultSet.getString("Ab6301s00REFCATASTRAL"),
							resultSet.getString("Ab6301s00OBSSEGRESPCIVIL"),
							resultSet.getDate("Ab6301s00FECHAREGISTRO"),
							resultSet.getString("Ab6301s00USUARIOREGISTRO"),
							resultSet.getDate("Ab6301s00FECHAULTMODIFICACION"),
							resultSet.getString("AB6301S00USUARIOULTMODIF"), null, null, null, null, null, null, null,
							null, null, null, null, null, null, null, null, null, null, null, null, null, null, null),
					resultSet.getString("FOLDERID"), resultSet.getString("FOLDERNUMBER"),
					resultSet.getString("DISPENSADO"));

			JerarquiaDto<DispensaEstablecimiento> jerarquia = new JerarquiaDto<DispensaEstablecimiento>();
			jerarquia.setModel(ab6320s00);
			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 Ab6320s00 table.
	 *
	 * @param dispensaEstablecimiento
	 *            Ab6320s00
	 * @return Ab6320s00
	 */
	public DispensaEstablecimiento add(DispensaEstablecimiento dispensaEstablecimiento) {
		String query = "INSERT INTO AB6320S00 (ID_DISPENSAS_ESTAB, ID_ESTABLECIMIENTO, FOLDER_ID, FOLDER_NUMBER, FECHA_DISPENSA, OBSERVACIONES_DESC_ES,OBSERVACIONES_DESC_EU,DISPENSADO, FECHA_REGISTRO, USUARIO_REGISTRO) VALUES (AB6320Q00.nextval,?,?,?,?,?,?,?,?,?)";
		Object getAb6301s00IdEstablecimientoAux = null;
		if (dispensaEstablecimiento.getEstablecimiento() != null
				&& dispensaEstablecimiento.getEstablecimiento().getIdEstablecimiento() != null) {
			getAb6301s00IdEstablecimientoAux = dispensaEstablecimiento.getEstablecimiento().getIdEstablecimiento();
		}
		this.jdbcTemplate.update(query, getAb6301s00IdEstablecimientoAux, dispensaEstablecimiento.getFolderId(),
				dispensaEstablecimiento.getFolderNumber(), dispensaEstablecimiento.getFechaDispensa(),
				dispensaEstablecimiento.getObservacionesDescEs(), dispensaEstablecimiento.getObservacionesDescEu(),
				dispensaEstablecimiento.getDispensado(), dispensaEstablecimiento.getFechaRegistro(),
				dispensaEstablecimiento.getUsuarioRegistro());
		return dispensaEstablecimiento;
	}

	/**
	 * Updates a single row in the Ab6320s00 table.
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @return Ab6320s00
	 */
	public DispensaEstablecimiento update(DispensaEstablecimiento ab6320s00) {
		String query = "UPDATE AB6320S00 SET ID_ESTABLECIMIENTO=?, FECHA_DISPENSA=?, OBSERVACIONES_DESC_ES=?,OBSERVACIONES_DESC_EU=?, DISPENSADO=?, FECHA_ULTMODIFICACION=?, USUARIO_ULTMODIFICACION=? WHERE ID_DISPENSAS_ESTAB=?";
		Object getAb6301s00IdEstablecimientoAux = null;
		if (ab6320s00.getEstablecimiento() != null && ab6320s00.getEstablecimiento().getIdEstablecimiento() != null) {
			getAb6301s00IdEstablecimientoAux = ab6320s00.getEstablecimiento().getIdEstablecimiento();
		}
		this.jdbcTemplate.update(query, getAb6301s00IdEstablecimientoAux, ab6320s00.getFechaDispensa(),
				ab6320s00.getObservacionesDescEs(), ab6320s00.getObservacionesDescEu(), ab6320s00.getDispensado(),
				ab6320s00.getFechaUltmodificacion(), ab6320s00.getUsuarioUltmodificacion(),
				ab6320s00.getIdDispensasEstab());
		return ab6320s00;
	}

	/**
	 * Finds a single row in the Ab6320s00 table.
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @return Ab6320s00
	 */
	@Transactional(readOnly = true)
	public DispensaEstablecimiento find(DispensaEstablecimiento ab6320s00) {
		String query = "SELECT t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSA, t1.DISPENSADO DISPENSADO, t1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.FECHA_REGISTRO FECHAREGISTRO, t1.USUARIO_REGISTRO USUARIOREGISTRO, t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION, t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION, t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO, t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC, t2.DESC_NOMBRE AB6301S00DESCNOMBRE, t2.VISIBLEWEB AB6301S00VISIBLEWEB, t2.TEMPORADA AB6301S00TEMPORADA, t2.URLWEB AB6301S00URLWEB, t2.ID_DEFECTOS AB6301S00IDDEFECTOS, t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ, t2.OBSERVACIONES AB6301S00OBSERVACIONES, t2.FECHA_APERTURA AB6301S00FECHAAPERTURA, t2.FECHA_BAJA AB6301S00FECHABAJA, t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP, t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP, t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE, t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION, t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION, t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION, t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION, t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA, t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA, t2.ELIMINADO AB6301S00ELIMINADO, t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29, t2.ID_PORTAL_S41 AB6301S00IDPORTALS41, t2.URL_PORTAL_S41 AB6301S00URLPORTALS41, t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41, t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT, t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION, t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ, t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2, t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION, t2.AGRUPACION AB6301S00AGRUPACION, t2.REF_CATASTRAL AB6301S00REFCATASTRAL, t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL, t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO, t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO, t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION, t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF, t2.ID_RECURSO AB6301S00IDRECURSO, t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO, t2.ID_GRUPO AB6301S00IDGRUPO, t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS, t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD, t2.ID_MODALIDAD AB6301S00IDMODALIDAD FROM AB6320S00 t1 , AB6301S00 t2  WHERE t1.ID_DISPENSAS_ESTAB = ?   AND t1.ID_ESTABLECIMIENTO= t2.ID_ESTABLECIMIENTO(+)";

		List<DispensaEstablecimiento> ab6320s00List = this.jdbcTemplate.query(query, this.rwMap,
				ab6320s00.getIdDispensasEstab());
		return (DispensaEstablecimiento) DataAccessUtils.uniqueResult(ab6320s00List);
	}

	/**
	 * Removes a single row in the Ab6320s00 table.
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @return
	 */
	public void remove(DispensaEstablecimiento ab6320s00) {
		String query = "DELETE FROM AB6320S00 WHERE ID_DISPENSAS_ESTAB=?";
		this.jdbcTemplate.update(query, ab6320s00.getIdDispensasEstab());
	}

	/**
	 * Finds a list of rows in the Ab6320s00 table.
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<Ab6320s00>
	 */
	@Transactional(readOnly = true)
	public List<DispensaEstablecimiento> findAll(DispensaEstablecimiento ab6320s00, JQGridRequestDto jqGridRequestDto) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSA,t1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.DISPENSADO DISPENSADO,t1.FECHA_REGISTRO FECHAREGISTRO,t1.USUARIO_REGISTRO USUARIOREGISTRO,t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION,t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION,t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO,t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC,t2.DESC_NOMBRE AB6301S00DESCNOMBRE,t2.VISIBLEWEB AB6301S00VISIBLEWEB,t2.TEMPORADA AB6301S00TEMPORADA,t2.URLWEB AB6301S00URLWEB,t2.ID_DEFECTOS AB6301S00IDDEFECTOS,t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ,t2.OBSERVACIONES AB6301S00OBSERVACIONES,t2.FECHA_APERTURA AB6301S00FECHAAPERTURA,t2.FECHA_BAJA AB6301S00FECHABAJA,t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP,t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP,t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE,t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION,t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION,t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION,t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION,t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA,t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA,t2.ELIMINADO AB6301S00ELIMINADO,t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29,t2.ID_PORTAL_S41 AB6301S00IDPORTALS41,t2.URL_PORTAL_S41 AB6301S00URLPORTALS41,t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41,t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT,t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION,t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ,t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2,t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION,t2.AGRUPACION AB6301S00AGRUPACION,t2.REF_CATASTRAL AB6301S00REFCATASTRAL,t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL,t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO,t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO,t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION,t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF,t2.ID_RECURSO AB6301S00IDRECURSO,t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO,t2.ID_GRUPO AB6301S00IDGRUPO,t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS,t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD,t2.ID_MODALIDAD AB6301S00IDMODALIDAD ");
		query.append("FROM AB6320S00 t1 ,AB6301S00 t2 ");

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

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

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

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

	/**
	 * Finds rows in the Ab6320s00 table using like.
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<Ab6320s00>
	 */
	@Transactional(readOnly = true)
	public List<DispensaEstablecimiento> findAllLike(DispensaEstablecimiento ab6320s00,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSA,t1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.DISPENSADO DISPENSADO,t1.FECHA_REGISTRO FECHAREGISTRO,t1.USUARIO_REGISTRO USUARIOREGISTRO,t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION,t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION,t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO,t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC,t2.DESC_NOMBRE AB6301S00DESCNOMBRE,t2.VISIBLEWEB AB6301S00VISIBLEWEB,t2.TEMPORADA AB6301S00TEMPORADA,t2.URLWEB AB6301S00URLWEB,t2.ID_DEFECTOS AB6301S00IDDEFECTOS,t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ,t2.OBSERVACIONES AB6301S00OBSERVACIONES,t2.FECHA_APERTURA AB6301S00FECHAAPERTURA,t2.FECHA_BAJA AB6301S00FECHABAJA,t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP,t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP,t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE,t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION,t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION,t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION,t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION,t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA,t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA,t2.ELIMINADO AB6301S00ELIMINADO,t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29,t2.ID_PORTAL_S41 AB6301S00IDPORTALS41,t2.URL_PORTAL_S41 AB6301S00URLPORTALS41,t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41,t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT,t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION,t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ,t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2,t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION,t2.AGRUPACION AB6301S00AGRUPACION,t2.REF_CATASTRAL AB6301S00REFCATASTRAL,t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL,t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO,t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO,t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION,t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF,t2.ID_RECURSO AB6301S00IDRECURSO,t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO,t2.ID_GRUPO AB6301S00IDGRUPO,t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS,t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD,t2.ID_MODALIDAD AB6301S00IDMODALIDAD ");
		query.append("FROM AB6320S00 t1 ,AB6301S00 t2 ");

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

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

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the Ab6320s00 table.
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(DispensaEstablecimiento ab6320s00) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM AB6320S00 t1 , AB6301S00 t2 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(ab6320s00);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_ESTABLECIMIENTO= t2.ID_ESTABLECIMIENTO(+) ");
		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 Ab6320s00 table using like.
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @param startsWith
	 *            Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(DispensaEstablecimiento ab6320s00, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM AB6320S00 t1 ,AB6301S00 t2 ");

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

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

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

	/**
	 * Reorder the data list of Ab6320s00 selected for rup_table
	 *
	 * @param ab6320s00
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<TableRowDto<Ab6320s00>>
	 */
	@Override
	public List<TableRowDto<DispensaEstablecimiento>> reorderSelection(DispensaEstablecimiento ab6320s00,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSAt1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.DISPENSADO DISPENSADO,t1.FECHA_REGISTRO FECHAREGISTRO,t1.USUARIO_REGISTRO USUARIOREGISTRO,t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION,t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION,t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO,t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC,t2.DESC_NOMBRE AB6301S00DESCNOMBRE,t2.VISIBLEWEB AB6301S00VISIBLEWEB,t2.TEMPORADA AB6301S00TEMPORADA,t2.URLWEB AB6301S00URLWEB,t2.ID_DEFECTOS AB6301S00IDDEFECTOS,t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ,t2.OBSERVACIONES AB6301S00OBSERVACIONES,t2.FECHA_APERTURA AB6301S00FECHAAPERTURA,t2.FECHA_BAJA AB6301S00FECHABAJA,t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP,t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP,t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE,t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION,t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION,t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION,t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION,t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA,t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA,t2.ELIMINADO AB6301S00ELIMINADO,t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29,t2.ID_PORTAL_S41 AB6301S00IDPORTALS41,t2.URL_PORTAL_S41 AB6301S00URLPORTALS41,t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41,t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT,t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION,t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ,t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2,t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION,t2.AGRUPACION AB6301S00AGRUPACION,t2.REF_CATASTRAL AB6301S00REFCATASTRAL,t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL,t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO,t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO,t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION,t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF,t2.ID_RECURSO AB6301S00IDRECURSO,t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO,t2.ID_GRUPO AB6301S00IDGRUPO,t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS,t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD,t2.ID_MODALIDAD AB6301S00IDMODALIDAD ");
		// FROM
		query.append("FROM AB6320S00 t1 ,AB6301S00 t2 ");
		// FILTRADO
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(ab6320s00, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_ESTABLECIMIENTO= t2.ID_ESTABLECIMIENTO(+) ");
		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 = JQGridManager.getReorderQuery(query, jqGridRequestDto,
				DispensaEstablecimiento.class, filterParamList, "ID_DISPENSAS_ESTAB");

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

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams
	 *            Ab6320s00
	 * @param searchParams
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<TableRowDto<Ab6320s00>>
	 */
	@Override
	public List<TableRowDto<DispensaEstablecimiento>> search(DispensaEstablecimiento filterParams,
			DispensaEstablecimiento searchParams, JQGridRequestDto jqGridRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSAt1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.DISPENSADO DISPENSADO,t1.FECHA_REGISTRO FECHAREGISTRO,t1.USUARIO_REGISTRO USUARIOREGISTRO,t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION,t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION,t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO,t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC,t2.DESC_NOMBRE AB6301S00DESCNOMBRE,t2.VISIBLEWEB AB6301S00VISIBLEWEB,t2.TEMPORADA AB6301S00TEMPORADA,t2.URLWEB AB6301S00URLWEB,t2.ID_DEFECTOS AB6301S00IDDEFECTOS,t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ,t2.OBSERVACIONES AB6301S00OBSERVACIONES,t2.FECHA_APERTURA AB6301S00FECHAAPERTURA,t2.FECHA_BAJA AB6301S00FECHABAJA,t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP,t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP,t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE,t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION,t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION,t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION,t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION,t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA,t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA,t2.ELIMINADO AB6301S00ELIMINADO,t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29,t2.ID_PORTAL_S41 AB6301S00IDPORTALS41,t2.URL_PORTAL_S41 AB6301S00URLPORTALS41,t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41,t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT,t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION,t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ,t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2,t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION,t2.AGRUPACION AB6301S00AGRUPACION,t2.REF_CATASTRAL AB6301S00REFCATASTRAL,t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL,t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO,t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO,t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION,t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF,t2.ID_RECURSO AB6301S00IDRECURSO,t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO,t2.ID_GRUPO AB6301S00IDGRUPO,t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS,t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD,t2.ID_MODALIDAD AB6301S00IDMODALIDAD ");
		// FROM
		query.append("FROM AB6320S00 t1 ,AB6301S00 t2 ");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");

		// FILTRADO
		Map<String, ?> mapaWhereFilter = this.getWhereLikeMap(filterParams, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_ESTABLECIMIENTO= t2.ID_ESTABLECIMIENTO(+) ");
		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 = JQGridManager.getSearchQuery(query, jqGridRequestDto,
				DispensaEstablecimiento.class, filterParamList, searchSQL, searchParamList, from_alias,
				"ID_DISPENSAS_ESTAB");

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

	/**
	 * Remove multiple method for rup_table
	 *
	 * @param filterab6320s00
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 */
	@Override
	public void removeMultiple(DispensaEstablecimiento filterab6320s00, JQGridRequestDto jqGridRequestDto,
			Boolean startsWith) {
		// SELECT
		/** TODO: select por clave */
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSAt1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.DISPENSADO DISPENSADO,t1.FECHA_REGISTRO FECHAREGISTRO,t1.USUARIO_REGISTRO USUARIOREGISTRO,t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION,t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION,t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO,t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC,t2.DESC_NOMBRE AB6301S00DESCNOMBRE,t2.VISIBLEWEB AB6301S00VISIBLEWEB,t2.TEMPORADA AB6301S00TEMPORADA,t2.URLWEB AB6301S00URLWEB,t2.ID_DEFECTOS AB6301S00IDDEFECTOS,t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ,t2.OBSERVACIONES AB6301S00OBSERVACIONES,t2.FECHA_APERTURA AB6301S00FECHAAPERTURA,t2.FECHA_BAJA AB6301S00FECHABAJA,t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP,t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP,t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE,t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION,t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION,t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION,t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION,t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA,t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA,t2.ELIMINADO AB6301S00ELIMINADO,t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29,t2.ID_PORTAL_S41 AB6301S00IDPORTALS41,t2.URL_PORTAL_S41 AB6301S00URLPORTALS41,t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41,t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT,t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION,t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ,t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2,t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION,t2.AGRUPACION AB6301S00AGRUPACION,t2.REF_CATASTRAL AB6301S00REFCATASTRAL,t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL,t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO,t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO,t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION,t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF,t2.ID_RECURSO AB6301S00IDRECURSO,t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO,t2.ID_GRUPO AB6301S00IDGRUPO,t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS,t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD,t2.ID_MODALIDAD AB6301S00IDMODALIDAD ");
		// FROM
		query.append("FROM AB6320S00 t1 ,AB6301S00 t2 ");

		// WHERE
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterab6320s00, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

		StringBuilder sbRemoveMultipleSQL = JQGridManager.getRemoveMultipleQuery(jqGridRequestDto,
				DispensaEstablecimiento.class, query, params, "ID_DISPENSAS_ESTAB");
		this.jdbcTemplate.update(sbRemoveMultipleSQL.toString(), params.toArray());
	}

	/**
	 * Filter in the hierarchical Ab6320s00 table.
	 *
	 * @param filterAb6320s00
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<JerarquiaDto<Ab6320s00>>
	 */
	@Override
	public List<JerarquiaDto<DispensaEstablecimiento>> findAllLikeJerarquia(DispensaEstablecimiento filterAb6320s00,
			JQGridRequestDto jqGridRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSAt1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.DISPENSADO DISPENSADO,t1.FECHA_REGISTRO FECHAREGISTRO,t1.USUARIO_REGISTRO USUARIOREGISTRO,t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION,t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION,t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO,t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC,t2.DESC_NOMBRE AB6301S00DESCNOMBRE,t2.VISIBLEWEB AB6301S00VISIBLEWEB,t2.TEMPORADA AB6301S00TEMPORADA,t2.URLWEB AB6301S00URLWEB,t2.ID_DEFECTOS AB6301S00IDDEFECTOS,t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ,t2.OBSERVACIONES AB6301S00OBSERVACIONES,t2.FECHA_APERTURA AB6301S00FECHAAPERTURA,t2.FECHA_BAJA AB6301S00FECHABAJA,t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP,t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP,t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE,t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION,t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION,t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION,t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION,t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA,t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA,t2.ELIMINADO AB6301S00ELIMINADO,t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29,t2.ID_PORTAL_S41 AB6301S00IDPORTALS41,t2.URL_PORTAL_S41 AB6301S00URLPORTALS41,t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41,t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT,t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION,t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ,t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2,t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION,t2.AGRUPACION AB6301S00AGRUPACION,t2.REF_CATASTRAL AB6301S00REFCATASTRAL,t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL,t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO,t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO,t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION,t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF,t2.ID_RECURSO AB6301S00IDRECURSO,t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO,t2.ID_GRUPO AB6301S00IDGRUPO,t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS,t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD,t2.ID_MODALIDAD AB6301S00IDMODALIDAD ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM AB6320S00 t1 ,AB6301S00
		// t2 ");
		List<String> from = new ArrayList<String>();
		from.add("AB6320S00");
		from.add("AB6301S00");
		// TABLAS_ALIAS
		List<String> from_alias = new ArrayList<String>();
		from_alias.add(" t1 ");
		from_alias.add(" t2 ");

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

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

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

		// PAGINACION
		if (jqGridRequestDto != null) {
			query = JQGridManagerJerarquia.getPaginationQuery(jqGridRequestDto, query,
					DispensaEstablecimientoDaoImpl.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 filterAb6320s00
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return Long
	 */
	@Override
	public Long findAllLikeCountJerarquia(DispensaEstablecimiento filterAb6320s00, JQGridRequestDto jqGridRequestDto) {
		// FROM
		// StringBuilder from = new StringBuilder("FROM AB6320S00 t1 ,AB6301S00
		// t2 ");
		List<String> from = new ArrayList<String>();
		from.add("AB6320S00");
		from.add("AB6301S00");

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

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

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

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

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

	/**
	 * Find dependent hierarchical rows
	 *
	 * @param filterAb6320s00
	 *            Ab6320s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<TableRowDto<Ab6320s00>>
	 */
	@Override
	public List<TableRowDto<DispensaEstablecimiento>> findAllChild(DispensaEstablecimiento filterAb6320s00,
			JQGridRequestDto jqGridRequestDto) {

		// FROM
		// StringBuilder from = new StringBuilder("FROM AB6320S00 t1 ,AB6301S00
		// t2 ");
		List<String> from = new ArrayList<String>();
		from.add("AB6320S00");
		from.add("AB6301S00");

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

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

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

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

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

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

	/*
	 * MÉTODOS PRIVADOS
	 */

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

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

		if (ab6320s00 != null && ab6320s00.getIdDispensasEstab() != null) {
			where.append(" AND t1.ID_DISPENSAS_ESTAB = ?");
			params.add(ab6320s00.getIdDispensasEstab());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdEstablecimiento() != null) {
			where.append(" AND t2.ID_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getIdEstablecimiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getRecurso() != null
				&& ab6320s00.getEstablecimiento().getRecurso().getIdRecurso() != null) {
			where.append(" AND t2.ID_RECURSO = ?");
			params.add(ab6320s00.getEstablecimiento().getRecurso().getIdRecurso());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getTipoEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getTipoEstablecimiento().getIdTipoEstablecimiento() != null) {
			where.append(" AND t2.ID_TIPO_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getTipoEstablecimiento().getIdTipoEstablecimiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getGrupo() != null
				&& ab6320s00.getEstablecimiento().getGrupo().getIdGrupo() != null) {
			where.append(" AND t2.ID_GRUPO = ?");
			params.add(ab6320s00.getEstablecimiento().getGrupo().getIdGrupo());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getCategoria() != null
				&& ab6320s00.getEstablecimiento().getCategoria().getIdCategorias() != null) {
			where.append(" AND t2.ID_CATEGORIAS = ?");
			params.add(ab6320s00.getEstablecimiento().getCategoria().getIdCategorias());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getEspecialidad() != null
				&& ab6320s00.getEstablecimiento().getEspecialidad().getIdEspecialidad() != null) {
			where.append(" AND t2.ID_ESPECIALIDAD = ?");
			params.add(ab6320s00.getEstablecimiento().getEspecialidad().getIdEspecialidad());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getModalidad() != null
				&& ab6320s00.getEstablecimiento().getModalidad().getIdModalidad() != null) {
			where.append(" AND t2.ID_MODALIDAD = ?");
			params.add(ab6320s00.getEstablecimiento().getModalidad().getIdModalidad());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdentificadorEstablecimiento() != null) {
			where.append(" AND t2.IDENTIFICADOR_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getIdentificadorEstablecimiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getDescrNombre() != null) {
			where.append(" AND t2.DESC_NOMBRE = ?");
			params.add(ab6320s00.getEstablecimiento().getDescrNombre());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getVisibleweb() != null) {
			where.append(" AND t2.VISIBLEWEB = ?");
			params.add(ab6320s00.getEstablecimiento().getVisibleweb());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getTemporada() != null) {
			where.append(" AND t2.TEMPORADA = ?");
			params.add(ab6320s00.getEstablecimiento().getTemporada());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUrlweb() != null) {
			where.append(" AND t2.URLWEB = ?");
			params.add(ab6320s00.getEstablecimiento().getUrlweb());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdDefectos() != null) {
			where.append(" AND t2.ID_DEFECTOS = ?");
			params.add(ab6320s00.getEstablecimiento().getIdDefectos());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNumUnidadesAlojamiento() != null) {
			where.append(" AND t2.NUM_UNIDADES_ALOJAMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getNumUnidadesAlojamiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getObservaciones() != null) {
			where.append(" AND t2.OBSERVACIONES = ?");
			params.add(ab6320s00.getEstablecimiento().getObservaciones());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaApertura() != null) {
			where.append(" AND t2.FECHA_APERTURA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaApertura());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaBaja() != null) {
			where.append(" AND t2.FECHA_BAJA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaBaja());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaInicierretemp() != null) {
			where.append(" AND t2.FECHA_INICIERRETEMP = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaInicierretemp());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaFincierretemp() != null) {
			where.append(" AND t2.FECHA_FINCIERRETEMP = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaFincierretemp());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaVctoCierre() != null) {
			where.append(" AND t2.FECHA_VCTO_CIERRE = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaVctoCierre());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltNotificacion() != null) {
			where.append(" AND t2.FECHA_ULT_NOTIFICACION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltNotificacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltInspeccion() != null) {
			where.append(" AND t2.FECHA_ULT_INSPECCION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltInspeccion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaProInspeccion() != null) {
			where.append(" AND t2.FECHA_PRO_INSPECCION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaProInspeccion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltActualizacion() != null) {
			where.append(" AND t2.FECHA_ULT_ACTUALIZACION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltActualizacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaClausura() != null) {
			where.append(" AND t2.FECHA_CLAUSURA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaClausura());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltReforma() != null) {
			where.append(" AND t2.FECHA_ULT_REFORMA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltReforma());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getEliminado() != null) {
			where.append(" AND t2.ELIMINADO = ?");
			params.add(ab6320s00.getEstablecimiento().getEliminado());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getExpedienteb29() != null) {
			where.append(" AND t2.EXPEDIENTEB29 = ?");
			params.add(ab6320s00.getEstablecimiento().getExpedienteb29());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdPortalS41() != null) {
			where.append(" AND t2.ID_PORTAL_S41 = ?");
			params.add(ab6320s00.getEstablecimiento().getIdPortalS41());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUrlPortalS41() != null) {
			where.append(" AND t2.URL_PORTAL_S41 = ?");
			params.add(ab6320s00.getEstablecimiento().getUrlPortalS41());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaControlS41() != null) {
			where.append(" AND t2.FECHA_CONTROL_S41 = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaControlS41());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNumInstalacionAnterior() != null) {
			where.append(" AND t2.NUM_INSTALACION_ANTERIOR = ?");
			params.add(ab6320s00.getEstablecimiento().getNumInstalacionAnterior());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaInscripcion() != null) {
			where.append(" AND t2.FECHA_INSCRIPCION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaInscripcion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNumInstalacionWz() != null) {
			where.append(" AND t2.NUM_INSTALACION_WZ = ?");
			params.add(ab6320s00.getEstablecimiento().getNumInstalacionWz());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getObservaciones2() != null) {
			where.append(" AND t2.OBSERVACIONES2 = ?");
			params.add(ab6320s00.getEstablecimiento().getObservaciones2());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNotasMigracion() != null) {
			where.append(" AND t2.NOTAS_MIGRACION = ?");
			params.add(ab6320s00.getEstablecimiento().getNotasMigracion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getAgrupacion() != null) {
			where.append(" AND t2.AGRUPACION = ?");
			params.add(ab6320s00.getEstablecimiento().getAgrupacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getRefCatastral() != null) {
			where.append(" AND t2.REF_CATASTRAL = ?");
			params.add(ab6320s00.getEstablecimiento().getRefCatastral());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getObsSegrespcivil() != null) {
			where.append(" AND t2.OBS_SEGRESPCIVIL = ?");
			params.add(ab6320s00.getEstablecimiento().getObsSegrespcivil());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaRegistro() != null) {
			where.append(" AND t2.FECHA_REGISTRO = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaRegistro());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUsuarioRegistro() != null) {
			where.append(" AND t2.USUARIO_REGISTRO = ?");
			params.add(ab6320s00.getEstablecimiento().getUsuarioRegistro());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltmodificacion() != null) {
			where.append(" AND t2.FECHA_ULTMODIFICACION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltmodificacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUsuarioUltmodificacion() != null) {
			where.append(" AND t2.USUARIO_ULTMODIFICACION = ?");
			params.add(ab6320s00.getEstablecimiento().getUsuarioUltmodificacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getEstablecimientoData() != null
				&& ab6320s00.getEstablecimiento().getEstablecimientoData().getIdEstablecimiento() != null) {
			where.append(" AND t2.ID_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getEstablecimientoData().getIdEstablecimiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFranquicia() != null
				&& ab6320s00.getEstablecimiento().getFranquicia().getIdEstablecimiento() != null) {
			where.append(" AND t2.ID_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getFranquicia().getIdEstablecimiento());
		}
		/*
		 * if (ab6320s00 != null && ab6320s00.getIdDispensa() != null) {
		 * where.append(" AND t1.ID_DISPENSA = ?");
		 * params.add(ab6320s00.getIdDispensa()); }
		 */
		if (ab6320s00 != null && ab6320s00.getFechaDispensa() != null) {
			where.append(" AND t1.FECHA_DISPENSA = ?");
			params.add(ab6320s00.getFechaDispensa());
		}
		if (ab6320s00 != null && ab6320s00.getObservacionesDescEs() != null) {
			where.append(" AND t1.OBSERVACIONES_DESC_ES = ?");
			params.add(ab6320s00.getObservacionesDescEs());
		}
		if (ab6320s00 != null && ab6320s00.getObservacionesDescEu() != null) {
			where.append(" AND t1.OBSERVACIONES_DESC_EU = ?");
			params.add(ab6320s00.getObservacionesDescEu());
		}
		if (ab6320s00 != null && ab6320s00.getFechaRegistro() != null) {
			where.append(" AND t1.FECHA_REGISTRO = ?");
			params.add(ab6320s00.getFechaRegistro());
		}
		if (ab6320s00 != null && ab6320s00.getUsuarioRegistro() != null) {
			where.append(" AND t1.USUARIO_REGISTRO = ?");
			params.add(ab6320s00.getUsuarioRegistro());
		}
		if (ab6320s00 != null && ab6320s00.getFechaUltmodificacion() != null) {
			where.append(" AND t1.FECHA_ULTMODIFICACION = ?");
			params.add(ab6320s00.getFechaUltmodificacion());
		}
		if (ab6320s00 != null && ab6320s00.getUsuarioUltmodificacion() != null) {
			where.append(" AND t1.USUARIO_ULTMODIFICACION = ?");
			params.add(ab6320s00.getUsuarioUltmodificacion());
		}
		if (ab6320s00 != null && ab6320s00.getDispensado() != null) {
			where.append(" AND t1.DISPENSADO = ?");
			params.add(ab6320s00.getDispensado());
		}

		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 Ab6320s00 entity
	 *
	 * @param ab6320s00
	 *            Ab6320s00 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(DispensaEstablecimiento ab6320s00, Boolean startsWith) {

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

		if (ab6320s00 != null && ab6320s00.getIdDispensasEstab() != null) {
			where.append(" AND t1.ID_DISPENSAS_ESTAB = ?");
			params.add(ab6320s00.getIdDispensasEstab());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdEstablecimiento() != null) {
			where.append(" AND t2.ID_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getIdEstablecimiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getRecurso() != null
				&& ab6320s00.getEstablecimiento().getRecurso().getIdRecurso() != null) {
			where.append(" AND UPPER(t2.ID_RECURSO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getRecurso().getIdRecurso().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getRecurso().getIdRecurso().toUpperCase() + "%");
			}
			where.append(" AND t2.ID_RECURSO IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getTipoEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getTipoEstablecimiento().getIdTipoEstablecimiento() != null) {
			where.append(" AND UPPER(t2.ID_TIPO_ESTABLECIMIENTO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(
						ab6320s00.getEstablecimiento().getTipoEstablecimiento().getIdTipoEstablecimiento().toUpperCase()
								+ "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getTipoEstablecimiento().getIdTipoEstablecimiento()
						.toUpperCase() + "%");
			}
			where.append(" AND t2.ID_TIPO_ESTABLECIMIENTO IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getGrupo() != null
				&& ab6320s00.getEstablecimiento().getGrupo().getIdGrupo() != null) {
			where.append(" AND UPPER(t2.ID_GRUPO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getGrupo().getIdGrupo().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getGrupo().getIdGrupo().toUpperCase() + "%");
			}
			where.append(" AND t2.ID_GRUPO IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getCategoria() != null
				&& ab6320s00.getEstablecimiento().getCategoria().getIdCategorias() != null) {
			where.append(" AND UPPER(t2.ID_CATEGORIAS) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getCategoria().getIdCategorias().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getCategoria().getIdCategorias().toUpperCase() + "%");
			}
			where.append(" AND t2.ID_CATEGORIAS IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getEspecialidad() != null
				&& ab6320s00.getEstablecimiento().getEspecialidad().getIdEspecialidad() != null) {
			where.append(" AND UPPER(t2.ID_ESPECIALIDAD) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getEspecialidad().getIdEspecialidad().toUpperCase() + "%");
			} else {
				params.add(
						"%" + ab6320s00.getEstablecimiento().getEspecialidad().getIdEspecialidad().toUpperCase() + "%");
			}
			where.append(" AND t2.ID_ESPECIALIDAD IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getModalidad() != null
				&& ab6320s00.getEstablecimiento().getModalidad().getIdModalidad() != null) {
			where.append(" AND UPPER(t2.ID_MODALIDAD) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getModalidad().getIdModalidad().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getModalidad().getIdModalidad().toUpperCase() + "%");
			}
			where.append(" AND t2.ID_MODALIDAD IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdentificadorEstablecimiento() != null) {
			where.append(" AND UPPER(t2.IDENTIFICADOR_ESTABLECIMIENTO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getIdentificadorEstablecimiento().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getIdentificadorEstablecimiento().toUpperCase() + "%");
			}
			where.append(" AND t2.IDENTIFICADOR_ESTABLECIMIENTO IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getDescrNombre() != null) {
			where.append(" AND UPPER(t2.DESC_NOMBRE) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getDescrNombre().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getDescrNombre().toUpperCase() + "%");
			}
			where.append(" AND t2.DESC_NOMBRE IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getVisibleweb() != null) {
			where.append(" AND UPPER(t2.VISIBLEWEB) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getVisibleweb().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getVisibleweb().toUpperCase() + "%");
			}
			where.append(" AND t2.VISIBLEWEB IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getTemporada() != null) {
			where.append(" AND UPPER(t2.TEMPORADA) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getTemporada().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getTemporada().toUpperCase() + "%");
			}
			where.append(" AND t2.TEMPORADA IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUrlweb() != null) {
			where.append(" AND UPPER(t2.URLWEB) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getUrlweb().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getUrlweb().toUpperCase() + "%");
			}
			where.append(" AND t2.URLWEB IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdDefectos() != null) {
			where.append(" AND UPPER(t2.ID_DEFECTOS) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getIdDefectos().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getIdDefectos().toUpperCase() + "%");
			}
			where.append(" AND t2.ID_DEFECTOS IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNumUnidadesAlojamiento() != null) {
			where.append(" AND t2.NUM_UNIDADES_ALOJAMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getNumUnidadesAlojamiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getObservaciones() != null) {
			where.append(" AND UPPER(t2.OBSERVACIONES) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getObservaciones().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getObservaciones().toUpperCase() + "%");
			}
			where.append(" AND t2.OBSERVACIONES IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaApertura() != null) {
			where.append(" AND t2.FECHA_APERTURA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaApertura());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaBaja() != null) {
			where.append(" AND t2.FECHA_BAJA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaBaja());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaInicierretemp() != null) {
			where.append(" AND t2.FECHA_INICIERRETEMP = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaInicierretemp());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaFincierretemp() != null) {
			where.append(" AND t2.FECHA_FINCIERRETEMP = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaFincierretemp());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaVctoCierre() != null) {
			where.append(" AND t2.FECHA_VCTO_CIERRE = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaVctoCierre());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltNotificacion() != null) {
			where.append(" AND t2.FECHA_ULT_NOTIFICACION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltNotificacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltInspeccion() != null) {
			where.append(" AND t2.FECHA_ULT_INSPECCION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltInspeccion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaProInspeccion() != null) {
			where.append(" AND t2.FECHA_PRO_INSPECCION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaProInspeccion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltActualizacion() != null) {
			where.append(" AND t2.FECHA_ULT_ACTUALIZACION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltActualizacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaClausura() != null) {
			where.append(" AND t2.FECHA_CLAUSURA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaClausura());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltReforma() != null) {
			where.append(" AND t2.FECHA_ULT_REFORMA = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltReforma());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getEliminado() != null) {
			where.append(" AND UPPER(t2.ELIMINADO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getEliminado().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getEliminado().toUpperCase() + "%");
			}
			where.append(" AND t2.ELIMINADO IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getExpedienteb29() != null) {
			where.append(" AND UPPER(t2.EXPEDIENTEB29) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getExpedienteb29().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getExpedienteb29().toUpperCase() + "%");
			}
			where.append(" AND t2.EXPEDIENTEB29 IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getIdPortalS41() != null) {
			where.append(" AND t2.ID_PORTAL_S41 = ?");
			params.add(ab6320s00.getEstablecimiento().getIdPortalS41());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUrlPortalS41() != null) {
			where.append(" AND UPPER(t2.URL_PORTAL_S41) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getUrlPortalS41().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getUrlPortalS41().toUpperCase() + "%");
			}
			where.append(" AND t2.URL_PORTAL_S41 IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaControlS41() != null) {
			where.append(" AND t2.FECHA_CONTROL_S41 = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaControlS41());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNumInstalacionAnterior() != null) {
			where.append(" AND UPPER(t2.NUM_INSTALACION_ANTERIOR) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getNumInstalacionAnterior().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getNumInstalacionAnterior().toUpperCase() + "%");
			}
			where.append(" AND t2.NUM_INSTALACION_ANTERIOR IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaInscripcion() != null) {
			where.append(" AND t2.FECHA_INSCRIPCION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaInscripcion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNumInstalacionWz() != null) {
			where.append(" AND UPPER(t2.NUM_INSTALACION_WZ) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getNumInstalacionWz().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getNumInstalacionWz().toUpperCase() + "%");
			}
			where.append(" AND t2.NUM_INSTALACION_WZ IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getObservaciones2() != null) {
			where.append(" AND UPPER(t2.OBSERVACIONES2) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getObservaciones2().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getObservaciones2().toUpperCase() + "%");
			}
			where.append(" AND t2.OBSERVACIONES2 IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getNotasMigracion() != null) {
			where.append(" AND UPPER(t2.NOTAS_MIGRACION) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getNotasMigracion().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getNotasMigracion().toUpperCase() + "%");
			}
			where.append(" AND t2.NOTAS_MIGRACION IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getAgrupacion() != null) {
			where.append(" AND UPPER(t2.AGRUPACION) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getAgrupacion().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getAgrupacion().toUpperCase() + "%");
			}
			where.append(" AND t2.AGRUPACION IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getRefCatastral() != null) {
			where.append(" AND UPPER(t2.REF_CATASTRAL) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getRefCatastral().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getRefCatastral().toUpperCase() + "%");
			}
			where.append(" AND t2.REF_CATASTRAL IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getObsSegrespcivil() != null) {
			where.append(" AND UPPER(t2.OBS_SEGRESPCIVIL) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getObsSegrespcivil().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getObsSegrespcivil().toUpperCase() + "%");
			}
			where.append(" AND t2.OBS_SEGRESPCIVIL IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaRegistro() != null) {
			where.append(" AND t2.FECHA_REGISTRO = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaRegistro());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUsuarioRegistro() != null) {
			where.append(" AND UPPER(t2.USUARIO_REGISTRO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getUsuarioRegistro().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getUsuarioRegistro().toUpperCase() + "%");
			}
			where.append(" AND t2.USUARIO_REGISTRO IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFechaUltmodificacion() != null) {
			where.append(" AND t2.FECHA_ULTMODIFICACION = ?");
			params.add(ab6320s00.getEstablecimiento().getFechaUltmodificacion());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getUsuarioUltmodificacion() != null) {
			where.append(" AND UPPER(t2.USUARIO_ULTMODIFICACION) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getEstablecimiento().getUsuarioUltmodificacion().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getEstablecimiento().getUsuarioUltmodificacion().toUpperCase() + "%");
			}
			where.append(" AND t2.USUARIO_ULTMODIFICACION IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getEstablecimientoData() != null
				&& ab6320s00.getEstablecimiento().getEstablecimientoData().getIdEstablecimiento() != null) {
			where.append(" AND t2.ID_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getEstablecimientoData().getIdEstablecimiento());
		}
		if (ab6320s00 != null && ab6320s00.getEstablecimiento() != null
				&& ab6320s00.getEstablecimiento().getFranquicia() != null
				&& ab6320s00.getEstablecimiento().getFranquicia().getIdEstablecimiento() != null) {
			where.append(" AND t2.ID_ESTABLECIMIENTO = ?");
			params.add(ab6320s00.getEstablecimiento().getFranquicia().getIdEstablecimiento());
		}
		/*
		 * if (ab6320s00 != null && ab6320s00.getIdDispensa() != null) {
		 * where.append(" AND t1.ID_DISPENSA = ?");
		 * params.add(ab6320s00.getIdDispensa()); }
		 */
		if (ab6320s00 != null && ab6320s00.getFechaDispensa() != null) {
			where.append(" AND t1.FECHA_DISPENSA = ?");
			params.add(ab6320s00.getFechaDispensa());
		}
		if (ab6320s00 != null && ab6320s00.getObservacionesDescEs() != null) {
			where.append(" AND UPPER(t1.OBSERVACIONES_DESC_ES) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getObservacionesDescEs().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getObservacionesDescEs().toUpperCase() + "%");
			}
			where.append(" AND t1.OBSERVACIONES_DESC_ES IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getObservacionesDescEu() != null) {
			where.append(" AND UPPER(t1.OBSERVACIONES_DESC_EU) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getObservacionesDescEu().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getObservacionesDescEu().toUpperCase() + "%");
			}
			where.append(" AND t1.OBSERVACIONES_DESC_EU IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getFechaRegistro() != null) {
			where.append(" AND t1.FECHA_REGISTRO = ?");
			params.add(ab6320s00.getFechaRegistro());
		}
		if (ab6320s00 != null && ab6320s00.getUsuarioRegistro() != null) {
			where.append(" AND UPPER(t1.USUARIO_REGISTRO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getUsuarioRegistro().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getUsuarioRegistro().toUpperCase() + "%");
			}
			where.append(" AND t1.USUARIO_REGISTRO IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getFechaUltmodificacion() != null) {
			where.append(" AND t1.FECHA_ULTMODIFICACION = ?");
			params.add(ab6320s00.getFechaUltmodificacion());
		}
		if (ab6320s00 != null && ab6320s00.getUsuarioUltmodificacion() != null) {
			where.append(" AND UPPER(t1.USUARIO_ULTMODIFICACION) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getUsuarioUltmodificacion().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getUsuarioUltmodificacion().toUpperCase() + "%");
			}
			where.append(" AND t1.USUARIO_ULTMODIFICACION IS NOT NULL");
		}
		if (ab6320s00 != null && ab6320s00.getDispensado() != null) {
			where.append(" AND UPPER(t1.DISPENSADO) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(ab6320s00.getDispensado().toUpperCase() + "%");
			} else {
				params.add("%" + ab6320s00.getDispensado().toUpperCase() + "%");
			}
			where.append(" AND t1.DISPENSADO IS NOT NULL");
		}

		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;

	@Override
	public DispensaEstablecimiento findByExpediente(DispensaEstablecimiento dispensa) {
		String query = "SELECT t1.ID_DISPENSAS_ESTAB IDDISPENSASESTAB, t1.FECHA_DISPENSA FECHADISPENSA,t1.OBSERVACIONES_DESC_ES OBSERVACIONESDESCES,t1.OBSERVACIONES_DESC_EU OBSERVACIONESDESCEU, t1.FOLDER_ID FOLDERID, t1.FOLDER_NUMBER FOLDERNUMBER, t1.DISPENSADO DISPENSADO, t1.FECHA_REGISTRO FECHAREGISTRO, t1.USUARIO_REGISTRO USUARIOREGISTRO, t1.FECHA_ULTMODIFICACION FECHAULTMODIFICACION, t1.USUARIO_ULTMODIFICACION USUARIOULTMODIFICACION, t2.ID_ESTABLECIMIENTO AB6301S00IDESTABLECIMIENTO, t2.IDENTIFICADOR_ESTABLECIMIENTO AB6301S00IDENTIFICADORESTABLEC, t2.DESC_NOMBRE AB6301S00DESCNOMBRE, t2.VISIBLEWEB AB6301S00VISIBLEWEB, t2.TEMPORADA AB6301S00TEMPORADA, t2.URLWEB AB6301S00URLWEB, t2.ID_DEFECTOS AB6301S00IDDEFECTOS, t2.NUM_UNIDADES_ALOJAMIENTO AB6301S00NUMUNIDADESALOJ, t2.OBSERVACIONES AB6301S00OBSERVACIONES, t2.FECHA_APERTURA AB6301S00FECHAAPERTURA, t2.FECHA_BAJA AB6301S00FECHABAJA, t2.FECHA_INICIERRETEMP AB6301S00FECHAINICIERRETEMP, t2.FECHA_FINCIERRETEMP AB6301S00FECHAFINCIERRETEMP, t2.FECHA_VCTO_CIERRE AB6301S00FECHAVCTOCIERRE, t2.FECHA_ULT_NOTIFICACION AB6301S00FECHAULTNOTIFICACION, t2.FECHA_ULT_INSPECCION AB6301S00FECHAULTINSPECCION, t2.FECHA_PRO_INSPECCION AB6301S00FECHAPROINSPECCION, t2.FECHA_ULT_ACTUALIZACION AB6301S00FECHAULTACTUALIZACION, t2.FECHA_CLAUSURA AB6301S00FECHACLAUSURA, t2.FECHA_ULT_REFORMA AB6301S00FECHAULTREFORMA, t2.ELIMINADO AB6301S00ELIMINADO, t2.EXPEDIENTEB29 AB6301S00EXPEDIENTEB29, t2.ID_PORTAL_S41 AB6301S00IDPORTALS41, t2.URL_PORTAL_S41 AB6301S00URLPORTALS41, t2.FECHA_CONTROL_S41 AB6301S00FECHACONTROLS41, t2.NUM_INSTALACION_ANTERIOR AB6301S00NUMINSTALACIONANT, t2.FECHA_INSCRIPCION AB6301S00FECHAINSCRIPCION, t2.NUM_INSTALACION_WZ AB6301S00NUMINSTALACIONWZ, t2.OBSERVACIONES2 AB6301S00OBSERVACIONES2, t2.NOTAS_MIGRACION AB6301S00NOTASMIGRACION, t2.AGRUPACION AB6301S00AGRUPACION, t2.REF_CATASTRAL AB6301S00REFCATASTRAL, t2.OBS_SEGRESPCIVIL AB6301S00OBSSEGRESPCIVIL, t2.FECHA_REGISTRO AB6301S00FECHAREGISTRO, t2.USUARIO_REGISTRO AB6301S00USUARIOREGISTRO, t2.FECHA_ULTMODIFICACION AB6301S00FECHAULTMODIFICACION, t2.USUARIO_ULTMODIFICACION AB6301S00USUARIOULTMODIF, t2.ID_RECURSO AB6301S00IDRECURSO, t2.ID_TIPO_ESTABLECIMIENTO AB6301S00IDTIPOESTABLECIMIENTO, t2.ID_GRUPO AB6301S00IDGRUPO, t2.ID_CATEGORIAS AB6301S00IDCATEGORIAS, t2.ID_ESPECIALIDAD AB6301S00IDESPECIALIDAD, t2.ID_MODALIDAD AB6301S00IDMODALIDAD FROM AB6320S00 t1 , AB6301S00 t2  WHERE   t1.ID_ESTABLECIMIENTO= t2.ID_ESTABLECIMIENTO(+) AND t1.FOLDER_ID = ? ";

		List<DispensaEstablecimiento> ab6320s00List = this.jdbcTemplate.query(query, this.rwMap,
				dispensa.getFolderId());
		if (ab6320s00List.isEmpty()) {
			return new DispensaEstablecimiento();
		}
		return (DispensaEstablecimiento) DataAccessUtils.uniqueResult(ab6320s00List);
	}
}
