Subversion Repositories Integrator Subversion

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
package br.com.ec.domain.service.venda.impl;
2
 
3
import java.util.ArrayList;
4
import java.util.Date;
5
import java.util.List;
6
import java.util.Map;
7
 
8
import org.springframework.beans.factory.annotation.Autowired;
9
import org.springframework.stereotype.Service;
10
 
11
import br.com.ec.domain.dto.GraficoAcumuladoDTO;
12
import br.com.ec.domain.dto.ParametrosConsultaModelosMaisVendidosDTO;
13
import br.com.ec.domain.dto.ParametrosConsultaParaComprasTransferenciasDTO;
14
import br.com.ec.domain.dto.ParametrosConsultaPedidoDTO;
15
import br.com.ec.domain.dto.ParametrosConsultaProdutosVendidosDTO;
16
import br.com.ec.domain.dto.ParametrosConsultaVendasDTO;
17
import br.com.ec.domain.dto.ParametrosConsultaVendasVivoDTO;
18
import br.com.ec.domain.dto.ParametrosVendaDTO;
19
import br.com.ec.domain.dto.RankingComprasTransferenciasDTO;
20
import br.com.ec.domain.dto.RankingComprasTransferenciasEstiloDTO;
21
import br.com.ec.domain.dto.RankingLojaDTO;
22
import br.com.ec.domain.dto.RankingModeloDTO;
23
import br.com.ec.domain.dto.RankingProdutoDTO;
24
import br.com.ec.domain.dto.RankingVendedorDTO;
25
import br.com.ec.domain.dto.VendasDTO;
26
import br.com.ec.domain.model.Avaliacao;
27
import br.com.ec.domain.model.AvaliacaoFuncionario;
28
import br.com.ec.domain.model.Cupom;
29
import br.com.ec.domain.model.FormaPagamento;
30
import br.com.ec.domain.model.Lancamento;
31
import br.com.ec.domain.model.Loja;
32
import br.com.ec.domain.model.Marca;
33
import br.com.ec.domain.model.Modelo;
34
import br.com.ec.domain.model.NotaFiscal;
35
import br.com.ec.domain.model.Pedido;
36
import br.com.ec.domain.model.PedidoHistorico;
37
import br.com.ec.domain.model.Produto;
38
import br.com.ec.domain.model.Usuario;
39
import br.com.ec.domain.model.Venda;
40
import br.com.ec.domain.model.VendaFormaPagamento;
41
import br.com.ec.domain.model.Vendedor;
42
import br.com.ec.domain.model.Vigencia;
43
import br.com.ec.domain.model.tipos.TipoEmitirNotaFiscal;
44
import br.com.ec.domain.model.tipos.TipoEstiloProduto;
45
import br.com.ec.domain.model.tipos.TipoOrdenacaoPlanejamentoCompras;
46
import br.com.ec.domain.model.tipos.TipoProduto;
47
import br.com.ec.domain.model.tipos.TipoSituacaoPedido;
48
import br.com.ec.domain.model.tipos.TipoSituacaoVenda;
49
import br.com.ec.domain.service.avaliacao.AvaliacaoService;
50
import br.com.ec.domain.service.avaliacaofuncionario.AvaliacaoFuncionarioService;
51
import br.com.ec.domain.service.avaliacaoloja.AvaliacaoLojaService;
52
import br.com.ec.domain.service.bancohoras.BancoHorasService;
53
import br.com.ec.domain.service.cupom.CupomService;
54
import br.com.ec.domain.service.email.impl.GerenciadorEmailImpl;
55
import br.com.ec.domain.service.funcionario.FuncionarioService;
56
import br.com.ec.domain.service.lancamento.LancamentoService;
57
import br.com.ec.domain.service.loja.LojaService;
58
import br.com.ec.domain.service.modelo.ModeloService;
59
import br.com.ec.domain.service.parcela.ParcelaService;
60
import br.com.ec.domain.service.pedido.PedidoService;
61
import br.com.ec.domain.service.produto.ProdutoService;
62
import br.com.ec.domain.service.produtodaloja.ProdutoLojaService;
63
import br.com.ec.domain.service.venda.VendaService;
64
import br.com.ec.domain.service.vendaformapagamento.VendaFormaPagamentoService;
65
import br.com.ec.domain.service.vendavivo.VendaVivoService;
66
import br.com.ec.domain.service.vendedor.VendedorService;
67
import br.com.ec.domain.shared.ConstantesSEC;
68
import br.com.ec.domain.shared.Ordenador;
69
import br.com.ec.domain.shared.OrdenadorImpl;
70
import br.com.ec.infrastructure.repository.NotaFiscalRepository;
71
import br.com.ec.infrastructure.repository.VendaRepository;
72
import br.edu.cesmac.core.consulta.ParametrosConsulta;
73
import br.edu.cesmac.core.exception.NegocioException;
74
import br.edu.cesmac.core.generic.AbstractService;
75
import br.edu.cesmac.core.generic.GenericRepository;
76
import br.edu.cesmac.core.util.DataUtils;
77
import br.edu.cesmac.core.util.StringUtil;
78
import br.edu.cesmac.core.util.VerificadorUtil;
79
import br.edu.cesmac.core.validador.Validador;
80
 
