package com.ejie.m62fb.service.registroVPP;


import java.util.List;

import org.springframework.transaction.annotation.Transactional;

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

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

public interface ContratoAlquileradService {

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

	/**
	 * Deletes 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<ContratoAlquilerad>
	 */
	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<ContratoAlquilerad>
	 */
	List<ContratoAlquilerad> findAllLike(ContratoAlquilerad contratoAlquilerad, JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Filter method in the ContratoAlquilerad table.
	 *
	 * @param filterContratoAlquilerad ContratoAlquilerad
	 * @param jqGridRequestDto JQGridRequestDto
	 * @param startsWith Boolean
	 * @return JQGridResponseDto<ContratoAlquilerad>
	 */	
	JQGridResponseDto<ContratoAlquilerad> filter(ContratoAlquilerad filterContratoAlquilerad, JQGridRequestDto jqGridRequestDto,  Boolean startsWith);
    
    /**
	 * Reorder the selection made in ContratoAlquilerad table.
	 *
	 * @param filterContratoAlquilerad ContratoAlquilerad
	 * @param jqGridRequestDto JQGridRequestDto
	 * @param startsWith Boolean
	 * @return Object
	 */	
    Object reorderSelection(ContratoAlquilerad filterContratoAlquilerad, JQGridRequestDto jqGridRequestDto, Boolean startsWith);

    
	
	/**
	 * 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
	 */
	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
	 */
	Integer validarFechaFinContrato(ContratoAlquilerad contratoAlquilerAd);
	 /**
	 * 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 Siguiente n&uacute;mero de contrato
	 */
	Integer findNumContratoMaxMasUno(Integer idAlojReg);
}


