Subversion Repositories Integrator Subversion

Rev

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