package com.ejie.m62fb.dao.registroVPP;

import java.math.BigDecimal;
import java.util.List;

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

/**
 * ContratoAlquilerElementoDao generated by UDA, 09-dic-2015 10:41:38.
 * 
XXXX
 */

public interface ContratoAlquilerElementoDao {

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

	/**
	 * FindForUpdate
	 * 
	 * @param contratoAlquilerElemento
	 *            ContratoAlquilerElemento
	 * @return ContratoAlquilerElemento
	 */
	ContratoAlquilerElemento findForUpdate(
			ContratoAlquilerElemento contratoAlquilerElemento);

	/**
	 * Removes 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
	 */
	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
	 */
	List<ContratoAlquilerElemento> findAllLike(
			ContratoAlquilerElemento contratoalquilerelemento,
			JQGridRequestDto jqGridRequestDto, Boolean startsWith);

	/*
	 * OPERACIONES RUP_TABLE
	 */

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

	/**
	 * Counts rows in the ContratoAlquilerElemento table.
	 * 
	 * @param contratoalquilerelemento
	 *            ContratoAlquilerElemento
	 * @return Long
	 */
	Long findAllCount(ContratoAlquilerElemento contratoalquilerelemento);

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

	/**
	 * Returns a BigDecimal. Máximo ID_CONTRATO_ALQ que hay para un elemento en
	 * la tabla CONTRATO_ALQUILER_ELEMENTO e incrementandolo en 1.
	 * 
	 * @param idElemento
	 *            BigDecimal
	 * @return BigDecimal
	 */
	BigDecimal findIdContratoAlquilerMaxMasUno(BigDecimal idElemento);

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

	/**
	 * Updates a single row in the ContratoAlquilerElemento table.
	 * 
	 * @param contratoAlquilerElemento
	 *            ContratoAlquilerElemento
	 * @param idContratoAlquiler
	 *            Integer
	 * @return ContratoAlquilerElemento
	 */
	ContratoAlquilerElemento updateFecFinContratoAnterior(
			ContratoAlquilerElemento contratoAlquilerElemento,
			Integer idContratoAlquiler);
}
