Subversion Repositories Integrator Subversion

Rev

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