package com.ejie.ad74a.dao;

import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableRequestDto;
import com.ejie.x38.dto.TableRowDto;
import com.ejie.x38.json.JSONObject;

import java.util.List;

import com.ejie.ad74a.model.BandejaPapel0;
import com.ejie.ad74a.model.BandejaTelematica;
import com.ejie.ad74a.model.Expedientes;
import com.ejie.ad74a.model.Solicitantes;
import com.ejie.ad74a.util.constantes.ProcedimientosEnum;

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

public interface ExpedientesDao {

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

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

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

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

	/**
	 * Finds rows in the Expedientes table using like.
	 *
	 * @param expedientes     Expedientes
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List
	 */
	List<Expedientes> findAllLike(Expedientes expedientes, TableRequestDto tableRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE
	 */

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

	/**
	 * Counts rows in the Expedientes table using like.
	 *
	 * @param expedientes Expedientes
	 * @param startsWith  Boolean
	 * @return Long
	 */
	Long findAllLikeCount(Expedientes expedientes, Boolean startsWith);

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

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

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

	/*
	 * OPERACIONES RUP_TABLE JERARQUIA
	 */

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

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

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

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

	List<Expedientes> findExpedienteByFolderId(Expedientes expedientes);

	Expedientes findExpBySolProc(Expedientes expedientes, ProcedimientosEnum... procedimientosEnum);

	int getNumberFolderSequence(String idProcediento);

	Expedientes updateFolderNumber(Expedientes expedientes);

	Expedientes updateFApertura(Expedientes expedientes);

	Expedientes updateOtherRegistryData(Expedientes expedientes);

	Expedientes updateEstado(Expedientes expedientes);

	Expedientes updateEstadoAndResultadoEstudio(Expedientes expedientes);

	Expedientes updateEstadoNotificacion(Expedientes expedientes);

	Expedientes updateEstadoYEstadoNotificacion(Expedientes expedientes);

	Expedientes updateDesistimiento(Expedientes expedientes);

	String pasarHistorico(String prueba);

	/***
	 * Finds the data for the Cuadro Mando
	 * 
	 * @param expediente
	 * @return List<JSONObject>
	 */
	List<JSONObject> findCuadroMando(Expedientes expediente);

	/**
	 * Finds rows in the Expedientes table to use in search in BandejaPapel0.
	 *
	 * @param expedientes     Expedientes
	 * @param tableRequestDto TableRequestDto
	 * @param startsWith      Boolean
	 * @return List<Expedientes>
	 */
	List<Expedientes> findPapel0(Expedientes expedientes, TableRequestDto tableRequestDto, Boolean startsWith);

	/**
	 * Counts rows in the Expedientes table to use in search in BandejaPapel0.
	 *
	 * @param expedientes Expedientes
	 * @param startsWith  Boolean
	 * @return Long
	 */
	Long findPapel0Count(Expedientes expedientes, Boolean startsWith);

	/**
	 * Updates a single row in the Expedientes table from solicitudPapel0.
	 *
	 * @param expedientes Expedientes
	 * @return Expedientes
	 */

	Expedientes updateTabSolicitudPapel0(Expedientes expedientes);

	/**
	 * Updates a single row in the Expedientes folderID table from solicitudPapel0.
	 *
	 * @param expedientes Expedientes
	 * @return Expedientes
	 */
	Expedientes updateFolderID(Expedientes expedientes);

	Long findCurrentExpSolProc(String dni, String procedureId);

	/**
	 * Updates a single row in the Expedientes observaciones
	 *
	 * @param expedientes Expedientes
	 * @return Expedientes
	 */
	Expedientes updateObservaciones(Expedientes expedientes);

	Expedientes updateTecnico(Expedientes expediente);

	Expedientes updateNotifResolDesis(Expedientes expedientes);

	Expedientes updateNotifResolucion(Expedientes expedientes);

	Expedientes updateFCierre(Expedientes expedientes);

	List<Expedientes> findInterop();

	List<Expedientes> findAllLikeBandejaPapel0(Expedientes expedientes, TableRequestDto tableRequestDto,
			Boolean startsWith);

	List<Expedientes> findByNumRegBandejaPapel0(Expedientes expedientes, TableRequestDto tableRequestDto,
			Boolean startsWith);

	Expedientes updateAlta(Expedientes expedientes);

	Expedientes updateBaja(Expedientes expedientes);

	Expedientes updateModificacion(Expedientes expedientes);

	Expedientes updateInforme(Expedientes expedientes);

	Expedientes updateRevision(Expedientes expedientes);

	Expedientes updateFResolucion(Expedientes expediente, String senderID);

	Expedientes updateDatosAltaResolConc(Expedientes expediente, String senderID);

	List<Expedientes> findAllLikeRelacionados(Expedientes filterExpedientes, TableRequestDto tableRequestDto,
			boolean b);

	/**
	 * Counts rows in the Expedientes table using like.
	 *
	 * @param expedientes Expedientes
	 * @param startsWith  Boolean
	 * @return Long
	 */
	Long findAllLikeCountRelacionados(Expedientes expedientes, Boolean startsWith);

	Expedientes insertSolicitudInicioOficio(Expedientes expedientes);

	/**
	 * Busca el último expediente de un beneficiario
	 * 
	 * @param filterExpedientes
	 * @return Expedientes
	 */
	Expedientes findBeneficiarioUltimoExp(Expedientes filterExpedientes);

	void updateUrgenciaExpedientebyNumRegistro(BandejaPapel0 bandejaPapel0);

	void updateUrgenciaExpedientebyId(BandejaTelematica bandejaTelematica);

	List<Expedientes> findBanedejaAllLike(Expedientes filterExpedientes, TableRequestDto tableRequestDto, boolean b);

	Long findBanedejaAllLikeCount(Expedientes filterExpedientes, boolean startsWith);

	Expedientes updateExisteInstalacion(Expedientes expediente);

	public List<Expedientes> findExpedientesArchivar();

	public void updateDatosArchivo(Expedientes expediente);

	Expedientes updateResolucionBaja(Expedientes expedientes);

	Solicitantes updateRepresentante(Solicitantes representante, String idExpediente);

	Expedientes updateIdLiquidacion(Expedientes expedientes);

	public void updatePendienteEnvioArchivo(Expedientes expediente);

	Expedientes updateRepresentante(Expedientes exp);
}