81
@Service
82
public class VendaServiceImpl extends AbstractService<Venda> implements VendaService {
83
 
84
        private VendaRepository vendaRepository;
85
 
86
        private LancamentoService lancamentoService;
87
        private VendaFormaPagamentoService vendaFormaPagamentoService;
88
        private ProdutoService produtoService;
89
        private ProdutoLojaService produtoLojaService;
90
        private VendedorService vendedorService;
91
        private FuncionarioService funcionarioService;
92
        private LojaService lojaService;
93
        private PedidoService pedidoService;
94
        private ParcelaService parcelaService;
95
        private AvaliacaoService avaliacaoService;
96
        private AvaliacaoFuncionarioService avaliacaoFuncionarioService;
97
        private AvaliacaoLojaService avaliacaoLojaService;
98
        private VendaVivoService vendaVivoService;
99
        private ModeloService modeloService;
100
        private CupomService cupomService;
101
        private BancoHorasService bancoHorasService;
102
 
103
        private Ordenador ordenador;
104
        private NotaFiscalRepository notaFiscalRepository;
105
 
106
        @Autowired
107
        public VendaServiceImpl(Validador validador, VendaRepository vendaRepository, LancamentoService lancamentoService,
108
                        VendaFormaPagamentoService vendaFormaPagamentoService, ProdutoService produtoService, ProdutoLojaService produtoLojaService,
109
                        VendedorService vendedorService, FuncionarioService funcionarioService, LojaService lojaService, PedidoService pedidoService,
110
                        ParcelaService parcelaService, AvaliacaoService avaliacaoService, AvaliacaoFuncionarioService avaliacaoFuncionarioService,
111
                        AvaliacaoLojaService avaliacaoLojaService, VendaVivoService vendaVivoService, ModeloService modeloService, CupomService cupomService,
112
                        BancoHorasService bancoHorasService, NotaFiscalRepository notaFiscalRepository) {
113
                super(validador);
114
                this.vendaRepository = vendaRepository;
115
                this.funcionarioService = funcionarioService;
116
                this.lancamentoService = lancamentoService;
117
                this.vendaFormaPagamentoService = vendaFormaPagamentoService;
118
                this.produtoService = produtoService;
119
                this.produtoLojaService = produtoLojaService;
120
                this.vendedorService = vendedorService;
121
                this.lojaService = lojaService;
122
                this.pedidoService = pedidoService;
123
                this.parcelaService = parcelaService;
124
                this.avaliacaoService = avaliacaoService;
125
                this.avaliacaoFuncionarioService = avaliacaoFuncionarioService;
126
                this.avaliacaoLojaService = avaliacaoLojaService;
127
                this.vendaVivoService = vendaVivoService;
128
                this.modeloService = modeloService;
129
                this.cupomService = cupomService;
130
                this.bancoHorasService = bancoHorasService;
131
                this.ordenador = new OrdenadorImpl();
132
                this.notaFiscalRepository = notaFiscalRepository;
133
        }
134
 
135
        @Override
136
        protected GenericRepository<Venda> getRepository() {
137
                return vendaRepository;
138
        }
139
 
140
        @Override
141
        protected void regrasNegocioCadastrar(Venda venda) {
142
                if (VerificadorUtil.estaNulo(venda.getVendedor())) {
143
                        throw new NegocioException("Obrigatório informar o vendedor.");
144
                }
145
                venda.setDataVenda(DataUtils.getDataAtual());
146
                venda.setTipoSituacao(TipoSituacaoVenda.NOVO.getValor());
147
        }
148
 
149
        /***************************************************************/
150
 
151
        @Override
152
        public Venda detalharVenda(Venda venda) {
153
                return vendaRepository.detalharVenda(venda);
154
        }
155
 
156
        @Override
157
        public Venda detalharVendaCompleta(Venda venda) {
158
                return vendaRepository.detalharVendaCompleta(venda);
159
        }
160
 
161
        public void excluirVenda(Venda venda, Usuario usuario) {
162
                List<NotaFiscal> notasVinculadas = desvincularNotaFiscalEmitida(venda, usuario);
163
                verificarSeExisteLancamentoFinanceiro(venda);
164
                reporEstoqueAoExcluirVenda(venda);
165
                excluirPagamentos(venda);
166
                super.excluir(venda);
167
                enviarEmail(venda, usuario, notasVinculadas);
168
        }
169
 
170
        private List<NotaFiscal> desvincularNotaFiscalEmitida(Venda venda, Usuario usuario) {
171
                List<NotaFiscal> notasFiscais = notaFiscalRepository.consultarNotasFiscais(venda);
172
                for (NotaFiscal nf : notasFiscais) {
173
                        nf.setObservacaoVenda("VENDA ID: " + venda.getSequencial() + " em " +
174
                                DataUtils.converterDataComHorarioParaString(venda.getDataVenda()) + ". " +
175
                                venda.getJustificativaParaExcluir());
176
                        notaFiscalRepository.desvincularVenda(nf);
177
                }
178
                return notasFiscais;
179
        }
180
 
181
        private void verificarSeExisteLancamentoFinanceiro(Venda venda) {
182
                if (parcelaService.verificarPossuiParcela(venda)) {
183
                        throw new NegocioException("Não é permitido excluir uma venda com lançamentos financeiros.");
184
                }
185
        }
186
 
187
        public void reporEstoqueAoExcluirVenda(Venda venda) {
188
                for (Lancamento lancamento : venda.getLancamentos()) {
189
                        alterarEstoqueProduto(1, venda.getLoja(), lancamento.getProduto().getCodigo());
190
                }
191
        }
192
 
193
        private void excluirPagamentos(Venda venda) {
194
                for (VendaFormaPagamento vendaFormaPagamento : venda.getListaVendaFormaPagamentos()) {
195
//                      vendaFormaPagamentoService.excluirPorId(vendaFormaPagamento);
196
                        vendaFormaPagamentoService.excluir(vendaFormaPagamento);
197
                }
198
        }
199
 
200
        private void enviarEmail(Venda venda, Usuario usuario, List<NotaFiscal> notasFiscaisVinculadas) {
201
                String diaAtual = DataUtils.converterDataParaString(DataUtils.getDataAtual());
202
                StringBuilder conteudo = new StringBuilder();
203
                conteudo.append(montarDadosDaVenda(venda, usuario, venda.getLancamentos(), venda.getVendaFormaPagamentos()));
204
                if (!notasFiscaisVinculadas.isEmpty()) {
205
                        conteudo.append("--------------------------------------------------\n\n");
206
                        conteudo.append("NOTAS FISCAIS DESVINCULADAS:\n");
207
                        for (NotaFiscal nota : notasFiscaisVinculadas) {
208
                                conteudo.append("NÚMERO: " + nota.getNumeroNotaFiscal() + "\n");
209
                        }
210
                }
211
                new GerenciadorEmailImpl()
212
                        .comEmailsDestino("brunolopespeixoto@gmail.com, adrianolopespeixoto@hotmail.com")
213
                        .comAssunto("ESPAÇO CASE - OPERAÇÃO DE EXCLUSÃO DE VENDA: " + diaAtual)
214
                        .comConteudo(conteudo.toString())
215
                        .enviar();
216
        }
217
 
218
        @Override
219
        public Venda cadastrarVendaPeloPDV(ParametrosVendaDTO parametrosVenda) {
220
                verificarLancamentos(parametrosVenda.getLancamentos());
221
                lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(parametrosVenda);
222
                lancarExcecaoSeValoresNaoSaoIguais(parametrosVenda);
223
                Venda venda = new Venda(parametrosVenda);
224
                cadastrar(venda);
225
                cadastrarLancamentos(parametrosVenda, venda);
226
                cadastrarPagamentos(parametrosVenda, venda);
227
                alterarSituacaoPedido(parametrosVenda.getPedidoVinculado(), venda);
228
                enviarAlertasPorEmail(parametrosVenda, venda);
229
                venda.verificarSePermiteEmissaoNotaFiscal();
230
                venda.setEmitirNotaFiscal(verificarEmissaoNotaFiscal(parametrosVenda, venda));
231
                return venda;
232
        }
233
 
234
        private Boolean verificarEmissaoNotaFiscal(ParametrosVendaDTO parametrosVenda, Venda venda) {
235
                if (venda.getPermitirEmissaoNotaFiscal() == false) {return false;}
236
                Boolean emitir = null;
237
                emitir = naoEmitirLojaSemPermissao(parametrosVenda);
238
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
239
 
240
                emitir = naoEmitirCpfCnpjInvalido(parametrosVenda);
241
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
242
 
243
                emitir = emitirLojaComEmissaoObrigatoria(parametrosVenda);
244
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
245
 
246
                emitir = emitirProdutoComEmissaoObrigatoria(parametrosVenda);
247
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
248
 
249
                emitir = emitirVendasAcimaQuinhetosReais(parametrosVenda);
250
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
251
 
252
                emitir = emitirVendaPagamentoCartao(parametrosVenda);
253
                if (VerificadorUtil.naoEstaNulo(emitir)) {return emitir;}
254
                return false;
255
        }
256
 
257
        private Boolean naoEmitirLojaSemPermissao(ParametrosVendaDTO parametrosVenda) {
258
                if (parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.NAO_PERMITIR_EMISSAO.getValor()) ||
259
                                parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.NAO_EMITIR.getValor())) {
260
                        return false;
261
                }
262
                return null;
263
        }
264
 
265
        private Boolean naoEmitirCpfCnpjInvalido(ParametrosVendaDTO parametrosVenda) {
266
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getCliente())) {
267
                        if (!parametrosVenda.getCliente().cpfCnpjEhValido()) {
268
                                return false;
269
                        }
270
                }
271
                return null;
272
        }
273
 
274
        private Boolean emitirLojaComEmissaoObrigatoria(ParametrosVendaDTO parametrosVenda) {
275
                if (parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.TODAS_VENDAS.getValor())) {
276
                        return true;
277
                }
278
                return null;
279
        }
280
 
281
 
282
 
283
        private Boolean emitirProdutoComEmissaoObrigatoria(ParametrosVendaDTO parametrosVenda) {
284
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
285
                        if (lancamento.getProduto().getIndicadorEmissaoNotaFiscal()) {
286
                                return true;
287
                        }
288
                }
289
                return null;
290
        }
291
 
292
        private Boolean emitirVendasAcimaQuinhetosReais(ParametrosVendaDTO parametrosVenda) {
293
                Double valorVenda = new Double(0.0);
294
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
295
                        valorVenda = valorVenda + lancamento.getValorVenda();
296
                }
297
                if (valorVenda > 499.9) {
298
                        return true;
299
                }
300
                return null;
301
        }
302
 
303
        private Boolean emitirVendaPagamentoCartao(ParametrosVendaDTO parametrosVenda) {
304
                if (parametrosVenda.getLoja().getTipoEmitirNotaFiscal().equals(TipoEmitirNotaFiscal.VENDAS_OBRIGATORIAS.getValor())) {
305
                        for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
306
                                if (pagamento.getFormaPagamento().formaPagamentoEhCredito() ||
307
                                                pagamento.getFormaPagamento().formaPagamentoEhDebito() ||
308
                                                pagamento.getFormaPagamento().formaPagamentoEhPagseguro()) {
309
                                        return true;
310
                                }
311
                        }
312
                }
313
                return null;
314
        }
315
 
316
        private void alterarSituacaoPedido(Pedido pedidoVinculado, Venda venda) {
317
                if (VerificadorUtil.naoEstaNulo(pedidoVinculado)) {
318
                        PedidoHistorico pedidoHistorico = new PedidoHistorico();
319
                        pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
320
                        pedidoHistorico.setObservacao("VENDA: " + venda.getSequencial());
321
                        pedidoHistorico.setTipoSituacao(TipoSituacaoPedido.FINALIZADO_COM_VENDAS.getValor());
322
                        pedidoHistorico.setUsuario(venda.getUsuario());
323
                        pedidoHistorico.setPedido(pedidoVinculado);
324
                        if (VerificadorUtil.estaNulo(pedidoVinculado.getHistorico())) {
325
                                pedidoVinculado.setHistorico(new ArrayList<PedidoHistorico>());
326
                        }
327
                        pedidoVinculado.getHistorico().add(pedidoHistorico);
328
                        pedidoVinculado.setTipoSituacao(TipoSituacaoPedido.FINALIZADO_COM_VENDAS.getValor());
329
                        pedidoVinculado.setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
330
                        pedidoService.alterar(pedidoVinculado);
331
                }
332
        }
333
 
