package com.ejie.ad74a.service;

import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableResponseDto;
import com.ejie.x38.dto.TableRowDto;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.multipart.MultipartFile;

import com.ejie.ad74a.model.Ayuntamientos;
import com.ejie.ad74a.model.BeneficiarioWS;
import com.ejie.ad74a.model.Solicitantes;

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

public interface SolicitantesService {

	/**
	 * 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);

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

	Solicitantes findPrestacionServicio(Solicitantes solicitantes);

	/**
	 * Deletes 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<Solicitantes>
	 */
	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<Solicitantes>
	 */
	List<Solicitantes> findAllLike(Solicitantes solicitantes, TableRequestDto tableRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Removes rows from the Solicitantes table.
	 *
	 * @param tableRequestDto TableRequestDto
	 */
	void removeMultiple(TableRequestDto tableRequestDto);

	/**
	 * Filter method in the Solicitantes table.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @param startsWith         Boolean
	 * @return TableResponseDto<Solicitantes>
	 */
	TableResponseDto<Solicitantes> filter(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto,
			Boolean startsWith, Boolean isSSB, Ayuntamientos ayuntamiento);

	/**
	 * Searches rows in the Solicitantes 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);

	/**
	 * Reorder the selection made in Solicitantes table.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @param startsWith         Boolean
	 * @return Object
	 */
	Object reorderSelection(Solicitantes filterSolicitantes, TableRequestDto tableRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE JERARQUIA
	 */

	/**
	 * Finder method in the hierarchical the Solicitantes table.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @param startsWith         Boolean
	 * @return TableResponseDto<JerarquiaDto<Solicitantes>>
	 */
	TableResponseDto<JerarquiaDto<Solicitantes>> jerarquia(Solicitantes filterSolicitantes,
			TableRequestDto tableRequestDto, Boolean startsWith);

	/**
	 * Finder method for siblings rows in the hierarchical the Solicitantes table.
	 *
	 * @param filterSolicitantes Solicitantes
	 * @param tableRequestDto    TableRequestDto
	 * @return TableResponseDto<JerarquiaDto<Solicitantes>>
	 */
	TableResponseDto<JerarquiaDto<Solicitantes>> jerarquiaChildren(Solicitantes filterSolicitantes,
			TableRequestDto tableRequestDto);

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

	/**
	 * Exporta Datos en su formato
	 *
	 */
	void generateReport(Solicitantes filterSolicitantes, String[] columns, String[] columnsName, String fileName,
			String sheetTitle, TableRequestDto tableRequestDto, HttpServletRequest request,
			HttpServletResponse response);

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

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

	TableResponseDto<Solicitantes> filterSameDirectionBenefActivo(Solicitantes filterSolicitantes,
			TableRequestDto tableRequestDto, Boolean startsWith);

	boolean tieneExpedienteIniciado(Long idSolicitante01);

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

	Solicitantes updateDatosExpediente(Solicitantes solicitantes);

	Solicitantes updateFNac(Solicitantes solicitantes);

	public Solicitantes findPorDni(Solicitantes solicitantes);

	List<Solicitantes> tieneAsociados(Solicitantes filterSolicitantes);

	public Solicitantes aportar(Solicitantes solicitantes, MultipartFile documento, String idTipoDoc36,
			HttpServletRequest request);

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

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

	public Solicitantes updateNoReintentar(Solicitantes solicitantes);

	Solicitantes anularBaja(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
	 * @return
	 */
	BeneficiarioWS datosBeneficiario(Solicitantes solicitantes);

	/**
	 * 
	 * @param solicitantes
	 * @return
	 */
	Solicitantes updateBajaPSBeneficiario(Solicitantes solicitantes);

}
