package com.ejie.m62fb.dao.registroVPP;

import java.util.List;

import com.ejie.m62fb.model.ContratoAlquiler;
import com.ejie.m62fb.model.ContratoAlquilerad;
import com.ejie.x38.dto.JQGridRequestDto;
import com.ejie.x38.dto.TableRowDto;

/**
 * ContratoAlquileradDao generated by UDA, 08-oct-2015 9:02:54.
XXXX
 */

public interface ContratoAlquileradDao {
    
    /**
     * Inserts a single row in the ContratoAlquilerad table.
     *
     * @param contratoalquilerad ContratoAlquilerad
     * @return ContratoAlquilerad
     */
    ContratoAlquilerad add(ContratoAlquilerad contratoalquilerad);

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

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

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

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

	/**
     * Finds rows in the ContratoAlquilerad table using like.
     *
     * @param contratoalquilerad ContratoAlquilerad
     * @param jqGridRequestDto JQGridRequestDto
     * @param startsWith Boolean
     * @return List
     */
	List<ContratoAlquilerad> findAllLike(ContratoAlquilerad contratoalquilerad, JQGridRequestDto jqGridRequestDto, Boolean startsWith);
	
	
	/*
	 * OPERACIONES RUP_TABLE
	 */
	 
    /**
     * Counts rows in the ContratoAlquilerad table using like.
     *
     * @param contratoalquilerad ContratoAlquilerad
     * @param startsWith Boolean
     * @return Long
     */
    Long findAllLikeCount(ContratoAlquilerad contratoalquilerad, Boolean startsWith);
    
    /**
     * Counts rows in the ContratoAlquilerad table.
     *
     * @param contratoalquilerad ContratoAlquilerad
     * @return Long
     */
    Long findAllCount(ContratoAlquilerad contratoalquilerad);
    
    /**
	 * Reorder selection.
	 *
	 * @param filterContratoAlquilerad ContratoAlquilerad
	 * @param jqGridRequestDto JQGridRequestDto
	 * @param startsWith Boolean
	 * @return List<TableRowDto<ContratoAlquilerad>>
	 */	
    List<TableRowDto<ContratoAlquilerad>> reorderSelection(ContratoAlquilerad filterContratoAlquilerad, JQGridRequestDto jqGridRequestDto, Boolean startsWith);

    /**
	 * Returns a Integer. Máximo NUM_CONTRATO que hay para un alojamiento en
	 * la tabla CONTRATO_ALQUILERAD e incrementandolo en 1.
	 * 
	 * @param idAlojReg
	 *            Integer
	 * @return Integer
	 */
	Integer findNumContratoMaxMasUno(Integer idAlojReg);

	/**
	 * Funcion que valida la coherencia entre las fechas inicio y fin. Consulta
	 * si estamos en el ultimo contrato. Si estamos en el ultimo contrato, la
	 * fecha inicio debe ser mayor que la fecha inicio del resto de contratos.
	 * Si no estamos en el ultimo contrato, hay que comprobar el rango de fechas
	 * inicio/fin.
	 * 
	 * @param contratoAlquilerad
	 *            ContratoAlquilerad
	 * @return String
	 */
	public String validarFechasIniFin(ContratoAlquilerad contratoAlquilerad);

	/**
	 * Si estamos modificando el ultimo contrato del alojamiento dotacional, se valida si
	 * debemos modificar la fecha fin del contrato anterior, bien porque este
	 * sea nulo o sea superior a la fecha inicio de nuestro contrato, con el día
	 * anterior a la fecha de inicio de nuestro contrato.
	 * 
	 * @param contratoAlquilerad
	 *            ContratoAlquilerad
	 * @return Integer
	 */
	public Integer validarFechaFinContrato(ContratoAlquilerad contratoAlquilerad);

	/**
	 * Modificación del contrato anterior. Se actualiza la Fecha Fin, restando
	 * un día a la Fecha Inicio del contrato que estamos modificando.
	 * 
	 * @param contratoAlquilerad
	 *            ContratoAlquiler
	 * @param idContrato
	 *            Integer
	 * @return ContratoAlquilerad
	 */
	public ContratoAlquilerad updateFecFinContratoAnterior(
			ContratoAlquilerad contratoAlquilerad, Integer idContrato);
	
	/**
	 * Finds a single row in the ContratoAlquilerad table.
	 * 
	 * @param contratoAlquilerad
	 *            ContratoAlquilerad
	 * @return ContratoAlquilerad
	 */
	ContratoAlquilerad findForUpdate(ContratoAlquilerad contratoAlquilerad);
    
}

