Subversion Repositories Integrator Subversion

Rev

Rev 582 | Rev 586 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
229 espaco 1
package br.com.ec.domain.service.impl;
2
 
561 blopes 3
import java.util.ArrayList;
229 espaco 4
import java.util.Date;
261 espaco 5
import java.util.List;
229 espaco 6
 
7
import org.springframework.stereotype.Service;
8
 
452 blopes 9
import br.com.ec.core.exception.NegocioException;
229 espaco 10
import br.com.ec.core.generic.AbstractService;
11
import br.com.ec.core.generic.GenericRepository;
452 blopes 12
import br.com.ec.core.util.DataUtils;
13
import br.com.ec.core.util.VerificadorUtil;
229 espaco 14
import br.com.ec.core.validador.Validador;
450 blopes 15
import br.com.ec.domain.dto.AuditoriaVendaDTO;
261 espaco 16
import br.com.ec.domain.dto.FormaPagamentoDTO;
561 blopes 17
import br.com.ec.domain.dto.LojaDTO;
566 blopes 18
import br.com.ec.domain.dto.ModeloDTO;
561 blopes 19
import br.com.ec.domain.dto.RankingComprasTransferenciasDTO;
20
import br.com.ec.domain.dto.RankingComprasTransferenciasEstiloDTO;
21
import br.com.ec.domain.dto.RankingComprasTransferenciasEstiloPorLojaDTO;
22
import br.com.ec.domain.dto.RankingModeloDTO;
582 blopes 23
import br.com.ec.domain.dto.RankingProdutoDTO;
583 blopes 24
import br.com.ec.domain.dto.RankingProdutoDTONovo;
561 blopes 25
import br.com.ec.domain.dto.consulta.ParametrosConsultaModelosMaisVendidosDTO;
26
import br.com.ec.domain.dto.consulta.ParametrosConsultaPorPeriodoDTO;
582 blopes 27
import br.com.ec.domain.dto.consulta.ParametrosConsultaProdutosVendidosDTO;
230 espaco 28
import br.com.ec.domain.dto.consulta.ParametrosConsultaVendasDTO;
259 espaco 29
import br.com.ec.domain.model.Venda;
566 blopes 30
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
259 espaco 31
import br.com.ec.domain.model.tipos.TipoSituacaoVenda;
561 blopes 32
import br.com.ec.domain.service.LojaService;
566 blopes 33
import br.com.ec.domain.service.ModeloService;
229 espaco 34
import br.com.ec.domain.service.VendaService;
35
import br.com.ec.repository.VendaRepository;
36
 
