package com.ejie.ad74a.dao;

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

import com.ejie.ad74a.model.Ayuntamientos;
import com.ejie.ad74a.model.BeneficiarioActividadWS;
import com.ejie.ad74a.model.BeneficiarioWS;
import com.ejie.ad74a.model.Direcciones;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * SolicitantesDao generated by UDA, 10-feb-2023 12:13:19.
 * 
 * @author UDA
 */

public interface SolicitantesDao {

	/**
	 * Inserts a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes add(Solicitantes solicitantes);

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes update(Solicitantes solicitantes);

	Solicitantes updateMantInst(Solicitantes solicitantes);

	Solicitantes updateAltaInstalacionPS(Solicitantes solicitantes);

	Solicitantes updateBajaBeneficiario(Solicitantes solicitantes);

	Solicitantes updateValoracion(Solicitantes solicitantes);

	Solicitantes updateDireccionHist(Solicitantes solicitantes);

	Solicitantes updateAltaBeneficiario(Solicitantes solicitantes);

	/**
	 * Función para actualizar el idioma del solicitante
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes updateIdioma(Solicitantes solicitantes);

	/**
	 * Función para actualizar el tipo de beneficiario
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes updateTipoBeneficiario(Solicitantes solicitantes);

	/**
	 * Funcion para modificar la persona interesada. Llama a platea.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes updatePersonaInteresada(Solicitantes solicitantes);

	/**
	 * Finds a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes find(Solicitantes solicitantes);

	Solicitantes findPrestacionServicio(Solicitantes solicitantes);

	public Solicitantes findPorDni(Solicitantes solicitantes);

	/**
	 * Removes a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 */
	void remove(Solicitantes solicitantes);

	/**
	 * Finds a List of rows in the Solicitantes table.
	 *
	 * @param solicitantes    Solicitantes
	 * @param tableRequestDto TableRequestDto
	 * @return List
	 */
	List<Solicitantes> findAll(Solicitantes solicitantes, TableRequestDto tableRequestDto);

	/**
	 * Finds rows in the Solicitantes table using like.
	 *
	 * @param solicitantes    Solicitantes
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List
	 */
	List<Solicitantes> findAllLike(Solicitantes solicitantes, TableRequestDto tableRequestDto, Boolean startsWith,
			Boolean isSSB, Ayuntamientos ayuntamiento);

	List<Solicitantes> findAllLikeExcel(Solicitantes solicitantes, TableRequestDto tableRequestDto, Boolean startsWith,
			Boolean isSSB, Ayuntamientos ayuntamiento);