334
        private void enviarAlertasPorEmail(ParametrosVendaDTO parametrosVenda, Venda venda) {
335
                if (descontosEmProdutosSuperiores(parametrosVenda)) {
336
                        new GerenciadorEmailImpl()
337
                                .comEmailsDestino("brunolopespeixoto@gmail.com, adrianolopespeixoto@hotmail.com")
338
                                .comAssunto("ESPAÇO CASE - VENDA COM DESCONTO SUPERIOR : " + DataUtils.converterDataParaString(DataUtils.getDataAtual()))
339
                                .comConteudo(montarDadosDaVenda(venda, venda.getUsuario(), parametrosVenda.getLancamentos(), parametrosVenda.getLancamentosPagamentos()))
340
                                .enviar();
341
                }
342
                if (produtosComDescontoECupom(parametrosVenda)) {
343
                        new GerenciadorEmailImpl()
344
                                .comEmailsDestino("brunolopespeixoto@gmail.com, adrianolopespeixoto@hotmail.com")
345
                                .comAssunto("ESPAÇO CASE - VENDA COM PRODUTO COM DESCONTO E CUPOM PROMOCIONAL : " + DataUtils.converterDataParaString(DataUtils.getDataAtual()))
346
                                .comConteudo(montarDadosDaVenda(venda, venda.getUsuario(), parametrosVenda.getLancamentos(), parametrosVenda.getLancamentosPagamentos()))
347
                                .enviar();
348
                }
349
        }
350
 
351
        /*
352
        private void enviarAlertasPorEmail(ParametrosVendaDTO parametrosVenda, Venda venda) {
353
                if (pagamentoDividido(parametrosVenda)) {
354
                        if (descontoEmProdutos(parametrosVenda)) {
355
                                String diaAtual = DataUtils.converterDataParaString(DataUtils.getDataAtual());
356
                                new GerenciadorEmailImpl()
357
                                        .comEmailsDestino("brunolopespeixoto@gmail.com, adrianolopespeixoto@hotmail.com")
358
                                        .comAssunto("ESPAÇO CASE - VENDA DIVIDIDA E COM DESCONTO : " + diaAtual)
359
                                        .comConteudo(montarDadosDaVenda(venda, venda.getUsuario(), parametrosVenda.getLancamentos(), parametrosVenda.getLancamentosPagamentos()))
360
                                        .enviar();
361
                        }
362
                }
363
        }
364
        */
365
 
366
        private Boolean pagamentoDividido(ParametrosVendaDTO parametrosVenda) {
367
                for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
368
                        if (pagamento.getFormaPagamento().formaPagamentoEhCreditoDividido()) {
369
                                return true;
370
                        }
371
                }
372
                return false;
373
        }
374
 
375
        private boolean descontoEmProdutos(ParametrosVendaDTO parametrosVenda) {
376
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
377
                        if (lancamento.comDescontos()) {
378
                                return true;
379
                        }
380
                }
381
                return false;
382
        }
383
 
384
        private boolean descontosEmProdutosSuperiores(ParametrosVendaDTO parametrosVenda) {
385
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
386
                        if (lancamento.comDescontosAcimaDoPermitido()) {
387
                                return true;
388
                        }
389
                }
390
                return false;
391
        }
392
 
393
        private boolean produtosComDescontoECupom(ParametrosVendaDTO parametrosVenda) {
394
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
395
                        if (VerificadorUtil.naoEstaNulo(lancamento.getCupom()) && lancamento.comDescontos()) {
396
                                return true;
397
                        }
398
                }
399
                return false;
400
        }
401
 
402
        @Override
403
        public void alterarVenda(ParametrosVendaDTO parametrosVenda, Usuario usuario, Boolean verificarJustificativa) {
404
                verificarLancamentos(parametrosVenda.getLancamentos());
405
                lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(parametrosVenda);
406
                lancarExcecaoSeValoresNaoSaoIguais(parametrosVenda);
407
                if (verificarJustificativa) {enviarEmailAlteracoes(parametrosVenda, usuario);}
408
                atualizarDadosDaVenda(parametrosVenda);
409
                alterar(parametrosVenda.getVenda());
410
                alterarLancamentos(parametrosVenda);
411
                alterarPagamentos(parametrosVenda);
412
        }
413
 
414
        private void enviarEmailAlteracoes(ParametrosVendaDTO parametrosVenda, Usuario usuario) {
415
                String diaAtual = DataUtils.converterDataParaString(DataUtils.getDataAtual());
416
                StringBuilder conteudo = new StringBuilder();
417
                conteudo.append("OPERAÇÃO REALIZADA POR: " + usuario.getNome() + "\n");
418
                conteudo.append("ID: " + parametrosVenda.getVenda().getSequencial() + "\n");
419
                conteudo.append("DATA DA VENDA: " + DataUtils.converterDataComHorarioParaString(parametrosVenda.getVenda().getDataVenda()) + "\n");
420
                conteudo.append("ALTERAÇÕES:\n");
421
                if (!parametrosVenda.getLoja().equals(parametrosVenda.getVenda().getLoja())) {
422
                        conteudo.append("LOJA: " + parametrosVenda.getVenda().getLoja().getDescricao() + " -> " + parametrosVenda.getLoja().getDescricao() + "\n");
423
                }
424
                if (!parametrosVenda.getVendedor().equals(parametrosVenda.getVenda().getVendedor())) {
425
                        conteudo.append("VENDEDOR: " + parametrosVenda.getVenda().getVendedor().getNomeDaPessoa() + " -> " + parametrosVenda.getVendedor().getNomeDaPessoa() + "\n");
426
                }
427
 
428
                String indicacao = "NÃO INFORMADO";
429
                String novaIndicacao = "NÃO INFORMADO";
430
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getVenda().getIndicacao())) {
431
                        indicacao = parametrosVenda.getVenda().getIndicacao().getNome();
432
                }
433
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getIndicacao())) {
434
                        novaIndicacao = parametrosVenda.getIndicacao().getNome();
435
                }
436
                if (!indicacao.equals(novaIndicacao)) {
437
                        conteudo.append("INDICAÇÃO: " + indicacao + " -> " + novaIndicacao + "\n");
438
                }
439
 
440
                String cliente = "NÃO INFORMADO";
441
                String novoCliente = "NÃO INFORMADO";
442
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getVenda().getCliente())) {
443
                        cliente = parametrosVenda.getVenda().getCliente().getNome();
444
                }
445
                if (VerificadorUtil.naoEstaNulo(parametrosVenda.getCliente())) {
446
                        novoCliente = parametrosVenda.getCliente().getNome();
447
                }
448
                if (!cliente.equals(novoCliente)) {
449
                        conteudo.append("CLIENTE: " + cliente + " -> " + novoCliente + "\n");
450
                }
451
 
452
                if (!parametrosVenda.getObservacao().equals(parametrosVenda.getVenda().getObservacao())) {
453
                        conteudo.append("OBS: " + parametrosVenda.getVenda().getObservacao() + " -> " + parametrosVenda.getObservacao() + "\n");
454
                }
455
 
456
                String formasPagamento = "";
457
                String novasFormasPagamento = "";
458
                List<VendaFormaPagamento> pagamentosAnteriores = consultarPagamentosCadastrados(parametrosVenda);
459
                if (!VerificadorUtil.isListaNulaOuVazia(pagamentosAnteriores)) {
460
                        for (VendaFormaPagamento pagamento : pagamentosAnteriores) {
461
                                formasPagamento = formasPagamento + " R$" + pagamento.getValorPagamento() + " (" + pagamento.getFormaPagamento().getDescricao();
462
                                if (VerificadorUtil.naoEstaNulo(pagamento.getBandeiraCartao())) {
463
                                        formasPagamento =  formasPagamento + " - " + pagamento.getBandeiraCartao().getTipoCartaoDescricao() + " - " + pagamento.getDescricaoDaBandeiraCartao();
464
                                }
465
                                formasPagamento =  formasPagamento + "); ";
466
                        }
467
                }
468
                if (!VerificadorUtil.isListaNulaOuVazia(parametrosVenda.getLancamentosPagamentos())) {
469
                        for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
470
                                novasFormasPagamento = novasFormasPagamento + " R$" + pagamento.getValorPagamento() + " (" + pagamento.getFormaPagamento().getDescricao();
471
                                if (VerificadorUtil.naoEstaNulo(pagamento.getBandeiraCartao())) {
472
                                        novasFormasPagamento =  novasFormasPagamento + " - " + pagamento.getBandeiraCartao().getTipoCartaoDescricao() + " - " + pagamento.getDescricaoDaBandeiraCartao();
473
                                }
474
                                novasFormasPagamento =  novasFormasPagamento + "); ";
475
                        }
476
                }
477
                if (!formasPagamento.equals(novasFormasPagamento)) {
478
                        conteudo.append("FORMAS DE PAGAMENTO: " + formasPagamento + " -> " + novasFormasPagamento + "\n");
479
                }
480
 
481
                conteudo.append("\n");
482
                conteudo.append("JUSTIFICATIVA: " + parametrosVenda.getVenda().getJustificativaParaExcluir() + "\n");
483
                new GerenciadorEmailImpl()
484
                        .comEmailsDestino("brunolopespeixoto@gmail.com, adrianolopespeixoto@hotmail.com")
485
                        .comAssunto("ESPAÇO CASE - ALTERAÇÃO DE VENDA: " + diaAtual)
486
                        .comConteudo(conteudo.toString())
487
                        .enviar();
488
        }
489
 
