Subversion Repositories Integrator Subversion

Rev

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