Subversion Repositories Integrator Subversion

Rev

Rev 274 | Rev 706 | 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.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.primefaces.PrimeFaces;
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.primefaces.model.charts.pie.PieChartDataSet;
import org.primefaces.model.charts.pie.PieChartModel;
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.StringUtil;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.AvaliacaoFuncionarioDTO;
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.dto.grafico.GraficoPizzaDTO;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.service.AvaliacaoFuncionarioService;
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;
        private AvaliacaoFuncionarioService avaliacaoFuncionarioService;

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

        @Override
        protected GenericRepository<GraficoDTO> getRepository() {
                return null;
        }
       
        @Override
        public GraficoBarraDTO gerarGraficoVendas(ParametrosConsultaVendasDTO parametrosConsulta, ParametrosConsultaVendasDTO parametrosConsultaComparativo) {
                GraficoBarraDTO graficoDTO = new GraficoBarraDTO();
                graficoDTO.setParametrosConsulta(parametrosConsulta);
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorDia()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorDia(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS POR DIA");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorMes()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorMes(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS POR MÊS");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorAno()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorAno(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS POR ANO");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosSeisMeses() ||
                                parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosDozeMeses()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhUltimosSeisOuDozeMeses(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS PELOS ÚLTIMOS MESES");
                }
               
        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.setLabels(graficoDTO.getDados().getMarcadores());
       
        if (VerificadorUtil.naoEstaNulo(parametrosConsultaComparativo)) {
                parametrosConsultaComparativo.setFormasDePagamentoDTO(parametrosConsulta.getFormasDePagamentoDTO());
                parametrosConsultaComparativo.setLojasSelecionadasDTO(parametrosConsulta.getLojasSelecionadasDTO());
                parametrosConsultaComparativo.getParametrosPeriodoDTO().setTipoPeriodo(parametrosConsulta.getParametrosPeriodoDTO().getTipoPeriodo());
                GraficoBarraDTO graficoDTOComparativo = new GraficoBarraDTO();
                        if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorDia()) {
                                graficoDTOComparativo.setDados(preencherDadosComPeriodoEhPorDia(parametrosConsultaComparativo, "rgba(255, 205, 86, 0.2)", "rgb(255, 205, 86)"));
                                graficoDTOComparativo.setTitulo("VENDAS POR DIA");
                        }
                        if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorMes()) {
                                graficoDTOComparativo.setDados(preencherDadosComPeriodoEhPorMes(parametrosConsultaComparativo, "rgba(255, 205, 86, 0.2)", "rgb(255, 205, 86)"));
                                graficoDTOComparativo.setTitulo("VENDAS POR MÊS");
                        }
                        if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorAno()) {
                                graficoDTOComparativo.setDados(preencherDadosComPeriodoEhPorAno(parametrosConsultaComparativo, "rgba(255, 205, 86, 0.2)", "rgb(255, 205, 86)"));
                                graficoDTOComparativo.setTitulo("VENDAS POR ANO");
                        }
                        if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosSeisMeses() ||
                                        parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosDozeMeses()) {
                                graficoDTOComparativo.setDados(preencherDadosComPeriodoEhUltimosSeisOuDozeMeses(parametrosConsultaComparativo, "rgba(255, 205, 86, 0.2)", "rgb(255, 205, 86)"));
                                graficoDTOComparativo.setTitulo("VENDAS PELOS ÚLTIMOS MESES");
                        }
                BarChartDataSet barDataSetComparativo = new BarChartDataSet();
                barDataSetComparativo.setLabel("COMPARATIVO");
                barDataSetComparativo.setData(graficoDTOComparativo.getDados().getValores());
                barDataSetComparativo.setBackgroundColor(graficoDTOComparativo.getDados().getCores());
                barDataSetComparativo.setBorderColor(graficoDTOComparativo.getDados().getBordas());
                barDataSetComparativo.setBorderWidth(1);
               
                dados.addChartDataSet(barDataSetComparativo);
        }
       
        dados.addChartDataSet(barDataSet);
               
        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, String cor, String corBorda) {
                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, cor, corBorda, "" + dia);
                }
                return dados;
        }

        private GraficoDadoDTO preencherDadosComPeriodoEhPorMes(ParametrosConsultaVendasDTO parametrosConsulta, String cor, String corBorda) {
                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, cor, corBorda, "" + mes);
                }
                return dados;
        }
       
        private GraficoDadoDTO preencherDadosComPeriodoEhPorAno(ParametrosConsultaVendasDTO parametrosConsulta, String cor, String corBorda) {
                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, cor, corBorda, "" + ano);
                }
                return dados;
        }

        private GraficoDadoDTO preencherDadosComPeriodoEhUltimosSeisOuDozeMeses(ParametrosConsultaVendasDTO parametrosConsulta, String cor, String corBorda) {
                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, cor, corBorda, "" + descricaoLinha);
                }
                return dados;
        }
       
        @Override
        public GraficoBarraDTO gerarGraficoPercentuaisMeta(ParametrosConsultaVendasDTO parametrosConsulta) {
                GraficoBarraDTO graficoDTO = new GraficoBarraDTO();
                graficoDTO.setParametrosConsulta(parametrosConsulta);
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorMes()) {
                        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, null);
                               
                                AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO = new AvaliacaoFuncionarioDTO();
                                avaliacaoFuncionarioDTO.setValorTotalVendido(valorAcumulado);
                                avaliacaoFuncionarioDTO.setValorMetaMensal(avaliacaoFuncionarioService.consultarMetaMensalPelaData(parametrosConsulta.getVendedorSelecionado().getSequencialPessoa(), DataUtils.getDataComHorarioMinimo(parametrosConsulta.getParametrosPeriodoDTO().getDataFinal())));
                                Double valorParaFormatar = avaliacaoFuncionarioDTO.retornarPercentualRealizado() * 100;
                                dados.adicionarDados(valorParaFormatar.intValue(), "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)", "" + mes);
                        }
               
                        graficoDTO.setDados(dados);
                        graficoDTO.setTitulo("PERCENTUAIS DA META POR MÊS");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosSeisMeses() ||
                                parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosDozeMeses()) {
                        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++;
                               
                                AvaliacaoFuncionarioDTO avaliacaoFuncionarioDTO = new AvaliacaoFuncionarioDTO();
                                avaliacaoFuncionarioDTO.setValorTotalVendido(valorAcumulado);
                                avaliacaoFuncionarioDTO.setValorMetaMensal(avaliacaoFuncionarioService.consultarMetaMensalPelaData(parametrosConsulta.getVendedorSelecionado().getSequencialPessoa(), DataUtils.getDataComHorarioMinimo(parametrosConsulta.getParametrosPeriodoDTO().getDataFinal())));
                                Double valorParaFormatar = avaliacaoFuncionarioDTO.retornarPercentualRealizado() * 100;
                                dados.adicionarDados(valorParaFormatar.intValue(), "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)", "" + descricaoLinha);
                        }
                       
                        graficoDTO.setDados(dados);
                        graficoDTO.setTitulo("PERCENTUAIS DA META PELOS ÚLTIMOS MESES");
                }
               
                if (VerificadorUtil.estaNulo(graficoDTO.getDados())) {
                        return null;
                }
               
        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.setLabels(graficoDTO.getDados().getMarcadores());
        dados.addChartDataSet(barDataSet);
               
        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("barraPercentuais");
       
        graficoDTO.setGraficoBarra(graficoBarra);
                return graficoDTO;
        }
       
        @Override
        public GraficoPizzaDTO gerarGraficoVendasPorTiposDeProduto(ParametrosConsultaVendasDTO parametrosConsulta) {
        GraficoBarraDTO graficoDTO = new GraficoBarraDTO();
                graficoDTO.setParametrosConsulta(parametrosConsulta);
                Date periodoInicial = null;
                Date periodoFinal = null;
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorDia()) {
                        graficoDTO.setTitulo("VENDAS POR DIA");
                        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);
                        periodoInicial = DataUtils.obterData(1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getMes())-1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()));
                        periodoFinal = DataUtils.obterData(qntMaximaDias, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getMes())-1, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()));
                } if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorMes()) {
                        graficoDTO.setTitulo("VENDAS POR MÊS");
                        periodoInicial = DataUtils.obterData(1, 0, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()));
                        periodoFinal = DataUtils.obterData(31, 11, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()));
                } if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorAno()) {
                        graficoDTO.setTitulo("VENDAS POR ANO");
                        periodoInicial = DataUtils.obterData(1, 0, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno())-10);
                        periodoFinal = DataUtils.obterData(31, 11, new Integer(parametrosConsulta.getParametrosPeriodoDTO().getAno()));
                } else {
                        return null;
                }
               
                parametrosConsulta.getParametrosPeriodoDTO().setDataInicial(periodoInicial);
                parametrosConsulta.getParametrosPeriodoDTO().setDataFinal(periodoFinal);
               
                GraficoDadoDTO dados = new GraficoDadoDTO();
                Double valorTotal = vendaService.obterValorTotalBrutoDeVendas(parametrosConsulta);
                for (TipoProduto tipoProduto : TipoProduto.values()) {
                        parametrosConsulta.setTipoProduto(tipoProduto.getValor());
                        Double valor = vendaService.obterValorTotalBrutoDeVendas(parametrosConsulta);
                        Double percentual = (valor / valorTotal);
                        dados.adicionarDados(valor, tipoProduto.getCorPadrao(), "#FFFFFF", tipoProduto.getDescricao() + " (" + StringUtil.formatarPercentual(percentual) + ")");
                }
                dados.ordenarPorValor();
                graficoDTO.setDados(dados);
               
               
                ChartData dataFP = new ChartData();
                PieChartDataSet dataSetFP = new PieChartDataSet();
                dataSetFP.setData(graficoDTO.getDados().getValores());
                dataSetFP.setBackgroundColor(graficoDTO.getDados().getCores());
                dataSetFP.setBorderColor(graficoDTO.getDados().getBordas());
                dataFP.addChartDataSet(dataSetFP);
                dataFP.setLabels(graficoDTO.getDados().getMarcadores());
               
                GraficoPizzaDTO grafico = new GraficoPizzaDTO();
                PieChartModel graficoFormasPagamento = new PieChartModel();
                graficoFormasPagamento.setData(dataFP);
               
                // CONFIGURACOES
