Subversion Repositories Integrator Subversion

Rev

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

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