490
        private String montarDadosDaVenda(Venda venda, Usuario usuario, List<Lancamento> lancamentos, List<VendaFormaPagamento> pagamentos) {
491
                StringBuilder conteudo = new StringBuilder();
492
                conteudo.append("OPERAÇÃO REALIZADA POR: " + usuario.getNome() + "\n");
493
                conteudo.append("ID: " + venda.getSequencial() + "\n");
494
                conteudo.append("DATA DA VENDA: " + DataUtils.converterDataComHorarioParaString(venda.getDataVenda()) + "\n");
495
                conteudo.append("LOJA: " + venda.getLoja().getDescricao() + "\n");
496
                conteudo.append("VENDEDOR: " + venda.getVendedor().getNomeDaPessoa() + "\n");
497
                conteudo.append("TOTAL: " + valorTotalVenda(lancamentos) + "\n");
498
                conteudo.append("OBS.: " + venda.getObservacao() + "\n");
499
                if (VerificadorUtil.naoEstaNuloOuVazio(venda.getJustificativaParaExcluir())) {
500
                        conteudo.append("JUSTIFICATIVA: " + venda.getJustificativaParaExcluir() + "\n");
501
                } else {
502
                        conteudo.append("SEM JUSTIFICATIVA\n");
503
                }
504
                conteudo.append("--------------------------------------------------\n");
505
                for (Lancamento lancamento : lancamentos) {
506
                        conteudo.append(lancamento.getProduto().getCodigoProdutoPadrao() + " | ");
507
                        conteudo.append(lancamento.getProduto().getDescricaoComModeloCompleta() + ", ");
508
                        conteudo.append("R$" + lancamento.getValorVenda());
509
                        if (lancamento.comDescontos()) {
510
                                conteudo.append(" (COM DESCONTO DE R$" + lancamento.valorDescontos() + ")");
511
                        }
512
                        if (VerificadorUtil.naoEstaNuloOuVazio(lancamento.getObservacao())) {
513
                                conteudo.append(" (OBS.: " + lancamento.getObservacao() + ")");
514
                        }
515
                        if (VerificadorUtil.naoEstaNulo(lancamento.getCupom())) {
516
                                String descricaoCupom = lancamento.getCupom().getCodigo();
517
                                if (VerificadorUtil.naoEstaNulo(lancamento.getCupom().getDescricao())) {
518
                                        descricaoCupom = descricaoCupom + " - " + lancamento.getCupom().getDescricao();
519
                                }
520
                                conteudo.append(" (CUPOM: " + descricaoCupom + ")");
521
                        }
522
                        conteudo.append("\n");
523
                }
524
                conteudo.append("--------------------------------------------------\n");
525
                for (VendaFormaPagamento pagamento : pagamentos) {
526
                        if (VerificadorUtil.naoEstaNulo(pagamento.getBandeiraCartao())) {
527
                                conteudo.append(pagamento.getFormaPagamento().getDescricao() + " - " + pagamento.getBandeiraCartao().getDescricao() + ": R$" +  pagamento.getValorPagamento() + "\n");
528
                        } else {
529
                                conteudo.append(pagamento.getFormaPagamento().getDescricao() + ": R$" + pagamento.getValorPagamento() + "\n");
530
                        }
531
                        conteudo.append("\n");
532
                }
533
                conteudo.append("--------------------------------------------------\n");
534
                if (VerificadorUtil.naoEstaNulo(venda.getCliente())) {
535
                        conteudo.append("DADOS DO CLIENTE:\n");
536
                        conteudo.append(venda.getCliente().getNome() + "\n");
537
                        conteudo.append(venda.getCliente().getCpfCnpjFormatado() + "\n");
538
                }
539
                return conteudo.toString();
540
        }
541
 
542
        private Double valorTotalVenda(List<Lancamento> lancamentos) {
543
                Double total = new Double(0.0);
544
                for (Lancamento lancamento : lancamentos) {
545
                        if (lancamento.getAtivo()) {
546
                                total = total + lancamento.getValorVenda();
547
                        }
548
                }
549
                return total;
550
        }
551
 
552
        private void atualizarDadosDaVenda(ParametrosVendaDTO parametrosVenda) {
553
                parametrosVenda.getVenda().setVendedor(parametrosVenda.getVendedor());
554
                parametrosVenda.getVenda().setIndicacao(parametrosVenda.getIndicacao());
555
                parametrosVenda.getVenda().setCliente(parametrosVenda.getCliente());
556
                parametrosVenda.getVenda().setObservacao(parametrosVenda.getObservacao());
557
                parametrosVenda.getVenda().setNotaFiscal(parametrosVenda.getNotaFiscal());
558
                parametrosVenda.getVenda().setMaquineta(parametrosVenda.getMaquineta());
559
                if (!parametrosVenda.getVenda().getLoja().equals(parametrosVenda.getLoja())) {
560
                        for (Lancamento lancamento : parametrosVenda.getVenda().getLancamentos()) {
561
                                alterarEstoqueProduto(1, parametrosVenda.getVenda().getLoja(), lancamento.getProduto().getCodigo());
562
                                alterarEstoqueProduto(-1, parametrosVenda.getLoja(), lancamento.getProduto().getCodigo());
563
                        }
564
                        parametrosVenda.getVenda().setLoja(parametrosVenda.getLoja());
565
                        parametrosVenda.getVenda().setMaquineta(parametrosVenda.getLoja().getMaquineta());
566
                }
567
                parametrosVenda.getVenda().setTipoSituacao(parametrosVenda.getTipoSituacao());
568
                parametrosVenda.getVenda().setDataVenda(parametrosVenda.getDataVenda());
569
        }
570
 
571
        @Override
572
        public List<Venda> consultarVendasDoDia(Long sequencialLoja, Date dataVendas) {
573
                return vendaRepository.consultarVendasDoDia(sequencialLoja, dataVendas);
574
        }
575
 
576
        @Override
577
        public Integer obterQuantidadeDeVendasPorLojaEePeriodo(Venda venda, Date dataInicial, Date dataFinal) {
578
                return vendaRepository.obterQuantidadeDeVendasPorLojaEePeriodo(venda, dataInicial, dataFinal);
579
        }
580
 
581
        @Override
582
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(Loja loja, Date dataInicial, Date dataFinal) {
583
                Double valorTotal = vendaRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodo(loja, dataInicial, dataFinal);
584
                valorTotal = valorTotal - vendaRepository.obterValorDeCuponsUtilizadosPorLojaEePeriodo(new ParametrosConsultaVendasDTO(loja, dataInicial, dataFinal));
585
                return valorTotal;
586
        }
587
 
588
        @Override
589
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
590
                Double valorTotal = vendaRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsulta);
591
                valorTotal = valorTotal - vendaRepository.obterValorDeCuponsUtilizadosPorLojaEePeriodo(parametrosConsulta);
592
                return valorTotal;
593
        }
594
 
595
        @Override
596
        public Double obterValorTotalDeDescontosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
597
                return vendaRepository.obterValorTotalDeDescontosPorLojaEePeriodo(parametrosConsulta);
598
        }
599
 
600
        @Override
601
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(ParametrosConsultaVendasDTO parametrosConsultaVendas, List<FormaPagamento> formasDePagamento) {
602
                return vendaRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodoEeFormasDePagamento(parametrosConsultaVendas, formasDePagamento);
603
        }
604
 
605
        @Override
606
        public Double obterValorTotalLiquidoDeVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
607
                return vendaRepository.obterValorTotalLiquidoDeVendasPorLojaEePeriodo(parametrosConsulta);
608
        }
609
 
610
        @Override
611
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
612
                return vendaRepository.obterQuantidadeProdutosVendidosPorLojaEePeriodo(parametrosConsultaVendas);
613
        }
614
 
615
        @Override
616
        public Integer obterQuantidadeProdutosVendidosPorLojaEePeriodoNaoVivo(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
617
                return vendaRepository.obterQuantidadeProdutosVendidosPorLojaEePeriodoNaoVivo(parametrosConsultaVendas);
618
        }
619
 
620
        @Override
621
        public Integer obterQuantidadeProdutosVendidosPorEstiloEeGenero(Date dataInicial, Date dataFinal, Long sequencialLoja, Long sequencialModelo, String tipoProduto, String estiloProduto, String tipoGenero) {
622
                return vendaRepository.obterQuantidadeProdutosVendidosPorEstiloEeGenero(dataInicial, dataFinal, sequencialLoja, sequencialModelo, tipoProduto, estiloProduto, tipoGenero);
623
        }
624
 
625
        @Override
626
        public Double obterValorProdutosUtilizadosEmVendasPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsulta) {
627
                return vendaRepository.obterValorProdutosUtilizadosEmVendasPorLojaEePeriodo(parametrosConsulta);
628
        }
629
 
630
        private void verificarLancamentos(List<Lancamento> lancamentos) {
631
                if (lancamentos.isEmpty()) {
632
                        throw new NegocioException("Obrigatório informar ao menos um produto");
633
                }
634
        }
635
 
