package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.springframework.context.annotation.Scope;
import br.com.ec.domain.dto.FluxoDeCaixaDTO;
import br.com.ec.domain.dto.QuadroResumosDTO;
import br.com.ec.domain.model.AvaliacaoLoja;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.service.acompanhamento.AcompanhamentoService;
import br.com.ec.domain.service.avaliacaoloja.AvaliacaoLojaService;
import br.com.ec.domain.service.loja.LojaService;
import br.edu.cesmac.core.consulta.ParametrosConsulta;
import br.edu.cesmac.core.generic.GenericService;
import br.edu.cesmac.core.util.DataUtils;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.web.generic.AbstractBean;
@Named
@Scope
("view")
public class QuadroResumoBean
extends AbstractBean
<QuadroResumosDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private Date dataInicial
;
private Date dataFinal
;
private FluxoDeCaixaDTO fluxoMatriz
;
private List<FluxoDeCaixaDTO
> fluxosDeCaixa
;
private LojaService lojaService
;
private AcompanhamentoService acompanhamentoService
;
private AvaliacaoLojaService avaliacaoLojaService
;
@Inject
public QuadroResumoBean
(LojaService lojaService, AcompanhamentoService acompanhamentoService, AvaliacaoLojaService avaliacaoLojaService
) {
this.
lojaService = lojaService
;
this.
acompanhamentoService = acompanhamentoService
;
this.
avaliacaoLojaService = avaliacaoLojaService
;
}
@
Override
public void preCarregamento
() {
try {
if (VerificadorUtil.
estaNulo(parametrosConsulta
)) {
entidade =
new QuadroResumosDTO
();
parametrosConsulta =
new ParametrosConsulta
<QuadroResumosDTO
>();
parametrosConsulta.
setEntidade(entidade
);
}
setDataInicial
(DataUtils.
getPrimeiroDiaDoMesAtual());
setDataFinal
(DataUtils.
getUltimoDiaDoMesAtual());
consultarQuadroResumos
();
} catch (Exception e
) {
e.
printStackTrace();
}
}
@
Override
public GenericService
<QuadroResumosDTO
> getService
() {
return null;
}
@
Override
public void limparEntidade
() {
setEntidade
(new QuadroResumosDTO
());
}
@
Override
public QuadroResumosDTO getEntidade
() {
return entidade
;
}
@
Override
public QuadroResumosDTO getId
() {
return getEntidade
();
}
public Date getDataInicial
() {
return dataInicial
;
}
public void setDataInicial
(Date dataInicial
) {
this.
dataInicial = dataInicial
;
}
public Date getDataFinal
() {
return dataFinal
;
}
public void setDataFinal
(Date dataFinal
) {
this.
dataFinal = dataFinal
;
}
public FluxoDeCaixaDTO getFluxoMatriz
() {
return fluxoMatriz
;
}
public void setFluxoMatriz
(FluxoDeCaixaDTO fluxoMatriz
) {
this.
fluxoMatriz = fluxoMatriz
;
}
public List<FluxoDeCaixaDTO
> getFluxosDeCaixa
() {
return fluxosDeCaixa
;
}
public void setFluxosDeCaixa
(List<FluxoDeCaixaDTO
> fluxosDeCaixa
) {
this.
fluxosDeCaixa = fluxosDeCaixa
;
}
/********************************************************************/
public void consultarQuadroResumos
() {
fluxoMatriz =
new FluxoDeCaixaDTO
();
fluxoMatriz.
setMatriz(true);
fluxoMatriz.
setDataInicial(getDataInicial
());
fluxoMatriz.
setDataFinal(getDataFinal
());
fluxoMatriz = acompanhamentoService.
consultarFluxoDeCaixa(fluxoMatriz
);
fluxosDeCaixa =
new ArrayList<FluxoDeCaixaDTO
>();
List<Loja
> lojasAtivas = lojaService.
listarLojasAtivas();
for (Loja lojaAtiva : lojasAtivas
) {
FluxoDeCaixaDTO fluxoCaixa =
new FluxoDeCaixaDTO
();
fluxoCaixa.
setCentroDeCustos(lojaAtiva
);
fluxoCaixa.
setDataInicial(getDataInicial
());
fluxoCaixa.
setDataFinal(getDataFinal
());
fluxoCaixa.
setValorMetaMensal(0.0);
fluxoCaixa.
setValorMargemContribuicao(0.0);
AvaliacaoLoja avaliacaoLoja = avaliacaoLojaService.
consultarAvaliacaoLojaPelaData(lojaAtiva, getDataFinal
());
if (VerificadorUtil.
naoEstaNulo(avaliacaoLoja
)) {
if (VerificadorUtil.
naoEstaNulo(avaliacaoLoja.
getValorMetaMensal())) {
fluxoCaixa.
setValorMetaMensal(avaliacaoLoja.
getValorMetaMensal());
}
if (VerificadorUtil.
naoEstaNulo(avaliacaoLoja.
getValorMargemContribuicao())) {
fluxoCaixa.
setValorMargemContribuicao(avaliacaoLoja.
getValorMargemContribuicao());
}
}
fluxoCaixa = acompanhamentoService.
consultarFluxoDeCaixa(fluxoCaixa
);
fluxosDeCaixa.
add(fluxoCaixa
);
}
}
public Double getValorTotalFluxo
() {
Double totalFluxo =
new Double(0);
for (FluxoDeCaixaDTO fluxoCaixa : fluxosDeCaixa
) {
if (VerificadorUtil.
naoEstaNulo(fluxoCaixa.
getValorTotalFluxo())) {
totalFluxo = totalFluxo + fluxoCaixa.
getValorTotalFluxo();
}
}
return totalFluxo
;
}
public Double getValorTotalMargemContribuicao
() {
Double totalMargemContribuicao =
new Double(0);
for (FluxoDeCaixaDTO fluxoCaixa : fluxosDeCaixa
) {
if (VerificadorUtil.
naoEstaNulo(fluxoCaixa.
getCentroDeCustos())) {
totalMargemContribuicao = totalMargemContribuicao + fluxoCaixa.
getValorMargemContribuicao();
}
}
return totalMargemContribuicao
;
}
public Double calcularValorTotalMargemContribuicao
() {
Double totalMargemContribuicao =
new Double(0);
for (FluxoDeCaixaDTO fluxoCaixa : fluxosDeCaixa
) {
totalMargemContribuicao = totalMargemContribuicao + fluxoCaixa.
calcularValorMargemContribuicao(fluxoMatriz.
getValorTotalFluxo());
}
return totalMargemContribuicao
;
}
public Double calcularValorTotalFluxoComMargemContribuicao
() {
Double totalFluxoComMargemContribuicao =
new Double(0);
for (FluxoDeCaixaDTO fluxoCaixa : fluxosDeCaixa
) {
totalFluxoComMargemContribuicao = totalFluxoComMargemContribuicao + fluxoCaixa.
calcularValorFluxoComMargemContribuicao(fluxoMatriz.
getValorTotalFluxo());
}
return totalFluxoComMargemContribuicao
;
}
public Double getValorTotalProdutosUtilizados
() {
Double totalProdutosUtilizados =
new Double(0);
for (FluxoDeCaixaDTO fluxoCaixa : fluxosDeCaixa
) {
if (VerificadorUtil.
naoEstaNulo(fluxoCaixa.
getValorTotalProdutosUtilizados())) {
totalProdutosUtilizados = totalProdutosUtilizados + fluxoCaixa.
getValorTotalProdutosUtilizados();
}
}
return totalProdutosUtilizados
;
}
}