package com.ejie.ab79.dao.propuestaSancion;

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.ab79.model.propuestaSancion.Infracciones;
import com.ejie.ab79.model.propuestaSancion.InfraccionesPropuesta;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableManager;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * ActuacionesDaoImpl  
 * 
 *  
 */

@Repository
@Transactional
public class PropuestaSancionInfraccionesDaoImpl implements PropuestaSancionInfraccionesDao {

	public static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDINFRACCIONPROPUESTA", "IDPROPUESTA",
			"IDINFRACCION", "FECHAHECHO", "DESCRIPCIONHECHO", "FECHAREGISTRO", "USUARIOREGISTRO" };

	private JdbcTemplate jdbcTemplate;

	@Resource
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	private RowMapper<InfraccionesPropuesta> rwMap = new RowMapper<InfraccionesPropuesta>() {

		@Override
		public InfraccionesPropuesta mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			InfraccionesPropuesta infraccionPropuesta = new InfraccionesPropuesta();
			infraccionPropuesta.setIdInfraccion((resultSet.getInt("IDINFRACCION")));
			infraccionPropuesta.setIdPropuestaSancion(resultSet.getInt("IDPROPUESTA"));
			infraccionPropuesta.setIdRelArtInfProSan(resultSet.getInt("IDINFRACCIONPROPUESTA"));
			infraccionPropuesta.setFechaHecho(resultSet.getDate("FECHAHECHO"));
			infraccionPropuesta.setDescripcionHecho(resultSet.getString("DESCRIPCIONHECHO"));
			infraccionPropuesta.setNotas(resultSet.getString("NOTAS"));
			infraccionPropuesta.setFechaRegistro(resultSet.getDate("FECHAREGISTRO"));
			infraccionPropuesta.setUsuarioRegistro(resultSet.getString("USUARIOREGISTRO"));
			return infraccionPropuesta;
		}
	};

	private RowMapper<InfraccionesPropuesta> rwMapInfraccionesDerechos = new RowMapper<InfraccionesPropuesta>() {

		@Override
		public InfraccionesPropuesta mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			InfraccionesPropuesta infraccionesPropuesta = new InfraccionesPropuesta();

			infraccionesPropuesta.setIdRelArtInfProSan(resultSet.getInt("IDRELARTINFPROSAN"));

			infraccionesPropuesta.setFechaHecho(resultSet.getDate("FECHAHECHO"));
			infraccionesPropuesta.setDescripcionHecho(resultSet.getString("DESCRIPCIONHECHO"));
			infraccionesPropuesta.setIdDerechosInf(resultSet.getString("IDDERECHOS"));
			infraccionesPropuesta.setArticulosDerechosInf(resultSet.getString("ARTDERECHOS"));
			infraccionesPropuesta.setDescripcionDerechosInfCas(resultSet.getString("DESCDERECHOSCAS"));
			infraccionesPropuesta.setDescripcionDerechosInfEus(resultSet.getString("DESCDERECHOSEUS"));

			Infracciones infraccionAux = new Infracciones();
			infraccionAux.setIdInfraccion(resultSet.getInt("IDINFRACCION"));
			infraccionAux.setArticulo(resultSet.getString("ARTICULOINFRACCION"));
			infraccionAux.setDescripcionCastellano(resultSet.getString("DESCINFRACCIONCAS"));
			infraccionAux.setDescripcionEuskera(resultSet.getString("DESCINFRACCIONEUS"));
			infraccionesPropuesta.setInfracciones(infraccionAux);

			return infraccionesPropuesta;
		}
	};

	private RowMapper<InfraccionesPropuesta> rwMapFind = new RowMapper<InfraccionesPropuesta>() {

		@Override
		public InfraccionesPropuesta mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			InfraccionesPropuesta infraccionesPropuesta = new InfraccionesPropuesta();

			infraccionesPropuesta.setIdRelArtInfProSan(resultSet.getInt("IDRELARTINFPROSAN"));

			infraccionesPropuesta.setFechaHecho(resultSet.getDate("FECHAHECHO"));
			infraccionesPropuesta.setDescripcionHecho(resultSet.getString("DESCRIPCIONHECHO"));
			infraccionesPropuesta.setNotas(resultSet.getString("NOTAS"));
			infraccionesPropuesta.setIdDerechosInf(resultSet.getString("IDDERECHOS"));
			infraccionesPropuesta.setDescripcionDerechosInfCas(resultSet.getString("DESCDERECHOSCAS"));
			infraccionesPropuesta.setDescripcionDerechosInfEus(resultSet.getString("DESCDERECHOSEUS"));
			infraccionesPropuesta.setIdProcedimiento(resultSet.getInt("IDPROCEDIMIENTO"));

			Infracciones infraccionAux = new Infracciones();
			infraccionAux.setIdInfraccion(resultSet.getInt("IDINFRACCION"));
			infraccionAux.setDescripcionCastellano(resultSet.getString("DESCINFRACCIONCAS"));
			infraccionAux.setDescripcionEuskera(resultSet.getString("DESCINFRACCIONEUS"));
			infraccionesPropuesta.setInfracciones(infraccionAux);

			return infraccionesPropuesta;
		}
	};

	private RowMapper<InfraccionesPropuesta> rowMapByPropuesta = new RowMapper<InfraccionesPropuesta>() {

		@Override
		public InfraccionesPropuesta mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			InfraccionesPropuesta infraccionPropuesta = new InfraccionesPropuesta();
			infraccionPropuesta.setIdInfraccion((resultSet.getInt("IDRELARTINFPROSAN")));
			return infraccionPropuesta;
		}
	};

	private Map<String, ?> getWhereMap(InfraccionesPropuesta infraccionesPropuesta) {
		StringBuilder where = new StringBuilder(PropuestaSancionInfraccionesDaoImpl.STRING_BUILDER_INIT);
		List<Object> params = new ArrayList<Object>();

		if (infraccionesPropuesta != null && String.valueOf(infraccionesPropuesta.getIdPropuestaSancion()) != null) {
			where.append("AND t1.ID_PROPUESTA_SANCION = ?");
			params.add(infraccionesPropuesta.getIdPropuestaSancion());
		}
		Map<String, Object> mapWhere = new HashMap<String, Object>();
		mapWhere.put("query", where);
		mapWhere.put("params", params);
		return mapWhere;
	}

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

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

		if (infracciones != null && String.valueOf(infracciones.getIdPropuestaSancion()) != null) {
			where.append(" AND t1.ID_PROPUESTA_SANCION = ?");
			params.add(infracciones.getIdPropuestaSancion());
		}

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

		return mapWhere;
	}

	@Override
	public InfraccionesPropuesta add(InfraccionesPropuesta infraccionesPropuesta) {
		int propuestaInfraccion = this.jdbcTemplate.queryForObject("SELECT AB79.S_AB7931T00.NEXTVAL FROM DUAL",
				Integer.class);
		infraccionesPropuesta.setIdRelArtInfProSan(propuestaInfraccion);
		String query = "INSERT INTO REL_ART_INF_PRO_SAN (ID_REL_ART_INF_PRO_SAN, ID_PROPUESTA_SANCION,ID_INFRACCION,FECHA_HECHO,DESCRIPCION_HECHO,NOTAS,FECHA_REGISTRO,USUARIO_REGISTRO) VALUES (?,?,?,?,?,?,?,?)";
		this.jdbcTemplate.update(query, infraccionesPropuesta.getIdRelArtInfProSan(),
				infraccionesPropuesta.getIdPropuestaSancion(), infraccionesPropuesta.getIdInfraccion(),
				infraccionesPropuesta.getFechaHecho(), infraccionesPropuesta.getDescripcionHecho(),
				infraccionesPropuesta.getNotas(), infraccionesPropuesta.getFechaRegistro(),
				infraccionesPropuesta.getUsuarioRegistro());
		return infraccionesPropuesta;
	}

	@Override
	public InfraccionesPropuesta update(InfraccionesPropuesta infraccionesPropuesta) {
		StringBuilder query = new StringBuilder();

		query.append("UPDATE REL_ART_INF_PRO_SAN SET");
		query.append(" ID_INFRACCION=?, FECHA_HECHO=?, DESCRIPCION_HECHO=?");
		query.append(", NOTAS=?, ID_PROCEDIMIENTO=?");
		query.append(", FECHA_ULTMODIFICACION=?, USUARIO_ULTMODIFICACION=?");
		query.append(" WHERE ID_REL_ART_INF_PRO_SAN=?");

		this.jdbcTemplate.update(query.toString(), infraccionesPropuesta.getIdInfraccion(),
				infraccionesPropuesta.getFechaHecho(), infraccionesPropuesta.getDescripcionHecho(),
				infraccionesPropuesta.getNotas(), infraccionesPropuesta.getIdProcedimiento(),
				infraccionesPropuesta.getFechaUltmodificacion(), infraccionesPropuesta.getUsuarioUltmodificacion(),
				infraccionesPropuesta.getIdRelArtInfProSan());
		return infraccionesPropuesta;
	}

	@Override
	public InfraccionesPropuesta find(InfraccionesPropuesta infraccionesPropuesta) {
		StringBuilder query = new StringBuilder();

		query.append(
				"SELECT t31.ID_REL_ART_INF_PRO_SAN IDRELARTINFPROSAN,  t5909.ID_INFRACCION IDINFRACCION,  t5909.DESCRIPCION_CASTELLANO DESCINFRACCIONCAS,  t5909.DESCRIPCION_EUSKERA DESCINFRACCIONEUS,  t31.FECHA_HECHO FECHAHECHO,  t31.NOTAS NOTAS,  t31.DESCRIPCION_HECHO DESCRIPCIONHECHO, t31.ID_PROCEDIMIENTO IDPROCEDIMIENTO,  LISTAGG (t5908.ID_DERECHO, '#') WITHIN GROUP (ORDER BY t31.ID_REL_ART_INF_PRO_SAN, t31.ID_INFRACCION, t32.ID_DERECHO) IDDERECHOS,  LISTAGG (t5908.DESCRIPCION_CASTELLANO, '#') WITHIN GROUP (ORDER BY t31.ID_REL_ART_INF_PRO_SAN, t31.ID_INFRACCION, t32.ID_DERECHO) DESCDERECHOSCAS,  LISTAGG (t5908.DESCRIPCION_EUSKERA, '#') WITHIN GROUP (ORDER BY t31.ID_REL_ART_INF_PRO_SAN, t31.ID_INFRACCION, t32.ID_DERECHO) DESCDERECHOSEUS FROM REL_ART_INF_PRO_SAN t31 INNER JOIN INFRACCIONES t5909 ON t31.ID_INFRACCION = t5909.ID_INFRACCION INNER JOIN REL_ART_INF_PRO_SAN_DER t32 ON t31.ID_REL_ART_INF_PRO_SAN = t32.ID_REL_ART_INF_PRO_SAN INNER JOIN DERECHOS t5908 ON t32.ID_DERECHO = t5908.ID_DERECHO WHERE t31.ID_REL_ART_INF_PRO_SAN = ? GROUP BY t31.ID_REL_ART_INF_PRO_SAN , t5909.ID_INFRACCION, t5909.ARTICULO, t5909.DESCRIPCION_CASTELLANO, t5909.DESCRIPCION_EUSKERA, t31.FECHA_HECHO, t31.DESCRIPCION_HECHO, t31.NOTAS, t31.ID_PROCEDIMIENTO");

		List<InfraccionesPropuesta> infraccionesPropuestaList = this.jdbcTemplate.query(query.toString(),
				this.rwMapFind, infraccionesPropuesta.getIdRelArtInfProSan());
		return (InfraccionesPropuesta) DataAccessUtils.uniqueResult(infraccionesPropuestaList);
	}

	@Override
	public void remove(InfraccionesPropuesta infraccionesPropuesta) {
		String query = "DELETE FROM REL_ART_INF_PRO_SAN WHERE ID_REL_ART_INF_PRO_SAN=?";
		this.jdbcTemplate.update(query, infraccionesPropuesta.getIdRelArtInfProSan());
	}

	@Override
	public List<InfraccionesPropuesta> findAll(InfraccionesPropuesta infraccionesPropuesta,
			TableRequestDto tableRequestDto) {

		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_REL_ART_INF_PRO_SAN IDINFRACCIONPROPUESTA, t1.ID_PROPUESTA_SANCION IDPROPUESTA, "
						+ "t1.ID_INFRACCION IDINFRACCION, t1.FECHA_HECHO FECHAHECHO, t1.DESCRIPCION_HECHO DESCRIPCIONHECHO, "
						+ "t1.NOTAS NOTAS, t1.FECHA_REGISTRO FECHAREGISTRO, t1.USUARIO_REGISTRO USUARIOREGISTRO");
		query.append(" FROM REL_ART_INF_PRO_SAN t1");

		// Where clause & params

		Map<String, ?> mapaWhere = this.getWhereMap(infraccionesPropuesta);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

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

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

	@Transactional(readOnly = true)
	public List<InfraccionesPropuesta> findAllLike(InfraccionesPropuesta infraccionesPropuesta,
			TableRequestDto tableRequestDto, Boolean startsWith) {

		StringBuilder query = new StringBuilder(
				"SELECT DISTINCT t1.ID_REL_ART_INF_PRO_SAN IDINFRACCIONPROPUESTA, t1.ID_PROPUESTA_SANCION IDPROPUESTA, "
						+ "t1.ID_INFRACCION IDINFRACCION, t1.FECHA_HECHO FECHAHECHO, t1.DESCRIPCION_HECHO DESCRIPCIONHECHO,"
						+ "t1.NOTAS, t1.FECHA_REGISTRO FECHAREGISTRO, t1.USUARIO_REGISTRO USUARIOREGISTRO");
		query.append(" FROM REL_ART_INF_PRO_SAN t1 ");
		Map<String, ?> mapaWhere = this.getWhereLikeMap(infraccionesPropuesta, startsWith);
		StringBuilder where = new StringBuilder("WHERE 1=1");
		where.append(mapaWhere.get("query"));
		query.append(where);

		List<?> params = (List<?>) mapaWhere.get("params");
		if (tableRequestDto != null) {
			tableRequestDto.setSidx("t1.ID_INFRACCION");
			query = TableManager.getPaginationQuery(tableRequestDto, query);
		}
		return this.jdbcTemplate.query(query.toString(), this.rwMap, params.toArray());
	}

	/**
	 * 
	 * @param infraccionesPropuesta
	 *            InfraccionesPropuesta
	 * @param tableRequestDto
	 *            TableRequestDto
	 * 
	 * @return List<InfraccionesPropuesta>
	 */
	@Transactional(readOnly = true)
	public List<InfraccionesPropuesta> findInfraccionesDerechos(InfraccionesPropuesta infraccionesPropuesta,
			TableRequestDto tableRequestDto) {

		StringBuilder query = new StringBuilder();
		List<Object> params = new ArrayList<Object>();

		query.append("SELECT t31.ID_REL_ART_INF_PRO_SAN IDRELARTINFPROSAN");
		query.append(", t5909.ID_INFRACCION IDINFRACCION, t5909.ARTICULO ARTICULOINFRACCION");
		query.append(", t5909.DESCRIPCION_CASTELLANO DESCINFRACCIONCAS, t5909.DESCRIPCION_EUSKERA DESCINFRACCIONEUS");
		query.append(", t31.FECHA_HECHO FECHAHECHO, t31.DESCRIPCION_HECHO DESCRIPCIONHECHO");
		query.append(
				", LISTAGG (t5908.ID_DERECHO, '#') WITHIN GROUP (ORDER BY t31.ID_REL_ART_INF_PRO_SAN, t31.ID_INFRACCION, t32.ID_DERECHO) IDDERECHOS");
		query.append(
				", LISTAGG (t5908.ARTICULO, '#') WITHIN GROUP (ORDER BY t31.ID_REL_ART_INF_PRO_SAN, t31.ID_INFRACCION, t32.ID_DERECHO) ARTDERECHOS");
		query.append(
				", LISTAGG (t5908.DESCRIPCION_CASTELLANO, '#') WITHIN GROUP (ORDER BY t31.ID_REL_ART_INF_PRO_SAN, t31.ID_INFRACCION, t32.ID_DERECHO) DESCDERECHOSCAS");
		query.append(
				", LISTAGG (t5908.DESCRIPCION_EUSKERA, '#') WITHIN GROUP (ORDER BY t31.ID_REL_ART_INF_PRO_SAN, t31.ID_INFRACCION, t32.ID_DERECHO) DESCDERECHOSEUS");
		query.append(" FROM REL_ART_INF_PRO_SAN t31");
		query.append(" INNER JOIN INFRACCIONES t5909 ON t31.ID_INFRACCION = t5909.ID_INFRACCION ");
		query.append(
				" INNER JOIN REL_ART_INF_PRO_SAN_DER t32 ON t31.ID_REL_ART_INF_PRO_SAN = t32.ID_REL_ART_INF_PRO_SAN");
		query.append(" INNER JOIN DERECHOS t5908 ON t32.ID_DERECHO = t5908.ID_DERECHO");
		query.append(" WHERE t31.ID_PROPUESTA_SANCION = ?");
		params.add(infraccionesPropuesta.getIdPropuestaSancion());
		query.append(" GROUP BY  t31.ID_REL_ART_INF_PRO_SAN");
		query.append(" , t5909.ID_INFRACCION, t5909.ARTICULO, t5909.DESCRIPCION_CASTELLANO, t5909.DESCRIPCION_EUSKERA");
		query.append(" , t31.FECHA_HECHO, t31.DESCRIPCION_HECHO");

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

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

	/**
	 * Counts rows in the InfraccionesPropuesta table.
	 *
	 * @param infraccionesPropuesta
	 *            InfraccionesPropuesta
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findInfraccionesDerechosCount(InfraccionesPropuesta infraccionesPropuesta) {
		StringBuilder query = new StringBuilder();
		List<Object> params = new ArrayList<Object>();

		query.append("SELECT COUNT(1)");
		query.append(" FROM REL_ART_INF_PRO_SAN t31");
		query.append(" INNER JOIN INFRACCIONES t5909 ON t31.ID_INFRACCION = t5909.ID_INFRACCION ");
		query.append(
				" INNER JOIN REL_ART_INF_PRO_SAN_DER t32 ON t31.ID_REL_ART_INF_PRO_SAN = t32.ID_REL_ART_INF_PRO_SAN");
		query.append(" INNER JOIN DERECHOS t5908 ON t32.ID_DERECHO = t5908.ID_DERECHO");
		query.append(" WHERE t31.ID_PROPUESTA_SANCION = ?");
		params.add(infraccionesPropuesta.getIdPropuestaSancion());

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

	@Override
	public void removeMultiple(InfraccionesPropuesta filterInfraccionesPropuesta, TableRequestDto tableRequestDto,
			Boolean startsWith) {
		// TODO Auto-generated method stub

	}

	/**
	 * Counts rows in the InfraccionesPropuesta table using like
	 * 
	 * @param infraccionesPropuesta
	 *            InfraccionesPropuesta
	 * 
	 * @param startsWith
	 *            Boolean
	 * @return Long
	 */
	@Transactional(readOnly = true)
	public Long findAllLikeCount(InfraccionesPropuesta infraccionesPropuesta, Boolean startsWith) {
		StringBuilder query = new StringBuilder("SELECT COUNT(1) FROM REL_ART_INF_PRO_SAN t1");
		// Where clause & params
		Map<String, ?> mapaWhere = this.getWhereLikeMap(infraccionesPropuesta, startsWith);
		StringBuilder where = new StringBuilder(" WHERE 1=1 ");
		where.append(mapaWhere.get("query"));
		query.append(where);

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

	@Override
	public Long findAllCount(InfraccionesPropuesta infraccionesPropuesta) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<TableRowDto<InfraccionesPropuesta>> reorderSelection(InfraccionesPropuesta filterInfraccionesPropuesta,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * Search method for rup_table
	 *
	 * @param tableRequestDto
	 *            TableRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<TableRowDto<InfraccionesPropuesta>>
	 */
	@Override
	public List<TableRowDto<InfraccionesPropuesta>> search(InfraccionesPropuesta filterInfracciones,
			InfraccionesPropuesta searchInfracciones, TableRequestDto tableRequestDto, Boolean startsWith) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<JerarquiaDto<InfraccionesPropuesta>> findAllLikeJerarquia(
			InfraccionesPropuesta filterInfraccionesPropuesta, TableRequestDto tableRequestDto) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Long findAllLikeCountJerarquia(InfraccionesPropuesta filterInfraccionesPropuesta,
			TableRequestDto tableRequestDto) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<TableRowDto<InfraccionesPropuesta>> findAllChild(InfraccionesPropuesta filterInfraccionesPropuesta,
			TableRequestDto tableRequestDto) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<InfraccionesPropuesta> getMultiple(InfraccionesPropuesta filterInfraccionesPropuesta,
			TableRequestDto tableRequestDto, Boolean startsWith) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int numeroDocumentosAsociados(InfraccionesPropuesta actuacion) {
		// TODO Auto-generated method stub
		return 0;
	}

	public static final int STRING_BUILDER_INIT = 4096;

	/**
	 * 
	 * @param infraccionesPropuesta
	 *            InfraccionesPropuesta
	 * 
	 * @return List<InfraccionesPropuesta>
	 */
	@Override
	public List<InfraccionesPropuesta> findByPropuesta(InfraccionesPropuesta infraccionesPropuesta) {

		StringBuilder query = new StringBuilder();

		query.append("SELECT ID_REL_ART_INF_PRO_SAN IDRELARTINFPROSAN");
		query.append(" FROM REL_ART_INF_PRO_SAN");
		query.append(" WHERE ID_PROPUESTA_SANCION = ?");

		return (List<InfraccionesPropuesta>) this.jdbcTemplate.query(query.toString(), this.rowMapByPropuesta,
				infraccionesPropuesta.getIdPropuestaSancion());
	}

	/**
	 * 
	 * @param idPropuestaSancion
	 *            Integer
	 */
	@Override
	public void removeByPropuesta(Integer idPropuestaSancion) {

		String query = "DELETE FROM REL_ART_INF_PRO_SAN WHERE ID_PROPUESTA_SANCION = ?";
		this.jdbcTemplate.update(query, idPropuestaSancion);
	}
}
