package com.ejie.m62fb.service.registroVPP;

import java.util.Date;
import java.util.List;

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

/**
 * ContratoAlquilerService generated by UDA, 20-oct-2015 12:04:31.
 * 
XXXX
 */

public interface ContratoAlquilerService {

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

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

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

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

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

	/**
	 * Filter method in the ContratoAlquiler table.
	 * 
	 * @param filterContratoAlquiler
	 *            ContratoAlquiler
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return JQGridResponseDto<ContratoAlquiler>
	 */
	JQGridResponseDto<ContratoAlquiler> filter(
			ContratoAlquiler filterContratoAlquiler,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/**
	 * Reorder the selection made in ContratoAlquiler table.
	 * 
	 * @param filterContratoAlquiler
	 *            ContratoAlquiler
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return Object
	 */
	Object reorderSelection(ContratoAlquiler filterContratoAlquiler,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/**
	 * Funcion que calcula la fecha fin prorroga forzosa teniendo en cuenta la
	 * fecha inicio, fecha fin y fecha entrada.
	 * 
	 * @param fecInicio
	 *            Date
	 * @param fecFin
	 *            Date
	 * @param fecEntrada
	 *            Date
	 * @return Date
	 */
	Date calcFecFinProrForzosa(Date fecInicio, Date fecFin, Date fecEntrada);

	/**
	 * 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 contratoAlquiler
	 *            ContratoAlquiler
	 * @return String
	 */
	String validarFechasIniFin(ContratoAlquiler contratoAlquiler);

	/**
	 * Si estamos modificando el ultimo contrato de la vivienda, 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 contratoAlquiler
	 *            ContratoAlquiler
	 * @return Integer
	 */
	Integer validarFechaFinContrato(ContratoAlquiler contratoAlquiler);
}
