package com.ejie.ad74a.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.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.constantes.Constantes;
import com.ejie.ad74a.model.DocumentosTarea;
import com.ejie.ad74a.model.MaestroTiposDoc;
import com.ejie.ad74a.util.UtilSQL;
import com.ejie.ad74a.util.comun.Utilidades;
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;

/**
 * DocumentosTareaDaoImpl generated by UDA, 05-abr-2023 13:07:44.
 * 
 * @author UDA
 */

@Repository
@Transactional
public class DocumentosTareaDaoImpl implements DocumentosTareaDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDDOCTAREA18", "IDTAREATRAM18", "IDTIPODOC18",
			"OIDDOKUSI18", "NOMBREDOC18", "RUTAPIF18", "LOCALIZADOR18", "OBLIGATORIO18", "TIPOADJUNTO18",
			"DEPENTREGA18", "FENTREGA18", "ESTADODOC18", "FALTA18", "USUALTA18", "FMODIF18", "USUMODIF18",
			"TIPOIDTIPODOC36", "TIPODESCES36", "TIPODESCEU36", "TIPOROLEID36", "TIPOORIGEN36", "TIPOFALTA36",
			"TIPOUSUALTA36", "TIPOFMODIF36", "TIPOUSUMODIF36" };

	private JdbcTemplate jdbcTemplate;

	public static final String SEQ_DOCUMENTOS_TAREA = "SEQ_DOC_TAREA";

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<DocumentosTarea> rwMap = new RowMapper<DocumentosTarea>() {
		public DocumentosTarea mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			return new DocumentosTarea(UtilSQL.getLong(resultSet, "IDDOCTAREA18"),
					UtilSQL.getLong(resultSet, "IDTAREATRAM18"), UtilSQL.getLong(resultSet, "IDTIPODOC18"),
					resultSet.getString("OIDDOKUSI18"), resultSet.getString("NOMBREDOC18"),
					resultSet.getString("RUTAPIF18"), resultSet.getString("LOCALIZADOR18"),
					resultSet.getInt("OBLIGATORIO18"), resultSet.getString("TIPOADJUNTO18"),
					resultSet.getString("DEPENTREGA18"), resultSet.getDate("FENTREGA18"),
					resultSet.getInt("ESTADODOC18"), resultSet.getDate("FALTA18"), resultSet.getString("USUALTA18"),
					resultSet.getDate("FMODIF18"), resultSet.getString("USUMODIF18"),
					new MaestroTiposDoc(UtilSQL.getLong(resultSet, "TIPOIDTIPODOC36"),
							resultSet.getString("TIPODESCES36"), resultSet.getString("TIPODESCEU36"),
							resultSet.getString("TIPOROLEID36"), resultSet.getString("TIPOORIGEN36"),
							resultSet.getDate("TIPOFALTA36"), resultSet.getString("TIPOUSUALTA36"),
							resultSet.getDate("TIPOFMODIF36"), resultSet.getString("TIPOUSUALTA36")));
		}
	};

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

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

			DocumentosTarea documentostarea = new DocumentosTarea(UtilSQL.getLong(resultSet, "IDDOCTAREA18"),
					UtilSQL.getLong(resultSet, "IDTAREATRAM18"), UtilSQL.getLong(resultSet, "IDTIPODOC18"),
					resultSet.getString("OIDDOKUSI18"), resultSet.getString("NOMBREDOC18"),
					resultSet.getString("RUTAPIF18"), resultSet.getString("LOCALIZADOR18"),
					resultSet.getInt("OBLIGATORIO18"), resultSet.getString("TIPOADJUNTO18"),
					resultSet.getString("DEPENTREGA18"), resultSet.getDate("FENTREGA18"),
					resultSet.getInt("ESTADODOC18"), resultSet.getDate("FALTA18"), resultSet.getString("USUALTA18"),
					resultSet.getDate("FMODIF18"), resultSet.getString("USUMODIF18"),
					new MaestroTiposDoc(UtilSQL.getLong(resultSet, "TIPOIDTIPODOC36"),
							resultSet.getString("TIPODESCES36"), resultSet.getString("TIPODESCEU36"),
							resultSet.getString("TIPOROLEID36"), resultSet.getString("TIPOORIGEN36"),
							resultSet.getDate("TIPOFALTA36"), resultSet.getString("TIPOUSUALTA36"),
							resultSet.getDate("TIPOFMODIF36"), resultSet.getString("TIPOUSUALTA36")));

			JerarquiaDto<DocumentosTarea> jerarquia = new JerarquiaDto<DocumentosTarea>();
			jerarquia.setModel(documentostarea);
			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 DocumentosTarea table.
	 *
	 * @param documentostarea DocumentosTarea
	 * @return DocumentosTarea
	 */
	public DocumentosTarea add(DocumentosTarea documentostarea) {

		final Object getIdTipoDoc = documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getIdTipoDoc36() != null
						? documentostarea.getMaestroTiposDoc().getIdTipoDoc36()
						: null;

		GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();

		String query = "INSERT INTO DOCUMENTOS_TAREA (ID_DOC_TAREA_18, ID_TAREA_TRAM_18, ID_TIPO_DOC_18, OIDDOKUSI_18, NOMBRE_DOC_18, RUTAPIF_18, LOCALIZADOR_18, OBLIGATORIO_18, TIPO_ADJUNTO_18, DEP_ENTREGA_18, F_ENTREGA_18, ESTADO_DOC_18, F_ALTA_18, USU_ALTA_18, F_MODIF_18, USU_MODIF_18) "
				+ "VALUES ((select NVL(MAX(ID_DOC_TAREA_18)+1,1) from DOCUMENTOS_TAREA)"
				+ ",:idTareaTram,:idTipoDoc,:oidDokusi,:nombreDoc,:rutaPif,:localizador,:obligatorio,:tipoAdjunto,:depEntrega,:fEntrega,:estadoDoc,sysdate,:usuAlta,:fModif,:usuModif)";

//		String queryPS = "INSERT INTO DOCUMENTOS_TAREA (ID_DOC_TAREA_18, ID_TAREA_TRAM_18, ID_TIPO_DOC_18, "
//				+ "OIDDOKUSI_18, NOMBRE_DOC_18, RUTAPIF_18, LOCALIZADOR_18, OBLIGATORIO_18, TIPO_ADJUNTO_18, "
//				+ "DEP_ENTREGA_18, F_ENTREGA_18, ESTADO_DOC_18, F_ALTA_18, USU_ALTA_18, F_MODIF_18, USU_MODIF_18) "
//				+ "VALUES ((select NVL(MAX(ID_DOC_TAREA_18)+1,1) from DOCUMENTOS_TAREA),?,?,?,?,?,?,?,?"
//				+ ",?,?,?,sysdate,?,?,?)";
//
//		KeyHolder keyHolder = new GeneratedKeyHolder();
//		this.jdbcTemplate.update(new PreparedStatementCreator() {
//			public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
//				PreparedStatement ps = connection.prepareStatement(queryPS, new String[] { "ID_DOC_TAREA_18" });
//
//				ps.setObject(1, documentostarea.getIdTareaTram18());
//				ps.setObject(2, getIdTipoDoc);
//
//				ps.setObject(3, documentostarea.getOiddokusi18());
//				ps.setObject(4, documentostarea.getNombreDoc18());
//				ps.setObject(5, documentostarea.getRutapif18());
//
//				ps.setObject(6, documentostarea.getLocalizador18());
//				ps.setObject(7, documentostarea.getObligatorio18());
//				ps.setObject(8, documentostarea.getTipoAdjunto18());
//
//				ps.setObject(9, documentostarea.getDepEntrega18());
//				ps.setObject(10, documentostarea.getfEntrega18());
//				ps.setObject(11, documentostarea.getEstadoDoc18());
//
//				ps.setObject(12, documentostarea.getUsuAlta18());
//				ps.setObject(13, documentostarea.getfModif18());
//				ps.setObject(14, documentostarea.getUsuModif18());
//
//				return ps;
//			}
//		}, keyHolder);
//		Map<String, Object> keys = keyHolder.getKeys();
//		// Long keyCod = (Long) keys.get("ID_DOC_TAREA_18");
//		BigDecimal keyId = (BigDecimal) keys.get("ID_DOC_TAREA_18");
//
//		documentostarea.setIdDocTarea18(keyId.longValue());

		MapSqlParameterSource parameters = new MapSqlParameterSource()
				.addValue("idTareaTram", documentostarea.getIdTareaTram18()).addValue("idTipoDoc", getIdTipoDoc)
				.addValue("oidDokusi", documentostarea.getOiddokusi18())
				.addValue("nombreDoc", documentostarea.getNombreDoc18())
				.addValue("rutaPif", documentostarea.getRutapif18())
				.addValue("localizador", documentostarea.getLocalizador18())
				.addValue("obligatorio", documentostarea.getObligatorio18())
				.addValue("tipoAdjunto", documentostarea.getTipoAdjunto18())
				.addValue("depEntrega", documentostarea.getDepEntrega18())
				.addValue("fEntrega", documentostarea.getfEntrega18())
				.addValue("estadoDoc", documentostarea.getEstadoDoc18())
				.addValue("usuAlta", documentostarea.getUsuAlta18()).addValue("fModif", documentostarea.getfModif18())
				.addValue("usuModif", documentostarea.getUsuModif18());

		NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
		namedParameterJdbcTemplate.update(query, parameters, generatedKeyHolder, new String[] { "ID_DOC_TAREA_18" });
		documentostarea.setIdDocTarea18(generatedKeyHolder.getKey().longValue());

		return documentostarea;
	}

	/**
	 * Updates a single row in the DocumentosTarea table.
	 *
	 * @param documentostarea DocumentosTarea
	 * @return DocumentosTarea
	 */
	public DocumentosTarea update(DocumentosTarea documentostarea) {
		String query = "UPDATE DOCUMENTOS_TAREA SET ID_TAREA_TRAM_18=?, ID_TIPO_DOC_18=?, OIDDOKUSI_18=?, NOMBRE_DOC_18=?, RUTAPIF_18=?, LOCALIZADOR_18=?, OBLIGATORIO_18=?, TIPO_ADJUNTO_18=?, DEP_ENTREGA_18=?, F_ENTREGA_18=?, ESTADO_DOC_18=?, F_ALTA_18=?, USU_ALTA_18=?, F_MODIF_18=?, USU_MODIF_18=? WHERE ID_DOC_TAREA_18=?";
		this.jdbcTemplate.update(query, documentostarea.getIdTareaTram18(), documentostarea.getIdTipoDoc18(),
				documentostarea.getOiddokusi18(), documentostarea.getNombreDoc18(), documentostarea.getRutapif18(),
				documentostarea.getLocalizador18(), documentostarea.getObligatorio18(),
				documentostarea.getTipoAdjunto18(), documentostarea.getDepEntrega18(), documentostarea.getfEntrega18(),
				documentostarea.getEstadoDoc18(), documentostarea.getfAlta18(), documentostarea.getUsuAlta18(),
				documentostarea.getfModif18(), documentostarea.getUsuModif18(), documentostarea.getIdDocTarea18());
		return documentostarea;
	}

	/**
	 * Updates a single row in the DocumentosTarea table.
	 *
	 * @param documentostarea DocumentosTarea
	 * @return DocumentosTarea
	 */
	public DocumentosTarea updateOid(DocumentosTarea documentostarea) {
		String query = "UPDATE DOCUMENTOS_TAREA SET OIDDOKUSI_18=?, F_MODIF_18=sysdate, USU_MODIF_18=? WHERE ID_DOC_TAREA_18=?";
		this.jdbcTemplate.update(query, documentostarea.getOiddokusi18(), documentostarea.getUsuModif18(),
				documentostarea.getIdDocTarea18());
		return documentostarea;
	}

	public DocumentosTarea updateLocalizador(DocumentosTarea documentostarea) {
		String query = "UPDATE DOCUMENTOS_TAREA SET LOCALIZADOR_18=?, F_MODIF_18=sysdate, USU_MODIF_18=? WHERE ID_DOC_TAREA_18=?";
		this.jdbcTemplate.update(query, documentostarea.getLocalizador18(),
				!Utilidades.esBlancoNulo(documentostarea.getUsuModif18()) ? documentostarea.getUsuModif18()
						: Constantes.COD_APLICACION,
				documentostarea.getIdDocTarea18());
		return documentostarea;
	}

	public DocumentosTarea updateEstado(DocumentosTarea documentostarea) {
		String query = "UPDATE DOCUMENTOS_TAREA SET ESTADO_DOC_18=?, F_MODIF_18=sysdate, USU_MODIF_18=? WHERE ID_DOC_TAREA_18=?";
		this.jdbcTemplate.update(query, documentostarea.getEstadoDoc18(),
				!Utilidades.esBlancoNulo(documentostarea.getUsuModif18()) ? documentostarea.getUsuModif18()
						: Constantes.COD_APLICACION,
				documentostarea.getIdDocTarea18());
		return documentostarea;
	}

	/**
	 * Finds a single row in the DocumentosTarea table.
	 *
	 * @param documentostarea DocumentosTarea
	 * @return DocumentosTarea
	 */
	@Transactional(readOnly = true)
	public DocumentosTarea find(DocumentosTarea documentostarea) {
		String query = "SELECT t1.ID_DOC_TAREA_18 IDDOCTAREA18, t1.ID_TAREA_TRAM_18 IDTAREATRAM18, t1.ID_TIPO_DOC_18 IDTIPODOC18, t1.OIDDOKUSI_18 OIDDOKUSI18, t1.NOMBRE_DOC_18 NOMBREDOC18, t1.RUTAPIF_18 RUTAPIF18, t1.LOCALIZADOR_18 LOCALIZADOR18, t1.OBLIGATORIO_18 OBLIGATORIO18, t1.TIPO_ADJUNTO_18 TIPOADJUNTO18, t1.DEP_ENTREGA_18 DEPENTREGA18, t1.F_ENTREGA_18 FENTREGA18, t1.ESTADO_DOC_18 ESTADODOC18, t1.F_ALTA_18 FALTA18, t1.USU_ALTA_18 USUALTA18, t1.F_MODIF_18 FMODIF18, t1.USU_MODIF_18 USUMODIF18, t2.ID_TIPO_DOC_36 TIPOIDTIPODOC36, t2.DESC_ES_36 TIPODESCES36, t2.DESC_EU_36 TIPODESCEU36, t2.ROLEID_36 TIPOROLEID36, t2.ORIGEN_36 TIPOORIGEN36, t2.F_ALTA_36 TIPOFALTA36 ,t2.USU_ALTA_36 TIPOUSUALTA36, t2.F_MODIF_36 TIPOFMODIF36, t2.USU_MODIF_36 TIPOUSUMODIF36 FROM DOCUMENTOS_TAREA t1, MAESTRO_TIPOS_DOC t2 WHERE t1.ID_DOC_TAREA_18 = ? AND t1.ID_TIPO_DOC_18= t2.ID_TIPO_DOC_36(+) ";

		List<DocumentosTarea> documentostareaList = this.jdbcTemplate.query(query, this.rwMap,
				documentostarea.getIdDocTarea18());
		return (DocumentosTarea) DataAccessUtils.uniqueResult(documentostareaList);
	}

	/**
	 * Removes a single row in the DocumentosTarea table.
	 *
	 * @param documentostarea DocumentosTarea
	 * @return
	 */
	public void remove(DocumentosTarea documentostarea) {
		String query = "DELETE FROM DOCUMENTOS_TAREA WHERE ID_DOC_TAREA_18=?";
		this.jdbcTemplate.update(query, documentostarea.getIdDocTarea18());
	}

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

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DOC_TAREA_18 IDDOCTAREA18, t1.ID_TAREA_TRAM_18 IDTAREATRAM18, t1.ID_TIPO_DOC_18 IDTIPODOC18, t1.OIDDOKUSI_18 OIDDOKUSI18, t1.NOMBRE_DOC_18 NOMBREDOC18, t1.RUTAPIF_18 RUTAPIF18, t1.LOCALIZADOR_18 LOCALIZADOR18, t1.OBLIGATORIO_18 OBLIGATORIO18, t1.TIPO_ADJUNTO_18 TIPOADJUNTO18, t1.DEP_ENTREGA_18 DEPENTREGA18, t1.F_ENTREGA_18 FENTREGA18, t1.ESTADO_DOC_18 ESTADODOC18, t1.F_ALTA_18 FALTA18, t1.USU_ALTA_18 USUALTA18, t1.F_MODIF_18 FMODIF18, t1.USU_MODIF_18 USUMODIF18, t2.ID_TIPO_DOC_36 TIPOIDTIPODOC36, t2.DESC_ES_36 TIPODESCES36, t2.DESC_EU_36 TIPODESCEU36, t2.ROLEID_36 TIPOROLEID36, t2.ORIGEN_36 TIPOORIGEN36, t2.F_ALTA_36 TIPOFALTA36 ,t2.USU_ALTA_36 TIPOUSUALTA36, t2.F_MODIF_36 TIPOFMODIF36, t2.USU_MODIF_36 TIPOUSUMODIF36 ");
		query.append(" FROM DOCUMENTOS_TAREA t1, MAESTRO_TIPOS_DOC t2 ");
		// Where clause & Params
		Map<String, Object> mapaWhere = this.getWhereLikeMap(filterDocumentosTarea, startsWith);
		StringBuilder where = new StringBuilder(query + " WHERE 1=1 AND t1.ID_TIPO_DOC_18= t2.ID_TIPO_DOC_36(+) ");
		where.append(mapaWhere.get("query"));

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

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

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

	/**
	 * Finds a list of rows in the DocumentosTarea table.
	 *
	 * @param documentostarea DocumentosTarea
	 * @param tableRequestDto TableRequestDto
	 * @return List<DocumentosTarea>
	 */
	@Transactional(readOnly = true)
	public List<DocumentosTarea> findAll(DocumentosTarea documentostarea, TableRequestDto tableRequestDto) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_DOC_TAREA_18 IDDOCTAREA18,t1.ID_TAREA_TRAM_18 IDTAREATRAM18,t1.ID_TIPO_DOC_18 IDTIPODOC18,t1.OIDDOKUSI_18 OIDDOKUSI18,t1.NOMBRE_DOC_18 NOMBREDOC18,t1.RUTAPIF_18 RUTAPIF18,t1.LOCALIZADOR_18 LOCALIZADOR18,t1.OBLIGATORIO_18 OBLIGATORIO18,t1.TIPO_ADJUNTO_18 TIPOADJUNTO18,t1.DEP_ENTREGA_18 DEPENTREGA18,t1.F_ENTREGA_18 FENTREGA18,t1.ESTADO_DOC_18 ESTADODOC18,t1.F_ALTA_18 FALTA18,t1.USU_ALTA_18 USUALTA18,t1.F_MODIF_18 FMODIF18,t1.USU_MODIF_18 USUMODIF18, t2.ID_TIPO_DOC_36 TIPOIDTIPODOC36, t2.DESC_ES_36 TIPODESCES36, t2.DESC_EU_36 TIPODESCEU36, t2.ROLEID_36 TIPOROLEID36, t2.ORIGEN_36 TIPOORIGEN36, t2.F_ALTA_36 TIPOFALTA36 ,t2.USU_ALTA_36 TIPOUSUALTA36, t2.F_MODIF_36 TIPOFMODIF36, t2.USU_MODIF_36 TIPOUSUMODIF36  ");
		query.append("FROM DOCUMENTOS_TAREA t1, MAESTRO_TIPOS_DOC t2 ");

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

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

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

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

	/**
	 * Finds rows in the DocumentosTarea table using like.
	 *
	 * @param documentostarea DocumentosTarea
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<DocumentosTarea>
	 */
	@Transactional(readOnly = true)
	public List<DocumentosTarea> findAllLike(DocumentosTarea documentostarea, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		StringBuilder query = new StringBuilder(
				"SELECT  t1.ID_DOC_TAREA_18 IDDOCTAREA18,t1.ID_TAREA_TRAM_18 IDTAREATRAM18,t1.ID_TIPO_DOC_18 IDTIPODOC18,t1.OIDDOKUSI_18 OIDDOKUSI18,t1.NOMBRE_DOC_18 NOMBREDOC18,t1.RUTAPIF_18 RUTAPIF18,t1.LOCALIZADOR_18 LOCALIZADOR18,t1.OBLIGATORIO_18 OBLIGATORIO18,t1.TIPO_ADJUNTO_18 TIPOADJUNTO18,t1.DEP_ENTREGA_18 DEPENTREGA18,t1.F_ENTREGA_18 FENTREGA18,t1.ESTADO_DOC_18 ESTADODOC18,t1.F_ALTA_18 FALTA18,t1.USU_ALTA_18 USUALTA18,t1.F_MODIF_18 FMODIF18,t1.USU_MODIF_18 USUMODIF18, t2.ID_TIPO_DOC_36 TIPOIDTIPODOC36, t2.DESC_ES_36 TIPODESCES36, t2.DESC_EU_36 TIPODESCEU36, t2.ROLEID_36 TIPOROLEID36, t2.ORIGEN_36 TIPOORIGEN36, t2.F_ALTA_36 TIPOFALTA36 ,t2.USU_ALTA_36 TIPOUSUALTA36, t2.F_MODIF_36 TIPOFMODIF36, t2.USU_MODIF_36 TIPOUSUMODIF36 ");
		query.append("FROM DOCUMENTOS_TAREA t1, MAESTRO_TIPOS_DOC t2 ");

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

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

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Counts rows in the DocumentosTarea table.
	 *
	 * @param documentostarea DocumentosTarea
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllCount(DocumentosTarea documentostarea) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM DOCUMENTOS_TAREA t1 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereMap(documentostarea);
		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 DocumentosTarea table using like.
	 *
	 * @param documentostarea DocumentosTarea
	 * @param startsWith      Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(DocumentosTarea documentostarea, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM DOCUMENTOS_TAREA t1, MAESTRO_TIPOS_DOC t2 ");

		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(documentostarea, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_TIPO_DOC_18= t2.ID_TIPO_DOC_36(+) ");
		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 DocumentosTarea selected for rup_table
	 *
	 * @param documentostarea DocumentosTarea
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<DocumentosTarea>>
	 */
	@Override
	public List<TableRowDto<DocumentosTarea>> reorderSelection(DocumentosTarea documentostarea,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DOC_TAREA_18 IDDOCTAREA18,t1.ID_TAREA_TRAM_18 IDTAREATRAM18,t1.ID_TIPO_DOC_18 IDTIPODOC18,t1.OIDDOKUSI_18 OIDDOKUSI18,t1.NOMBRE_DOC_18 NOMBREDOC18,t1.RUTAPIF_18 RUTAPIF18,t1.LOCALIZADOR_18 LOCALIZADOR18,t1.OBLIGATORIO_18 OBLIGATORIO18,t1.TIPO_ADJUNTO_18 TIPOADJUNTO18,t1.DEP_ENTREGA_18 DEPENTREGA18,t1.F_ENTREGA_18 FENTREGA18,t1.ESTADO_DOC_18 ESTADODOC18,t1.F_ALTA_18 FALTA18,t1.USU_ALTA_18 USUALTA18,t1.F_MODIF_18 FMODIF18,t1.USU_MODIF_18 USUMODIF18, t2.ID_TIPO_DOC_36 TIPOIDTIPODOC36, t2.DESC_ES_36 TIPODESCES36, t2.DESC_EU_36 TIPODESCEU36, t2.ROLEID_36 TIPOROLEID36, t2.ORIGEN_36 TIPOORIGEN36, t2.F_ALTA_36 TIPOFALTA36 ,t2.USU_ALTA_36 TIPOUSUALTA36, t2.F_MODIF_36 TIPOFMODIF36, t2.USU_MODIF_36 TIPOUSUMODIF36 ");
		// FROM
		query.append("FROM DOCUMENTOS_TAREA t1, MAESTRO_TIPOS_DOC t2 ");
		// FILTRADO
		// Where clause & Params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(documentostarea, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 AND t1.ID_TIPO_DOC_18= t2.ID_TIPO_DOC_36(+) ");
		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,
				DocumentosTarea.class, filterParamList, "IDDOCTAREA18");

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

	/**
	 * Search method for rup_table
	 *
	 * @param filterParams    DocumentosTarea
	 * @param searchParams    DocumentosTarea
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<TableRowDto<DocumentosTarea>>
	 */
	@Override
	public List<TableRowDto<DocumentosTarea>> search(DocumentosTarea filterParams, DocumentosTarea searchParams,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DOC_TAREA_18 IDDOCTAREA18,t1.ID_TAREA_TRAM_18 IDTAREATRAM18,t1.ID_TIPO_DOC_18 IDTIPODOC18,t1.OIDDOKUSI_18 OIDDOKUSI18,t1.NOMBRE_DOC_18 NOMBREDOC18,t1.RUTAPIF_18 RUTAPIF18,t1.LOCALIZADOR_18 LOCALIZADOR18,t1.OBLIGATORIO_18 OBLIGATORIO18,t1.TIPO_ADJUNTO_18 TIPOADJUNTO18,t1.DEP_ENTREGA_18 DEPENTREGA18,t1.F_ENTREGA_18 FENTREGA18,t1.ESTADO_DOC_18 ESTADODOC18,t1.F_ALTA_18 FALTA18,t1.USU_ALTA_18 USUALTA18,t1.F_MODIF_18 FMODIF18,t1.USU_MODIF_18 USUMODIF18, t2.ID_TIPO_DOC_36 TIPOIDTIPODOC36, t2.DESC_ES_36 TIPODESCES36, t2.DESC_EU_36 TIPODESCEU36, t2.ROLEID_36 TIPOROLEID36, t2.ORIGEN_36 TIPOORIGEN36, t2.F_ALTA_36 TIPOFALTA36 ,t2.USU_ALTA_36 TIPOUSUALTA36, t2.F_MODIF_36 TIPOFMODIF36, t2.USU_MODIF_36 TIPOUSUMODIF36 ");
		// FROM
		query.append("FROM DOCUMENTOS_TAREA t1, MAESTRO_TIPOS_DOC 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_TIPO_DOC_18= t2.ID_TIPO_DOC_36(+) ");
		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, DocumentosTarea.class,
				filterParamList, searchSQL, searchParamList, from_alias, "IDDOCTAREA18");

		return this.jdbcTemplate.query(sbReorderSelectionSQL.toString(),
				new RowNumResultSetExtractor<DocumentosTarea>(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, DocumentosTarea.class,
				"DOCUMENTOS_TAREA", new String[] { "IDDOCTAREA18" });

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

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

	/**
	 * Filter in the hierarchical DocumentosTarea table.
	 *
	 * @param filterDocumentosTarea DocumentosTarea
	 * @param tableRequestDto       TableRequestDto
	 * @return List<JerarquiaDto<DocumentosTarea>>
	 */
	@Override
	public List<JerarquiaDto<DocumentosTarea>> findAllLikeJerarquia(DocumentosTarea filterDocumentosTarea,
			TableRequestDto tableRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_DOC_TAREA_18 IDDOCTAREA18,t1.ID_TAREA_TRAM_18 IDTAREATRAM18,t1.ID_TIPO_DOC_18 IDTIPODOC18,t1.OIDDOKUSI_18 OIDDOKUSI18,t1.NOMBRE_DOC_18 NOMBREDOC18,t1.RUTAPIF_18 RUTAPIF18,t1.LOCALIZADOR_18 LOCALIZADOR18,t1.OBLIGATORIO_18 OBLIGATORIO18,t1.TIPO_ADJUNTO_18 TIPOADJUNTO18,t1.DEP_ENTREGA_18 DEPENTREGA18,t1.F_ENTREGA_18 FENTREGA18,t1.ESTADO_DOC_18 ESTADODOC18,t1.F_ALTA_18 FALTA18,t1.USU_ALTA_18 USUALTA18,t1.F_MODIF_18 FMODIF18,t1.USU_MODIF_18 USUMODIF18, t2.ID_TIPO_DOC_36 TIPOIDTIPODOC36, t2.DESC_ES_36 TIPODESCES36, t2.DESC_EU_36 TIPODESCEU36, t2.ROLEID_36 TIPOROLEID36, t2.ORIGEN_36 TIPOORIGEN36, t2.F_ALTA_36 TIPOFALTA36 ,t2.USU_ALTA_36 TIPOUSUALTA36, t2.F_MODIF_36 TIPOFMODIF36, t2.USU_MODIF_36 TIPOUSUMODIF36 ");
		// FROM
		// StringBuilder from = new StringBuilder("FROM DOCUMENTOS_TAREA t1 ");
		List<String> from = new ArrayList<String>();
		from.add("DOCUMENTOS_TAREA");
		from.add("MAESTRO_TIPOS_DOC");
		// 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(filterDocumentosTarea, false);

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		query = TableManagerJerarquia.getQuery(tableRequestDto, query, mapaWhere, "IDDOCTAREA18", "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,
					DocumentosTareaDaoImpl.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 filterDocumentosTarea DocumentosTarea
	 * @param tableRequestDto       TableRequestDto
	 * @return Long
	 */
	@Override
	public Long findAllLikeCountJerarquia(DocumentosTarea filterDocumentosTarea, TableRequestDto tableRequestDto) {
		// FROM
		// StringBuilder from = new StringBuilder("FROM DOCUMENTOS_TAREA t1 ");
		List<String> from = new ArrayList<String>();
		from.add("DOCUMENTOS_TAREA");
		from.add("MAESTRO_TIPOS_DOC");

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

		// JERARQUIA
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryCount(tableRequestDto, mapaWhere, "IDDOCTAREA18",
				"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 filterDocumentosTarea DocumentosTarea
	 * @param tableRequestDto       TableRequestDto
	 * @return List<TableRowDto<DocumentosTarea>>
	 */
	@Override
	public List<TableRowDto<DocumentosTarea>> findAllChild(DocumentosTarea filterDocumentosTarea,
			TableRequestDto tableRequestDto) {

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

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

		// MULTISELECCION
		// Especificar la columna padre correspondiente en lugar de la generada por
		// defecto (ID_PADRE)
		StringBuilder query = TableManagerJerarquia.getQueryChildren(tableRequestDto, mapaWhere, "IDDOCTAREA18",
				"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<DocumentosTarea>(this.rwMapPK, "IDDOCTAREA18"), params.toArray());
	}

	/*
	 * MÉTODOS PRIVADOS
	 */

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

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

		if (documentostarea != null && documentostarea.getIdDocTarea18() != null) {
			where.append(" AND t1.ID_DOC_TAREA_18 = ?");
			params.add(documentostarea.getIdDocTarea18());
		}
		if (documentostarea != null && documentostarea.getIdTareaTram18() != null) {
			where.append(" AND t1.ID_TAREA_TRAM_18 = ?");
			params.add(documentostarea.getIdTareaTram18());
		}
		if (documentostarea != null && documentostarea.getIdTipoDoc18() != null) {
			where.append(" AND t1.ID_TIPO_DOC_18 = ?");
			params.add(documentostarea.getIdTipoDoc18());
		}
		if (documentostarea != null && documentostarea.getOiddokusi18() != null) {
			where.append(" AND t1.OIDDOKUSI_18 = ?");
			params.add(documentostarea.getOiddokusi18());
		}
		if (documentostarea != null && documentostarea.getNombreDoc18() != null) {
			where.append(" AND t1.NOMBRE_DOC_18 = ?");
			params.add(documentostarea.getNombreDoc18());
		}
		if (documentostarea != null && documentostarea.getRutapif18() != null) {
			where.append(" AND t1.RUTAPIF_18 = ?");
			params.add(documentostarea.getRutapif18());
		}
		if (documentostarea != null && documentostarea.getLocalizador18() != null) {
			where.append(" AND t1.LOCALIZADOR_18 = ?");
			params.add(documentostarea.getLocalizador18());
		}
		if (documentostarea != null && documentostarea.getObligatorio18() != null) {
			where.append(" AND t1.OBLIGATORIO_18 = ?");
			params.add(documentostarea.getObligatorio18());
		}
		if (documentostarea != null && documentostarea.getTipoAdjunto18() != null) {
			where.append(" AND t1.TIPO_ADJUNTO_18 = ?");
			params.add(documentostarea.getTipoAdjunto18());
		}
		if (documentostarea != null && documentostarea.getDepEntrega18() != null) {
			where.append(" AND t1.DEP_ENTREGA_18 = ?");
			params.add(documentostarea.getDepEntrega18());
		}
		if (documentostarea != null && documentostarea.getfEntrega18() != null) {
			where.append(" AND t1.F_ENTREGA_18 = ?");
			params.add(documentostarea.getfEntrega18());
		}
		if (documentostarea != null && documentostarea.getEstadoDoc18() != null) {
			where.append(" AND t1.ESTADO_DOC_18 = ?");
			params.add(documentostarea.getEstadoDoc18());
		}
		if (documentostarea != null && documentostarea.getfAlta18() != null) {
			where.append(" AND t1.F_ALTA_18 = ?");
			params.add(documentostarea.getfAlta18());
		}
		if (documentostarea != null && documentostarea.getUsuAlta18() != null) {
			where.append(" AND t1.USU_ALTA_18 = ?");
			params.add(documentostarea.getUsuAlta18());
		}
		if (documentostarea != null && documentostarea.getfModif18() != null) {
			where.append(" AND t1.F_MODIF_18 = ?");
			params.add(documentostarea.getfModif18());
		}
		if (documentostarea != null && documentostarea.getUsuModif18() != null) {
			where.append(" AND t1.USU_MODIF_18 = ?");
			params.add(documentostarea.getUsuModif18());
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getIdTipoDoc36() != null) {
			where.append(" AND t2.ID_TIPO_DOC_36 = ?");
			params.add(documentostarea.getMaestroTiposDoc().getIdTipoDoc36());
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getDescEs36() != null) {
			where.append(" AND t2.DESC_ES_36 = ?");
			params.add(documentostarea.getMaestroTiposDoc().getDescEs36());
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getDescEu36() != null) {
			where.append(" AND t2.DESC_EU_36 = ?");
			params.add(documentostarea.getMaestroTiposDoc().getDescEu36());
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getRoleid36() != null) {
			where.append(" AND t2.ROLEID_36 = ?");
			params.add(documentostarea.getMaestroTiposDoc().getRoleid36());
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getOrigen36() != null) {
			where.append(" AND t2.ORIGEN_36 = ?");
			params.add(documentostarea.getMaestroTiposDoc().getOrigen36());
		}

		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
	 * DocumentosTarea entity
	 *
	 * @param documentostarea DocumentosTarea 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(DocumentosTarea documentostarea, Boolean startsWith) {

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

		if (documentostarea != null && documentostarea.getIdDocTarea18() != null) {
			where.append(" AND t1.ID_DOC_TAREA_18 = ?");
			params.add(documentostarea.getIdDocTarea18());
		}
		if (documentostarea != null && documentostarea.getIdTareaTram18() != null) {
			where.append(" AND t1.ID_TAREA_TRAM_18 = ?");
			params.add(documentostarea.getIdTareaTram18());
		}
		if (documentostarea != null && documentostarea.getIdTipoDoc18() != null) {
			where.append(" AND t1.ID_TIPO_DOC_18 = ?");
			params.add(documentostarea.getIdTipoDoc18());
		}
		if (documentostarea != null && documentostarea.getOiddokusi18() != null) {
			where.append(" AND UPPER(t1.OIDDOKUSI_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getOiddokusi18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getOiddokusi18().toUpperCase() + "%");
			}
			where.append(" AND t1.OIDDOKUSI_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getNombreDoc18() != null) {
			where.append(" AND UPPER(t1.NOMBRE_DOC_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getNombreDoc18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getNombreDoc18().toUpperCase() + "%");
			}
			where.append(" AND t1.NOMBRE_DOC_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getRutapif18() != null) {
			where.append(" AND UPPER(t1.RUTAPIF_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getRutapif18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getRutapif18().toUpperCase() + "%");
			}
			where.append(" AND t1.RUTAPIF_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getLocalizador18() != null) {
			where.append(" AND UPPER(t1.LOCALIZADOR_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getLocalizador18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getLocalizador18().toUpperCase() + "%");
			}
			where.append(" AND t1.LOCALIZADOR_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getObligatorio18() != null) {
			where.append(" AND t1.OBLIGATORIO_18 = ?");
			params.add(documentostarea.getObligatorio18());
		}
		if (documentostarea != null && documentostarea.getTipoAdjunto18() != null) {
			where.append(" AND UPPER(t1.TIPO_ADJUNTO_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getTipoAdjunto18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getTipoAdjunto18().toUpperCase() + "%");
			}
			where.append(" AND t1.TIPO_ADJUNTO_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getDepEntrega18() != null) {
			where.append(" AND UPPER(t1.DEP_ENTREGA_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getDepEntrega18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getDepEntrega18().toUpperCase() + "%");
			}
			where.append(" AND t1.DEP_ENTREGA_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getfEntrega18() != null) {
			where.append(" AND t1.F_ENTREGA_18 = ?");
			params.add(documentostarea.getfEntrega18());
		}
		if (documentostarea != null && documentostarea.getEstadoDoc18() != null) {
			where.append(" AND t1.ESTADO_DOC_18 = ?");
			params.add(documentostarea.getEstadoDoc18());
		}
		if (documentostarea != null && documentostarea.getfAlta18() != null) {
			where.append(" AND t1.F_ALTA_18 = ?");
			params.add(documentostarea.getfAlta18());
		}
		if (documentostarea != null && documentostarea.getUsuAlta18() != null) {
			where.append(" AND UPPER(t1.USU_ALTA_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getUsuAlta18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getUsuAlta18().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_ALTA_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getfModif18() != null) {
			where.append(" AND t1.F_MODIF_18 = ?");
			params.add(documentostarea.getfModif18());
		}
		if (documentostarea != null && documentostarea.getUsuModif18() != null) {
			where.append(" AND UPPER(t1.USU_MODIF_18) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getUsuModif18().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getUsuModif18().toUpperCase() + "%");
			}
			where.append(" AND t1.USU_MODIF_18 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getIdTipoDoc36() != null) {
			where.append(" AND t2.COD_TIPO_DOC_28 = ?");
			params.add(documentostarea.getMaestroTiposDoc().getIdTipoDoc36());
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getDescEs36() != null) {
			where.append(" AND UPPER(t2.DESC_ES_36) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getMaestroTiposDoc().getDescEs36().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getMaestroTiposDoc().getDescEs36().toUpperCase() + "%");
			}
			where.append(" AND t2.DESC_ES_36 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getDescEu36() != null) {
			where.append(" AND UPPER(t2.DESC_EU_36) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getMaestroTiposDoc().getDescEu36().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getMaestroTiposDoc().getDescEu36().toUpperCase() + "%");
			}
			where.append(" AND t2.DESC_EU_36 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getRoleid36() != null) {
			where.append(" AND UPPER(t2.ROLEID_36) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getMaestroTiposDoc().getRoleid36().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getMaestroTiposDoc().getRoleid36().toUpperCase() + "%");
			}
			where.append(" AND t2.ROLEID_36 IS NOT NULL");
		}
		if (documentostarea != null && documentostarea.getMaestroTiposDoc() != null
				&& documentostarea.getMaestroTiposDoc().getOrigen36() != null) {
			where.append(" AND UPPER(t2.ORIGEN_36) like ? ESCAPE  '\\'");
			if (startsWith) {
				params.add(documentostarea.getMaestroTiposDoc().getOrigen36().toUpperCase() + "%");
			} else {
				params.add("%" + documentostarea.getMaestroTiposDoc().getOrigen36().toUpperCase() + "%");
			}
			where.append(" AND t2.ORIGEN_36 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;
}
