package com.ejie.ab63.dao;

import java.util.List;

import com.ejie.ab63.model.Establecimiento;
import com.ejie.ab63.model.inicio.InitForm;
import com.ejie.x38.dto.JQGridRequestDto;
import com.ejie.x38.dto.JerarquiaDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * Ab6301s00Dao  
 * 
 *  
 */

public interface EstablecimientoDao {

	/**
	 * Inserts a single row in the Ab6301s00 table.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 * @return Ab6301s00
	 */
	Establecimiento add(Establecimiento ab6301s00);

	/**
	 * Updates a single row in the Ab6301s00 table.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 * @return Ab6301s00
	 */
	Establecimiento update(Establecimiento ab6301s00);

	/**
	 * Finds a single row in the Ab6301s00 table.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 * @return Ab6301s00
	 */
	Establecimiento find(Establecimiento ab6301s00);

	/**
	 * Finds a single row in the Ab6301s00 table.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 * @return Ab6301s00
	 */
	Establecimiento findByIdenticadorEstablecimiento(Establecimiento ab6301s00);

	/**
	 * Removes a single row in the Ab6301s00 table.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 */
	void remove(Establecimiento ab6301s00);

	/**
	 * Finds a List of rows in the Ab6301s00 table.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List
	 */
	List<Establecimiento> findAll(Establecimiento ab6301s00, JQGridRequestDto jqGridRequestDto);

	/**
	 * Finds rows in the Ab6301s00 table using like.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List
	 */
	List<Establecimiento> findAllLike(Establecimiento ab6301s00, JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Filter in the Ab6301s00 table.
	 *
	 * @param filterAb6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 */
	void removeMultiple(Establecimiento filterAb6301s00, JQGridRequestDto jqGridRequestDto, Boolean startsWith);

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

	/**
	 * Counts rows in the Ab6301s00 table.
	 *
	 * @param ab6301s00
	 *            Ab6301s00
	 * @return Long
	 */
	Long findAllCount(Establecimiento ab6301s00);

	/**
	 * Reorder selection.
	 *
	 * @param filterAb6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<TableRowDto<Ab6301s00>>
	 */
	List<TableRowDto<Establecimiento>> reorderSelection(Establecimiento filterAb6301s00,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/**
	 * Searches in the Usuario table.
	 *
	 * @param filterAb6301s00
	 *            Ab6301s00
	 * @param searchAb6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return List<TableRowDto<Ab6301s00>>
	 */
	List<TableRowDto<Establecimiento>> search(Establecimiento filterAb6301s00, Establecimiento searchAb6301s00,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE JERARQUIA
	 */

	/**
	 * Filter in the hierarchical Ab6301s00 table.
	 *
	 * @param filterAb6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<JerarquiaDto<Ab6301s00>>
	 */
	List<JerarquiaDto<Establecimiento>> findAllLikeJerarquia(Establecimiento filterAb6301s00,
			JQGridRequestDto jqGridRequestDto);

	/**
	 * Count rows in hierarchy
	 *
	 * @param filterAb6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return Long
	 */
	Long findAllLikeCountJerarquia(Establecimiento filterAb6301s00, JQGridRequestDto jqGridRequestDto);

	/**
	 * Find dependent hierarchical rows
	 *
	 * @param filterAb6301s00
	 *            Ab6301s00
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<TableRowDto<Ab6301s00>>
	 */
	List<TableRowDto<Establecimiento>> findAllChild(Establecimiento filterAb6301s00, JQGridRequestDto jqGridRequestDto);

	Boolean establecerFechaBaja(String identificador, String usuario);

	String getNewIntetificador(String tipoRegistro, String tipoEstablecimiento, String zona);

	Establecimiento findEstablecimientoByIdExpediente(Integer idExpediente);

	/**
	 * Actualiza los campos que se visualizan en la subpestana caracteristicas
	 * del establecimiento de la pestana datos especificos
	 * 
	 * @param ab6301s00
	 * @return
	 */
	Establecimiento updateDatosEspecificosEstablecimiento(Establecimiento establecimiento);

	/**
	 * Actualiza los campos que se visualizan en la subpestana caracteristicas
	 * del establecimiento de la pestana datos especificos
	 * 
	 * @param ab6301s00
	 * @return
	 */
	Establecimiento updateDatosEspecificosEstablecimientoData(Establecimiento establecimiento);

	/**
	 * Actualiza los campos que se visualizan en la subpestana dispensas del
	 * establecimiento de la pestana datos especificos
	 * 
	 * @param ab6301s00
	 * @return
	 */
	Establecimiento updateDatosEspecificosDispensasEstablecimiento(Establecimiento establecimiento);

	Establecimiento updateDatosEmpresaEstablecimiento(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEmpresaEstablecimientoData(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEmpresaDireccion(Establecimiento establecimiento);

	Boolean isEsencialChange(InitForm initForm);

	Long checkRefCatastral(Establecimiento establecimiento);

	Boolean canChangeIdentifiadorExp(Integer idExpediente);

	void disableChangeIdentifiadorExp(Integer idExpediente);

	Establecimiento updateEstablecimientoDescNombre(Establecimiento establecimiento);

	Establecimiento updateDatosEspecificosEstablecimientoFranquicia(Establecimiento establecimiento) throws Exception;

	List<Establecimiento> findEstablecimientoByOfiPpal(Establecimiento ab6301s00, JQGridRequestDto jqGridRequestDto,
			Boolean startsWith, Boolean notPrincipalesFilter);

	Long findEstablecimientoByOfiPpalCount(Establecimiento ab6301s00, Boolean startsWith, Boolean flagSucursalesPvBaja);

	Establecimiento updateDatosEspecificosEstablecimientoDataCamping(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEspecificosEstablecimientoCamping(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEspecificosEstablecimientoDataHotel(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEspecificosEstablecimientoHotel(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEspecificosEstablecimientoDataApto(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEspecificosEstablecimientoDataAlbergue(Establecimiento establecimiento) throws Exception;

	Establecimiento addDatosEmpresaDireccion(Establecimiento establecimiento);

	Establecimiento updateDatosEstablecimientoAgencia(Establecimiento establecimiento) throws Exception;

	Establecimiento updateDatosEspecificosEstablecimientoDataCasaRural(Establecimiento establecimiento)
			throws Exception;

	Establecimiento getDatosOficinaPpalAAVV(String numCie);

	List<Establecimiento> findSucursalesOficinaPrincipal(Integer idEstablecimiento);

	void updateCamposS41(Establecimiento establecimiento);
}
