package br.com.ec.controller.managedbean;
import java.io.Serializable;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.domain.dto.ParametrosFecharCaixaDTO;
import br.com.ec.domain.dto.ParametrosReceberCaixaDTO;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Venda;
import br.com.ec.domain.model.tipos.TipoSituacaoVenda;
import br.com.ec.domain.service.automatizador.AutomatizadorService;
import br.com.ec.domain.service.fecharcaixa.FecharCaixaService;
import br.com.ec.domain.service.venda.VendaService;
import br.com.ec.web.exception.VerificadorLancamentoException;
import br.com.ec.web.exception.VerificadorLancamentoException.CommandBean;
import br.com.ec.web.generic.AbstractBean;
import br.com.ec.web.message.LancadorMensagem;
@Named
@Scope
("view")
public class ReceberCaixaBean
extends AbstractBean
<Object> implements Serializable {
private static final long serialVersionUID = 1L
;
private AutomatizadorService automatizadorService
;
private FecharCaixaService fecharCaixaService
;
private VendaService vendaService
;
private ParametrosReceberCaixaDTO parametrosReceberCaixa
;
private ParametrosFecharCaixaDTO parametrosFecharCaixa
;
@Inject
public ReceberCaixaBean
(AutomatizadorService automatizadorService, FecharCaixaService fecharCaixaService, VendaService vendaService
) {
this.
automatizadorService = automatizadorService
;
this.
fecharCaixaService = fecharCaixaService
;
this.
vendaService = vendaService
;
}
@
Override
public void preCarregamento
() {
parametrosReceberCaixa =
new ParametrosReceberCaixaDTO
();
parametrosFecharCaixa =
new ParametrosFecharCaixaDTO
();
}
@
Override
public void limparEntidade
() {}
@
Override
public GenericService
<Object> getService
() {
return null;
}
@
Override
public Object getEntidade
() {
return entidade
;
}
@
Override
public Object getId
() {
return getEntidade
();
}
public ParametrosReceberCaixaDTO getParametrosReceberCaixa
() {
return parametrosReceberCaixa
;
}
public void setParametrosReceberCaixa
(ParametrosReceberCaixaDTO parametrosReceberCaixa
) {
this.
parametrosReceberCaixa = parametrosReceberCaixa
;
}
public ParametrosFecharCaixaDTO getParametrosFecharCaixa
() {
return parametrosFecharCaixa
;
}
public void setParametrosFecharCaixa
(ParametrosFecharCaixaDTO parametrosFecharCaixa
) {
this.
parametrosFecharCaixa = parametrosFecharCaixa
;
}
/********************************************************************/
public void prepararRecebimentoCaixa
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
getParametrosReceberCaixa
().
setValorRecebimentoEmDinheiro(automatizadorService.
calcularReceberDia(getParametrosReceberCaixa
().
getLoja(), getParametrosReceberCaixa
().
getDataRecebimento()));
getParametrosReceberCaixa
().
setContaBancariaRecebimento(null);
setParametrosFecharCaixa
(new ParametrosFecharCaixaDTO
(getParametrosReceberCaixa
().
getLoja(), getParametrosReceberCaixa
().
getDataRecebimento()));
setParametrosFecharCaixa
(fecharCaixaService.
iniciarFechamentoCaixa(getParametrosFecharCaixa
()));
}
});
}
public void realizarRecebimentoCaixa
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
automatizadorService.
finalizarReceberDia(getParametrosReceberCaixa
());
prepararRecebimentoCaixa
();
LancadorMensagem.
lancarSucesso("RECEBIMENTO REALIZADO COM SUCESSO");
}
});
}
public Boolean temVendasConferidasOuNovas
() {
for (Venda venda : getParametrosFecharCaixa
().
getListaVendas()) {
if (venda.
getTipoSituacao().
equals(TipoSituacaoVenda.
NOVO.
getValor()) || venda.
getTipoSituacao().
equals(TipoSituacaoVenda.
CONFERIDO.
getValor())) {
return true;
}
}
return false;
}
public Boolean todasVendasConferidas
(Loja loja
) {
Venda venda =
new Venda
();
venda.
setTipoSituacao(TipoSituacaoVenda.
NOVO.
getValor());
if (vendaService.
obterQuantidadeDeVendasPorLojaEePeriodo(venda, DataUtils.
getDataAtual(), DataUtils.
getDataAtual()) > 0) {
return false;
}
return true;
}
}