	List<Solicitantes> findAllLike(Solicitantes solicitantes, TableRequestDto tableRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Filter in the Solicitantes table.
	 *
	 * @param tableRequestDto TableRequestDto
	 */
	void removeMultiple(TableRequestDto tableRequestDto);

	/**
	 * Counts rows in the Solicitantes table using like.
	 *
	 * @param solicitantes Solicitantes
	 * @param startsWith   Boolean
	 * @return Long
	 */
	Long findAllLikeCount(Solicitantes solicitantes, Boolean startsWith, Boolean isDSS, Ayuntamientos ayuntamiento);

	/**
	 * Counts rows in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Long
	 */
	Long findAllCount(Solicitantes solicitantes);

	/**
	 * Reorder selection.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @param startsWith         Boolean
	 * @return List<TableRowDto<Solicitantes>>
	 */
	List<TableRowDto<Solicitantes>> reorderSelection(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith);

	/**
	 * Searches in the Usuario table.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param searchSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @param startsWith         Boolean
	 * @return List<TableRowDto<Solicitantes>>
	 */
	List<TableRowDto<Solicitantes>> search(Solicitantes filterSolicitantes, Solicitantes searchSolicitantes,
			TableRequestDto tableRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE JERARQUIA
	 */

	/**
	 * Filter in the hierarchical Solicitantes table.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @return List<JerarquiaDto<Solicitantes>>
	 */
	List<JerarquiaDto<Solicitantes>> findAllLikeJerarquia(Solicitantes filterSolicitantes,
			TableRequestDto tableRequestDto);

	/**
	 * Count rows in hierarchy
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @return Long
	 */
	Long findAllLikeCountJerarquia(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto);

	/**
	 * Find dependent hierarchical rows
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @return List<TableRowDto<Solicitantes>>
	 */
	List<TableRowDto<Solicitantes>> findAllChild(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto);

	/**
	 * Exporta Datos al clipBoard
	 *
	 */
	List<Solicitantes> getMultiple(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith);

	/**
	 * Recupera si existe el solicitante de alta
	 */
	Boolean isSolAlta(Solicitantes filter);

	/**
	 * Updates a single row in the Solicitantes from papel0.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes updateTabSolicitudPapel0(Solicitantes solicitantes);

	List<Solicitantes> findSameDirectionBenefActivo(Direcciones direccion, String identificador, String tlfnoServicio01,
			TableRequestDto tableRequestDto);

	/**
	 * Updates a single row in the Solicitantes table.
	 *
	 * @param solicitantes Solicitantes
	 * @return Solicitantes
	 */
	Solicitantes updateIdiomaServicio(Solicitantes solicitantes);

	Solicitantes updatePerfil(Solicitantes solicitantes);

	Long findSameDirectionBenefActivoCount(Direcciones direccion, String identificador, String tlfnoServicio01);

	Solicitantes updateTabDatosBeneficiarios(Solicitantes solicitantes);

	Solicitantes findBeneficiarioByFolderId(String folderId);

	boolean tieneExpedienteInciado(Long idSolicitante01);

	Solicitantes updateDatosExpediente(Solicitantes solicitantes);

	Solicitantes updateFNac(Solicitantes solicitantes);

	/**
	 * Buscar beneficiarios para utilizar en pagos.
	 * 
	 * @param fechaInicio Date
	 * @param fechaFin    Date
	 * @return List<Solicitantes>
	 */
	List<Solicitantes> findBeneficiariosPago(Date fechaInicio, Date fechaFin);

	Solicitantes findBeneficiarioPorIdSolicitante(Solicitantes solicitantes);

	Solicitantes updateDenegacionServicio(Solicitantes solFilter);

	List<Solicitantes> findAllLikeBeneficiarios(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith);

	List<Solicitantes> obtenerDatosBeneficiario(Solicitantes solicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith);

	Solicitantes updateFromValoracion(Solicitantes solicitantes);

	public Solicitantes updateNoReintentar(Solicitantes solicitantes);

	void updateTabPrestacionServicio(Solicitantes solicitantes);

	Solicitantes anularBaja(Solicitantes solicitantes);

	Solicitantes updateExencion(Solicitantes solicitante);

	Solicitantes updateFromWSBajaInstalacion(Solicitantes solicitantes);

	Solicitantes updateFromWSUpdate(Solicitantes solicitantes);

	/**
	 * Función que devuelve si un solicitante es un beneficiario activo o no
	 * Específica para el WS de Beneficiario
	 * 
	 * @param solicitantes
	 * @return
	 */
	Solicitantes esBeneficiario(Solicitantes solicitantes);

	/**
	 * Función que devuelve los datos de un solicitante Específica para el WS de
	 * Beneficiario
	 * 
	 * @param solicitantes Solicitantes bean con los datos del solicitante
	 * @return BeneficiarioWS se obtiene un bean del tipo BeneficiarioWS
	 */
	BeneficiarioWS datosBeneficiario(Solicitantes solicitantes);

	/**
	 * Función que marca la exoneracion de un Solicitante
	 * 
	 * @param solicitantes
	 * @return
	 */
	Solicitantes updateExoneracion(Solicitantes solicitantes);

	/**
	 * 
	 * @param solicitantes Solicitantes bean con los datos del solicitante
	 * @return List<BeneficiarioActividadWS> lista de actividades del beneficiario
	 */
	List<BeneficiarioActividadWS> datosActividadBeneficiario(Solicitantes solicitantes);

	Solicitantes updateBajaPSBeneficiario(Solicitantes solicitantes);

	Solicitantes getFechaBaja(Solicitantes solicitantes);

	boolean tieneExpedienteInciado(String idProcedimiento, String identificador01);

	Solicitantes updatePersonaInteresadaSinFNac(Solicitantes solicitantes);

	Solicitantes updatePersonaInteresadaSinFNacYSex(Solicitantes solicitantes);
	

	Solicitantes getTabDatosBeneficiarios(Solicitantes solicitantes);

}