37
@Service
38
public class VendaServiceImpl extends AbstractService<Venda> implements VendaService {
39
 
561 blopes 40
        private LojaService lojaService;
566 blopes 41
        private ModeloService modeloService;
229 espaco 42
        private VendaRepository vendaRepository;
43
 
566 blopes 44
        public VendaServiceImpl(Validador validador, LojaService lojaService, ModeloService modeloService, VendaRepository vendaRepository) {
229 espaco 45
                super(validador);
561 blopes 46
                this.lojaService = lojaService;
566 blopes 47
                this.modeloService = modeloService;
229 espaco 48
                this.vendaRepository = vendaRepository;
49
        }
50
 
51
        @Override
52
        protected GenericRepository<Venda> getRepository() {
53
                return vendaRepository;
54
        }
55
 
56
        @Override
296 espaco 57
        public Double obterValorTotalBrutoDeVendas(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
58
                Double valorTotal = vendaRepository.obterValorTotalBrutoDeVendas(parametrosConsultaVendasDTO);
59
                valorTotal = valorTotal - vendaRepository.obterValorDeCuponsUtilizadosPorLojaEePeriodo(parametrosConsultaVendasDTO);
60
                return valorTotal;
61
        }
62
 
63
        @Override
229 espaco 64
        public Integer obterQuantidadeDeVendasPorLojaEePeriodo(Long sequencialLoja, Date dataInicial, Date dataFinal) {
296 espaco 65
                return vendaRepository.obterQuantidadeDeVendas(new ParametrosConsultaVendasDTO(sequencialLoja, dataInicial, dataFinal));
229 espaco 66
        }
230 espaco 67
 
68
        @Override
253 espaco 69
        public Integer obterQuantidadeDeVendasNovasPorLojaEePeriodo(Long sequencialLoja, Date dataInicial, Date dataFinal) {
70
                ParametrosConsultaVendasDTO parametrosConsulta = new ParametrosConsultaVendasDTO(sequencialLoja, dataInicial, dataFinal);
71
                parametrosConsulta.setTipoSituacaoVenda(TipoSituacaoVenda.NOVO.getValor());
296 espaco 72
                return vendaRepository.obterQuantidadeDeVendas(parametrosConsulta);
253 espaco 73
        }
74
 
75
        @Override
296 espaco 76
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(ParametrosConsultaVendasDTO parametrosConsultaVendas, List<FormaPagamentoDTO> formasDePagamento) {
77
                return vendaRepository.obterValorTotalBrutoDeVendasPorParametrosEeFormasDePagamento(parametrosConsultaVendas, formasDePagamento);
230 espaco 78
        }
261 espaco 79
 
80
        @Override
296 espaco 81
        public Double obterValorDeMaquinetasPorPessoa(Long sequencialPessoaMaquineta, Date dataInicio, Date dataFim) {
82
                return vendaRepository.obterValorDeMaquinetasPorPessoa(sequencialPessoaMaquineta, dataInicio, dataFim);
261 espaco 83
        }
84
 
265 espaco 85
        @Override
296 espaco 86
        public Double obterValorTotalLiquidoDeVendas(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
87
                return vendaRepository.obterValorTotalLiquidoDeVendas(parametrosConsultaVendas);
265 espaco 88
        }
89
 
296 espaco 90
        @Override
91
        public Double obterValorProdutosUtilizadosEmVendas(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
92
                return vendaRepository.obterValorProdutosUtilizadosEmVendas(parametrosConsultaVendas);
93
        }
94
 
450 blopes 95
        @Override
96
        public List<AuditoriaVendaDTO> consultarAuditoriaVenda(Date dataSelecionada, Long sequencialLojaSelecionada) {
452 blopes 97
                if (VerificadorUtil.estaNulo(sequencialLojaSelecionada)) {
98
                        throw new NegocioException("Selecione a loja");
99
                }
100
                Integer diferencaDiasEntreDatas = DataUtils.calcularDiferenceEmDiasEntreDuasDatas(DataUtils.getDataAtual(), dataSelecionada);
101
                if (diferencaDiasEntreDatas > 60) {
102
                        throw new NegocioException("Consulta indisponível");
103
                }
450 blopes 104
                return vendaRepository.consultarAuditoriaVenda(dataSelecionada, sequencialLojaSelecionada);
105
        }
106
 
561 blopes 107
        @Override
567 blopes 108
        public List<RankingComprasTransferenciasDTO> consultarRankingComprasTransferencias(Integer quantidadeDiasVendas, Integer quantidadeDiasParaAlerta, List<RankingModeloDTO> modelosMaisVendidos, Boolean consultarPorLoja) {
561 blopes 109
                List<RankingComprasTransferenciasDTO> ranking = new ArrayList<RankingComprasTransferenciasDTO>();
110
 
111
                ParametrosConsultaPorPeriodoDTO parametrosConsultaPorPeriodoDTO = new ParametrosConsultaPorPeriodoDTO();
112
                parametrosConsultaPorPeriodoDTO.setDataFinal(DataUtils.getDataAtual());
567 blopes 113
                parametrosConsultaPorPeriodoDTO.setDataInicial(DataUtils.acrescentarDias(DataUtils.getDataAtual(), quantidadeDiasVendas*-1));
561 blopes 114
 
115
                for (RankingModeloDTO rankingModelo : modelosMaisVendidos) {
116
                        RankingComprasTransferenciasDTO rankingComprasTransferenciasDTO = new RankingComprasTransferenciasDTO();
117
                        rankingComprasTransferenciasDTO.setRankingModelo(rankingModelo);
118
 
119
                        // CONSULTAR POR ESTILO
566 blopes 120
                        List<RankingComprasTransferenciasEstiloDTO> rankEstiloDTO = new ArrayList<RankingComprasTransferenciasEstiloDTO>();
121
                        rankEstiloDTO.addAll(consultarRankingPorEstilo(rankingModelo.getModelo().getSequencial(), parametrosConsultaPorPeriodoDTO));
122
 
123
                        // PREENCHER COM ESTILOS QUE NÃO FORAM CONSULTADOS
561 blopes 124
                        List<RankingComprasTransferenciasEstiloDTO> rankingEstiloDTO = new ArrayList<RankingComprasTransferenciasEstiloDTO>();
566 blopes 125
                        for (TipoEstiloProduto tipoEstilo : TipoEstiloProduto.values()) {      
126
                                Boolean adicionarEstilo = true;
127
                                for (RankingComprasTransferenciasEstiloDTO rankingEstilo : rankEstiloDTO) {
128
                                        if (rankingEstilo.getEstilo().equals(tipoEstilo)) {
129
                                                rankingEstiloDTO.add(rankingEstilo);
130
                                                adicionarEstilo = false;
131
                                                break;
132
                                        }
133
                                }
134
                                if (adicionarEstilo) {
135
                                        RankingComprasTransferenciasEstiloDTO rankingEstilo = new RankingComprasTransferenciasEstiloDTO();
136
                                        rankingEstilo.setEstilo(tipoEstilo);
137
                                        rankingEstiloDTO.add(rankingEstilo);
138
                                }
139
                        }
561 blopes 140
 
568 blopes 141
                        Double quantidadeMinimaTransferirComprar = new Double(quantidadeDiasParaAlerta) / new Double(quantidadeDiasVendas);
142
 
561 blopes 143
                        // CONSULTAR ESTILO POR LOJA
567 blopes 144
                        if (consultarPorLoja) {
145
                                for (RankingComprasTransferenciasEstiloDTO rankingEstilo : rankingEstiloDTO) {
146
                                        List<RankingComprasTransferenciasEstiloPorLojaDTO> rankingPorLoja = new ArrayList<RankingComprasTransferenciasEstiloPorLojaDTO>();
147
                                        rankingPorLoja.addAll(consultarRankingPorEstiloPorLoja(rankingModelo.getModelo().getSequencial(), rankingEstilo.getEstilo().getValor(), parametrosConsultaPorPeriodoDTO));
148
 
149
                                        // PREENCHER COM LOJAS ATIVAS
150
                                        List<RankingComprasTransferenciasEstiloPorLojaDTO> rankingEstiloPorLoja = new ArrayList<RankingComprasTransferenciasEstiloPorLojaDTO>();
151
                                        List<LojaDTO> lojasDTO = lojaService.consultarLojasAtivas();
152
                                        for (LojaDTO lojaDTO : lojasDTO) {
153
                                                Boolean adicionarRankingLoja = true;
154
                                                for (RankingComprasTransferenciasEstiloPorLojaDTO rk : rankingPorLoja) {
155
                                                        if (rk.getLojaDTO().equals(lojaDTO)) {
156
                                                                rankingEstiloPorLoja.add(rk);
157
                                                                adicionarRankingLoja = false;
158
                                                                break;
159
                                                        }
566 blopes 160
                                                }
567 blopes 161
                                                if (adicionarRankingLoja) {
162
                                                        RankingComprasTransferenciasEstiloPorLojaDTO rank = new RankingComprasTransferenciasEstiloPorLojaDTO();
163
                                                        rank.setLojaDTO(lojaDTO);
164
                                                        rankingEstiloPorLoja.add(rank);
165
                                                }
566 blopes 166
                                        }
567 blopes 167
                                        rankingEstilo.setRankingsPorLoja(rankingEstiloPorLoja);
168
                                        rankingComprasTransferenciasDTO.getEstilos().add(rankingEstilo);
566 blopes 169
                                }
568 blopes 170
                                rankingComprasTransferenciasDTO.setAlertas(rankingComprasTransferenciasDTO.verificarAlertasLogistica(quantidadeMinimaTransferirComprar));
171
                        } else {
172
                                rankingComprasTransferenciasDTO.setEstilos(rankingEstiloDTO);
173
                                rankingComprasTransferenciasDTO.setAlertas(rankingComprasTransferenciasDTO.verificarAlertasCompras(quantidadeMinimaTransferirComprar));
561 blopes 174
                        }
175
                        ranking.add(rankingComprasTransferenciasDTO);
176
                }
177
 
568 blopes 178
                List<RankingComprasTransferenciasDTO> rankingComAlertas = retirarModelosSemAlertas(ranking);
179
                return rankingComAlertas;
180
        }
181
 
182
        private List<RankingComprasTransferenciasDTO> retirarModelosSemAlertas(List<RankingComprasTransferenciasDTO> ranking) {
564 blopes 183
                List<RankingComprasTransferenciasDTO> rankingComAlertas = new ArrayList<RankingComprasTransferenciasDTO>();
184
                for (RankingComprasTransferenciasDTO rank : ranking) {
185
                        if (!rank.getAlertas().isEmpty()) {
186
                                rankingComAlertas.add(rank);
187
                        }
188
                }
189
                return rankingComAlertas;
561 blopes 190
        }
191
 
192
        @Override
193
        public List<RankingComprasTransferenciasEstiloPorLojaDTO> consultarRankingPorEstiloPorLoja(Long sequencialModelo, String tipoEstilo, ParametrosConsultaPorPeriodoDTO parametrosConsultaPorPeriodoDTO) {
194
                return vendaRepository.consultarRankingPorEstiloPorLoja(sequencialModelo, tipoEstilo, parametrosConsultaPorPeriodoDTO);
195
        }
196
 
197
        @Override
566 blopes 198
        public List<RankingModeloDTO> consultarRankingModelos(ParametrosConsultaModelosMaisVendidosDTO parametrosConsulta, Boolean adicionarTodosModelosFavoritos) {
199
                List<RankingModeloDTO> rankingModelosMaisVendidos = new ArrayList<RankingModeloDTO>();
200
                rankingModelosMaisVendidos.addAll(vendaRepository.consultarModelosMaisVendidos(parametrosConsulta));
201
 
202
                if (adicionarTodosModelosFavoritos) {
203
                        // PREENCHER COM MODELOS FAVORITOS SEM VENDAS
204
                        ModeloDTO modeloDTO = new ModeloDTO();
205
                        modeloDTO.setAtivo(true);
206
                        modeloDTO.setIndicadorFavorito(true);
207
                        List<ModeloDTO> modelosFavoritos = modeloService.consultarModelos(modeloDTO);
208
                        List<RankingModeloDTO> modelosFavoritosSemVendas = new ArrayList<RankingModeloDTO>();
209
                        for (ModeloDTO modeloFavorito : modelosFavoritos) {
210
                                Boolean adicionarModelo = true;
211
                                for (RankingModeloDTO ranking : rankingModelosMaisVendidos) {
212
                                        if (ranking.getModelo().equals(modeloFavorito)) {
213
                                                adicionarModelo = false;
214
                                                break;
215
                                        }
216
                                }
217
                                if (adicionarModelo) {
218
                                        RankingModeloDTO rankingModeloDTO = new RankingModeloDTO();
219
                                        rankingModeloDTO.setModelo(modeloFavorito);
220
                                        modelosFavoritosSemVendas.add(rankingModeloDTO);
221
                                }
222
                        }
223
                        rankingModelosMaisVendidos.addAll(modelosFavoritosSemVendas);
224
                }
225
 
226
                return rankingModelosMaisVendidos;
561 blopes 227
        }
228
 
229
        @Override
230
        public List<RankingComprasTransferenciasEstiloDTO> consultarRankingPorEstilo(Long sequencialModelo, ParametrosConsultaPorPeriodoDTO parametrosConsultaPorPeriodoDTO) {
231
                return vendaRepository.consultarRankingPorEstilo(sequencialModelo, parametrosConsultaPorPeriodoDTO);
232
        }
233
 
582 blopes 234
        @Override
235
        public List<RankingProdutoDTO> consultarProdutosVendidos(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
236
                List<RankingProdutoDTO> produtosVendidosConsultados = vendaRepository.consultarProdutosVendidos(parametrosConsulta);
237
                for (RankingProdutoDTO produtoVendido : produtosVendidosConsultados) {
238
                        produtoVendido.atualizarTempoEstoque(parametrosConsulta.getDataInicial(), parametrosConsulta.getDataFinal());
239
                }
240
                return produtosVendidosConsultados;
241
        }
242
 
583 blopes 243
        @Override
244
        public List<RankingProdutoDTONovo> consultarProdutosDTOVendidos(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
245
                List<RankingProdutoDTONovo> produtosVendidosConsultados = vendaRepository.consultarProdutosVendidosDTO(parametrosConsulta);
246
                for (RankingProdutoDTONovo produtoVendido : produtosVendidosConsultados) {
247
                        produtoVendido.atualizarTempoEstoque(parametrosConsulta.getDataInicial(), parametrosConsulta.getDataFinal());
248
                }
249
                return produtosVendidosConsultados;
250
        }
251
 
229 espaco 252
        /*
253
        private LancamentoService lancamentoService;
254
        private VendaFormaPagamentoService vendaFormaPagamentoService;
255
        private ProdutoService produtoService;
256
        private ProdutoLojaService produtoLojaService;
257
        private VendedorService vendedorService;
258
        private FuncionarioService funcionarioService;
259
        private LojaService lojaService;
260
        private PedidoService pedidoService;
261
        private ParcelaService parcelaService;
262
        private AvaliacaoService avaliacaoService;
263
        private AvaliacaoFuncionarioService avaliacaoFuncionarioService;
264
        private AvaliacaoLojaService avaliacaoLojaService;
265
        private VendaVivoService vendaVivoService;
266
        private ModeloService modeloService;
267
        private CupomService cupomService;
268
        private BancoHorasService bancoHorasService;
269
        private EstoqueAuditoriaService estoqueAuditoriaService;
270
 
271
        private Ordenador ordenador;
272
        private NotaFiscalRepository notaFiscalRepository;
273
 
274
        @Autowired
275
        public VendaServiceImpl(Validador validador, VendaRepository vendaRepository, LancamentoService lancamentoService,
276
                        VendaFormaPagamentoService vendaFormaPagamentoService, ProdutoService produtoService, ProdutoLojaService produtoLojaService,
277
                        VendedorService vendedorService, FuncionarioService funcionarioService, LojaService lojaService, PedidoService pedidoService,
278
                        ParcelaService parcelaService, AvaliacaoService avaliacaoService, AvaliacaoFuncionarioService avaliacaoFuncionarioService,
279
                        AvaliacaoLojaService avaliacaoLojaService, VendaVivoService vendaVivoService, ModeloService modeloService, CupomService cupomService,
280
                        BancoHorasService bancoHorasService, EstoqueAuditoriaService estoqueAuditoriaService, NotaFiscalRepository notaFiscalRepository) {
281
                super(validador);
282
                this.vendaRepository = vendaRepository;
283
                this.funcionarioService = funcionarioService;
284
                this.lancamentoService = lancamentoService;
285
                this.vendaFormaPagamentoService = vendaFormaPagamentoService;
286
                this.produtoService = produtoService;
287
                this.produtoLojaService = produtoLojaService;
288
                this.vendedorService = vendedorService;
289
                this.lojaService = lojaService;
290
                this.pedidoService = pedidoService;
291
                this.parcelaService = parcelaService;
292
                this.avaliacaoService = avaliacaoService;
293
                this.avaliacaoFuncionarioService = avaliacaoFuncionarioService;
294
                this.avaliacaoLojaService = avaliacaoLojaService;
295
                this.vendaVivoService = vendaVivoService;
296
                this.modeloService = modeloService;
297
                this.cupomService = cupomService;
298
                this.bancoHorasService = bancoHorasService;
299
                this.estoqueAuditoriaService = estoqueAuditoriaService;
300
                this.ordenador = new OrdenadorImpl();
301
                this.notaFiscalRepository = notaFiscalRepository;
302
        }
303
 
304
        @Override
305
        protected GenericRepository<Venda> getRepository() {
306
                return vendaRepository;
307
        }
308
 
309
        @Override
310
        protected void regrasNegocioCadastrar(Venda venda) {
311
                if (VerificadorUtil.estaNulo(venda.getVendedor())) {
312
                        throw new NegocioException("Obrigatório informar o vendedor.");
313
                }
314
                venda.setDataVenda(DataUtils.getDataAtual());
315
                venda.setTipoSituacao(TipoSituacaoVenda.NOVO.getValor());
316
        }
317
        */
318
        /***************************************************************/
319
        /*
320
        @Override
321
        public Venda detalharVenda(Venda venda) {
322
                return vendaRepository.detalharVenda(venda);
323
        }
324
 
325
        @Override
326
        public Venda detalharVendaCompleta(Venda venda) {
327
                return vendaRepository.detalharVendaCompleta(venda);
328
        }
329
 
330
        public void excluirVenda(Venda venda, Usuario usuario) {
331
                List<NotaFiscal> notasVinculadas = desvincularNotaFiscalEmitida(venda, usuario);
332
                verificarSeExisteLancamentoFinanceiro(venda);
333
                reporEstoqueAoExcluirVenda(venda);
334
                excluirPagamentos(venda);
335
                super.excluir(venda);
336
                enviarEmail(venda, usuario, notasVinculadas);
337
        }
338
 
339
        private List<NotaFiscal> desvincularNotaFiscalEmitida(Venda venda, Usuario usuario) {
340
                List<NotaFiscal> notasFiscais = notaFiscalRepository.consultarNotasFiscais(venda);
341
                for (NotaFiscal nf : notasFiscais) {
342
                        nf.setObservacaoVenda("VENDA ID: " + venda.getSequencial() + " em " +
343
                                DataUtils.converterDataComHorarioParaString(venda.getDataVenda()) + ". " +
344
                                venda.getJustificativaParaExcluir());
345
                        notaFiscalRepository.desvincularVenda(nf);
346
                }
347
                return notasFiscais;
348
        }
349
 
350
        private void verificarSeExisteLancamentoFinanceiro(Venda venda) {
351
                if (parcelaService.verificarPossuiParcela(venda)) {
352
                        throw new NegocioException("Não é permitido excluir uma venda com lançamentos financeiros.");
353
                }
354
        }
355
 
356
        public void reporEstoqueAoExcluirVenda(Venda venda) {
357
                for (Lancamento lancamento : venda.getLancamentos()) {
358
                        alterarEstoqueProduto(1, venda.getLoja(), lancamento.getProduto().getCodigo());
359
                }
360
        }
361
 
362
        private void excluirPagamentos(Venda venda) {
363
                for (VendaFormaPagamento vendaFormaPagamento : venda.getListaVendaFormaPagamentos()) {
364
//                      vendaFormaPagamentoService.excluirPorId(vendaFormaPagamento);
365
                        vendaFormaPagamentoService.excluir(vendaFormaPagamento);
366
                }
367
        }
368
 
369
        private void enviarEmail(Venda venda, Usuario usuario, List<NotaFiscal> notasFiscaisVinculadas) {
370
                String diaAtual = DataUtils.converterDataParaString(DataUtils.getDataAtual());
371
                StringBuilder conteudo = new StringBuilder();
372
                conteudo.append(montarDadosDaVenda(venda, usuario, venda.getLancamentos(), venda.getVendaFormaPagamentos()));
373
                if (!notasFiscaisVinculadas.isEmpty()) {
374
                        conteudo.append("--------------------------------------------------\n\n");
375
                        conteudo.append("NOTAS FISCAIS DESVINCULADAS:\n");
376
                        for (NotaFiscal nota : notasFiscaisVinculadas) {
377
                                conteudo.append("NÚMERO: " + nota.getNumeroNotaFiscal() + "\n");
378
                        }
379
                }
380
                new GerenciadorEmailImpl()
381
                        .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_DIRECAO)
382
                        .comAssunto("ESPAÇO CASE - OPERAÇÃO DE EXCLUSÃO DE VENDA: " + diaAtual)
383
                        .comConteudo(conteudo.toString())
384
                        .enviar();
385
        }
386
 
387
        @Override
388
        public Venda cadastrarVendaPeloPDV(ParametrosVendaDTO parametrosVenda) {
389
                verificarLancamentos(parametrosVenda.getLancamentos());
390
//              lancarExcecaoCasoFreteContraditorio(parametrosVenda);
391
                lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(parametrosVenda);
392
                lancarExcecaoSeValoresNaoSaoIguais(parametrosVenda);
393
                Venda venda = new Venda(parametrosVenda);
394
                cadastrar(venda);
395
                cadastrarLancamentos(parametrosVenda, venda);
396
                cadastrarPagamentos(parametrosVenda, venda);
397
                alterarSituacaoPedido(parametrosVenda.getPedidoVinculado(), venda);
398
                enviarAlertasPorEmail(parametrosVenda, venda);
399
                venda.verificarSePermiteEmissaoNotaFiscal();
400
                venda.setEmitirNotaFiscal(verificarEmissaoNotaFiscal(parametrosVenda, venda));
401
                return venda;
402
        }
403
 
404
        private Boolean verificarEmissaoNotaFiscal(ParametrosVendaDTO parametrosVenda, Venda venda) {
405
                if (venda.getPermitirEmissaoNotaFiscal() == false) {return false;}
406
                Boolean emitir = null;
407
                emitir = naoEmitirLojaSemPermissao(parametrosVenda);
408
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
409
 
410
                emitir = naoEmitirCpfCnpjInvalido(parametrosVenda);
411
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
412
 
413
                emitir = emitirLojaComEmissaoObrigatoria(parametrosVenda);
414
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
415
 
416
                emitir = emitirProdutoComEmissaoObrigatoria(parametrosVenda);
417
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
418
 
419
                emitir = emitirVendasAcimaQuinhetosReais(parametrosVenda);
420
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
421
 
422
                emitir = emitirVendaPagamentoCartao(parametrosVenda);
423
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
424
                return false;
425
        }
426
 
427
        private Boolean naoEmitirLojaSemPermissao(ParametrosVendaDTO parametrosVenda) {
428
                if (parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.NAO_PERMITIR_EMISSAO.getValor()) ||
429
                                parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.NAO_EMITIR.getValor())) {
430
                        return false;
431
                }
432
                return null;
433
        }
434
 
435
        private Boolean naoEmitirCpfCnpjInvalido(ParametrosVendaDTO parametrosVenda) {
436
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getCliente())) {
437
                        if (!parametrosVenda.getCliente().cpfCnpjEhValido()) {
438
                                return false;
439
                        }
440
                }
441
                return null;
442
        }
443
 
444
        private Boolean emitirLojaComEmissaoObrigatoria(ParametrosVendaDTO parametrosVenda) {
445
                if (parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.TODAS_VENDAS.getValor())) {
446
                        return true;
447
                }
448
                return null;
449
        }
450
 
451
 
452
 
453
        private Boolean emitirProdutoComEmissaoObrigatoria(ParametrosVendaDTO parametrosVenda) {
454
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
455
                        if (lancamento.getProduto().getIndicadorEmissaoNotaFiscal()) {
456
                                return true;
457
                        }
458
                }
459
                return null;
460
        }
461
 
462
        private Boolean emitirVendasAcimaQuinhetosReais(ParametrosVendaDTO parametrosVenda) {
463
                Double valorVenda = new Double(0.0);
464
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
465
                        valorVenda = valorVenda + lancamento.getValorVenda();
466
                }
467
                if (valorVenda > 499.9) {
468
                        return true;
469
                }
470
                return null;
471
        }
472
 
473
        private Boolean emitirVendaPagamentoCartao(ParametrosVendaDTO parametrosVenda) {
474
                if (parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.VENDAS_OBRIGATORIAS.getValor())) {
475
                        for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
476
                                if (pagamento.getFormaPagamento().formaPagamentoEhCredito() ||
477
                                                pagamento.getFormaPagamento().formaPagamentoEhDebito() ||
478
                                                pagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {
479
                                        return true;
480
                                }
481
                        }
482
                }
483
                return null;
484
        }
485
 
486
        private void alterarSituacaoPedido(Pedido pedidoVinculado, Venda venda) {
487
                if (VerificadorUtil.naoEstaNulo(pedidoVinculado)) {
488
                        PedidoHistorico pedidoHistorico = new PedidoHistorico();
489
                        pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
490
                        pedidoHistorico.setObservacao("VENDA: " + venda.getSequencial());
491
                        pedidoHistorico.setTipoSituacao(TipoSituacaoPedido.FINALIZADO_COM_VENDAS.getValor());
492
                        pedidoHistorico.setUsuario(venda.getUsuario());
493
                        pedidoHistorico.setPedido(pedidoVinculado);
494
                        if (VerificadorUtil.estaNulo(pedidoVinculado.getHistorico())) {
495
                                pedidoVinculado.setHistorico(new ArrayList<PedidoHistorico>());
496
                        }
497
                        pedidoVinculado.getHistorico().add(pedidoHistorico);
498
                        pedidoVinculado.setTipoSituacao(TipoSituacaoPedido.FINALIZADO_COM_VENDAS.getValor());
499
                        pedidoVinculado.setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
500
                        pedidoVinculado.setVenda(venda);
501
                        pedidoService.alterar(pedidoVinculado);
502
                }
503
        }
504
 
505
        private void enviarAlertasPorEmail(ParametrosVendaDTO parametrosVenda, Venda venda) {
506
                if (descontosEmProdutosSuperiores(parametrosVenda)) {
507
                        new GerenciadorEmailImpl()
508
                                .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_SUPERVISAO)
509
                                .comAssunto("ESPAÇO CASE - VENDA COM DESCONTO SUPERIOR : " + DataUtils.converterDataParaString(DataUtils.getDataAtual()))
510
                                .comConteudo(montarDadosDaVenda(venda, venda.getUsuario(), parametrosVenda.getLancamentos(), parametrosVenda.getLancamentosPagamentos()))
511
                                .enviar();
512
                }
513
                if (produtosComDescontoECupom(parametrosVenda)) {
514
                        new GerenciadorEmailImpl()
515
                                .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_SUPERVISAO)
516
                                .comAssunto("ESPAÇO CASE - VENDA COM PRODUTO COM DESCONTO E CUPOM PROMOCIONAL : " + DataUtils.converterDataParaString(DataUtils.getDataAtual()))
517
                                .comConteudo(montarDadosDaVenda(venda, venda.getUsuario(), parametrosVenda.getLancamentos(), parametrosVenda.getLancamentosPagamentos()))
518
                                .enviar();
519
                }
520
        }
521
*/     
522
        /*
523
        private void enviarAlertasPorEmail(ParametrosVendaDTO parametrosVenda, Venda venda) {
524
                if (pagamentoDividido(parametrosVenda)) {
525
                        if (descontoEmProdutos(parametrosVenda)) {
526
                                String diaAtual = DataUtils.converterDataParaString(DataUtils.getDataAtual());
527
                                new GerenciadorEmailImpl()
528
                                        .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_DIRECAO)
529
                                        .comAssunto("ESPAÇO CASE - VENDA DIVIDIDA E COM DESCONTO : " + diaAtual)
530
                                        .comConteudo(montarDadosDaVenda(venda, venda.getUsuario(), parametrosVenda.getLancamentos(), parametrosVenda.getLancamentosPagamentos()))
531
                                        .enviar();
532
                        }
533
                }
534
        }
535
        */
536
/*
537
        private Boolean pagamentoDividido(ParametrosVendaDTO parametrosVenda) {
538
                for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
539
                        if (pagamento.getFormaPagamento().formaPagamentoEhCreditoDividido()) {
540
                                return true;
541
                        }
542
                }
543
                return false;
544
        }
545
 
546
        private boolean descontoEmProdutos(ParametrosVendaDTO parametrosVenda) {
547
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
548
                        if (lancamento.comDescontos()) {
549
                                return true;
550
                        }
551
                }
552
                return false;
553
        }
554
 
555
        private boolean descontosEmProdutosSuperiores(ParametrosVendaDTO parametrosVenda) {
556
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
557
                        if (lancamento.comDescontosAcimaDoPermitido()) {
558
                                return true;
559
                        }
560
                }
561
                return false;
562
        }
563
 
564
        private boolean produtosComDescontoECupom(ParametrosVendaDTO parametrosVenda) {
565
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
566
                        if (VerificadorUtil.naoEstaNulo(lancamento.getCupom()) && lancamento.comDescontos()) {
567
                                return true;
568
                        }
569
                }
570
                return false;
571
        }
572
 
573
        @Override
574
        public void alterarVenda(ParametrosVendaDTO parametrosVenda, Usuario usuario, Boolean verificarJustificativa) {
575
                verificarLancamentos(parametrosVenda.getLancamentos());
576
                lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(parametrosVenda);
577
                lancarExcecaoSeValoresNaoSaoIguais(parametrosVenda);
578
                if (verificarJustificativa) {enviarEmailAlteracoes(parametrosVenda, usuario);}
579
                atualizarDadosDaVenda(parametrosVenda);
580
                alterarLancamentos(parametrosVenda);
581
                alterarPagamentos(parametrosVenda);
582
                alterar(parametrosVenda.getVenda());
583
                alterarSituacaoPedido(parametrosVenda.getPedidoVinculado(), parametrosVenda.getVenda());
584
        }
585
 
586
        private void enviarEmailAlteracoes(ParametrosVendaDTO parametrosVenda, Usuario usuario) {
587
                String diaAtual = DataUtils.converterDataParaString(DataUtils.getDataAtual());
588
                StringBuilder conteudo = new StringBuilder();
589
                conteudo.append("OPERAÇÃO REALIZADA POR: " + usuario.getNome() + "\n");
590
                conteudo.append("ID: " + parametrosVenda.getVenda().getSequencial() + "\n");
591
                conteudo.append("DATA DA VENDA: " + DataUtils.converterDataComHorarioParaString(parametrosVenda.getVenda().getDataVenda()) + "\n");
592
                conteudo.append("ALTERAÇÕES:\n");
593
                if (!parametrosVenda.getLoja().equals(parametrosVenda.getVenda().getLoja())) {
594
                        conteudo.append("LOJA: " + parametrosVenda.getVenda().getLoja().getDescricao() + " -> " + parametrosVenda.getLoja().getDescricao() + "\n");
595
                }
596
                if (!parametrosVenda.getVendedor().equals(parametrosVenda.getVenda().getVendedor())) {
597
                        conteudo.append("VENDEDOR: " + parametrosVenda.getVenda().getVendedor().getNomeDaPessoa() + " -> " + parametrosVenda.getVendedor().getNomeDaPessoa() + "\n");
598
                }
599
 
600
                String indicacao = "NÃO INFORMADO";
601
                String novaIndicacao = "NÃO INFORMADO";
602
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getVenda().getIndicacao())) {
603
                        indicacao = parametrosVenda.getVenda().getIndicacao().getNome();
604
                }
605
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getIndicacao())) {
606
                        novaIndicacao = parametrosVenda.getIndicacao().getNome();
607
                }
608
                if (!indicacao.equals(novaIndicacao)) {
609
                        conteudo.append("INDICAÇÃO: " + indicacao + " -> " + novaIndicacao + "\n");
610
                }
611
 
612
                String cliente = "NÃO INFORMADO";
613
                String novoCliente = "NÃO INFORMADO";
614
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getVenda().getCliente())) {
615
                        cliente = parametrosVenda.getVenda().getCliente().getNome();
616
                }
617
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getCliente())) {
618
                        novoCliente = parametrosVenda.getCliente().getNome();
619
                }
620
                if (!cliente.equals(novoCliente)) {
621
                        conteudo.append("CLIENTE: " + cliente + " -> " + novoCliente + "\n");
622
                }
623
 
624
                if (!parametrosVenda.getObservacao().equals(parametrosVenda.getVenda().getObservacao())) {
625
                        conteudo.append("OBS: " + parametrosVenda.getVenda().getObservacao() + " -> " + parametrosVenda.getObservacao() + "\n");
626
                }
627
 
628
                String formasPagamento = "";
629
                String novasFormasPagamento = "";
630
                List<VendaFormaPagamento> pagamentosAnteriores = consultarPagamentosCadastrados(parametrosVenda);
631
                if (!VerificadorUtil.isListaNulaOuVazia(pagamentosAnteriores)) {
632
                        for (VendaFormaPagamento pagamento : pagamentosAnteriores) {
633
                                formasPagamento = formasPagamento + " R$" + pagamento.getValorPagamento() + " (" + pagamento.getFormaPagamento().getDescricao();
634
                                if (VerificadorUtil.naoEstaNulo(pagamento.getBandeiraCartao())) {
635
                                        formasPagamento =  formasPagamento + " - " + pagamento.getBandeiraCartao().getTipoCartaoDescricao() + " - " + pagamento.getDescricaoDaBandeiraCartao();
636
                                }
637
                                formasPagamento =  formasPagamento + "); ";
638
                        }
639
                }
640
                if (!VerificadorUtil.isListaNulaOuVazia(parametrosVenda.getLancamentosPagamentos())) {
641
                        for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
642
                                novasFormasPagamento = novasFormasPagamento + " R$" + pagamento.getValorPagamento() + " (" + pagamento.getFormaPagamento().getDescricao();
643
                                if (VerificadorUtil.naoEstaNulo(pagamento.getBandeiraCartao())) {
644
                                        novasFormasPagamento =  novasFormasPagamento + " - " + pagamento.getBandeiraCartao().getTipoCartaoDescricao() + " - " + pagamento.getDescricaoDaBandeiraCartao();
645
                                }
646
                                novasFormasPagamento =  novasFormasPagamento + "); ";
647
                        }
648
                }
649
                if (!formasPagamento.equals(novasFormasPagamento)) {
650
                        conteudo.append("FORMAS DE PAGAMENTO: " + formasPagamento + " -> " + novasFormasPagamento + "\n");
651
                }
652
 
653
                conteudo.append("\n");
654
                conteudo.append("JUSTIFICATIVA: " + parametrosVenda.getVenda().getJustificativaParaExcluir() + "\n");
655
                new GerenciadorEmailImpl()
656
                        .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_SUPERVISAO)
657
                        .comAssunto("ESPAÇO CASE - ALTERAÇÃO DE VENDA: " + diaAtual)
658
                        .comConteudo(conteudo.toString())
659
                        .enviar();
660
        }
661
 
662
        private String montarDadosDaVenda(Venda venda, Usuario usuario, List<Lancamento> lancamentos, List<VendaFormaPagamento> pagamentos) {
663
                StringBuilder conteudo = new StringBuilder();
664
                conteudo.append("OPERAÇÃO REALIZADA POR: " + usuario.getNome() + "\n");
665
                conteudo.append("ID: " + venda.getSequencial() + "\n");
666
                conteudo.append("DATA DA VENDA: " + DataUtils.converterDataComHorarioParaString(venda.getDataVenda()) + "\n");
667
                conteudo.append("LOJA: " + venda.getLoja().getDescricao() + "\n");
668
                conteudo.append("VENDEDOR: " + venda.getVendedor().getNomeDaPessoa() + "\n");
669
                conteudo.append("TOTAL: " + valorTotalVenda(lancamentos) + "\n");
670
                conteudo.append("OBS.: " + venda.getObservacao() + "\n");
671
                if (VerificadorUtil.naoEstaNuloOuVazio(venda.getJustificativaParaExcluir())) {
672
                        conteudo.append("JUSTIFICATIVA: " + venda.getJustificativaParaExcluir() + "\n");
673
                } else {
674
                        conteudo.append("SEM JUSTIFICATIVA\n");
675
                }
676
                conteudo.append("--------------------------------------------------\n");
677
                for (Lancamento lancamento : lancamentos) {
678
                        conteudo.append(lancamento.getProduto().getCodigoProdutoPadrao() + " | ");
679
                        conteudo.append(lancamento.getProduto().getDescricaoComModeloCompleta() + ", ");
680
                        conteudo.append("R$" + lancamento.getValorVenda());
681
                        if (lancamento.comDescontos()) {
682
                                conteudo.append(" (COM DESCONTO DE R$" + lancamento.valorDescontos());
683
                                conteudo.append(" [" + lancamento.valorPercentualDescontos() + "])");
684
                        }
685
                        if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getObservacao())) {
686
                                conteudo.append(" (OBS.: " + lancamento.getObservacao() + ")");
687
                        }
688
                        if (VerificadorUtil.naoEstaNulo(lancamento.getCupom())) {
689
                                String descricaoCupom = lancamento.getCupom().getCodigo();
690
                                if (VerificadorUtil.naoEstaNulo(lancamento.getCupom().getDescricao())) {
691
                                        descricaoCupom = descricaoCupom + " - " + lancamento.getCupom().getDescricao();
692
                                }
693
                                conteudo.append(" (CUPOM: " + descricaoCupom + ")");
694
                        }
695
                        conteudo.append("\n");
696
                }
697
                conteudo.append("--------------------------------------------------\n");
698
                for (VendaFormaPagamento pagamento : pagamentos) {
699
                        if (VerificadorUtil.naoEstaNulo(pagamento.getBandeiraCartao())) {
700
                                conteudo.append(pagamento.getFormaPagamento().getDescricao() + " - " + pagamento.getBandeiraCartao().getDescricao() + ": R$" +  pagamento.getValorPagamento() + "\n");
701
                        } else {
702
                                conteudo.append(pagamento.getFormaPagamento().getDescricao() + ": R$" + pagamento.getValorPagamento() + "\n");
703
                        }
704
                        conteudo.append("\n");
705
                }
706
                conteudo.append("--------------------------------------------------\n");
707
                if (VerificadorUtil.naoEstaNulo(venda.getCliente())) {
708
                        conteudo.append("DADOS DO CLIENTE:\n");
709
                        conteudo.append(venda.getCliente().getNome() + "\n");
710
                        conteudo.append(venda.getCliente().getCpfCnpjFormatado() + "\n");
711
                }
712
                return conteudo.toString();
713
        }
714
 
715
        private Double valorTotalVenda(List<Lancamento> lancamentos) {
716
                Double total = new Double(0.0);
717
                for (Lancamento lancamento : lancamentos) {
718
                        if (lancamento.getAtivo()) {
719
                                total = total + lancamento.getValorVenda();
720
                        }
721
                }
722
                return total;
723
        }
724
 
725
        private void atualizarDadosDaVenda(ParametrosVendaDTO parametrosVenda) {
726
                parametrosVenda.getVenda().setVendedor(parametrosVenda.getVendedor());
727
                parametrosVenda.getVenda().setIndicacao(parametrosVenda.getIndicacao());
728
                parametrosVenda.getVenda().setCliente(parametrosVenda.getCliente());
729
                parametrosVenda.getVenda().setObservacao(parametrosVenda.getObservacao());
730
                parametrosVenda.getVenda().setNotaFiscal(parametrosVenda.getNotaFiscal());
731
                parametrosVenda.getVenda().setMaquineta(parametrosVenda.getMaquineta());
732
                if (!parametrosVenda.getVenda().getLoja().equals(parametrosVenda.getLoja())) {
733
                        for (Lancamento lancamento : parametrosVenda.getVenda().getLancamentos()) {
734
                                alterarEstoqueProduto(1, parametrosVenda.getVenda().getLoja(), lancamento.getProduto().getCodigo());
735
                                alterarEstoqueProduto(-1, parametrosVenda.getLoja(), lancamento.getProduto().getCodigo());
736
                        }
737
                        parametrosVenda.getVenda().setLoja(parametrosVenda.getLoja());
738
                        parametrosVenda.getVenda().setMaquineta(parametrosVenda.getLoja().getMaquineta());
739
                }
740
                parametrosVenda.getVenda().setTipoSituacao(parametrosVenda.getTipoSituacao());
741
                parametrosVenda.getVenda().setDataVenda(parametrosVenda.getDataVenda());
742
        }
743
 
744
        @Override
745
        public List<Venda> consultarVendasDoDia(Long sequencialLoja, Date dataVendas) {
746
                return vendaRepository.consultarVendasDoDia(sequencialLoja, dataVendas);
747
        }
748
 
749
        @Override
750
        public Integer obterQuantidadeDeVendasPorLojaEePeriodo(Venda venda, Date dataInicial, Date dataFinal) {
751
                return vendaRepository.obterQuantidadeDeVendasPorLojaEePeriodo(venda, dataInicial, dataFinal);
752
        }
753
 
754
        @Override
755
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
756
                Double valorTotal = vendaRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
757
                valorTotal = valorTotal - vendaRepository.obterValorDeCuponsUtilizadosPorLojaEePeriodo(parametrosConsulta);
758
                return valorTotal;
759
        }
760
 
761
        @Override
762
        public Double obterValorTotalDeDescontosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
763
                return vendaRepository.obterValorTotalDeDescontosPorLojaEePeriodo(parametrosConsulta);
764
        }
765
 
766
        @Override
767
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(ParametrosConsultaVendasDTO parametrosConsultaVendas, List<FormaPagamento> formasDePagamento) {
768
                return vendaRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(parametrosConsultaVendas, formasDePagamento);
769
        }
770
 
771
        @Override
772
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
773
                return vendaRepository.obterQuantidadeProdutosVendidosPorLojaEePeriodo(parametrosConsultaVendas);
774
        }
775
 
776
        @Override
777
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodoNaoVivo(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
778
                return vendaRepository.obterQuantidadeProdutosVendidosPorLojaEePeriodoNaoVivo(parametrosConsultaVendas);
779
        }
780
 
781
        @Override
782
        public Integer obterQuantidadeProdutosVendidosPorEstiloEeGenero(Date dataInicial, Date dataFinal, Long sequencialLoja, Long sequencialModelo, String tipoProduto, String estiloProduto, String tipoGenero) {
783
                return vendaRepository.obterQuantidadeProdutosVendidosPorEstiloEeGenero(dataInicial, dataFinal, sequencialLoja, sequencialModelo, tipoProduto, estiloProduto, tipoGenero);
784
        }
785
 
786
        private void verificarLancamentos(List<Lancamento> lancamentos) {
787
                if (lancamentos.isEmpty()) {
788
                        throw new NegocioException("Obrigatório informar ao menos um produto");
789
                }
790
        }
791
*/     
792
        // TODO: EM DESENVOLVIMENTO
793
        /*
794
        private void lancarExcecaoCasoFreteContraditorio(ParametrosVendaDTO parametrosVenda) {
795
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getTipoFrete())) {
796
                        if (parametrosVenda.getTipoFrete().equals(ConstantesSEC.NotaFiscal.Transporte.SEM_OCORRENCIA_TRANSPORTE_9)
797
                                        && parametrosVenda.getValorFrete() > 0.0) {
798
                                throw new NegocioException("Não é possível informar o frete sem a ocorrência.");
799
                        }
800
                        if (parametrosVenda.getTipoFrete().equals(ConstantesSEC.NotaFiscal.Transporte.FRETE_POR_CONTA_REMETENTE_TRANSPORTE_PROPRIO_3)
801
                                        && parametrosVenda.getValorFrete() == 0.0) {
802
                                throw new NegocioException("É necessário informar o valor do frete.");
803
                        }
804
 
805
                }
806
                // CASO TENHA VALOR E: FRETE CIF, FRETE DE TERCEIROS, FRETE REMETENTE (TP) OU SEM OCORRÊNCIA
807
                // CASO NÃO TENHA VALOR E: FRETE FOB.
808
        }
809
        */
810
/*     
811
        private void lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(ParametrosVendaDTO parametrosVenda) {
812
                if (VerificadorUtil.isListaNulaOuVazia(parametrosVenda.getLancamentosPagamentos()) && VerificadorUtil.estaNuloOuVazio(parametrosVenda.getObservacao())) {
813
                        throw new NegocioException("Obrigatório informar as observações em vendas sem pagamentos");
814
                }
815
                if (VerificadorUtil.estaNulo(parametrosVenda.getLoja())) {
816
                        throw new NegocioException("Informe a loja");
817
                }
818
        }
819
*/
820
//      private void lancarExcecaoSeValoresNaoSaoIguais(ParametrosVendaDTO parametrosVenda) {
821
//              final double TOLERANCE = 0.01;
822
//              if(Math.abs(parametrosVenda.valorTotalLancamentos() /*+ parametrosVenda.getValorFrete() */- parametrosVenda.valorTotalPago()) > TOLERANCE) {
823
//                      throw new NegocioException("Valores pagos não corresponde ao valor vendido.");
824
//              }
825
//      }
826
/*
827
        private void cadastrarLancamentos(ParametrosVendaDTO parametrosVenda, Venda venda) {
828
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
829
                        cadastrarLancamento(parametrosVenda.getLoja(), venda, lancamento);
830
                }
831
        }
832
 
833
        private void alterarLancamentos(ParametrosVendaDTO parametrosVenda) {
834
                excluirLancamentosRetiradosDaLista(parametrosVenda, consultarLancamentosCadastrados(parametrosVenda));
835
                cadastrarNovosLancamentos(parametrosVenda);
836
        }
837
 
838
        private void excluirLancamentosRetiradosDaLista(ParametrosVendaDTO parametrosVenda, List<Lancamento> lancamentosAntigos) {
839
                for (Lancamento lancamentoAntigo : lancamentosAntigos) {
840
                        if (!parametrosVenda.getLancamentos().contains(lancamentoAntigo)) {
841
                                lancamentoService.excluir(lancamentoAntigo);
842
                                alterarEstoqueProduto(1, parametrosVenda.getLoja(), lancamentoAntigo.getProduto().getCodigo());
843
                        }
844
                }
845
        }
846
 
847
        private void cadastrarNovosLancamentos(ParametrosVendaDTO parametrosVenda) {
848
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
849
                        if (VerificadorUtil.estaNulo(lancamento.getSequencial())) {
850
                                cadastrarLancamento(parametrosVenda.getLoja(), parametrosVenda.getVenda(), lancamento);
851
                        }
852
                }
853
        }
854
 
855
        private List<Lancamento> consultarLancamentosCadastrados(ParametrosVendaDTO parametrosVenda) {
856
                Lancamento lancamentoDaVenda = new Lancamento();
857
                lancamentoDaVenda.setVenda(parametrosVenda.getVenda());
858
                return lancamentoService.consultarPassandoEntidade(lancamentoDaVenda, 0, lancamentoService.obterQuantidadeDeRegistrosPassandoEntidade(lancamentoDaVenda));
859
        }
860
 
861
        private void cadastrarLancamento(Loja loja, Venda venda, Lancamento lancamento) {
862
                lancamento.setVenda(venda);
863
                igualarValorVarejoComCompraSeProdutoForPadrao(lancamento);
864
                acrescentarValorIPISeHouver(lancamento);
865
                lancamentoService.cadastrar(lancamento);
866
                alterarEstoqueProduto(-1, loja, lancamento.getProduto().getCodigo());
867
                utilizarCupom(lancamento.getCupom());
868
 
869
        }
870
 
871
        private void igualarValorVarejoComCompraSeProdutoForPadrao(Lancamento lancamento) {
872
                if (VerificadorUtil.naoEstaNulo(lancamento.getProduto())) {
873
                        if (lancamento.getProduto().getCodigo().equals(ConstantesSEC.CODIGO_PRODUTO_PADRAO_000000)) {
874
                                lancamento.setValorVarejo(lancamento.getValorVenda());
875
                        }
876
                }
877
        }
878
 
879
        private void acrescentarValorIPISeHouver(Lancamento lancamento) {
880
                if (VerificadorUtil.naoEstaNulo(lancamento.getProduto())) {
881
                        lancamento.setValorCompra(lancamento.getProduto().getValorCompra());
882
//                      lancamento.setValorCompra(lancamento.getProduto().calculoOperacao());
883
                }
884
        }
885
 
886
        private void cadastrarPagamentos(ParametrosVendaDTO parametrosVenda, Venda venda) {
887
                for (VendaFormaPagamento vendaFormaPagamento : parametrosVenda.getLancamentosPagamentos()) {
888
                        adicionarMaquineta(vendaFormaPagamento, parametrosVenda, venda);
889
                        vendaFormaPagamento.setVenda(venda);
890
                        vendaFormaPagamentoService.cadastrar(vendaFormaPagamento);
891
                        utilizarCupom(vendaFormaPagamento.getCupom());
892
                }
893
        }
894
 
895
        private void adicionarMaquineta(VendaFormaPagamento vendaFormaPagamento, ParametrosVendaDTO parametrosVenda, Venda venda) {
896
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCartao()) {
897
                        if (VerificadorUtil.estaNulo(parametrosVenda.getMaquineta())) {
898
                                parametrosVenda.setMaquineta(parametrosVenda.getLoja().getMaquineta());
899
                        }
900
                        venda.setMaquineta(parametrosVenda.getMaquineta());
901
                }
902
        }
903
 
904
        private void alterarPagamentos(ParametrosVendaDTO parametrosVenda) {
905
                excluirPagamentosRetiradosDaLista(parametrosVenda, consultarPagamentosCadastrados(parametrosVenda));
906
                cadastrarNovosPagamentos(parametrosVenda);
907
        }
908
 
909
        private void excluirPagamentosRetiradosDaLista(ParametrosVendaDTO parametrosVenda, List<VendaFormaPagamento> pagamentosAntigos) {
910
                for (VendaFormaPagamento pagamentoAntigo : pagamentosAntigos) {
911
                        if (!parametrosVenda.getLancamentosPagamentos().contains(pagamentoAntigo)) {
912
                                vendaFormaPagamentoService.excluir(pagamentoAntigo);
913
                        }
914
//                      if (verificarSePagamentoFoiRetiradoDaLista(parametrosVenda.getLancamentosPagamentos(), pagamentoAntigo)) {
915
//                              vendaFormaPagamentoService.excluirPorId(pagamentoAntigo);
916
//                      }
917
                }
918
        }
919
 
920
        private boolean verificarSePagamentoFoiRetiradoDaLista(List<VendaFormaPagamento> pagamentos, VendaFormaPagamento pagamentoAntigo) {
921
                boolean pagamentoRetirado = true;
922
                for (VendaFormaPagamento pagamento : pagamentos) {
923
                        if (pagamento.getCodigoDaFormaPagamento().equals(pagamentoAntigo.getCodigoDaFormaPagamento())) {
924
                                if (verificarSeBandeiraCartaoEhIgual(pagamento.getCodigoDaBandeiraCartao(), pagamentoAntigo.getCodigoDaBandeiraCartao()) &&
925
                                                pagamento.getValorPagamento().equals(pagamentoAntigo.getValorPagamento())) {
926
                                        return false;
927
                                } else {
928
                                        pagamento.setVenda(pagamentoAntigo.getVenda());
929
                                        vendaFormaPagamentoService.alterar(pagamento);
930
                                        return false;
931
                                }
932
                        }
933
                }
934
                return pagamentoRetirado;
935
        }
936
 
937
        private boolean verificarSeBandeiraCartaoEhIgual(Long codigoDaBandeiraCartao, Long codigoDaBandeiraCartaoSegundo) {
938
                if (VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartao) && VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartaoSegundo)) {
939
                        return codigoDaBandeiraCartao.equals(codigoDaBandeiraCartaoSegundo);
940
                }
941
                if ((VerificadorUtil.estaNulo(codigoDaBandeiraCartao) && VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartaoSegundo)) ||
942
                                (VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartao) && VerificadorUtil.estaNulo(codigoDaBandeiraCartaoSegundo))) {
943
                        return false;
944
                }
945
                return true;
946
        }
947
 
948
        private void cadastrarNovosPagamentos(ParametrosVendaDTO parametrosVenda) {
949
                for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
950
                        if (VerificadorUtil.estaNulo(pagamento.getSequencial())) {
951
                                adicionarMaquineta(pagamento, parametrosVenda, parametrosVenda.getVenda());
952
                                pagamento.setVenda(parametrosVenda.getVenda());
953
                                vendaFormaPagamentoService.cadastrar(pagamento);
954
                                utilizarCupom(pagamento.getCupom());
955
                        }
956
                }
957
        }
958
 
959
        private List<VendaFormaPagamento> consultarPagamentosCadastrados(ParametrosVendaDTO parametrosVenda) {
960
                VendaFormaPagamento pagamentoDaVenda = new VendaFormaPagamento();
961
                pagamentoDaVenda.setVenda(parametrosVenda.getVenda());
962
                return vendaFormaPagamentoService.consultarPassandoEntidade(pagamentoDaVenda, 0, vendaFormaPagamentoService.obterQuantidadeDeRegistrosPassandoEntidade(pagamentoDaVenda));
963
        }
964
 
965
        private void alterarEstoqueProduto(Integer quantidadeAlterar, Loja loja, String codigoProduto) {
966
                if (VerificadorUtil.naoEstaNulo(codigoProduto)) {
967
                        Produto produto = produtoService.consultarProdutoPorCodigo(codigoProduto);
968
                        produtoLojaService.alterarEstoqueAcrescentandoQuantidadeInformada(quantidadeAlterar, produto, loja);
969
                }
970
        }
971
 
972
        private void utilizarCupom(Cupom cupom) {
973
                if (VerificadorUtil.naoEstaNulo(cupom)) {
974
                        Cupom cupomUtilizado = cupomService.consultarPorId(cupom);
975
                        cupomUtilizado.setDataHoraUtilizado(DataUtils.getDataAtual());
976
                        if (VerificadorUtil.estaNulo(cupomUtilizado.getQuantidadeUtilizada())) {
977
                                cupomUtilizado.setQuantidadeUtilizada(0);
978
                        }
979
                        cupomUtilizado.setQuantidadeUtilizada(cupomUtilizado.getQuantidadeUtilizada() + 1);
980
                        cupomService.alterar(cupomUtilizado);
981
                }
982
        }
983
 
984
        @Override
985
        public List<Venda> consultarVendasPorDemanda(ParametrosConsulta<Venda> parametrosConsulta, Integer primeiroRegistro,
986
                        Integer tamanhoPagina, String sortField, String orderSort, Map<String, Object> filters) {
987
                return vendaRepository.consultarVendasPorDemanda(parametrosConsulta, primeiroRegistro, tamanhoPagina, sortField, orderSort, filters);
988
        }
989
 
990
        @Override
991
        public List<Venda> consultarVendaPorParametros(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
992
                return vendaRepository.consultarVendaPorParametros(parametrosConsultaVendas);
993
        }
994
 
995
        @Override
996
        public GraficoAcumuladoDTO consultarGrafico(String mes, String ano) {
997
                return vendaRepository.consultarGrafico(mes, ano);
998
        }
999
 
1000
        @Override
1001
        public List<RankingVendedorDTO> consultarRankingVendedores(Date dataInicial, Date dataFinal, Boolean produtosComissionados, Loja lojaSelecionada) {
1002
                List<RankingVendedorDTO> rankingVendedores = new ArrayList<RankingVendedorDTO>();
1003
                List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradoresAtivos(lojaSelecionada);
1004
                for (Vendedor vendedor : vendedores) {
1005
                        RankingVendedorDTO vendedorConsultado = consultarRankingVendedor(vendedor, dataInicial, dataFinal, produtosComissionados);
1006
                        rankingVendedores.add(vendedorConsultado);
1007
                }
1008
                return (List<RankingVendedorDTO>) ordenador.ordenar(rankingVendedores);
1009
        }
1010
 
1011
        @Override
1012
        public RankingVendedorDTO consultarRankingVendedor(Vendedor vendedor, Vigencia vigencia, Boolean produtosComissionados) {
1013
                Avaliacao avaliacao = avaliacaoService.consultarAvaliacaoDaVigencia(vigencia);
1014
                RankingVendedorDTO rankingVendedor = consultarRankingVendedor(vendedor, vigencia.getDataInicio(), vigencia.getDataFim(), produtosComissionados);
1015
                rankingVendedor.setFuncionario(funcionarioService.consultarFuncionarioPorPessoa(vendedor.getPessoa()));
1016
                rankingVendedor.setQuantidadeBancoHoras(bancoHorasService.consultarQuantidadeHoras(rankingVendedor.getFuncionario()));
1017
                AvaliacaoFuncionario avaliacaoFuncionario = avaliacaoFuncionarioService.detalhar(vendedor.getPessoa(), avaliacao);
1018
                if (VerificadorUtil.naoEstaNuloOuVazio(avaliacaoFuncionario)) {
1019
                        rankingVendedor.setAvaliacaoFuncionario(avaliacaoFuncionario);
1020
                        if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getPorcentagemComissao())) {
1021
                                rankingVendedor.setComissao(calcularComissao(rankingVendedor.getValorTotalVendido(), avaliacaoFuncionario.getPorcentagemComissao()/100));
1022
                        } else {
1023
                                rankingVendedor.setComissao(calcularComissao(rankingVendedor.getValorTotalVendido(), avaliacaoFuncionario.retornarFaixaComissao(rankingVendedor.getValorTotalVendido(), rankingVendedor.getFuncionario().getTipoComissionamento())));
1024
                        }
1025
                }
1026
                return rankingVendedor;
1027
        }
1028
 
1029
        public Double calcularComissao(Double valorTotalVendido, Double porcentagemComissao) {
1030
                if (VerificadorUtil.naoEstaNuloOuVazio(porcentagemComissao)) {
1031
                        return valorTotalVendido * porcentagemComissao;
1032
                }
1033
                return 0.0;
1034
        }
1035
 
1036
        @Override
1037
        public RankingVendedorDTO consultarRankingVendedor(Vendedor vendedor, Date dataInicial, Date dataFinal, Boolean produtosComissionados) {
1038
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1039
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1040
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1041
                parametrosConsultaVendas.setVendedor(vendedor);
1042
                if (VerificadorUtil.naoEstaNulo(produtosComissionados)) {
1043
                        parametrosConsultaVendas.setIndicadorComissionado(produtosComissionados);
1044
                }
1045
 
1046
                RankingVendedorDTO rankingVendedor = new RankingVendedorDTO();
1047
                rankingVendedor.setVendedor(vendedor);
1048
                try {
1049
                        rankingVendedor.setFuncionario(funcionarioService.consultarFuncionarioPorPessoa(vendedor.getPessoa()));
1050
                        rankingVendedor.setQuantidadeBancoHoras(bancoHorasService.consultarQuantidadeHoras(rankingVendedor.getFuncionario()));
1051
                } catch (RuntimeException e) {
1052
                        rankingVendedor.setFuncionario(null);
1053
                }
1054
 
1055
                rankingVendedor.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas));
1056
                rankingVendedor.setValorTotalDescontos(obterValorTotalDeDescontosPorLojaEePeriodo(parametrosConsultaVendas));
1057
                rankingVendedor.setQuantidadeTotalProdutosVendidos(obterQuantidadeProdutosVendidosPorLojaEePeriodo(parametrosConsultaVendas));
1058
 
1059
                Venda venda = new Venda();
1060
                venda.setVendedor(vendedor);
1061
                rankingVendedor.setQuantidadeVendas(obterQuantidadeDeVendasPorLojaEePeriodo(venda, dataInicial, dataFinal));
1062
                rankingVendedor.setQuantidadePedidos(obterQuantidadePedidosValidos(vendedor, null, dataInicial, dataFinal));
1063
                rankingVendedor.setQuantidadePedidosInvalidos(obterQuantidadePedidos(vendedor, null, dataInicial, dataFinal, TipoSituacaoPedido.INVALIDO.getValor()));
1064
                rankingVendedor.setQuantidadeContagens(obterQuantidadeDeContagens(vendedor, dataInicial, dataFinal));
1065
                rankingVendedor.setQuantidadeAtendimentos(obterQuantidadeDeAtendimentos(vendedor, dataInicial, dataFinal));
1066
                rankingVendedor.setValorTotalVendidoVivo(obterValorTotalBrutoDeVendasVivoPorLojaEePeriodo(parametrosConsultaVendas));
1067
 
1068
                rankingVendedor.setAvaliacaoFuncionario(avaliacaoFuncionarioService.consultarAvaliacaoFuncionarioPelaData(vendedor, DataUtils.getDataComHorarioMinimo(dataFinal)));
1069
                if (VerificadorUtil.naoEstaNulo(rankingVendedor.getAvaliacaoFuncionario())) {
1070
                        rankingVendedor.setPercentualDescontos(rankingVendedor.getAvaliacaoFuncionario().retornarPercentual(rankingVendedor.getValorTotalDescontos(), rankingVendedor.getValorTotalVendido()));
1071
                        rankingVendedor.setPercentualMetaMensal(rankingVendedor.getAvaliacaoFuncionario().retornarPercentualRealizado(rankingVendedor.getValorTotalVendido()));
1072
                        rankingVendedor.setPercentualMetaMensalVivo(rankingVendedor.getAvaliacaoFuncionario().retornarPercentualVivoRealizado(rankingVendedor.getValorTotalVendidoVivo()));
1073
                }
1074
 
1075
                ParametrosConsultaVendasDTO parametrosConsultaVendasDoDia = new ParametrosConsultaVendasDTO();
1076
                parametrosConsultaVendasDoDia.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()));
1077
                parametrosConsultaVendasDoDia.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getDataAtual()));
1078
                parametrosConsultaVendasDoDia.setVendedor(vendedor);
1079
                if (VerificadorUtil.naoEstaNulo(produtosComissionados)) {
1080
                        parametrosConsultaVendasDoDia.setIndicadorComissionado(produtosComissionados);
1081
                }
1082
                rankingVendedor.setValorTotalVendidoDoDia(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendasDoDia));
1083
 
1084
                return rankingVendedor;
1085
        }
1086
 
1087
        private Integer obterQuantidadePedidos(Vendedor vendedor, Loja loja, Date dataInicial, Date dataFinal, String tipoSituacao) {
1088
                if (VerificadorUtil.naoEstaNulo(vendedor)) {
1089
                        if (VerificadorUtil.estaNulo(vendedor.getPessoa())) {
1090
                                return 0;
1091
                        }
1092
                }
1093
                ParametrosConsultaPedidoDTO parametrosPedidos = new ParametrosConsultaPedidoDTO();
1094
                if (VerificadorUtil.naoEstaNulo(vendedor)) {
1095
                        parametrosPedidos.setPessoa(vendedor.getPessoa());
1096
                }
1097
                parametrosPedidos.setEntidade(new Pedido());
1098
                parametrosPedidos.getEntidade().setTipoSituacao(tipoSituacao);
1099
                parametrosPedidos.getEntidade().setLoja(loja);
1100
                parametrosPedidos.setDataInicial(dataInicial);
1101
                parametrosPedidos.setDataFinal(dataFinal);
1102
                return pedidoService.obterQuantidadeDeRegistrosParametrosConsulta(parametrosPedidos);
1103
        }
1104
 
1105
        private Integer obterQuantidadePedidosValidos(Vendedor vendedor, Loja loja, Date dataInicial, Date dataFinal) {
1106
                if (VerificadorUtil.naoEstaNulo(vendedor)) {
1107
                        if (VerificadorUtil.estaNulo(vendedor.getPessoa())) {
1108
                                return 0;
1109
                        }
1110
                }
1111
                ParametrosConsultaPedidoDTO parametrosPedidos = new ParametrosConsultaPedidoDTO();
1112
                if (VerificadorUtil.naoEstaNulo(vendedor)) {
1113
                        parametrosPedidos.setPessoa(vendedor.getPessoa());
1114
                }
1115
                parametrosPedidos.setEntidade(new Pedido());
1116
                parametrosPedidos.getEntidade().setLoja(loja);
1117
                parametrosPedidos.setDataInicial(dataInicial);
1118
                parametrosPedidos.setDataFinal(dataFinal);
1119
                parametrosPedidos.setValidos(true);
1120
                return pedidoService.obterQuantidadeDeRegistrosParametrosConsulta(parametrosPedidos);
1121
        }
1122
 
1123
        private Integer obterQuantidadeDeContagens(Vendedor vendedor, Date dataInicial, Date dataFinal) {
1124
                if (VerificadorUtil.naoEstaNulo(vendedor)) {
1125
                        if (VerificadorUtil.estaNulo(vendedor.getPessoa())) {
1126
                                return 0;
1127
                        }
1128
                }
1129
                return produtoLojaService.obterQuantidadeDeContagens(vendedor.getPessoa(), dataInicial, dataFinal);
1130
        }
1131
 
1132
        private Integer obterQuantidadeDeAtendimentos(Vendedor vendedor, Date dataInicial, Date dataFinal) {
1133
                if (VerificadorUtil.estaNulo(vendedor.getPessoa())) {
1134
                        return 0;
1135
                }
1136
                return produtoLojaService.obterQuantidadeDeAtendimentos(vendedor.getPessoa(), dataInicial, dataFinal);
1137
        }
1138
 
1139
        private Integer obterQuantidadeDeAtendimentos(Loja loja, Date dataInicial, Date dataFinal) {
1140
                return produtoLojaService.obterQuantidadeDeAtendimentos(loja, dataInicial, dataFinal);
1141
        }
1142
 
1143
        private Double obterValorTotalBrutoDeVendasVivoPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
1144
                ParametrosConsultaVendasVivoDTO parametrosConsultaVendasVivo = new ParametrosConsultaVendasVivoDTO();
1145
                parametrosConsultaVendasVivo.setVendedor(parametrosConsultaVendas.getVendedor());
1146
                parametrosConsultaVendasVivo.setDataInicial(parametrosConsultaVendas.getDataInicial());
1147
                parametrosConsultaVendasVivo.setDataFinal(parametrosConsultaVendas.getDataFinal());
1148
                return vendaVivoService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendasVivo);
1149
        }
1150
 
1151
        @Override
1152
        public List<RankingLojaDTO> consultarRankingLojas(Date dataInicial, Date dataFinal) {
1153
                List<RankingLojaDTO> rankingLojas = new ArrayList<RankingLojaDTO>();
1154
                List<Loja> lojas = lojaService.listarLojasAtivas();
1155
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1156
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1157
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1158
                for (Loja loja : lojas) {
1159
                        if (!loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_LOJA_FARMACIA_7)
1160
                                        && !loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_RESTAURANTE_16)) {
1161
                                parametrosConsultaVendas.setLoja(loja);
1162
 
1163
                                RankingLojaDTO rankingLoja = new RankingLojaDTO();
1164
                                rankingLoja.setLoja(loja);
1165
                                rankingLoja.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas)
1166
                                                - obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
1167
                                rankingLoja.setAvaliacaoLoja(avaliacaoLojaService.consultarAvaliacaoLojaPelaData(loja, DataUtils.getDataComHorarioMinimo(dataFinal)));
1168
                                if (VerificadorUtil.naoEstaNulo(rankingLoja.getAvaliacaoLoja())) {
1169
                                        rankingLoja.setValorMetaMensal(rankingLoja.getAvaliacaoLoja().getValorMetaMensal());
1170
                                }
1171
                                rankingLojas.add(rankingLoja);
1172
                        }
1173
                }
1174
                return (List<RankingLojaDTO>) ordenador.ordenar(rankingLojas);
1175
        }
1176
 
1177
        @Override
1178
        public List<RankingLojaDTO> consultarRankingLojasCompleto(Date dataInicial, Date dataFinal) {
1179
                List<RankingLojaDTO> rankingLojasCompleto = new ArrayList<RankingLojaDTO>();
1180
                List<RankingLojaDTO> rankingLojas = consultarRankingLojas(dataInicial, dataFinal);
1181
                for (RankingLojaDTO rankingLoja : rankingLojas) {
1182
                        rankingLoja.setQuantidadeVendas(obterQuantidadeDeVendasPorLojaEePeriodo(new Venda(rankingLoja.getLoja(), null), dataInicial, dataFinal));
1183
                        rankingLoja.setQuantidadeAtendimentos(obterQuantidadeDeAtendimentos(rankingLoja.getLoja(), dataInicial, dataFinal));
1184
                        rankingLoja.setQuantidadePedidos(obterQuantidadePedidosValidos(null, rankingLoja.getLoja(), dataInicial, dataFinal));
1185
                        rankingLoja.setQuantidadePedidosInvalidos(obterQuantidadePedidos(null, rankingLoja.getLoja(), dataInicial, dataFinal, TipoSituacaoPedido.INVALIDO.getValor()));
1186
 
1187
                        ParametrosConsultaPorPeriodoDTO parametrosConsulta = new ParametrosConsultaPorPeriodoDTO();
1188
                        ((ParametrosConsultaPorPeriodoDTO)parametrosConsulta).setDataInicial(dataInicial);
1189
                        ((ParametrosConsultaPorPeriodoDTO)parametrosConsulta).setDataFinal(dataFinal);
1190
                        EstoqueAuditoria estoqueAuditoria = new EstoqueAuditoria();
1191
                        estoqueAuditoria.setLoja(rankingLoja.getLoja());
1192
                        estoqueAuditoria.setTipoEstoqueAuditoria(TipoEstoqueAuditoria.AVARIA.getValor());
1193
                        parametrosConsulta.setEntidade(estoqueAuditoria);
1194
                        rankingLoja.setQuantidadeAvarias(estoqueAuditoriaService.obterQuantidadeTotalAuditoria(parametrosConsulta));
1195
 
1196
                        estoqueAuditoria.setTipoEstoqueAuditoria(TipoEstoqueAuditoria.TROCA.getValor());
1197
                        parametrosConsulta.setEntidade(estoqueAuditoria);
1198
                        rankingLoja.setQuantidadeTrocas(estoqueAuditoriaService.obterQuantidadeTotalAuditoria(parametrosConsulta));
1199
 
1200
                        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1201
                        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1202
                        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1203
                        parametrosConsultaVendas.setLoja(rankingLoja.getLoja());
1204
                        rankingLoja.setValorTotalDescontos(obterValorTotalDeDescontosPorLojaEePeriodo(parametrosConsultaVendas));
1205
                        rankingLoja.setCustoProdutosVendidos(obterValorProdutosUtilizadosEmVendasPorLojaEePeriodo(parametrosConsultaVendas));
1206
                        rankingLoja.setValorTotalEstoque(produtoService.valorTotalEstoque(rankingLoja.getLoja(), null));
1207
                        rankingLoja.setQuantidadeTotalEstoque(produtoService.quantidadeTotalEstoque(rankingLoja.getLoja()));
1208
 
1209
                        ParametrosConsultaLancamentosDTO parametros = new ParametrosConsultaLancamentosDTO();
1210
                        parametros.setCategoria(new Categoria(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_ALUGUEL_11));
1211
                        parametros.setCentroDeCustos(rankingLoja.getLoja());
1212
                        parametros.setPagamentoRealizado(true);
1213
                        parametros.setDataInicial(dataInicial);
1214
                        parametros.setDataFinal(dataFinal);
1215
                        Double valorCac = 0.0;
1216
 
1217
                        valorCac = somarValor(valorCac, parcelaService.obterValorPassandoParametrosConsulta(parametros));
1218
                        parametros.setCategoria(new Categoria(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_HORA_EXTRA_2));
1219
                        valorCac = somarValor(valorCac, parcelaService.obterValorPassandoParametrosConsulta(parametros));
1220
                        parametros.setCategoria(new Categoria(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_SALARIO_9));
1221
                        valorCac = somarValor(valorCac, parcelaService.obterValorPassandoParametrosConsulta(parametros));
1222
                        parametros.setCategoria(new Categoria(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_FERIAS_12));
1223
                        valorCac = somarValor(valorCac, parcelaService.obterValorPassandoParametrosConsulta(parametros));
1224
                        parametros.setCategoria(new Categoria(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_COMISSOES_8));
1225
                        valorCac = somarValor(valorCac, parcelaService.obterValorPassandoParametrosConsulta(parametros));
1226
                        parametros.setCategoria(new Categoria(ConstantesSEC.Categoria.SEQUENCIAL_CATEGORIA_VALE_TRANSPORTE_46));
1227
                        valorCac = somarValor(valorCac, parcelaService.obterValorPassandoParametrosConsulta(parametros));
1228
                        valorCac = valorCac / rankingLoja.getQuantidadeVendas();
1229
                        rankingLoja.setValorCac(valorCac);
1230
 
1231
                        rankingLojasCompleto.add(rankingLoja);
1232
                }
1233
                return (List<RankingLojaDTO>) ordenador.ordenar(rankingLojasCompleto);
1234
        }
1235
 
1236
        private Double somarValor(Double valor, Double valorAcrescentar) {
1237
                if (VerificadorUtil.naoEstaNulo(valorAcrescentar)) {
1238
                        return valor + valorAcrescentar;
1239
                }
1240
                return valor;
1241
        }
1242
 
1243
        @Override
1244
        public List<RankingLojaDTO> consultarRankingLojasExtras(Date dataInicial, Date dataFinal) {
1245
                List<RankingLojaDTO> rankingLojas = new ArrayList<RankingLojaDTO>();
1246
 
1247
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1248
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1249
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1250
                // rankingLojas.addAll(preenchendoLojasExtras(parametrosConsultaVendas));
1251
 
1252
                parametrosConsultaVendas.setLoja(null);
1253
                // rankingLojas.add(preencherLojaAssistencia(parametrosConsultaVendas));
1254
 
1255
                return (List<RankingLojaDTO>) ordenador.ordenar(rankingLojas);
1256
        }
1257
 
1258
        private RankingLojaDTO preencherLojaAssistencia(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
1259
                RankingLojaDTO rankingLojaServico = new RankingLojaDTO();
1260
                Loja lojaServico = new Loja();
1261
                lojaServico.setDescricao("ASSISTÊNCIA");
1262
                rankingLojaServico.setValorMetaMensal(new Double(0.0));
1263
                rankingLojaServico.setLoja(lojaServico);
1264
                rankingLojaServico.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
1265
                return rankingLojaServico;
1266
        }
1267
 
1268
        private RankingLojaDTO preencherVendasComPedidos(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
1269
                RankingLojaDTO rankingLojaServico = new RankingLojaDTO();
1270
                Loja lojaServico = new Loja();
1271
                lojaServico.setDescricao("E-COMMERCE");
1272
                rankingLojaServico.setValorMetaMensal(new Double(0.0));
1273
                rankingLojaServico.setLoja(lojaServico);
1274
                rankingLojaServico.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
1275
                return rankingLojaServico;
1276
        }
1277
 
1278
        private List<RankingLojaDTO> preenchendoLojasExtras(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
1279
                List<RankingLojaDTO> rankingLojas = new ArrayList<RankingLojaDTO>();
1280
                List<Loja> lojas = lojaService.listarLojasAtivas();
1281
                for (Loja loja : lojas) {
1282
                        if (loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_LOJA_FARMACIA_7)
1283
                                        || loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_RESTAURANTE_16)) {
1284
                                parametrosConsultaVendas.setLoja(loja);
1285
 
1286
                                RankingLojaDTO rankingLoja = new RankingLojaDTO();
1287
                                rankingLoja.setLoja(loja);
1288
                                rankingLoja.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas)
1289
                                                - obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
1290
                                rankingLoja.setAvaliacaoLoja(avaliacaoLojaService.consultarAvaliacaoLojaPelaData(loja, DataUtils.getDataComHorarioMinimo(parametrosConsultaVendas.getDataFinal())));
1291
                                if (VerificadorUtil.naoEstaNulo(rankingLoja.getAvaliacaoLoja())) {
1292
                                        rankingLoja.setValorMetaMensal(rankingLoja.getAvaliacaoLoja().getValorMetaMensal());
1293
                                }
1294
                                rankingLojas.add(rankingLoja);
1295
                        }
1296
                }
1297
                return rankingLojas;
1298
        }
1299
 
1300
        @Override
1301
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
1302
                parametrosConsultaVendas.setTipoProduto(TipoProduto.SERVICO.getValor());
1303
                Double valorTotal = vendaRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas);
1304
                parametrosConsultaVendas.setTipoProduto(null);
1305
                return VerificadorUtil.estaNulo(valorTotal)? new Double(0.0) : valorTotal;
1306
        }
1307
 
1308
        @Override
1309
        public List<RankingProdutoDTO> consultarProdutosVendidosResumido(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1310
                return vendaRepository.consultarProdutosVendidosResumido(parametrosConsulta);
1311
        }
1312
 
1313
        @Override
1314
        public List<RankingProdutoDTO> consultarProdutosParaTransferir(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1315
                return vendaRepository.consultarProdutosParaTransferir(parametrosConsulta);
1316
        }
1317
 
1318
        @Override
1319
        public List<RankingProdutoDTO> consultarRankingProdutos(Date dataInicial, Date dataFinal, Integer quantidadeProdutos, String tipoOrdenacao, Long sequencialLoja, String tipoProduto, Produto produto, Marca marca) {
1320
                return vendaRepository.consultarProdutosMaisVendidos(dataInicial, dataFinal, quantidadeProdutos, tipoOrdenacao, sequencialLoja, tipoProduto, produto, marca);
1321
        }
1322
 
1323
        @Override
1324
        public List<RankingModeloDTO> consultarRankingModelos(Date dataInicial, Date dataFinal, Integer quantidadeModelos, String tipoOrdenacao, String tipoProduto, Long sequencialLoja) {
1325
                ParametrosConsultaModelosMaisVendidosDTO parametros = new ParametrosConsultaModelosMaisVendidosDTO(dataInicial, dataFinal, quantidadeModelos, tipoOrdenacao, tipoProduto, sequencialLoja);
1326
                return this.consultarRankingModelos(parametros);
1327
        }
1328
 
1329
        @Override
1330
        public List<RankingComprasTransferenciasDTO> consultarPlanejamentoParaCompras(ParametrosConsultaParaComprasTransferenciasDTO parametrosParaConsulta) {
1331
                Integer limite = parametrosParaConsulta.getQuantidadeModelos();
1332
                if (parametrosParaConsulta.getIndicadorConsultarTodosModelos()) {
1333
                        limite = null;
1334
                }
1335
                List<RankingComprasTransferenciasDTO> planejamentos = new ArrayList<RankingComprasTransferenciasDTO>();
1336
                ParametrosConsultaModelosMaisVendidosDTO parametrosConsulta = new ParametrosConsultaModelosMaisVendidosDTO(parametrosParaConsulta.getDataInicial(), parametrosParaConsulta.getDataFinal(), limite,
1337
                                parametrosParaConsulta.getTipoOrdenacao(), parametrosParaConsulta.getTipoProduto(), parametrosParaConsulta.getSequencialLoja(), parametrosParaConsulta.getModelo(), parametrosParaConsulta.getEstilo());
1338
                List<RankingModeloDTO> modelos = vendaRepository.consultarModelosMaisVendidos(parametrosConsulta);
1339
                for (RankingModeloDTO modelo : modelos) {
1340
                        RankingComprasTransferenciasDTO planejamento = new RankingComprasTransferenciasDTO();
1341
                        planejamento.setModelo(modelo.getModelo());
1342
                        planejamento.setValorTotalVendido(modelo.getValorTotalVendido());
1343
                        planejamento.setValorTotalComprado(modelo.getValorTotalComprado());
1344
                        planejamento.setQuantidadeVendas(modelo.getQuantidadeVendas());
1345
                        planejamento.setQuantidadeMinimaComprar(parametrosParaConsulta.getQuantidadeMinimaComprar());
1346
                        if (VerificadorUtil.naoEstaNuloOuVazio(modelo.getQuantidadeEstoqueLocal())) {
1347
                                planejamento.setQuantidadeEstoqueLocal(modelo.getQuantidadeEstoqueLocal().intValue());
1348
                        }
1349
                        planejamento.setQuantidadeEstoqueGeral(modelo.getQuantidadeEstoqueGeral().intValue());
1350
                        planejamentos.add(planejamento);
1351
                }
1352
 
1353
                if (parametrosParaConsulta.getIndicadorConsultarTodosModelos()) {
1354
                        List<Modelo> modelosAtivos = new ArrayList<Modelo>();
1355
                        if (VerificadorUtil.estaNulo(parametrosParaConsulta.getModelo())) {
1356
                                modelosAtivos = modeloService.consultarTodosAtivos();
1357
                        } else {
1358
                                modelosAtivos = modeloService.consultarPassandoEntidade(parametrosParaConsulta.getModelo(), 0, modeloService.obterQuantidadeDeRegistrosPassandoEntidade(parametrosParaConsulta.getModelo()));
1359
                        }
1360
                        for (Modelo modeloAtivo : modelosAtivos) {
1361
                                if (modeloNaoEstaPresenteNaLista(modelos, modeloAtivo)) {
1362
                                        RankingComprasTransferenciasDTO planejamento = new RankingComprasTransferenciasDTO();
1363
                                        planejamento.setModelo(modeloAtivo);
1364
                                        planejamento.setValorTotalVendido(new Double(0.0));
1365
                                        planejamento.setValorTotalComprado(new Double(0.0));
1366
                                        planejamento.setQuantidadeVendas(new Long(0));
1367
                                        planejamento.setQuantidadeMinimaComprar(parametrosParaConsulta.getQuantidadeMinimaComprar());
1368
                                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosParaConsulta.getSequencialLoja())) {
1369
                                                planejamento.setQuantidadeEstoqueLocal(produtoLojaService.consultarEstoqueModeloEeLoja(modeloAtivo, parametrosParaConsulta.getSequencialLoja(), null, parametrosParaConsulta.getTipoProduto(), null, null));
1370
                                        }
1371
                                        planejamento.setQuantidadeEstoqueGeral(produtoLojaService.consultarEstoqueModeloEeLoja(modeloAtivo, null, null, parametrosParaConsulta.getTipoProduto(), null, null));
1372
                                        if (planejamento.getQuantidadeEstoqueGeral() > 0) {
1373
                                                planejamentos.add(planejamento);
1374
                                        }
1375
                                }
1376
                        }
1377
                }
1378
 
1379
                if (parametrosParaConsulta.getTipoOrdenacao().equals(TipoOrdenacaoPlanejamentoCompras.QUANTIDADE_COMPRAR.getValor())) {
1380
                        return new ArrayList<RankingComprasTransferenciasDTO>(ordenador.ordenar(planejamentos));
1381
                }
1382
                return planejamentos;
1383
        }
1384
 
1385
        private Boolean modeloNaoEstaPresenteNaLista(List<RankingModeloDTO> rankingModelos, Modelo modeloAtivo) {
1386
                for (RankingModeloDTO rankingModelo : rankingModelos) {
1387
                        if (rankingModelo.getModelo().getSequencial().equals(modeloAtivo.getSequencial())) {
1388
                                return false;
1389
                        }
1390
                }
1391
                return true;
1392
        }
1393
 
1394
        @Override
1395
        public List<RankingComprasTransferenciasEstiloDTO> consultarDetalhamentoPlanejamentoParaCompras(ParametrosConsultaParaComprasTransferenciasDTO parametrosParaConsulta, Modelo modelo) {
1396
                List<RankingComprasTransferenciasEstiloDTO> estilos = new ArrayList<RankingComprasTransferenciasEstiloDTO>();
1397
                for (TipoEstiloProduto estiloProduto : TipoEstiloProduto.values()) {
1398
                        parametrosParaConsulta.setEstilo(StringUtil.setarUpperCase(estiloProduto.getValor()));
1399
                        RankingComprasTransferenciasEstiloDTO estilo = vendaRepository.consultarEstoqueEeVendasPorEstilo(parametrosParaConsulta, modelo);
1400
                        estilo.setRankingsPorLoja(vendaRepository.consultarEstoqueEeVendasEstiloPorLoja(parametrosParaConsulta, modelo));
1401
                        estilo.setQuantidadeMinimaComprar(parametrosParaConsulta.getQuantidadeMinimaComprar());
1402
                        estilos.add(estilo);
1403
                }
1404
                return estilos;
1405
        }
1406
 
1407
        @Override
1408
        public List<RankingVendedorDTO> consultarRankingPromocaoInterna(Date dataInicial, Date dataFinal) {
1409
                List<RankingVendedorDTO> rankingVendedores = new ArrayList<RankingVendedorDTO>();
1410
                List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradoresAtivos(null);
1411
                for (Vendedor vendedor : vendedores) {
1412
                        RankingVendedorDTO ranking = consultarRankingPromocaoInternaDoVendedor(vendedor, dataInicial, dataFinal);
1413
                        if (ranking.getValorTotalVendido() > new Double(0.0)) {
1414
                                rankingVendedores.add(ranking);
1415
                        }
1416
                }
1417
                return (List<RankingVendedorDTO>) ordenador.ordenar(rankingVendedores);
1418
        }
1419
 
1420
        @Override
1421
        public RankingVendedorDTO consultarRankingPromocaoInternaDoVendedor(Vendedor vendedor, Date dataInicial, Date dataFinal) {
1422
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1423
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1424
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1425
                parametrosConsultaVendas.setVendedor(vendedor);
1426
                RankingVendedorDTO rankingVendedor = new RankingVendedorDTO();
1427
                rankingVendedor.setVendedor(vendedor);
1428
 
1429
                rankingVendedor.setQuantidadePedidos(lancamentoService.obterQuantidadeVendasDosProdutosDaPromocaoInterna(parametrosConsultaVendas));
1430
//              if (rankingVendedor.getQuantidadePedidos() >= ConstantesSEC.ProdutosPromocaoInterna.QUANTIDADE_MINIMA_RECEBIMENTO) {
1431
                        rankingVendedor.setValorTotalVendido(lancamentoService.obterValorTotalVendidoDosProdutosDaPromocaoInterna(parametrosConsultaVendas) * ConstantesSEC.ProdutosPromocaoInterna.PERCENTUAL);
1432
//              } else {
1433
//                      rankingVendedor.setValorTotalVendido(new Double(0.0));
1434
//              }
1435
 
1436
                ParametrosConsultaVendasDTO parametrosConsultaVendasDoDia = new ParametrosConsultaVendasDTO();
1437
                parametrosConsultaVendasDoDia.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()));
1438
                parametrosConsultaVendasDoDia.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getDataAtual()));
1439
                parametrosConsultaVendasDoDia.setVendedor(vendedor);
1440
                rankingVendedor.setValorTotalVendidoDoDia(lancamentoService.obterValorTotalVendidoDosProdutosDaPromocaoInterna(parametrosConsultaVendasDoDia));
1441
                return rankingVendedor;
1442
        }
1443
 
1444
        @Override
1445
        public List<VendasDTO> consultarVendas(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
1446
                return vendaRepository.consultarVendas(parametrosConsultaVendasDTO);
1447
        }
1448
*/     
1449
        /*
1450
        @Override
1451
        public List<RankingVendedorDTO> consultarRankingVendedores(Date dataInicial, Date dataFinal) {
1452
                List<RankingVendedorDTO> rankingVendedores = new ArrayList<RankingVendedorDTO>();
1453
                List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradores();
1454
                for (Vendedor vendedor : vendedores) {
1455
                        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1456
                        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1457
                        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1458
                        parametrosConsultaVendas.setVendedor(vendedor);
1459
                        RankingVendedorDTO rankingVendedor = new RankingVendedorDTO();
1460
                        rankingVendedor.setVendedor(vendedor);
1461
                        rankingVendedor.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas));
1462
                        rankingVendedor.setQuantidadePedidos(obterQuantidadePedidos(vendedor, dataInicial, dataFinal));
1463
                        rankingVendedores.add(rankingVendedor);
1464
                }
1465
                return (List<RankingVendedorDTO>) ordenador.ordenar(rankingVendedores);
1466
        }
1467
        */
1468
 
1469
}