Subversion Repositories Integrator Subversion

Rev

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