636
        private void lancarExcecaoCasoNaoSejaInformadoCamposObrigatorios(ParametrosVendaDTO parametrosVenda) {
637
                if (VerificadorUtil.isListaNulaOuVazia(parametrosVenda.getLancamentosPagamentos()) && VerificadorUtil.estaNuloOuVazio(parametrosVenda.getObservacao())) {
638
                        throw new NegocioException("Obrigatório informar as observações em vendas sem pagamentos");
639
                }
640
                if (VerificadorUtil.estaNulo(parametrosVenda.getLoja())) {
641
                        throw new NegocioException("Informe a loja");
642
                }
643
        }
644
 
645
        private void lancarExcecaoSeValoresNaoSaoIguais(ParametrosVendaDTO parametrosVenda) {
646
                final double TOLERANCE = 0.01;
647
                if(Math.abs(parametrosVenda.valorTotalLancamentos() - parametrosVenda.valorTotalPago()) > TOLERANCE) {
648
                        throw new NegocioException("Valores pagos não corresponde ao valor vendido.");
649
                }
650
        }
651
 
652
        private void cadastrarLancamentos(ParametrosVendaDTO parametrosVenda, Venda venda) {
653
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
654
                        cadastrarLancamento(parametrosVenda.getLoja(), venda, lancamento);
655
                }
656
        }
657
 
658
        private void alterarLancamentos(ParametrosVendaDTO parametrosVenda) {
659
                excluirLancamentosRetiradosDaLista(parametrosVenda, consultarLancamentosCadastrados(parametrosVenda));
660
                cadastrarNovosLancamentos(parametrosVenda);
661
        }
662
 
663
        private void excluirLancamentosRetiradosDaLista(ParametrosVendaDTO parametrosVenda, List<Lancamento> lancamentosAntigos) {
664
                for (Lancamento lancamentoAntigo : lancamentosAntigos) {
665
                        if (!parametrosVenda.getLancamentos().contains(lancamentoAntigo)) {
666
                                lancamentoService.excluir(lancamentoAntigo);
667
                                alterarEstoqueProduto(1, parametrosVenda.getLoja(), lancamentoAntigo.getProduto().getCodigo());
668
                        }
669
                }
670
        }
671
 
672
        private void cadastrarNovosLancamentos(ParametrosVendaDTO parametrosVenda) {
673
                for (Lancamento lancamento : parametrosVenda.getLancamentos()) {
674
                        if (VerificadorUtil.estaNulo(lancamento.getSequencial())) {
675
                                cadastrarLancamento(parametrosVenda.getLoja(), parametrosVenda.getVenda(), lancamento);
676
                        }
677
                }
678
        }
679
 
680
        private List<Lancamento> consultarLancamentosCadastrados(ParametrosVendaDTO parametrosVenda) {
681
                Lancamento lancamentoDaVenda = new Lancamento();
682
                lancamentoDaVenda.setVenda(parametrosVenda.getVenda());
683
                return lancamentoService.consultarPassandoEntidade(lancamentoDaVenda, 0, lancamentoService.obterQuantidadeDeRegistrosPassandoEntidade(lancamentoDaVenda));
684
        }
685
 
686
        private void cadastrarLancamento(Loja loja, Venda venda, Lancamento lancamento) {
687
                lancamento.setVenda(venda);
688
                igualarValorVarejoComCompraSeProdutoForPadrao(lancamento);
689
                lancamentoService.cadastrar(lancamento);
690
                alterarEstoqueProduto(-1, loja, lancamento.getProduto().getCodigo());
691
                utilizarCupom(lancamento.getCupom());
692
 
693
        }
694
 
695
        private void igualarValorVarejoComCompraSeProdutoForPadrao(Lancamento lancamento) {
696
                if (VerificadorUtil.naoEstaNulo(lancamento.getProduto())) {
697
                        if (lancamento.getProduto().getCodigo().equals(ConstantesSEC.CODIGO_PRODUTO_PADRAO_000000)) {
698
                                lancamento.setValorVarejo(lancamento.getValorVenda());
699
                        }
700
                }
701
        }
702
 
703
        private void cadastrarPagamentos(ParametrosVendaDTO parametrosVenda, Venda venda) {
704
                for (VendaFormaPagamento vendaFormaPagamento : parametrosVenda.getLancamentosPagamentos()) {
705
                        adicionarMaquineta(vendaFormaPagamento, parametrosVenda, venda);
706
                        vendaFormaPagamento.setVenda(venda);
707
                        vendaFormaPagamentoService.cadastrar(vendaFormaPagamento);
708
                        utilizarCupom(vendaFormaPagamento.getCupom());
709
                }
710
        }
711
 
712
        private void adicionarMaquineta(VendaFormaPagamento vendaFormaPagamento, ParametrosVendaDTO parametrosVenda, Venda venda) {
713
                if (vendaFormaPagamento.getFormaPagamento().formaPagamentoEhCartao()) {
714
                        venda.setMaquineta(parametrosVenda.getMaquineta());
715
                }
716
        }
717
 
718
        private void alterarPagamentos(ParametrosVendaDTO parametrosVenda) {
719
                excluirPagamentosRetiradosDaLista(parametrosVenda, consultarPagamentosCadastrados(parametrosVenda));
720
                cadastrarNovosPagamentos(parametrosVenda);
721
        }
722
 
723
        private void excluirPagamentosRetiradosDaLista(ParametrosVendaDTO parametrosVenda, List<VendaFormaPagamento> pagamentosAntigos) {
724
                for (VendaFormaPagamento pagamentoAntigo : pagamentosAntigos) {
725
                        if (!parametrosVenda.getLancamentosPagamentos().contains(pagamentoAntigo)) {
726
                                vendaFormaPagamentoService.excluir(pagamentoAntigo);
727
                        }
728
//                      if (verificarSePagamentoFoiRetiradoDaLista(parametrosVenda.getLancamentosPagamentos(), pagamentoAntigo)) {
729
//                              vendaFormaPagamentoService.excluirPorId(pagamentoAntigo);
730
//                      }
731
                }
732
        }
733
 
734
        private boolean verificarSePagamentoFoiRetiradoDaLista(List<VendaFormaPagamento> pagamentos, VendaFormaPagamento pagamentoAntigo) {
735
                boolean pagamentoRetirado = true;
736
                for (VendaFormaPagamento pagamento : pagamentos) {
737
                        if (pagamento.getCodigoDaFormaPagamento().equals(pagamentoAntigo.getCodigoDaFormaPagamento())) {
738
                                if (verificarSeBandeiraCartaoEhIgual(pagamento.getCodigoDaBandeiraCartao(), pagamentoAntigo.getCodigoDaBandeiraCartao()) &&
739
                                                pagamento.getValorPagamento().equals(pagamentoAntigo.getValorPagamento())) {
740
                                        return false;
741
                                } else {
742
                                        pagamento.setVenda(pagamentoAntigo.getVenda());
743
                                        vendaFormaPagamentoService.alterar(pagamento);
744
                                        return false;
745
                                }
746
                        }
747
                }
748
                return pagamentoRetirado;
749
        }
750
 
751
        private boolean verificarSeBandeiraCartaoEhIgual(Long codigoDaBandeiraCartao, Long codigoDaBandeiraCartaoSegundo) {
752
                if (VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartao) && VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartaoSegundo)) {
753
                        return codigoDaBandeiraCartao.equals(codigoDaBandeiraCartaoSegundo);
754
                }
755
                if ((VerificadorUtil.estaNulo(codigoDaBandeiraCartao) && VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartaoSegundo)) ||
756
                                (VerificadorUtil.naoEstaNulo(codigoDaBandeiraCartao) && VerificadorUtil.estaNulo(codigoDaBandeiraCartaoSegundo))) {
757
                        return false;
758
                }
759
                return true;
760
        }
761
 
762
        private void cadastrarNovosPagamentos(ParametrosVendaDTO parametrosVenda) {
763
                for (VendaFormaPagamento pagamento : parametrosVenda.getLancamentosPagamentos()) {
764
                        if (VerificadorUtil.estaNulo(pagamento.getSequencial())) {
765
                                pagamento.setVenda(parametrosVenda.getVenda());
766
                                vendaFormaPagamentoService.cadastrar(pagamento);
767
                                utilizarCupom(pagamento.getCupom());
768
                        }
769
                }
770
        }
771
 
772
        private List<VendaFormaPagamento> consultarPagamentosCadastrados(ParametrosVendaDTO parametrosVenda) {
773
                VendaFormaPagamento pagamentoDaVenda = new VendaFormaPagamento();
774
                pagamentoDaVenda.setVenda(parametrosVenda.getVenda());
775
                return vendaFormaPagamentoService.consultarPassandoEntidade(pagamentoDaVenda, 0, vendaFormaPagamentoService.obterQuantidadeDeRegistrosPassandoEntidade(pagamentoDaVenda));
776
        }
777
 
778
        private void alterarEstoqueProduto(Integer quantidadeAlterar, Loja loja, String codigoProduto) {
779
                if (VerificadorUtil.naoEstaNulo(codigoProduto)) {
780
                        Produto produto = produtoService.consultarProdutoPorCodigo(codigoProduto);
781
                        produtoLojaService.alterarEstoqueAcrescentandoQuantidadeInformada(quantidadeAlterar, produto, loja);
782
                }
783
        }
784
 
