Subversion Repositories Integrator Subversion

Rev

Rev 263 | Rev 267 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.service.impl;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;

import org.primefaces.model.charts.ChartData;
import org.primefaces.model.charts.axes.cartesian.CartesianScales;
import org.primefaces.model.charts.axes.cartesian.linear.CartesianLinearAxes;
import org.primefaces.model.charts.axes.cartesian.linear.CartesianLinearTicks;
import org.primefaces.model.charts.bar.BarChartDataSet;
import org.primefaces.model.charts.bar.BarChartModel;
import org.primefaces.model.charts.bar.BarChartOptions;
import org.primefaces.model.charts.optionconfig.legend.Legend;
import org.primefaces.model.charts.optionconfig.legend.LegendLabel;
import org.primefaces.model.charts.optionconfig.title.Title;
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.consulta.ParametrosConsultaVendasDTO;
import br.com.ec.domain.dto.grafico.GraficoBarraDTO;
import br.com.ec.domain.dto.grafico.GraficoDTO;
import br.com.ec.domain.dto.grafico.GraficoDadoDTO;
import br.com.ec.domain.service.GraficoService;
import br.com.ec.domain.service.VendaService;

@Service
public class GraficoServiceImpl extends AbstractService<GraficoDTO> implements GraficoService {
       
        private VendaService vendaService;

        @Autowired
        public GraficoServiceImpl(Validador validador, VendaService vendaService) {
                super(validador);
                this.vendaService = vendaService;
        }

        @Override
        protected GenericRepository<GraficoDTO> getRepository() {
                return null;
        }
       
