Subversion Repositories Integrator Subversion

Rev

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

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