package br.com.ec.domain.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.LojaDTO;
import br.com.ec.domain.dto.TempoRealDTO;
import br.com.ec.domain.dto.TempoRealLojaDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaVendasDTO;
import br.com.ec.domain.service.AberturaLojaService;
import br.com.ec.domain.service.AvaliacaoLojaService;
import br.com.ec.domain.service.LojaService;
import br.com.ec.domain.service.TempoRealService;
import br.com.ec.domain.service.VendaService;
import br.com.ec.domain.shared.Ordenador;
import br.com.ec.domain.shared.OrdenadorImpl;
@Service
public class TempoRealServiceImpl
extends AbstractService
<TempoRealDTO
> implements TempoRealService
{
private LojaService lojaService
;
private VendaService vendaService
;
private AvaliacaoLojaService avaliacaoLojaService
;
private AberturaLojaService aberturaLojaService
;
private Ordenador ordenador
;
@Autowired
public TempoRealServiceImpl
(Validador validador, LojaService lojaService, VendaService vendaService, AvaliacaoLojaService avaliacaoLojaService,
AberturaLojaService aberturaLojaService
) {
super(validador
);
this.
ordenador =
new OrdenadorImpl
();
this.
lojaService = lojaService
;
this.
vendaService = vendaService
;
this.
avaliacaoLojaService = avaliacaoLojaService
;
this.
aberturaLojaService = aberturaLojaService
;
}
@
Override
protected GenericRepository
<TempoRealDTO
> getRepository
() {
return null;
}
@
Override
public TempoRealDTO consultarTempoReal
() {
TempoRealDTO tempoReal =
new TempoRealDTO
();
List<LojaDTO
> lojasAtivasDTO = lojaService.
consultarLojasAtivas();
List<TempoRealLojaDTO
> lojasTempoRealDTO =
new ArrayList<TempoRealLojaDTO
>();
for (LojaDTO lojaAtivaDTO : lojasAtivasDTO
) {
TempoRealLojaDTO tempoRealLojaDTO =
new TempoRealLojaDTO
();
tempoRealLojaDTO.
setLojaDTO(lojaAtivaDTO
);
ParametrosConsultaVendasDTO parametrosConsultaVendasDTO =
new ParametrosConsultaVendasDTO
(lojaAtivaDTO.
getSequencial(), DataUtils.
getDataAtual(), DataUtils.
getDataAtual());
tempoRealLojaDTO.
setValorVendasNoDia(vendaService.
obterValorTotalBrutoDeVendas(parametrosConsultaVendasDTO
));
tempoRealLojaDTO.
setQuantidadeVendasNoDia(vendaService.
obterQuantidadeDeVendasPorLojaEePeriodo(lojaAtivaDTO.
getSequencial(), DataUtils.
getPrimeiroDiaDoMesAtual(), DataUtils.
getUltimoDiaDoMesAtual()));
tempoRealLojaDTO.
setValorVendasNoMes(vendaService.
obterValorTotalBrutoDeVendas(new ParametrosConsultaVendasDTO
(lojaAtivaDTO.
getSequencial(), DataUtils.
getPrimeiroDiaDoMesAtual(), DataUtils.
getUltimoDiaDoMesAtual())));
tempoRealLojaDTO.
setValorMetaMensal(avaliacaoLojaService.
consultarValorMetaMensalLojaPelaData(lojaAtivaDTO.
getSequencial(), DataUtils.
getDataAtual()));
tempoRealLojaDTO.
setPercentualRealizadoMetaMensal(VerificadorUtil.
naoEstaNulo(tempoRealLojaDTO.
getValorMetaMensal())? tempoRealLojaDTO.
getValorVendasNoMes()/tempoRealLojaDTO.
getValorMetaMensal() :
0.0);
tempoRealLojaDTO.
setLojaAberta(aberturaLojaService.
verificarLojaAberta(DataUtils.
getDataAtual(), lojaAtivaDTO.
getSequencial()));
tempoRealLojaDTO.
setLojaComVendasNovas(vendaService.
obterQuantidadeDeVendasNovasPorLojaEePeriodo(lojaAtivaDTO.
getSequencial(), DataUtils.
getDataAtual(), DataUtils.
getDataAtual()) > 0);
/******/
lojasTempoRealDTO.
add(tempoRealLojaDTO
);
}
tempoReal.
setIndicadorVendasNovas(vendaService.
obterQuantidadeDeVendasNovasPorLojaEePeriodo(null, DataUtils.
getDataAtual(), DataUtils.
getDataAtual()) > 0);
tempoReal.
preencherDados(new ArrayList<TempoRealLojaDTO
>(ordenador.
ordenar(lojasTempoRealDTO
)));
return tempoReal
;
}
}
/*
@Override
public AcompanhamentoDTO consultarConsolidacaoDoDia() {
AcompanhamentoDTO consolidado = new AcompanhamentoDTO();
List<ConsolidadoVendasLojaDTO> listaLojaDoDiaDTO = new ArrayList<ConsolidadoVendasLojaDTO>();
List<Loja> lojas = lojaService.listarLojasAtivas();
for (Loja loja : lojas) {
ConsolidadoVendasLojaDTO consolidadoVendasLoja = new ConsolidadoVendasLojaDTO();
consolidadoVendasLoja.setLoja(loja);
Venda venda = new Venda(loja, null);
Integer quantidadeVendas = vendaService.obterQuantidadeDeVendasPorLojaEePeriodo(venda, DataUtils.getDataAtual(), DataUtils.getDataAtual());
consolidado.adicionarQuantidadeVendas(quantidadeVendas);
consolidadoVendasLoja.setQuantidadeTotalVendas(quantidadeVendas);
Double valorVendas = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(loja, DataUtils.getDataAtual(), DataUtils.getDataAtual());
ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
parametrosConsultaVendas.setLoja(loja);
parametrosConsultaVendas.setDataInicial(DataUtils.getDataAtual());
parametrosConsultaVendas.setDataFinal(DataUtils.getDataAtual());
valorVendas = valorVendas - vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
consolidado.adicionarValorVendas(valorVendas);
consolidadoVendasLoja.setValorTotalVendas(valorVendas);
parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getPrimeiroDiaDoMesAtual()));
parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.acrescentarDias(DataUtils.getDataAtual(), -1)));
Double totalVendasAnterioresDoMesAtual = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas);
totalVendasAnterioresDoMesAtual = totalVendasAnterioresDoMesAtual - vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas);
consolidadoVendasLoja.setValorTotalVendasAnterioresDoMesAtual(totalVendasAnterioresDoMesAtual);
Double valorMetaMensalLoja = consultarMetaMensal(loja);
consolidadoVendasLoja.setValorMetaMensal(valorMetaMensalLoja);
consolidado.adicionarValorMeta(valorMetaMensalLoja);
consolidadoVendasLoja.setIndicadorLojaAberta(aberturaLojaService.consultarAberturaLoja(DataUtils.getDataAtual(), loja) != null);
venda.setTipoSituacao(TipoSituacaoVenda.NOVO.getValor());
consolidadoVendasLoja.setIndicadorVendasNovas(vendaService.obterQuantidadeDeVendasPorLojaEePeriodo(venda, DataUtils.getDataAtual(), DataUtils.getDataAtual()) > 0);
listaLojaDoDiaDTO.add(consolidadoVendasLoja);
}
ConsolidadoVendasLojaDTO consolidadoVendasLojaAssistencia = new ConsolidadoVendasLojaDTO();
Loja lojaAssistencia = new Loja();
lojaAssistencia.setDescricao("ASSISTÊNCIA");
consolidadoVendasLojaAssistencia.setLoja(lojaAssistencia);
ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
parametrosConsultaVendas.setDataInicial(DataUtils.getDataAtual());
parametrosConsultaVendas.setDataFinal(DataUtils.getDataAtual());
consolidadoVendasLojaAssistencia.setValorTotalVendas(vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
consolidadoVendasLojaAssistencia.setIndicadorLojaAberta(true);
listaLojaDoDiaDTO.add(consolidadoVendasLojaAssistencia);
consolidado.setListaLojaDoDiaDTO(new ArrayList<ConsolidadoVendasLojaDTO>(ordenador.ordenar(listaLojaDoDiaDTO)));
consolidado.setValorTotalVendasMes(vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(null, DataUtils.getPrimeiroDiaDoMesAtual(), DataUtils.getUltimoDiaDoMesAtual()));
consolidado.setQuantidadeTotalPagamentos(pagamentoService.quantidadePagamentosEmAberto(null));
consolidado.setQuantidadeTotalPendencias(pendenciaService.quantidadePendenciasNaoFinalizadas(null));
Date diaDoMesPassado = DataUtils.acrescentarMeses(DataUtils.getDataAtual(), -1);
consolidado.setValorTotalVendasDoDiaMesPassado(vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(null, diaDoMesPassado, diaDoMesPassado));
consolidado.setValorTotalVendasMesPassado(vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(null, DataUtils.getPrimeiroDiaDoMesAnterior(), diaDoMesPassado));
return consolidado;
}
@Override
public ConsolidadoGestaoDTO consultarConsolidadoGestaoDTO() {
ConsolidadoGestaoDTO consolidado = new ConsolidadoGestaoDTO();
consolidado.setQuantidadeTotalVendas(vendaService.obterQuantidadeDeVendasPorLojaEePeriodo(null, DataUtils.getDataAtual(), DataUtils.getDataAtual()));
consolidado.setValorTotalVendasMes(vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(null, DataUtils.getPrimeiroDiaDoMesAtual(), DataUtils.getUltimoDiaDoMesAtual()));
consolidado.setQuantidadeTotalEstoque(produtoService.quantidadeTotalEstoque(null));
consolidado.setValorTotalEstoque(produtoService.valorTotalEstoque(null, null));
return consolidado;
}
@Override
public LineChartModel consultarGrafico(Date primeiroMes, Date segundoMes) {
LineChartModel graficoAcumulado = new LineChartModel();
String mesAtual = "" + (DataUtils.obterCalendario(primeiroMes).get(Calendar.MONTH)+1);
String anoAtual = "" + DataUtils.obterCalendario(primeiroMes).get(Calendar.YEAR);
String anoAnterior = "" + DataUtils.obterCalendario(segundoMes).get(Calendar.YEAR);
String mesAnterior = "" + (DataUtils.obterCalendario(segundoMes).get(Calendar.MONTH)+1);
if (mesAnterior.equals("0")) {
mesAnterior = "12";
anoAnterior = "" + (DataUtils.obterCalendario(DataUtils.getDataAtual()).get(Calendar.YEAR)-1);
}
if (mesAtual.length()==1) {
mesAtual = "0" + mesAtual;
}
if (mesAnterior.length()==1) {
mesAnterior = "0" + mesAnterior;
}
GraficoAcumuladoDTO graficoAtual = vendaService.consultarGrafico(mesAtual, anoAtual);
LineChartSeries series1 = preencherLinhaAcumulando(graficoAtual, mesAtual, anoAtual);
series1.setLabel("ATUAL");
GraficoAcumuladoDTO graficoAnterior = vendaService.consultarGrafico(mesAnterior, anoAnterior);
LineChartSeries series2 = preencherLinhaAcumulando(graficoAnterior, mesAtual, anoAtual);
series2.setLabel("ANTERIOR");
graficoAcumulado.addSeries(series1);
graficoAcumulado.addSeries(series2);
graficoAcumulado.setTitle("");
graficoAcumulado.setZoom(true);
graficoAcumulado.setShowPointLabels(true);
graficoAcumulado.getAxis(AxisType.Y).setLabel("VALORES R$");
DateAxis axis = new DateAxis("DATAS");
axis.setTickAngle(-50);
axis.setMin(anoAtual + "-" + mesAtual + "-" + "01");
axis.setMax(anoAtual + "-" + mesAtual + "-" + "31");
axis.setTickFormat("%b %#d, 20%y");
graficoAcumulado.getAxes().put(AxisType.X, axis);
return graficoAcumulado;
}
private LineChartSeries preencherLinhaAcumulando(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;
}
@Override
public ProvisaoCaixaDTO consultarGraficoCaixa(Date dataInicial, Date dataFinal) {
LineChartModel graficoAcumulado = new LineChartModel();
String mes = "" + (DataUtils.obterCalendario(dataInicial).get(Calendar.MONTH)+1);
String ano = "" + DataUtils.obterCalendario(dataInicial).get(Calendar.YEAR);
if (mes.length()==1) {
mes = "0" + mes;
}
Double caixa = contaBancariaService.consultarSaldo(null);
List<DetalhamentoCaixaDTO> graficoAtual = fluxoDeCaixaService.consultarGraficoCaixa(caixa, dataInicial, dataFinal);
LineChartSeries series1 = preencherLinha(graficoAtual, mes, ano);
series1.setLabel("ATUAL");
graficoAcumulado.addSeries(series1);
graficoAcumulado.setTitle("");
graficoAcumulado.setZoom(true);
graficoAcumulado.setShowPointLabels(true);
graficoAcumulado.getAxis(AxisType.Y).setLabel("VALORES R$");
DateAxis axis = new DateAxis("DATAS");
axis.setTickAngle(-50);
axis.setMin(DataUtils.converterDataParaStringNoFormato(dataInicial, "yyyy - MM - dd"));
axis.setMax(DataUtils.converterDataParaStringNoFormato(dataFinal, "yyyy - MM - dd"));
// axis.setMin(ano + "-" + mes + "-" + "01");
// axis.setMax(ano + "-" + mes + "-" + graficoAtual.size());
axis.setTickFormat("%b %#d");
graficoAcumulado.getAxes().put(AxisType.X, axis);
ProvisaoCaixaDTO provisao = new ProvisaoCaixaDTO();
provisao.setGrafico(graficoAcumulado);
provisao.setDetalhamentos(graficoAtual);
return provisao;
}
private LineChartSeries preencherLinha(List<DetalhamentoCaixaDTO> detalhamentos, String mes, String ano) {
LineChartSeries linha = new LineChartSeries();
// Integer indice = 1;
// String dia = "";
for (DetalhamentoCaixaDTO detalhamento : detalhamentos) {
// if (indice < 10) {
// dia = "0" + indice;
// } else {
// dia = "" + indice;
// }
// indice++;
// linha.set(ano + "-" + mes + "-" + dia, detalhamento.getSaldo());
linha.set(detalhamento.dataFormatada(), detalhamento.getSaldo());
}
return linha;
}
@Override
public FluxoDeCaixaDTO consultarFluxoDeCaixa(FluxoDeCaixaDTO fluxoDeCaixa) {
return fluxoDeCaixaService.consultarFluxoDeCaixa(fluxoDeCaixa);
}
@Override
public List<FluxoDeCaixaCategoriaDTO> consultarFluxoDeCaixaPorCategoria(FluxoDeCaixaDTO fluxoDeCaixa, String tipoCategoria) {
return fluxoDeCaixaService.consultarFluxoDeCaixaPorCategoria(fluxoDeCaixa, tipoCategoria);
}
@Override
public ReceitaDTO consultarReceita(ReceitaDTO receita) {
ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
parametrosConsultaVendas.setDataInicial(receita.getDataInicial());
parametrosConsultaVendas.setDataFinal(receita.getDataFinal());
parametrosConsultaVendas.setLoja(receita.getLoja());
parametrosConsultaVendas.setVendedor(receita.getVendedor());
parametrosConsultaVendas.setIndicacao(receita.getIndicacao());
receita.setValorTotalBruto(vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas));
receita.setValorTotalLiquido(vendaService.obterValorTotalLiquidoDeVendasPorLojaEePeriodo(parametrosConsultaVendas));
receita.setValorTotalBrutoPorFormasDePagamento(vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(parametrosConsultaVendas, verificarSelecoesFormasPagamento(receita)));
receita.setQuantidadeTotalEstoque(produtoService.quantidadeTotalEstoque(receita.getLoja()));
receita.setValorTotalEstoque(produtoService.valorTotalEstoque(receita.getLoja(), null));
receita.setQuantidadeProdutosVendidos(vendaService.obterQuantidadeProdutosVendidosPorLojaEePeriodoNaoVivo(parametrosConsultaVendas));
receita.setValorProdutosUtilizados(vendaService.obterValorProdutosUtilizadosEmVendasPorLojaEePeriodo(parametrosConsultaVendas));
receita.setProcessado(true);
return receita;
}
private List<FormaPagamento> verificarSelecoesFormasPagamento(ReceitaDTO receita) {
List<FormaPagamento> formas = new ArrayList<FormaPagamento>();
List<FormaPagamento> formasSelecionadas = Arrays.asList(receita.getFormasDePagamento());
if (VerificadorUtil.naoEstaNulo(receita.getFormasDePagamento())) {
for (FormaPagamento forma : formasSelecionadas) {
if (VerificadorUtil.naoEstaNulo(forma)) {
formas.add(forma);
}
}
}
return formas;
}
@Override
public DreDTO consultarDRE(DreDTO dre) {
ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
parametrosConsultaVendas.setDataInicial(dre.getDataInicial());
parametrosConsultaVendas.setDataFinal(dre.getDataFinal());
parametrosConsultaVendas.setLojas(dre.getLojasSelecionadas());
List<DreItemDTO> itens = new ArrayList<DreItemDTO>();
DreItemDTO itemDRE = new DreItemDTO("RECEITA OPERACIONAL BRUTA"); //VENDAS DE PRODUTOS, MERCADORIAS E SERVIÇOS
Double valor = new Double(0.0);
vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas);
itemDRE.setValor(valor);
itens.add(itemDRE);
dre.setItens(itens);
return dre;
}
private Double consultarMetaMensal(Loja loja) {
return avaliacaoLojaService.consultarValorMetaMensalLojaPelaData(loja.getSequencial(), DataUtils.getDataAtual());
}
*/