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 com.ejie.ad74a.model.BandejaTelematica;

/**
 * BandejaTelematicaService generated by UDA, 28-mar-2023 10:21:54.
 * 
 * @author UDA
 */

public interface BandejaTelematicaService {

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

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

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

	/**
	 * Deletes a single row in the BandejaTelematica table.
	 *
	 * @param bandejaTelematica BandejaTelematica
	 */
	void remove(BandejaTelematica bandejaTelematica);

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

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

	/**
	 * Filter method in the BandejaTelematica table.
	 *
	 * @param filterBandejaTelematica BandejaTelematica
	 * @param tableRequestDto         TableRequestDto
	 * @param startsWith              Boolean
	 * @return TableResponseDto<BandejaTelematica>
	 */
	TableResponseDto<BandejaTelematica> filter(BandejaTelematica filterBandejaTelematica,
			TableRequestDto tableRequestDto, Boolean startsWith);

	/**
	 * Búsqueda en bandeja telemática join con expedientes y solicitantes
	 * 
	 * @param filterBandejaTelematica
	 * @param tableRequestDto
	 * @param startsWith
	 * @return
	 */
	TableResponseDto<BandejaTelematica> filterComplete(BandejaTelematica filterBandejaTelematica,
			TableRequestDto tableRequestDto, Boolean startsWith);

	List<BandejaTelematica> bandejaTelematicaComplete(BandejaTelematica filterBandejaTelematica,
			TableRequestDto tableRequestDto);

	/**
	 * Searches rows in the BandejaTelematica table.
	 *
	 * @param filterBandejaTelematica BandejaTelematica
	 * @param searchBandejaTelematica BandejaTelematica
	 * @param tableRequestDto         TableRequestDto
	 * @param startsWith              Boolean
	 * @return List<TableRowDto<BandejaTelematica>>
	 */
	List<TableRowDto<BandejaTelematica>> search(BandejaTelematica filterBandejaTelematica,
			BandejaTelematica searchBandejaTelematica, TableRequestDto tableRequestDto, Boolean startsWith);

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

	/*
	 * OPERACIONES RUP_TABLE JERARQUIA
	 */

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

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

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

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

	BandejaTelematica procesarEntrada(BandejaTelematica bandejaTelematica) throws Throwable;
}
