package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.chart.LineChartModel;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.ConsolidadoGestaoDTO;
import br.com.ec.domain.dto.DetalhamentoCaixaDTO;
import br.com.ec.domain.dto.FluxoDeCaixaCategoriaDTO;
import br.com.ec.domain.dto.FluxoDeCaixaDTO;
import br.com.ec.domain.dto.ParametrosConsultaLancamentosDTO;
import br.com.ec.domain.dto.ProvisaoCaixaDTO;
import br.com.ec.domain.model.Categoria;
import br.com.ec.domain.model.Orcamento;
import br.com.ec.domain.model.Parcela;
import br.com.ec.domain.model.tipos.TipoCategoria;
import br.com.ec.domain.service.acompanhamento.AcompanhamentoService;
import br.com.ec.domain.service.orcamento.OrcamentoService;
import br.com.ec.domain.service.parcela.ParcelaService;
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 FluxoDeCaixaBean
extends AbstractBean
<ConsolidadoGestaoDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private FluxoDeCaixaDTO fluxoDeCaixa
;
private List<FluxoDeCaixaCategoriaDTO
> receitas
;
private List<FluxoDeCaixaCategoriaDTO
> despesas
;
private List<Parcela
> parcelas
;
private LineChartModel graficoCaixa
;
private List<DetalhamentoCaixaDTO
> provisaoDetalhamentoCaixa
;
private Orcamento orcamento
;
private AcompanhamentoService acompanhamentoService
;
private ParcelaService parcelaService
;
private OrcamentoService orcamentoService
;
@Inject
public FluxoDeCaixaBean
(AcompanhamentoService acompanhamentoService, ParcelaService parcelaService, OrcamentoService orcamentoService
) {
this.
acompanhamentoService = acompanhamentoService
;
this.
parcelaService = parcelaService
;
this.
orcamentoService = orcamentoService
;
}
@
Override
public void limparEntidade
() {
setEntidade
(new ConsolidadoGestaoDTO
());
}
@
Override
public GenericService
<ConsolidadoGestaoDTO
> getService
() {
return null;
}
@
Override
public ConsolidadoGestaoDTO getEntidade
() {
return entidade
;
}
@
Override
public ConsolidadoGestaoDTO getId
() {
return getEntidade
();
}
public FluxoDeCaixaDTO getFluxoDeCaixa
() {
return fluxoDeCaixa
;
}
public void setFluxoDeCaixa
(FluxoDeCaixaDTO fluxoDeCaixa
) {
this.
fluxoDeCaixa = fluxoDeCaixa
;
}
public List<FluxoDeCaixaCategoriaDTO
> getReceitas
() {
return receitas
;
}
public void setReceitas
(List<FluxoDeCaixaCategoriaDTO
> receitas
) {
this.
receitas = receitas
;
}
public List<FluxoDeCaixaCategoriaDTO
> getDespesas
() {
return despesas
;
}
public void setDespesas
(List<FluxoDeCaixaCategoriaDTO
> despesas
) {
this.
despesas = despesas
;
}
public List<Parcela
> getParcelas
() {
return parcelas
;
}
public void setParcelas
(List<Parcela
> parcelas
) {
this.
parcelas = parcelas
;
}
public Double getTotalValoresParcelas
() {
Double valorTotal =
new Double(0.0);
if (VerificadorUtil.
naoEstaNuloOuVazio(getParcelas
())) {
for (Parcela parcela : getParcelas
()) {
valorTotal = valorTotal + parcela.
getValor();
}
}
return valorTotal
;
}
public LineChartModel getGraficoCaixa
() {
return graficoCaixa
;
}
public void setGraficoCaixa
(LineChartModel graficoCaixa
) {
this.
graficoCaixa = graficoCaixa
;
}
public List<DetalhamentoCaixaDTO
> getProvisaoDetalhamentoCaixa
() {
return provisaoDetalhamentoCaixa
;
}
public void setProvisaoDetalhamentoCaixa
(List<DetalhamentoCaixaDTO
> provisaoDetalhamentoCaixa
) {
this.
provisaoDetalhamentoCaixa = provisaoDetalhamentoCaixa
;
}
public Orcamento getOrcamento
() {
return orcamento
;
}
public void setOrcamento
(Orcamento orcamento
) {
this.
orcamento = orcamento
;
}
/********************************************************************/
@
Override
public void preCarregamento
() {
try {
setFluxoDeCaixa
(new FluxoDeCaixaDTO
(DataUtils.
getPrimeiroDiaDoMesAtual(), DataUtils.
getUltimoDiaDoMesAtual()));
consultarFluxoDeCaixa
();
} catch (Exception e
) {
e.
printStackTrace();
}
}
public void consultarFluxoDeCaixa
() {
setFluxoDeCaixa
(acompanhamentoService.
consultarFluxoDeCaixa(getFluxoDeCaixa
()));
setReceitas
(acompanhamentoService.
consultarFluxoDeCaixaPorCategoria(getFluxoDeCaixa
(), TipoCategoria.
RECEITAS.
getValor()));
setDespesas
(acompanhamentoService.
consultarFluxoDeCaixaPorCategoria(getFluxoDeCaixa
(), TipoCategoria.
DESPESAS.
getValor()));
}
public void consultarProvisaoCaixa
() {
ProvisaoCaixaDTO provisaoCaixa = acompanhamentoService.
consultarGraficoCaixa(getFluxoDeCaixa
().
getDataInicial(), getFluxoDeCaixa
().
getDataFinal());
setGraficoCaixa
(provisaoCaixa.
getGrafico());
setProvisaoDetalhamentoCaixa
(provisaoCaixa.
getDetalhamentos());
}
public Double getValorTotalReceitas
() {
Double valorTotal =
new Double(0.0);
for (FluxoDeCaixaCategoriaDTO filhas : getReceitas
()) {
valorTotal = valorTotal + filhas.
getValor();
}
return valorTotal
;
}
public Double getValorTotalDespesas
() {
Double valorTotal =
new Double(0.0);
for (FluxoDeCaixaCategoriaDTO filhas : getDespesas
()) {
valorTotal = valorTotal + filhas.
getValor();
}
return valorTotal
;
}
public Double getValorTotalReceitasFuturas
() {
Double valorTotalFuturo =
new Double(0.0);
for (FluxoDeCaixaCategoriaDTO filhas : getReceitas
()) {
valorTotalFuturo = valorTotalFuturo + filhas.
getValorFuturo();
}
return valorTotalFuturo
;
}
public Double getValorTotalDespesasFuturas
() {
Double valorTotalFuturo =
new Double(0.0);
for (FluxoDeCaixaCategoriaDTO filhas : getDespesas
()) {
valorTotalFuturo = valorTotalFuturo + filhas.
getValorFuturo();
}
return valorTotalFuturo
;
}
public Double getValorTotalReceitasOrcadas
() {
Double valorTotalOrcado =
new Double(0.0);
for (FluxoDeCaixaCategoriaDTO filhas : getReceitas
()) {
valorTotalOrcado = valorTotalOrcado + filhas.
getValorOrcado();
}
return valorTotalOrcado
;
}
public Double getValorTotalDespesasOrcadas
() {
Double valorTotalOrcado =
new Double(0.0);
for (FluxoDeCaixaCategoriaDTO filhas : getDespesas
()) {
valorTotalOrcado = valorTotalOrcado + filhas.
getValorOrcado();
}
return valorTotalOrcado
;
}
public List<Parcela
> consultarLancamentosParcela
(Categoria categoria, Categoria categoriaPai,
String tipoConta
) {
ParametrosConsultaLancamentosDTO parcelaConsulta =
new ParametrosConsultaLancamentosDTO
();
parcelaConsulta.
setDataInicial(getFluxoDeCaixa
().
getDataInicial());
parcelaConsulta.
setDataFinal(getFluxoDeCaixa
().
getDataFinal());
parcelaConsulta.
setCentroDeCustos(getFluxoDeCaixa
().
getCentroDeCustos());
parcelaConsulta.
setCategoria(categoria
);
parcelaConsulta.
setCategoriaPai(categoriaPai
);
parcelaConsulta.
setTipoBusca(tipoConta
);
return parcelaService.
consultarParcelas(parcelaConsulta
);
}
public void prepararGerirOrcado
(final FluxoDeCaixaDTO fluxo,
final Categoria categoriaPai,
final Categoria categoria
) {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
setOrcamento
(orcamentoService.
prepararGerirOrcado(fluxo, categoriaPai, categoria
));
}
});
}
public void cadastrarOrcamento
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
orcamentoService.
atualizarOrcamento(getOrcamento
());
consultarFluxoDeCaixa
();
LancadorMensagem.
lancarSucesso("ORÇAMENTO ATUALIZADO COM SUCESSO!");
}
});
}
}