/**
 * 
 */
package com.ejie.ad74a.dao;

import java.util.Collection;
import java.util.Date;
import java.util.List;

import com.ejie.ad74a.model.Mensualidad;
import com.ejie.ad74a.model.Solicitante;

/**
 * Interfaz de persistencia para el proceso CargosMensuales
 * 
 * @author BICUGUAL
 *
 */
public interface CopagoBeneficiarioDao {

	/**
	 * Obtiene la lista de solicitantes con cargo mensual pendiente de generar
	 * 
	 * @param idProvincia
	 * @param fInicio
	 * @param fFin
	 * @param anyo
	 * @param mes
	 * @return
	 */
	List<Solicitante> findSolicitantesByProvincia(String idProvincia, Date fInicio, Date fFin, int anyo, int mes);

//	/**
//	 * Obtiene la lista de pisos tutelados en los que el solicitante ha estado de alta durante la la mensualidad dada
//	 * @param iSolicitante
//	 * @param fInicioMensualidad
//	 * @param fFinMensualidad
//	 * @return
//	 */
//	List<PisoTutelado> findPisoTuteladoBySolicitanteAndMensualidad(Long iSolicitante, Date fInicioMensualidad, Date fFinMensualidad);

	/**
	 * Guarda en batch en la tabla AD74A89T02 MENSUALIDADES_ESPEJO
	 * 
	 * @param lstMensualidadesSolicitante
	 * @param batchSize
	 * @param modoPrueba                  Si está activado, los registros se generan
	 *                                    sin id_mensualidad final ya que no van a
	 *                                    volcarse a las tablas finales
	 * @return
	 */
	int createMensualidadesEspejoBatch(List<Mensualidad> lstMensualidadesSolicitante, int batchSize,
			boolean modoPrueba);

	/**
	 * Borra los registros de una ejecucion en la tabla espejo de mensualidades
	 * 
	 * @param idEjecucion
	 * @return
	 */
	int deleteMensualidadesEspejoEjecucion(String idEjecucion);

	/**
	 * Vuelca los registros de mensualidad de una ejecucion, de la tabla espejo a la
	 * tabla final.
	 * 
	 * @param idEjecucion
	 * @return número de filas volcadas
	 */
	int volcarMensualidadesEspejoAFinales(String idEjecucion);

	/**
	 * Obtiene la lista de solicitantes con cargo mensual generado
	 * 
	 * @param idEjecucion
	 * @param anyo
	 * @param mes
	 * @return
	 */
	List<Solicitante> findSolicitantesConMensualidadEspejoByidEjecucion(String idEjecucion, int anyo, int mes);

	/**
	 * Devuelve la lista de solicitantes con liquidaciones pendiente de pago para
	 * una provincia dada
	 * 
	 * @param idProvincia
	 * @return
	 */
	List<Solicitante> findSolicitantesConLiquidacionPendiente(String idProvincia);

	/**
	 * Devuelve la lista de solicitantes con liquidaciones pendientes de pago que
	 * esten dentro de una seleccion de ID_MENSUALIDAD
	 * 
	 * @param idEjecucion
	 * @return
	 */
	List<Solicitante> findSolicitantesConLiquidacionPendientePorMensualidades(String idEjecucion);

	/**
	 * Realiza las comprobaciones de que las mensualidades generadas (en la tabla
	 * espejo) en esta ejecución, no tienen fallos (registros duplicados, null,
	 * ...).
	 * 
	 * @param idEjecucion
	 * @return
	 */
	Collection<String> comprobarMensualidadesGeneradas(String idEjecucion);

}