//              graficoFormasPagamento.setLegendPosition("e");     // l = left, e = right
//              graficoFormasPagamento.setShowDataLabels(false);
           
                grafico.setGraficoPizza(graficoFormasPagamento);
                return grafico;
        }
       
        @Override
        public GraficoPizzaDTO gerarGraficoVendasPorFormasDePagamento(ParametrosConsultaVendasDTO parametrosConsulta) {
                GraficoBarraDTO graficoDTO = new GraficoBarraDTO();
                graficoDTO.setParametrosConsulta(parametrosConsulta);
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorDia()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorDia(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS POR DIA");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorMes()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorMes(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS POR MÊS");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhPorAno()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhPorAno(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS POR ANO");
                }
                if (parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosSeisMeses() ||
                                parametrosConsulta.getParametrosPeriodoDTO().tipoPeriodoEhUltimosDozeMeses()) {
                        graficoDTO.setDados(preencherDadosComPeriodoEhUltimosSeisOuDozeMeses(parametrosConsulta, "rgba(75, 192, 192, 0.2)", "rgb(75, 192, 192)"));
                        graficoDTO.setTitulo("VENDAS PELOS ÚLTIMOS MESES");
                }
               
                PieChartModel graficoFormasPagamento = new PieChartModel();
        ChartData dataFP = new ChartData();
        PieChartDataSet dataSetFP = new PieChartDataSet();
        List<Number> valuesFP = new ArrayList<>();
        valuesFP.add(300);
        valuesFP.add(50);
        valuesFP.add(100);
        dataSetFP.setData(valuesFP);
        List<String> bgColorsFP = new ArrayList<>();
        bgColorsFP.add("rgb(255, 99, 132)");
        bgColorsFP.add("rgb(54, 162, 235)");
        bgColorsFP.add("rgb(255, 205, 86)");
        dataSetFP.setBackgroundColor(bgColorsFP);
        dataFP.addChartDataSet(dataSetFP);
        List<String> labelsFP = new ArrayList<>();
        labelsFP.add("DINHEIRO");
        labelsFP.add("DÉBITO");
        labelsFP.add("CARTÃO À VISTA");
        labelsFP.add("PARCELADO");
        dataFP.setLabels(labelsFP);
        graficoFormasPagamento.setData(dataFP);
       
        GraficoPizzaDTO grafico = new GraficoPizzaDTO();
        grafico.setGraficoPizza(graficoFormasPagamento);
       
        return grafico;
        }
}