785
        private void utilizarCupom(Cupom cupom) {
786
                if (VerificadorUtil.naoEstaNulo(cupom)) {
787
                        Cupom cupomUtilizado = cupomService.consultarPorId(cupom);
788
                        cupomUtilizado.setDataHoraUtilizado(DataUtils.getDataAtual());
789
                        if (VerificadorUtil.estaNulo(cupomUtilizado.getQuantidadeUtilizada())) {
790
                                cupomUtilizado.setQuantidadeUtilizada(0);
791
                        }
792
                        cupomUtilizado.setQuantidadeUtilizada(cupomUtilizado.getQuantidadeUtilizada() + 1);
793
                        cupomService.alterar(cupomUtilizado);
794
                }
795
        }
796
 
797
        @Override
798
        public List<Venda> consultarVendasPorDemanda(ParametrosConsulta<Venda> parametrosConsulta, Integer primeiroRegistro,
799
                        Integer tamanhoPagina, String sortField, String orderSort, Map<String, Object> filters) {
800
                return vendaRepository.consultarVendasPorDemanda(parametrosConsulta, primeiroRegistro, tamanhoPagina, sortField, orderSort, filters);
801
        }
802
 
803
        @Override
804
        public List<Venda> consultarVendaPorParametros(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
805
                return vendaRepository.consultarVendaPorParametros(parametrosConsultaVendas);
806
        }
807
 
808
        @Override
809
        public GraficoAcumuladoDTO consultarGrafico(String mes, String ano) {
810
                return vendaRepository.consultarGrafico(mes, ano);
811
        }
812
 
813
        @Override
814
        public List<RankingVendedorDTO> consultarRankingVendedores(Date dataInicial, Date dataFinal, Boolean produtosComissionados) {
815
                List<RankingVendedorDTO> rankingVendedores = new ArrayList<RankingVendedorDTO>();
816
                List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradoresAtivos(null);
817
                for (Vendedor vendedor : vendedores) {
818
                        RankingVendedorDTO vendedorConsultado = consultarRankingVendedor(vendedor, dataInicial, dataFinal, produtosComissionados);
819
                        rankingVendedores.add(vendedorConsultado);
820
                }
821
                return (List<RankingVendedorDTO>) ordenador.ordenar(rankingVendedores);
822
        }
823
 
824
        @Override
825
        public RankingVendedorDTO consultarRankingVendedor(Vendedor vendedor, Vigencia vigencia, Boolean produtosComissionados) {
826
                Avaliacao avaliacao = avaliacaoService.consultarAvaliacaoDaVigencia(vigencia);
827
                RankingVendedorDTO rankingVendedor = consultarRankingVendedor(vendedor, vigencia.getDataInicio(), vigencia.getDataFim(), produtosComissionados);
828
                rankingVendedor.setFuncionario(funcionarioService.consultarFuncionarioPorPessoa(vendedor.getPessoa()));
829
                rankingVendedor.setQuantidadeBancoHoras(bancoHorasService.consultarQuantidadeHoras(rankingVendedor.getFuncionario()));
830
                AvaliacaoFuncionario avaliacaoFuncionario = avaliacaoFuncionarioService.detalhar(vendedor.getPessoa(), avaliacao);
831
                if (VerificadorUtil.naoEstaNuloOuVazio(avaliacaoFuncionario)) {
832
                        rankingVendedor.setAvaliacaoFuncionario(avaliacaoFuncionario);
833
                        if (VerificadorUtil.naoEstaNulo(avaliacaoFuncionario.getPorcentagemComissao())) {
834
                                rankingVendedor.setComissao(calcularComissao(rankingVendedor.getValorTotalVendido(), avaliacaoFuncionario.getPorcentagemComissao()/100));
835
                        } else {
836
                                rankingVendedor.setComissao(calcularComissao(rankingVendedor.getValorTotalVendido(), avaliacaoFuncionario.retornarFaixaComissao(rankingVendedor.getValorTotalVendido(), rankingVendedor.getFuncionario().getTipoComissionamento())));
837
                        }
838
                }
839
                return rankingVendedor;
840
        }
841
 
842
        public Double calcularComissao(Double valorTotalVendido, Double porcentagemComissao) {
843
                if (VerificadorUtil.naoEstaNuloOuVazio(porcentagemComissao)) {
844
                        return valorTotalVendido * porcentagemComissao;
845
                }
846
                return 0.0;
847
        }
848
 
849
        @Override
850
        public RankingVendedorDTO consultarRankingVendedor(Vendedor vendedor, Date dataInicial, Date dataFinal, Boolean produtosComissionados) {
851
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
852
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
853
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
854
                parametrosConsultaVendas.setVendedor(vendedor);
855
                if (VerificadorUtil.naoEstaNulo(produtosComissionados)) {
856
                        parametrosConsultaVendas.setIndicadorComissionado(produtosComissionados);
857
                }
858
 
859
                RankingVendedorDTO rankingVendedor = new RankingVendedorDTO();
860
                rankingVendedor.setVendedor(vendedor);
861
                try {
862
                        rankingVendedor.setFuncionario(funcionarioService.consultarFuncionarioPorPessoa(vendedor.getPessoa()));
863
                        rankingVendedor.setQuantidadeBancoHoras(bancoHorasService.consultarQuantidadeHoras(rankingVendedor.getFuncionario()));
864
                } catch (RuntimeException e) {
865
                        rankingVendedor.setFuncionario(null);
866
                }
867
 
868
                rankingVendedor.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas));
869
                rankingVendedor.setValorTotalDescontos(obterValorTotalDeDescontosPorLojaEePeriodo(parametrosConsultaVendas));
870
                rankingVendedor.setQuantidadeTotalProdutosVendidos(obterQuantidadeProdutosVendidosPorLojaEePeriodo(parametrosConsultaVendas));
871
 
872
                Venda venda = new Venda();
873
                venda.setVendedor(vendedor);
874
                rankingVendedor.setQuantidadeVendas(obterQuantidadeDeVendasPorLojaEePeriodo(venda, dataInicial, dataFinal));
875
                rankingVendedor.setQuantidadePedidos(obterQuantidadePedidos(vendedor, dataInicial, dataFinal));
876
                rankingVendedor.setQuantidadeContagens(obterQuantidadeDeContagens(vendedor, dataInicial, dataFinal));
877
                rankingVendedor.setQuantidadeAtendimentos(obterQuantidadeDeAtendimentos(vendedor, dataInicial, dataFinal));
878
                rankingVendedor.setValorTotalVendidoVivo(obterValorTotalBrutoDeVendasVivoPorLojaEePeriodo(parametrosConsultaVendas));
879
 
880
                rankingVendedor.setAvaliacaoFuncionario(avaliacaoFuncionarioService.consultarAvaliacaoFuncionarioPelaData(vendedor, DataUtils.getDataComHorarioMinimo(dataFinal)));
881
                if (VerificadorUtil.naoEstaNulo(rankingVendedor.getAvaliacaoFuncionario())) {
882
                        rankingVendedor.setPercentualDescontos(rankingVendedor.getAvaliacaoFuncionario().retornarPercentual(rankingVendedor.getValorTotalDescontos(), rankingVendedor.getValorTotalVendido()));
883
                        rankingVendedor.setPercentualMetaMensal(rankingVendedor.getAvaliacaoFuncionario().retornarPercentualRealizado(rankingVendedor.getValorTotalVendido()));
884
                        rankingVendedor.setPercentualMetaMensalVivo(rankingVendedor.getAvaliacaoFuncionario().retornarPercentualVivoRealizado(rankingVendedor.getValorTotalVendidoVivo()));
885
                }
886
 
887
                ParametrosConsultaVendasDTO parametrosConsultaVendasDoDia = new ParametrosConsultaVendasDTO();
888
                parametrosConsultaVendasDoDia.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()));
889
                parametrosConsultaVendasDoDia.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getDataAtual()));
890
                parametrosConsultaVendasDoDia.setVendedor(vendedor);
891
                if (VerificadorUtil.naoEstaNulo(produtosComissionados)) {
892
                        parametrosConsultaVendasDoDia.setIndicadorComissionado(produtosComissionados);
893
                }
894
                rankingVendedor.setValorTotalVendidoDoDia(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendasDoDia));
895
 
896
                return rankingVendedor;
897
        }
898
 
899
        private Integer obterQuantidadePedidos(Vendedor vendedor, Date dataInicial, Date dataFinal) {
900
                if (VerificadorUtil.estaNulo(vendedor.getPessoa())) {
901
                        return 0;
902
                }
903
                ParametrosConsultaPedidoDTO parametrosPedidos = new ParametrosConsultaPedidoDTO();
904
                parametrosPedidos.setPessoa(vendedor.getPessoa());
905
                parametrosPedidos.setEntidade(new Pedido());
906
                parametrosPedidos.setDataInicial(dataInicial);
907
                parametrosPedidos.setDataFinal(dataFinal);
908
                return pedidoService.obterQuantidadeDeRegistrosParametrosConsulta(parametrosPedidos);
909
        }
910
 
911
        private Integer obterQuantidadeDeContagens(Vendedor vendedor, Date dataInicial, Date dataFinal) {
912
                if (VerificadorUtil.estaNulo(vendedor.getPessoa())) {
913
                        return 0;
914
                }
915
                return produtoLojaService.obterQuantidadeDeContagens(vendedor.getPessoa(), dataInicial, dataFinal);
916
        }
