package com.rjconsultores.ventaboletos.dao;

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

import com.rjconsultores.ventaboletos.entidad.Conferencia;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.LogConferencia;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.vo.comissao.BoletoComissao;
import com.rjconsultores.ventaboletos.vo.comissao.ConferenciaComissaoVO;
import com.rjconsultores.ventaboletos.vo.comissao.DiaConferenciaComissaoVO;
import com.rjconsultores.ventaboletos.vo.comissao.EventosFinanceirosVO;
import com.rjconsultores.ventaboletos.vo.comissao.LogConferenciaVO;
import com.rjconsultores.ventaboletos.vo.comissao.OcdVO;

public interface ConferenciaComissaoDAO extends GenericDAO<Conferencia, Long> {

	public Conferencia suscribirOrActualizacion(Conferencia entidad);

	public List<ConferenciaComissaoVO> carregarConferenciaComissao(String competencia, Empresa empresa, PuntoVenta puntoVenta, Date dataMovimento, boolean isDesconsideraPtVendaFechados ) throws BusinessException;

	public List<ConferenciaComissaoVO> carregarConferenciaComissao(Date dataInicial, Date dataFinal, Empresa empresa, PuntoVenta puntoVenta, Date dataMovimento, boolean isDesconsideraPtVendaFechados) throws BusinessException;

	public Conferencia confirmarChegadaMalote(Conferencia conferencia) throws BusinessException;

	public Conferencia encerrarMovimentoDiario(Conferencia conferencia) throws BusinessException;

	public List<EventosFinanceirosVO> carregarEventosFinanceiros(Conferencia conferencia) throws BusinessException;

	public List<LogConferenciaVO> carregarLogConferencia(Conferencia conferencia) throws BusinessException;

	public LogConferencia suscribirLogConferencia(LogConferencia logConferencia) throws BusinessException;

	public void borrarLogConferencia(LogConferencia logConferencia) throws BusinessException;

	public LogConferencia obtenerLogConferenciaID(Long logconferenciaId);

	public List<BoletoComissao> carregarBilhetesComissao(Conferencia conferencia, boolean isCalculoComissao, boolean ehConsultaComissao) throws BusinessException;
	
	public List<OcdVO> carregarOcds(Conferencia conferencia) throws BusinessException;

	public Conferencia reabrirMovimentoDiario(Conferencia conferencia) throws BusinessException;

	public Conferencia obtenerConferenciaDataMovimento(Date datamovimento, Integer puntoventaId, Integer empresaId) throws BusinessException;

	public List<LogConferencia> carregarLogConferencia(Long conferenciaId) throws BusinessException;

	public boolean isConferenciaCompetenciaEncerrada(String competencia, Empresa empresa, PuntoVenta puntoVenta, boolean isDesconsideraPtVendaFechados) throws BusinessException;

	public BigDecimal carregarValorDepositoContaCorrente(Integer empresaId, Integer puntoventaId, Date datamovimento);

	public DiaConferenciaComissaoVO carregarConferenciaRegistrada(Date datamovimento, Empresa empresa, PuntoVenta puntoVenta) throws BusinessException;

	public Conferencia cancelarChegadaMalote(Conferencia conferencia);

	public boolean isConferidoVenta(BoletoComissao boletoComissao);
	
	public void borrarLogConferenciaTransacaoId(Long transacaoId) throws BusinessException;
	
	public boolean isConferenciaCompetenciaEncerrada(Date dataInicial, Date dataFinal, Empresa empresa, PuntoVenta puntoVenta, boolean isDesconsideraPtVendaFechados) throws BusinessException;
	
	public boolean isConfMovFPTrocaVlrDeposito(Empresa empresa);
	
	public BigDecimal getComissaoPuntoVenta(Integer puntoventaId, Integer empresaId, Date dataInicial, Date dataFinal) throws BusinessException;
}
