package com.ejie.m62fb.service.registroVPP;

import java.util.List;

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

/**
 * ContratoAlquilerElementoService generated by UDA, 09-dic-2015 10:41:39.
 * 
XXXX
 */

public interface ContratoAlquilerElementoService {

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

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

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

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

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

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

	/*
	 * OPERACIONES RUP_TABLE
	 */

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

	/**
	 * Reorder the selection made in ContratoAlquilerElemento table.
	 * 
	 * @param filterContratoAlquilerElemento
	 *            ContratoAlquilerElemento
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @param startsWith
	 *            Boolean
	 * @return Object
	 */
	Object reorderSelection(
			ContratoAlquilerElemento filterContratoAlquilerElemento,
			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 contratoAlquilerElemento
	 *            ContratoAlquilerElemento
	 * @return String
	 */
	String validarFechasIniFin(ContratoAlquilerElemento contratoAlquilerElemento);

	/**
	 * 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 contratoAlquilerElemento
	 *            ContratoAlquilerElemento
	 * @return String
	 */
	Integer validarFechaFinContrato(
			ContratoAlquilerElemento contratoAlquilerElemento);
}