917
 
918
        private Integer obterQuantidadeDeAtendimentos(Vendedor vendedor, Date dataInicial, Date dataFinal) {
919
                if (VerificadorUtil.estaNulo(vendedor.getPessoa())) {
920
                        return 0;
921
                }
922
                return produtoLojaService.obterQuantidadeDeAtendimentos(vendedor.getPessoa(), dataInicial, dataFinal);
923
        }
924
 
925
        private Double obterValorTotalBrutoDeVendasVivoPorLojaEePeriodo(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
926
                ParametrosConsultaVendasVivoDTO parametrosConsultaVendasVivo = new ParametrosConsultaVendasVivoDTO();
927
                parametrosConsultaVendasVivo.setVendedor(parametrosConsultaVendas.getVendedor());
928
                parametrosConsultaVendasVivo.setDataInicial(parametrosConsultaVendas.getDataInicial());
929
                parametrosConsultaVendasVivo.setDataFinal(parametrosConsultaVendas.getDataFinal());
930
                return vendaVivoService.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendasVivo);
931
        }
932
 
933
        @Override
934
        public List<RankingLojaDTO> consultarRankingLojas(Date dataInicial, Date dataFinal) {
935
                List<RankingLojaDTO> rankingLojas = new ArrayList<RankingLojaDTO>();
936
                List<Loja> lojas = lojaService.listarLojasAtivas();
937
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
938
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
939
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
940
                for (Loja loja : lojas) {
941
                        if (!loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_LOJA_FARMACIA_7)
942
                                        && !loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_RESTAURANTE_16)) {
943
                                parametrosConsultaVendas.setLoja(loja);
944
 
945
                                RankingLojaDTO rankingLoja = new RankingLojaDTO();
946
                                rankingLoja.setLoja(loja);
947
                                rankingLoja.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas)
948
                                                - obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
949
                                rankingLoja.setAvaliacaoLoja(avaliacaoLojaService.consultarAvaliacaoLojaPelaData(loja, DataUtils.getDataComHorarioMinimo(dataFinal)));
950
                                if (VerificadorUtil.naoEstaNulo(rankingLoja.getAvaliacaoLoja())) {
951
                                        rankingLoja.setValorMetaMensal(rankingLoja.getAvaliacaoLoja().getValorMetaMensal());
952
                                }
953
                                rankingLojas.add(rankingLoja);
954
                        }
955
                }
956
                return (List<RankingLojaDTO>) ordenador.ordenar(rankingLojas);
957
        }
958
 
959
        @Override
960
        public List<RankingLojaDTO> consultarRankingLojasExtras(Date dataInicial, Date dataFinal) {
961
                List<RankingLojaDTO> rankingLojas = new ArrayList<RankingLojaDTO>();
962
                List<Loja> lojas = lojaService.listarLojasAtivas();
963
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
964
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
965
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
966
                for (Loja loja : lojas) {
967
                        if (loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_LOJA_FARMACIA_7)
968
                                        || loja.getSequencial().equals(ConstantesSEC.SEQUENCIAL_RESTAURANTE_16)) {
969
                                parametrosConsultaVendas.setLoja(loja);
970
 
971
                                RankingLojaDTO rankingLoja = new RankingLojaDTO();
972
                                rankingLoja.setLoja(loja);
973
                                rankingLoja.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas)
974
                                                - obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
975
                                rankingLoja.setAvaliacaoLoja(avaliacaoLojaService.consultarAvaliacaoLojaPelaData(loja, DataUtils.getDataComHorarioMinimo(dataFinal)));
976
                                if (VerificadorUtil.naoEstaNulo(rankingLoja.getAvaliacaoLoja())) {
977
                                        rankingLoja.setValorMetaMensal(rankingLoja.getAvaliacaoLoja().getValorMetaMensal());
978
                                }
979
                                rankingLojas.add(rankingLoja);
980
                        }
981
                }
982
                parametrosConsultaVendas.setLoja(null);
983
                RankingLojaDTO rankingLojaServico = new RankingLojaDTO();
984
                Loja lojaServico = new Loja();
985
                lojaServico.setDescricao("ASSISTÊNCIA");
986
                rankingLojaServico.setValorMetaMensal(new Double(0.0));
987
                rankingLojaServico.setLoja(lojaServico);
988
                rankingLojaServico.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(parametrosConsultaVendas));
989
                rankingLojas.add(rankingLojaServico);
990
                return (List<RankingLojaDTO>) ordenador.ordenar(rankingLojas);
991
        }
992
 
993
        @Override
994
        public Double obterValorTotalBrutoDeVendasPorLojaEePeriodoServicos(ParametrosConsultaVendasDTO parametrosConsultaVendas) {
995
                parametrosConsultaVendas.setTipoProduto(TipoProduto.SERVICO.getValor());
996
                Double valorTotal = vendaRepository.obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas);
997
                parametrosConsultaVendas.setTipoProduto(null);
998
                return VerificadorUtil.estaNulo(valorTotal)? new Double(0.0) : valorTotal;
999
        }
1000
 
1001
        @Override
1002
        public List<RankingProdutoDTO> consultarProdutosVendidos(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1003
                List<RankingProdutoDTO> produtosVendidosConsultados = vendaRepository.consultarProdutosVendidos(parametrosConsulta);
1004
                for (RankingProdutoDTO produtoVendido : produtosVendidosConsultados) {
1005
                        produtoVendido.atualizarTempoEstoque(parametrosConsulta.getDataInicial(), parametrosConsulta.getDataFinal());
1006
                }
1007
                return produtosVendidosConsultados;
1008
        }
1009
 
1010
        @Override
1011
        public List<RankingProdutoDTO> consultarProdutosVendidosResumido(ParametrosConsultaProdutosVendidosDTO parametrosConsulta) {
1012
                return vendaRepository.consultarProdutosVendidosResumido(parametrosConsulta);
1013
        }
1014
 
1015
        @Override
1016
        public List<RankingProdutoDTO> consultarRankingProdutos(Date dataInicial, Date dataFinal, Integer quantidadeProdutos, String tipoOrdenacao, Long sequencialLoja, String tipoProduto, Produto produto, Marca marca) {
1017
                return vendaRepository.consultarProdutosMaisVendidos(dataInicial, dataFinal, quantidadeProdutos, tipoOrdenacao, sequencialLoja, tipoProduto, produto, marca);
1018
        }
1019
 
1020
        @Override
1021
        public List<RankingModeloDTO> consultarRankingModelos(ParametrosConsultaModelosMaisVendidosDTO parametrosConsulta) {
1022
                return vendaRepository.consultarModelosMaisVendidos(parametrosConsulta);
1023
        }
1024
 
1025
        @Override
1026
        public List<RankingModeloDTO> consultarRankingModelos(Date dataInicial, Date dataFinal, Integer quantidadeModelos, String tipoOrdenacao, String tipoProduto, Long sequencialLoja) {
1027
                return vendaRepository.consultarModelosMaisVendidos(new ParametrosConsultaModelosMaisVendidosDTO(dataInicial, dataFinal, quantidadeModelos, tipoOrdenacao, tipoProduto, sequencialLoja));
1028
        }
1029
 
1030
        @Override
