Subversion Repositories Integrator Subversion

Rev

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

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