package br.com.ec.controller.managedbean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import org.primefaces.model.chart.AxisType;
import org.primefaces.model.chart.LineChartModel;
import org.primefaces.model.chart.LineChartSeries;
import org.springframework.context.annotation.Scope;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.exception.NegocioException;
import br.com.ec.core.generic.GenericService;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.ConsolidadoDTO;
import br.com.ec.domain.dto.GraficoAcumuladoDTO;
import br.com.ec.domain.model.ConsolidadoEstoque;
import br.com.ec.domain.model.Marca;
import br.com.ec.domain.model.Vigencia;
import br.com.ec.domain.service.consolidado.ConsolidadoService;
import br.com.ec.domain.service.marca.MarcaService;
import br.com.ec.domain.service.notafiscal.NotaFiscalService;
import br.com.ec.domain.service.vigencia.VigenciaService;
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 ConsolidadoBean
extends AbstractBean
<ConsolidadoDTO
> implements Serializable {
private static final long serialVersionUID = 1L
;
private List<String> anosSelecionados
;
private List<String> mesesSelecionados
;
private List<Vigencia
> vigencias
;
private Boolean consolidadoEstoquePorMarca
;
private List<ConsolidadoDTO
> consolidacaoEstoqueMarca
;
private LineChartModel graficoConsolidacaoEstoqueMarca
;
private ConsolidadoService consolidadoService
;
private VigenciaService vigenciaService
;
private MarcaService marcaService
;
@Inject
public ConsolidadoBean
(NotaFiscalService notaFiscalService, ConsolidadoService consolidadoService, VigenciaService vigenciaService,
MarcaService marcaService
) {
this.
consolidadoService = consolidadoService
;
this.
vigenciaService = vigenciaService
;
this.
marcaService = marcaService
;
}
public List<String> getAnosSelecionados
() {
return anosSelecionados
;
}
public void setAnosSelecionados
(List<String> anosSelecionados
) {
this.
anosSelecionados = anosSelecionados
;
}
public List<String> getMesesSelecionados
() {
return mesesSelecionados
;
}
public void setMesesSelecionados
(List<String> mesesSelecionados
) {
this.
mesesSelecionados = mesesSelecionados
;
}
public List<Vigencia
> getVigencias
() {
return vigencias
;
}
public void setVigencias
(List<Vigencia
> vigencias
) {
this.
vigencias = vigencias
;
}
public Boolean getConsolidadoEstoquePorMarca
() {
return consolidadoEstoquePorMarca
;
}
public void setConsolidadoEstoquePorMarca
(Boolean consolidadoEstoquePorMarca
) {
this.
consolidadoEstoquePorMarca = consolidadoEstoquePorMarca
;
}
public List<ConsolidadoDTO
> getConsolidacaoEstoqueMarca
() {
return consolidacaoEstoqueMarca
;
}
public void setConsolidacaoEstoqueMarca
(List<ConsolidadoDTO
> consolidacaoEstoqueMarca
) {
this.
consolidacaoEstoqueMarca = consolidacaoEstoqueMarca
;
}
public LineChartModel getGraficoConsolidacaoEstoqueMarca
() {
return graficoConsolidacaoEstoqueMarca
;
}
public void setGraficoConsolidacaoEstoqueMarca
(LineChartModel graficoConsolidacaoEstoqueMarca
) {
this.
graficoConsolidacaoEstoqueMarca = graficoConsolidacaoEstoqueMarca
;
}
@
Override
public void preCarregamento
() {
entidade =
new ConsolidadoDTO
();
parametrosConsulta =
new ParametrosConsulta
<ConsolidadoDTO
>();
parametrosConsulta.
setEntidade(entidade
);
}
@
Override
public void limparEntidade
() {
ConsolidadoDTO ConsolidadoVigencia =
new ConsolidadoDTO
();
setEntidade
(ConsolidadoVigencia
);
}
@
Override
public GenericService
<ConsolidadoDTO
> getService
() {
return null;
}
@
Override
public ConsolidadoDTO getEntidade
() {
return entidade
;
}
@
Override
public ConsolidadoDTO getId
() {
return getEntidade
();
}
/*******************************************************/
public void consolidarVigente
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
consolidadoService.
consolidarVigencia();
LancadorMensagem.
lancarSucesso("CONSOLIDAÇÃO REALIZADA COM SUCESSO! ");
}
});
}
public void consultarConsolidacoes
() {
new VerificadorLancamentoException
().
tratarIhRelancarExcecaoSemLimparEntidade(new CommandBean
() {
public void execute
() {
verificarSeVigenciaSelecionada
();
if (getConsolidadoEstoquePorMarca
()) {
List<Vigencia
> vigenciasDoAno = vigenciaService.
consultarVigenciasDoAno("2021");
vigenciasDoAno.
addAll(vigenciaService.
consultarVigenciasDoAno("2022"));
List<ConsolidadoEstoque
> consolidados =
new ArrayList<ConsolidadoEstoque
>();
for (Vigencia vigencia : vigenciasDoAno
) {
consolidados.
addAll(consolidadoService.
consultarPorVigencia(vigencia
));
}
List<ConsolidadoDTO
> consolidacao =
new ArrayList<ConsolidadoDTO
>();
for (ConsolidadoEstoque consolidado : consolidados
) {
ConsolidadoDTO consolidadoDTO =
new ConsolidadoDTO
();
consolidadoDTO.
setMarca(consolidado.
getModelo().
getMarca());
consolidadoDTO.
setVigencia(consolidado.
getVigencia());
Integer quantidadeTotal = consolidado.
getQuantidadeEstoque();
if (consolidacao.
contains(consolidadoDTO
)) {
ConsolidadoDTO consolidadoAnterior = consolidacao.
get(consolidacao.
indexOf(consolidadoDTO
));
consolidadoAnterior.
setQuantidadeTotal(quantidadeTotal + consolidadoAnterior.
getQuantidadeTotal());
} else {
consolidadoDTO.
setQuantidadeTotal(quantidadeTotal
);
consolidacao.
add(consolidadoDTO
);
}
}
setConsolidacaoEstoqueMarca
(consolidacao
);
// linhas ALCATEL
// 01/2020, 10
// 02/2020, 50
LineChartModel graficoConsolidacaoEstoqueMarca =
new LineChartModel
();
List<Marca
> marcasAtivas = marcaService.
consultarTodos(new Marca
());
for (Marca marcaAtiva : marcasAtivas
) {
LineChartSeries linha =
new LineChartSeries
();
for (Vigencia vigencia : vigenciasDoAno
) {
// 06/2020
Boolean adicionado =
false;
for (ConsolidadoDTO consolidado : consolidacao
) {
if (marcaAtiva.
equals(consolidado.
getMarca()) &&
vigencia.
equals(consolidado.
getVigencia())) {
//consolidado: 06/2020, ALCATEL, 30
linha.
set(vigencia.
getDescricao(), consolidado.
getQuantidadeTotal());
adicionado =
true;
break;
}
}
if (!adicionado
) {
linha.
set(vigencia.
getDescricao(),
new Integer(0));
}
}
linha.
setLabel(marcaAtiva.
getDescricao());
graficoConsolidacaoEstoqueMarca.
addSeries(linha
);
}
/*LineChartSeries linha = new LineChartSeries();
for (Vigencia vigencia : vigenciasDoAno) {
String marca = "";
for (ConsolidadoDTO consolidado : consolidacao) {
marca = consolidado.getMarca().getDescricao();
if (vigencia.equals(consolidado.getVigencia())) {
linha.set(vigencia.getDescricao(), consolidado.getQuantidadeTotal());
}
}
linha.setLabel(marca);
graficoConsolidacaoEstoqueMarca.addSeries(linha);
}*/
graficoConsolidacaoEstoqueMarca.
setTitle("");
graficoConsolidacaoEstoqueMarca.
setZoom(true);
graficoConsolidacaoEstoqueMarca.
setShowPointLabels(true);
graficoConsolidacaoEstoqueMarca.
getAxis(AxisType.
Y).
setLabel("MARCAS");
graficoConsolidacaoEstoqueMarca.
getAxis(AxisType.
X).
setLabel("VIGÊNCIAS");
/*
DateAxis axis = new DateAxis("VIGÊNCIAS");
axis.setTickAngle(-50);
axis.setMin("02/2020");
axis.setMax("07/2020");
axis.setTickFormat("%b %#d, 20%y");
graficoConsolidacaoEstoqueMarca.getAxes().put(AxisType.X, axis);
*/
setGraficoConsolidacaoEstoqueMarca
(graficoConsolidacaoEstoqueMarca
);
}
}
});
}
private LineChartSeries preencherLinha
(GraficoAcumuladoDTO graficoLinha,
String mes,
String ano
) {
LineChartSeries linha =
new LineChartSeries
();
Double valorAcumulado =
new Double(0.0);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_01();
linha.
set(ano +
"-" + mes +
"-" +
"01", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_02();
linha.
set(ano +
"-" + mes +
"-" +
"02", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_03();
linha.
set(ano +
"-" + mes +
"-" +
"03", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_04();
linha.
set(ano +
"-" + mes +
"-" +
"04", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_05();
linha.
set(ano +
"-" + mes +
"-" +
"05", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_06();
linha.
set(ano +
"-" + mes +
"-" +
"06", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_07();
linha.
set(ano +
"-" + mes +
"-" +
"07", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_08();
linha.
set(ano +
"-" + mes +
"-" +
"08", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_09();
linha.
set(ano +
"-" + mes +
"-" +
"09", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_10();
linha.
set(ano +
"-" + mes +
"-" +
"10", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_11();
linha.
set(ano +
"-" + mes +
"-" +
"11", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_12();
linha.
set(ano +
"-" + mes +
"-" +
"12", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_13();
linha.
set(ano +
"-" + mes +
"-" +
"13", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_14();
linha.
set(ano +
"-" + mes +
"-" +
"14", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_15();
linha.
set(ano +
"-" + mes +
"-" +
"15", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_16();
linha.
set(ano +
"-" + mes +
"-" +
"16", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_17();
linha.
set(ano +
"-" + mes +
"-" +
"17", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_18();
linha.
set(ano +
"-" + mes +
"-" +
"18", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_19();
linha.
set(ano +
"-" + mes +
"-" +
"19", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_20();
linha.
set(ano +
"-" + mes +
"-" +
"20", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_21();
linha.
set(ano +
"-" + mes +
"-" +
"21", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_22();
linha.
set(ano +
"-" + mes +
"-" +
"22", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_23();
linha.
set(ano +
"-" + mes +
"-" +
"23", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_24();
linha.
set(ano +
"-" + mes +
"-" +
"24", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_25();
linha.
set(ano +
"-" + mes +
"-" +
"25", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_26();
linha.
set(ano +
"-" + mes +
"-" +
"26", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_27();
linha.
set(ano +
"-" + mes +
"-" +
"27", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_28();
linha.
set(ano +
"-" + mes +
"-" +
"28", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_29();
linha.
set(ano +
"-" + mes +
"-" +
"29", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_30();
linha.
set(ano +
"-" + mes +
"-" +
"30", valorAcumulado
);
valorAcumulado = valorAcumulado + graficoLinha.
getDIA_31();
linha.
set(ano +
"-" + mes +
"-" +
"31", valorAcumulado
);
return linha
;
}
private void verificarSeVigenciaSelecionada
() {
if (VerificadorUtil.
isListaNulaOuVazia(getAnosSelecionados
())) {
throw new NegocioException
("NECESSÁRIO SELECIONAR O ANO");
}
}
}