package com.ejie.m62fb.dao.registroVPP;

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

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

/**
 * ElementosDao
XXXX
 */

public interface ElementosDao {
	/**
     * <p>Comprobar que el anejo no esté dado de alta ya en el sistema</p>
     *
     * @param elemento Elemento
     * @return boolean
     */
    boolean existenContratos(Elemento elemento);
    /**
     * <p>Vincular un elemento a una vivienda</p>
     *
     * @param ideElemento BigDecimal
     * @param numVivienda BigDecimal
     * @return boolean
     */
    boolean vincularElemento(BigDecimal ideElemento, BigDecimal numVivienda);
    /**
     * <p>Desvincular un elemento a una vivienda</p>
     *
     * @param ideElemento BigDecimal
     * @return boolean
     */
    boolean desvincularElemento(BigDecimal ideElemento,BigDecimal  numVivienda);
    /**
     * Inserts a single row in the M62r12t0 table.
     *
     * @param elemento Elemento
     * @return Elemento
     */
    Elemento add(Elemento elemento);

    /**
     * Updates a single row in the M62r12t0 table.
     *
     * @param elemento Elemento
     * @return Elemento
     */
    Elemento update(Elemento elemento);

    /**
     * Finds a single row in the M62r12t0 table.
     *
     * @param elemento Elemento
     * @return Elemento
     */
    Elemento find(Elemento elemento);

    /**
     * Removes a single row in the M62r12t0 table.
     *
     * @param elemento Elemento
     */
    void remove(Elemento elemento);

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

	/**
     * Finds rows in the M62r12t0 table using like.
     *
     * @param elemento Elemento
     * @param jqGridRequestDto JQGridRequestDto
     * @param startsWith Boolean
     * @return List
     */
	List<Elemento> findAllLike(Elemento elemento, JQGridRequestDto jqGridRequestDto, Boolean startsWith);
	
	
    /**
     * Counts rows in the M62r12t0 table using like.
     *
     * @param elemento Elemento
     * @param startsWith Boolean
     * @return Long
     */
    Long findAllLikeCount(Elemento elemento, Boolean startsWith);
    
    /**
     * Counts rows in the M62r12t0 table.
     *
     * @param elemento Elemento
     * @return Long
     */
    Long findAllCount(Elemento elemento);
    
    /**
	 * Reorder selection.
	 *
	 * @param filterElemento Elemento
	 * @param jqGridRequestDto JQGridRequestDto
	 * @param startsWith Boolean
	 * @return List<TableRowDto<Elemento>>
	 */	
    List<TableRowDto<Elemento>> reorderSelection(Elemento filterElemento, JQGridRequestDto jqGridRequestDto, Boolean startsWith);
    
    /**
     * <p>Comprobar que el anejo no esté dado de alta ya en el sistema</p>
     *
     * @param elemento Elemento
     * @return boolean
     */
    boolean hayElementoMismoEmplazamiento(Elemento elemento);
  
    /**
     * 
     * @param elemento
     * @return
     */
    public Elemento findForUpdate(Elemento elemento);

	/**
	 * Busca el elemento de la vivienda y el tipo dado. Si no se informa alguno
	 * de los dos datos no realiza la busqueda.
	 * 
	 * Solo deveria de devolver un unico registro, si no, falla
	 * 
	 * @param numVivienda
	 *            BigDecimal
	 * @param tipoElemento
	 *            String
	 * 
	 * @return Elemento
	 */
	public Elemento findByNumViviendaAndTipoElemento(BigDecimal numVivienda,
			String tipoElemento);
}