1031
        public List<RankingComprasTransferenciasDTO> consultarPlanejamentoParaCompras(ParametrosConsultaParaComprasTransferenciasDTO parametrosParaConsulta) {
1032
                Integer limite = parametrosParaConsulta.getQuantidadeModelos();
1033
                if (parametrosParaConsulta.getIndicadorConsultarTodosModelos()) {
1034
                        limite = null;
1035
                }
1036
                List<RankingComprasTransferenciasDTO> planejamentos = new ArrayList<RankingComprasTransferenciasDTO>();
1037
                ParametrosConsultaModelosMaisVendidosDTO parametrosConsulta = new ParametrosConsultaModelosMaisVendidosDTO(parametrosParaConsulta.getDataInicial(), parametrosParaConsulta.getDataFinal(), limite,
1038
                                parametrosParaConsulta.getTipoOrdenacao(), parametrosParaConsulta.getTipoProduto(), parametrosParaConsulta.getSequencialLoja(), parametrosParaConsulta.getModelo(), parametrosParaConsulta.getEstilo());
1039
                List<RankingModeloDTO> modelos = vendaRepository.consultarModelosMaisVendidos(parametrosConsulta);
1040
                for (RankingModeloDTO modelo : modelos) {
1041
                        RankingComprasTransferenciasDTO planejamento = new RankingComprasTransferenciasDTO();
1042
                        planejamento.setModelo(modelo.getModelo());
1043
                        planejamento.setValorTotalVendido(modelo.getValorTotalVendido());
1044
                        planejamento.setValorTotalComprado(modelo.getValorTotalComprado());
1045
                        planejamento.setQuantidadeVendas(modelo.getQuantidadeVendas());
1046
                        planejamento.setQuantidadeMinimaComprar(parametrosParaConsulta.getQuantidadeMinimaComprar());
1047
                        if (VerificadorUtil.naoEstaNuloOuVazio(modelo.getQuantidadeEstoqueLocal())) {
1048
                                planejamento.setQuantidadeEstoqueLocal(modelo.getQuantidadeEstoqueLocal().intValue());
1049
                        }
1050
                        planejamento.setQuantidadeEstoqueGeral(modelo.getQuantidadeEstoqueGeral().intValue());
1051
                        planejamentos.add(planejamento);
1052
                }
1053
 
1054
                if (parametrosParaConsulta.getIndicadorConsultarTodosModelos()) {
1055
                        List<Modelo> modelosAtivos = new ArrayList<Modelo>();
1056
                        if (VerificadorUtil.estaNulo(parametrosParaConsulta.getModelo())) {
1057
                                modelosAtivos = modeloService.consultarTodosAtivos();
1058
                        } else {
1059
                                modelosAtivos = modeloService.consultarPassandoEntidade(parametrosParaConsulta.getModelo(), 0, modeloService.obterQuantidadeDeRegistrosPassandoEntidade(parametrosParaConsulta.getModelo()));
1060
                        }
1061
                        for (Modelo modeloAtivo : modelosAtivos) {
1062
                                if (modeloNaoEstaPresenteNaLista(modelos, modeloAtivo)) {
1063
                                        RankingComprasTransferenciasDTO planejamento = new RankingComprasTransferenciasDTO();
1064
                                        planejamento.setModelo(modeloAtivo);
1065
                                        planejamento.setValorTotalVendido(new Double(0.0));
1066
                                        planejamento.setValorTotalComprado(new Double(0.0));
1067
                                        planejamento.setQuantidadeVendas(new Long(0));
1068
                                        planejamento.setQuantidadeMinimaComprar(parametrosParaConsulta.getQuantidadeMinimaComprar());
1069
                                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosParaConsulta.getSequencialLoja())) {
1070
                                                planejamento.setQuantidadeEstoqueLocal(produtoLojaService.consultarEstoqueModeloEeLoja(modeloAtivo, parametrosParaConsulta.getSequencialLoja(), null, parametrosParaConsulta.getTipoProduto(), null, null));
1071
                                        }
1072
                                        planejamento.setQuantidadeEstoqueGeral(produtoLojaService.consultarEstoqueModeloEeLoja(modeloAtivo, null, null, parametrosParaConsulta.getTipoProduto(), null, null));
1073
                                        if (planejamento.getQuantidadeEstoqueGeral() > 0) {
1074
                                                planejamentos.add(planejamento);
1075
                                        }
1076
                                }
1077
                        }
1078
                }
1079
 
1080
                if (parametrosParaConsulta.getTipoOrdenacao().equals(TipoOrdenacaoPlanejamentoCompras.QUANTIDADE_COMPRAR.getValor())) {
1081
                        return new ArrayList<RankingComprasTransferenciasDTO>(ordenador.ordenar(planejamentos));
1082
                }
1083
                return planejamentos;
1084
        }
1085
 
1086
        private Boolean modeloNaoEstaPresenteNaLista(List<RankingModeloDTO> rankingModelos, Modelo modeloAtivo) {
1087
                for (RankingModeloDTO rankingModelo : rankingModelos) {
1088
                        if (rankingModelo.getModelo().getSequencial().equals(modeloAtivo.getSequencial())) {
1089
                                return false;
1090
                        }
1091
                }
1092
                return true;
1093
        }
1094
 
1095
        @Override
1096
        public List<RankingComprasTransferenciasEstiloDTO> consultarDetalhamentoPlanejamentoParaCompras(ParametrosConsultaParaComprasTransferenciasDTO parametrosParaConsulta, Modelo modelo) {
1097
                List<RankingComprasTransferenciasEstiloDTO> estilos = new ArrayList<RankingComprasTransferenciasEstiloDTO>();
1098
                for (TipoEstiloProduto estiloProduto : TipoEstiloProduto.values()) {
1099
                        parametrosParaConsulta.setEstilo(StringUtil.setarUpperCase(estiloProduto.getValor()));
1100
                        RankingComprasTransferenciasEstiloDTO estilo = vendaRepository.consultarEstoqueEeVendasPorEstilo(parametrosParaConsulta, modelo);
1101
                        estilo.setRankingsPorLoja(vendaRepository.consultarEstoqueEeVendasEstiloPorLoja(parametrosParaConsulta, modelo));
1102
                        estilo.setQuantidadeMinimaComprar(parametrosParaConsulta.getQuantidadeMinimaComprar());
1103
                        estilos.add(estilo);
1104
                }
1105
                return estilos;
1106
        }
1107
 
1108
        @Override
1109
        public List<RankingVendedorDTO> consultarRankingPromocaoInterna(Date dataInicial, Date dataFinal) {
1110
                List<RankingVendedorDTO> rankingVendedores = new ArrayList<RankingVendedorDTO>();
1111
                List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradoresAtivos(null);
1112
                for (Vendedor vendedor : vendedores) {
1113
                        RankingVendedorDTO ranking = consultarRankingPromocaoInternaDoVendedor(vendedor, dataInicial, dataFinal);
1114
                        if (ranking.getValorTotalVendido() > new Double(0.0)) {
1115
                                rankingVendedores.add(ranking);
1116
                        }
1117
                }
1118
                return (List<RankingVendedorDTO>) ordenador.ordenar(rankingVendedores);
1119
        }
1120
 
1121
        @Override
1122
        public RankingVendedorDTO consultarRankingPromocaoInternaDoVendedor(Vendedor vendedor, Date dataInicial, Date dataFinal) {
1123
                ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1124
                parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1125
                parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1126
                parametrosConsultaVendas.setVendedor(vendedor);
1127
                RankingVendedorDTO rankingVendedor = new RankingVendedorDTO();
1128
                rankingVendedor.setVendedor(vendedor);
1129
 
1130
                rankingVendedor.setQuantidadePedidos(lancamentoService.obterQuantidadeVendasDosProdutosDaPromocaoInterna(parametrosConsultaVendas));
1131
//              if (rankingVendedor.getQuantidadePedidos() >= ConstantesSEC.ProdutosPromocaoInterna.QUANTIDADE_MINIMA_RECEBIMENTO) {
1132
                        rankingVendedor.setValorTotalVendido(lancamentoService.obterValorTotalVendidoDosProdutosDaPromocaoInterna(parametrosConsultaVendas) * ConstantesSEC.ProdutosPromocaoInterna.PERCENTUAL);
1133
//              } else {
1134
//                      rankingVendedor.setValorTotalVendido(new Double(0.0));
1135
//              }
1136
 
1137
                ParametrosConsultaVendasDTO parametrosConsultaVendasDoDia = new ParametrosConsultaVendasDTO();
1138
                parametrosConsultaVendasDoDia.setDataInicial(DataUtils.getDataComHorarioMinimo(DataUtils.getDataAtual()));
1139
                parametrosConsultaVendasDoDia.setDataFinal(DataUtils.getDataComHorarioMaximo(DataUtils.getDataAtual()));
1140
                parametrosConsultaVendasDoDia.setVendedor(vendedor);
1141
                rankingVendedor.setValorTotalVendidoDoDia(lancamentoService.obterValorTotalVendidoDosProdutosDaPromocaoInterna(parametrosConsultaVendasDoDia));
1142
                return rankingVendedor;
1143
        }
1144
 
1145
        @Override
1146
        public List<VendasDTO> consultarVendas(ParametrosConsultaVendasDTO parametrosConsultaVendasDTO) {
1147
                return vendaRepository.consultarVendas(parametrosConsultaVendasDTO);
1148
        }
1149
 
1150
        /*
1151
        @Override
1152
        public List<RankingVendedorDTO> consultarRankingVendedores(Date dataInicial, Date dataFinal) {
1153
                List<RankingVendedorDTO> rankingVendedores = new ArrayList<RankingVendedorDTO>();
1154
                List<Vendedor> vendedores = vendedorService.consultarVendedoresColaboradores();
1155
                for (Vendedor vendedor : vendedores) {
1156
                        ParametrosConsultaVendasDTO parametrosConsultaVendas = new ParametrosConsultaVendasDTO();
1157
                        parametrosConsultaVendas.setDataInicial(DataUtils.getDataComHorarioMinimo(dataInicial));
1158
                        parametrosConsultaVendas.setDataFinal(DataUtils.getDataComHorarioMaximo(dataFinal));
1159
                        parametrosConsultaVendas.setVendedor(vendedor);
1160
                        RankingVendedorDTO rankingVendedor = new RankingVendedorDTO();
1161
                        rankingVendedor.setVendedor(vendedor);
1162
                        rankingVendedor.setValorTotalVendido(obterValorTotalBrutoDeVendasPorLojaEePeriodo(parametrosConsultaVendas));
1163
                        rankingVendedor.setQuantidadePedidos(obterQuantidadePedidos(vendedor, dataInicial, dataFinal));
1164
                        rankingVendedores.add(rankingVendedor);
1165
                }
1166
                return (List<RankingVendedorDTO>) ordenador.ordenar(rankingVendedores);
1167
        }
1168
        */
1169
 
1170
}