        @Override
        public GraficoBarraDTO gerarGraficoVendas(ParametrosConsultaVendasDTO parametrosConsulta) {
                GraficoBarraDTO graficoDTO = new GraficoBarraDTO();
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorDia()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorDia(parametrosConsulta));
                        graficoDTO.setTitulo("VENDAS POR DIA");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorMes()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorMes(parametrosConsulta));
                        graficoDTO.setTitulo("VENDAS POR MÊS");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorAno()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorAno(parametrosConsulta));
                        graficoDTO.setTitulo("VENDAS POR ANO");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosSeisMeses() ||
                                parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosDozeMeses()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhUltimosSeisOuDozeMeses(parametrosConsulta));
                        graficoDTO.setTitulo("VENDAS PELOS ÚLTIMOS MESES");
                        /*
                        if (VerificadorUtil.naoEstaNulo(parametrosRelatorioVendas.getVendedor())) {
                                consultarHistoricoPercentual(parametrosRelatorioVendas);
                        }
                        */

                }
               
        BarChartDataSet barDataSet = new BarChartDataSet();
        barDataSet.setLabel("");
        barDataSet.setData(graficoDTO.getDados().getValores());
        barDataSet.setBackgroundColor(graficoDTO.getDados().getCores());
        barDataSet.setBorderColor(graficoDTO.getDados().getBordas());
        barDataSet.setBorderWidth(1);
        ChartData dados = new ChartData();
        dados.addChartDataSet(barDataSet);
        dados.setLabels(graficoDTO.getDados().getMarcadores());
               
        BarChartOptions options = new BarChartOptions();
        CartesianScales cScales = new CartesianScales();
        CartesianLinearAxes linearAxes = new CartesianLinearAxes();
        linearAxes.setOffset(true);
        CartesianLinearTicks ticks = new CartesianLinearTicks();
        ticks.setBeginAtZero(true);
        linearAxes.setTicks(ticks);
        cScales.setDisplay(true);
        cScales.addYAxesData(linearAxes);
        options.setScales(cScales);
       
        if (VerificadorUtil.naoEstaNuloOuVazio(graficoDTO.getTitulo())) {
                Title title = new Title();
                title.setDisplay(true);
                        title.setText(graficoDTO.getTitulo());
                options.setTitle(title);
        }

        Legend legend = new Legend();
        legend.setDisplay(true);
        legend.setPosition("top");
       
        LegendLabel legendLabels = new LegendLabel();
        legendLabels.setFontStyle("bold");
        legendLabels.setFontColor("#2980B9");
        legendLabels.setFontSize(24);
        legend.setLabels(legendLabels);
        options.setLegend(legend);

        BarChartModel graficoBarra = new BarChartModel();
        graficoBarra.setData(dados);
        graficoBarra.setOptions(options);
        graficoBarra.setExtender("barra");
       
        graficoDTO.setGraficoBarra(graficoBarra);
                return graficoDTO;
        }

        private GraficoDadoDTO preencherDadosComPeriodoEhPorDia(ParametrosConsultaVendasDTO parametrosConsulta) {
                GraficoDadoDTO dados = new GraficoDadoDTO();
        Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getMes())-1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno())));
                int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
                for (int dia = 1; dia <= qntMaximaDias; dia++) {
                        Double valorAcumulado = new Double(0.0);
                        Date data = DataUtils.obterData(dia, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getMes())-1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()));
                        parametrosConsulta.getParametrosPeriodoDTO().setDataInicial(data);
                        parametrosConsulta.getParametrosPeriodoDTO().setDataFinal(data);
                        valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(parametrosConsulta, Arrays.asList(parametrosConsulta.getFormasDePagamentoDTO()));
                        dados.adicionarDados(valorAcumulado, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)", "" + dia);
                }
                return dados;
        }

        private GraficoDadoDTO preencherDadosComPeriodoEhPorMes(ParametrosConsultaVendasDTO parametrosConsulta) {
                GraficoDadoDTO dados = new GraficoDadoDTO();
        for (int mes = 1; mes <= 12; mes++) {
                        Double valorAcumulado = new Double(0.0);
                        Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, new Integer(mes)-1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno())));
                        int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
                        Calendar dataFinal = DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, new Integer(mes)-1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno())));
                        parametrosConsulta.getParametrosPeriodoDTO().setDataInicial(dataInicial.getTime());
                        parametrosConsulta.getParametrosPeriodoDTO().setDataFinal(dataFinal.getTime());
                        valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(
                                        parametrosConsulta, Arrays.asList(parametrosConsulta.getFormasDePagamentoDTO()));
                        dados.adicionarDados(valorAcumulado, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)", "" + mes);
                }
                return dados;
        }
       
        private GraficoDadoDTO preencherDadosComPeriodoEhPorAno(ParametrosConsultaVendasDTO parametrosConsulta) {
                GraficoDadoDTO dados = new GraficoDadoDTO();
        Integer anoInicial = new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()) - 10;
                for (int ano = anoInicial; ano <= new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()); ano++) {
                        Double valorAcumulado = new Double(0.0);
                        Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, 0, new Integer(ano)));
                        Calendar dataFinal = DataUtils.obterCalendario(DataUtils.obterData(31, 13, new Integer(ano)));
                        parametrosConsulta.getParametrosPeriodoDTO().setDataInicial(dataInicial.getTime());
                        parametrosConsulta.getParametrosPeriodoDTO().setDataFinal(dataFinal.getTime());
                        valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(parametrosConsulta, Arrays.asList(parametrosConsulta.getFormasDePagamentoDTO()));
                dados.adicionarDados(valorAcumulado, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)", "" + ano);
                }
                return dados;
        }

        private GraficoDadoDTO preencherDadosComPeriodoEhUltimosSeisOuDozeMeses(ParametrosConsultaVendasDTO parametrosConsulta) {
                GraficoDadoDTO dados = new GraficoDadoDTO();
                Integer mesAtual = new Integer(parametrosConsulta.getParametrosPeriodoDTO().getMes());
                Integer anoAtual = new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno());
                Integer quantidadeMesesAnteriores = 0;
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosSeisMeses()) {
                        quantidadeMesesAnteriores = 7;
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosDozeMeses()) {
                        quantidadeMesesAnteriores = 13;
                }
               
                mesAtual = mesAtual - quantidadeMesesAnteriores + 1;
                if (mesAtual <= 0) {
                        mesAtual = mesAtual + 12;
                        anoAtual--;
                }
                for (int mes = 1; mes <= quantidadeMesesAnteriores; quantidadeMesesAnteriores--) {
                        if (mesAtual == 13) {
                                mesAtual = 1;
                                anoAtual++;
                        }
                        Double valorAcumulado = new Double(0.0);
                        Calendar dataInicial = DataUtils.obterCalendario(DataUtils.obterData(1, mesAtual - 1, anoAtual));
                        parametrosConsulta.getParametrosPeriodoDTO().setDataInicial(dataInicial.getTime());
                        int qntMaximaDias = dataInicial.getActualMaximum(Calendar.DAY_OF_MONTH);
                        parametrosConsulta.getParametrosPeriodoDTO().setDataFinal(DataUtils.obterCalendario(DataUtils.obterData(qntMaximaDias, mesAtual - 1, anoAtual)).getTime());
                        valorAcumulado = vendaService.obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(parametrosConsulta, Arrays.asList(parametrosConsulta.getFormasDePagamentoDTO()));
                        String descricaoLinha = mesAtual.toString() + "/" + anoAtual;
                        mesAtual++;
                dados.adicionarDados(valorAcumulado, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)", "" + descricaoLinha);
                }
                return dados;
        }
       
}