Subversion Repositories Integrator Subversion

Rev

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