Subversion Repositories Integrator Subversion

Rev

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

Rev Author Line No. Line
357 espaco 1
package br.com.ec.domain.service.impl;
2
 
3
import org.springframework.beans.factory.annotation.Autowired;
4
import org.springframework.stereotype.Service;
5
 
6
import br.com.ec.core.generic.AbstractService;
7
import br.com.ec.core.generic.GenericRepository;
462 blopes 8
import br.com.ec.core.util.StringUtil;
9
import br.com.ec.core.util.VerificadorUtil;
357 espaco 10
import br.com.ec.core.validador.Validador;
462 blopes 11
import br.com.ec.domain.dto.ProdutoDTO;
357 espaco 12
import br.com.ec.domain.model.Produto;
13
import br.com.ec.domain.service.ProdutoService;
462 blopes 14
import br.com.ec.domain.shared.UtilBean;
357 espaco 15
import br.com.ec.repository.ProdutoRepository;
16
 
17
@Service
18
public class ProdutoServiceImpl extends AbstractService<Produto> implements ProdutoService {
19
 
20
        private ProdutoRepository produtoRepository;
21
        /*
22
        private TransferenciaRepository transferenciaRepository;
23
        private ProdutoLojaService produtoLojaService;
24
        private EstoqueAuditoriaService estoqueAuditoriaService;
25
        private PerfilService perfilService;
26
        private CupomService cupomService;
27
        private PagamentoService pagamentoService;
28
        private PedidoService pedidoService;
29
        private PendenciaService pendenciaService;
30
        */
31
 
32
        @Autowired
33
        public ProdutoServiceImpl(Validador validador, ProdutoRepository produtoRepository/*,
34
                        TransferenciaRepository transferenciaRepository, ProdutoLojaService produtoLojaService,
35
                        EstoqueAuditoriaService estoqueAuditoriaService, PerfilService perfilService, CupomService cupomService,
36
                        PagamentoService pagamentoService, PedidoService pedidoService, PendenciaService pendenciaService*/) {
37
                super(validador);
38
                this.produtoRepository = produtoRepository;
39
                /*
40
                this.transferenciaRepository = transferenciaRepository;
41
                this.produtoLojaService = produtoLojaService;
42
                this.estoqueAuditoriaService = estoqueAuditoriaService;
43
                this.perfilService = perfilService;
44
                this.cupomService = cupomService;
45
                this.pagamentoService = pagamentoService;
46
                this.pedidoService = pedidoService;
47
                this.pendenciaService = pendenciaService;
48
                */
49
        }
50
 
51
        @Override
52
        protected GenericRepository<Produto> getRepository() {
53
                return produtoRepository;
54
        }
55
        /*
56
        @Override
57
        public void cadastrar(Produto produto) {
58
                setarNovoCodigoDoProduto(produto);
59
                super.cadastrar(produto);
60
        }
61
 
62
        private void setarNovoCodigoDoProduto(Produto produto) {
63
                Long novoCodigo = consultarUltimoCodigo();
64
                if (VerificadorUtil.naoEstaNulo(novoCodigo)) {
65
                        novoCodigo = novoCodigo + 1;
66
                        produto.setCodigo(String.format("%06d", novoCodigo));
67
                } else {
68
                        produto.setCodigo(String.format("%06d", new Long(1)));
69
                }
70
        }
71
 
72
        @Override
73
        protected void regrasNegocioCadastrar(Produto produto) {
74
                verificarObrigatoriedades(produto);
75
                verificarSeCodigoRapidoJaExiste(produto);
76
                verificarSeCodigoEANJaExiste(produto);
77
                setarFalsoParaIndicadores(produto);
78
                produto.setAtivo(true);
79
        }
80
 
81
        @Override
82
        protected void regrasNegocioAlterar(Produto produto) {
83
                verificarObrigatoriedades(produto);
84
                verificarSeCodigoRapidoJaExiste(produto);
85
                verificarSeCodigoEANJaExiste(produto);
86
                setarFalsoParaIndicadores(produto);
87
        }
88
 
89
        private void verificarObrigatoriedades(Produto produto) {
90
                StringBuilder excecoes = new StringBuilder();
91
                if (VerificadorUtil.estaNuloOuVazio(produto.getCodigoEAN()) &&
92
                                VerificadorUtil.naoEstaNuloOuVazio(produto.getCodigoEANTributado())) {
93
                        excecoes.append("Código de Barras Tributado; ");
94
                }
95
                if (produto.getTipo().equals(TipoProduto.CAPA.getValor())) {
96
                        if (VerificadorUtil.estaNuloOuVazio(produto.getModelo())) {
97
                                excecoes.append("Modelo do produto; ");
98
                        }
99
                        if (VerificadorUtil.estaNuloOuVazio(produto.getEstilo())) {
100
                                excecoes.append("Estilo do produto; ");
101
                        }
102
                }
103
                if (produto.tipoProdutoTributado()) {
104
                        if (VerificadorUtil.estaNulo(produto.getTributacao())) {
105
                                excecoes.append("Tributação do produto; ");
106
                        }
107
                }
108
                if (VerificadorUtil.naoEstaNuloOuVazio(excecoes)) {
109
                        throw new NegocioException("Obrigatório informar: " + excecoes.toString());
110
                }
111
        }
112
 
113
        private void verificarSeCodigoRapidoJaExiste(Produto produto) {
114
                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getCodigoRapido())) {
115
                        Produto produtoConsultado = produtoRepository.consultarProdutoPorCodigoRapido(produto.getCodigoRapido());
116
                        if (VerificadorUtil.naoEstaNulo(produtoConsultado)) {
117
                                if (!produtoConsultado.getSequencial().equals(produto.getSequencial())) {
118
                                        throw new NegocioException("Código rápido do produto já existente");
119
                                }
120
                        }
121
                }
122
        }
123
 
124
        private void verificarSeCodigoEANJaExiste(Produto produto) {
125
                if (VerificadorUtil.naoEstaNuloOuVazio(produto.getCodigoEAN())) {
126
                        Produto produtoConsultado = produtoRepository.consultarProdutoPorCodigoEAN(produto.getCodigoEAN());
127
                        if (VerificadorUtil.naoEstaNulo(produtoConsultado)) {
128
                                if (!produtoConsultado.getSequencial().equals(produto.getSequencial())) {
129
                                        throw new NegocioException("Código de Barras já existente.");
130
                                }
131
                        }
132
                }
133
        }
134
 
135
        private void setarFalsoParaIndicadores(Produto produto) {
136
                if (VerificadorUtil.estaNulo(produto.getIndicadorFavorito())) {
137
                        produto.setIndicadorFavorito(false);
138
                }
139
                if (VerificadorUtil.estaNulo(produto.getIndicadorPersonalizavel())) {
140
                        produto.setIndicadorPersonalizavel(false);
141
                }
142
        }
143
 
144
        @Override
145
        public List<Produto> consultarProdutoPorParametros(ParametrosConsultaProdutoDTO parametrosConsultaProduto) {
146
                return produtoRepository.consultarProdutoPorParametros(parametrosConsultaProduto);
147
        }
148
 
149
        @Override
150
        public List<Produto> consultarCompativeis(Produto produto) {
151
                return produtoRepository.consultarCompativeis(produto);
152
        }
153
 
154
        @Override
155
        public Produto detalharProduto(Produto produto) {
156
                Produto produtoDetalhado = produtoRepository.detalharProduto(produto);
157
                produtoDetalhado.setTransferenciasAbertas(transferenciaRepository.consultarTransferenciasAbertas(produtoDetalhado));
158
                produtoDetalhado.setPedidosPendentes(pedidoService.consultarPedidosNaoAtendidos(produtoDetalhado));
159
                return produtoDetalhado;
160
        }
161
 
162
        @Override
163
        public Produto consultarProdutoPorCodigoRapidoOuCodigoEAN(String codigoRapidoOuCodigoEAN) {
164
                Produto produtoSelecionado = null;
165
                if (VerificadorUtil.naoEstaNuloOuVazio(codigoRapidoOuCodigoEAN)) {
166
                        codigoRapidoOuCodigoEAN = codigoRapidoOuCodigoEAN.trim();
167
                        if (codigoRapidoOuCodigoEAN.length() < 7) {
168
                                produtoSelecionado = this.consultarProdutoPorCodigoRapido(codigoRapidoOuCodigoEAN);
169
                        } else {
170
                                produtoSelecionado = this.consultarProdutoPorCodigoEAN(codigoRapidoOuCodigoEAN);
171
                        }
172
                }
173
                if (VerificadorUtil.estaNulo(produtoSelecionado)) {
174
                        return this.consultarProdutoPorCodigo("000000");
175
                }
176
                return produtoSelecionado;
177
        }
178
*/     
179
        @Override
180
        public Produto consultarProdutoPorCodigo(String codigoProduto) {
181
                return produtoRepository.consultarProdutoPorCodigo(codigoProduto.trim());
182
        }
462 blopes 183
 
357 espaco 184
        @Override
462 blopes 185
        public ProdutoDTO consultarProdutoDTOPorCodigoOuCodigoEAN(String codigoProduto) {
186
                return produtoRepository.consultarProdutoDTOPorCodigoOuEAN(codigoProduto.trim());
187
        }
188
 
189
        /*
190
        @Override
357 espaco 191
        public Produto consultarProdutoPorCodigoEAN(String codigoEAN) {
192
                codigoEAN = StringUtil.retornarApenasNumeros(codigoEAN);
193
                if (VerificadorUtil.naoEstaNuloOuVazio(codigoEAN)) {
194
                        return produtoRepository.consultarProdutoPorCodigoEAN(codigoEAN.trim());
195
                }
196
                return null;
197
        }
198
 
199
        @Override
462 blopes 200
        public Produto consultarProdutoPorCodigoOuCodigoEAN(String codigoProduto) {
201
                Produto produtoSelecionado = null;
202
                if (VerificadorUtil.naoEstaNuloOuVazio(codigoProduto)) {
203
                        codigoProduto = codigoProduto.trim();
204
                        if (codigoProduto.length() < 7) {
205
                                produtoSelecionado = this.consultarProdutoPorCodigo(UtilBean.padraoCodigoProduto(codigoProduto));
206
                        } else {
207
                                produtoSelecionado = this.consultarProdutoPorCodigoEAN(codigoProduto);
208
                        }
209
                }
210
                if (VerificadorUtil.estaNulo(produtoSelecionado)) {
211
                        return this.consultarProdutoPorCodigo("000000");
212
                }
213
                return produtoSelecionado;
214
        }
215
        */
216
 
217
/*     
218
 
219
        @Override
357 espaco 220
        public Produto consultarProdutoPorCodigoRapido(String codigoRapido) {
221
                return produtoRepository.consultarProdutoPorCodigoRapido(codigoRapido.trim());
222
        }
223
 
224
        @Override
225
        public Long consultarUltimoCodigo() {
226
                return produtoRepository.consultarUltimoCodigo();
227
        }
228
 
229
        @Override
230
        public Produto consultarProdutoPorCodigoParaContagem(String codigoProduto, Loja loja, Usuario usuarioParaContagem) {
231
                Produto produto = this.consultarProdutoPorCodigoOuCodigoEAN(codigoProduto);
232
                verificarSeProdutoConstaNaContagem(produto, loja, usuarioParaContagem);
233
                return produto;
234
        }
235
 
236
        private void verificarSeProdutoConstaNaContagem(Produto produto, Loja loja, Usuario usuarioParaContagem) {
237
                ParametrosConsultaProdutoDTO parametrosConsulta = new ParametrosConsultaProdutoDTO();
238
                ((ParametrosConsultaProdutoDTO)parametrosConsulta).setProduto(produto);
239
                ((ParametrosConsultaProdutoDTO)parametrosConsulta).setLojaSelecionadaParaContagem(loja);
240
                ((ParametrosConsultaProdutoDTO)parametrosConsulta).setConsultarAtivo(1);
241
                ((ParametrosConsultaProdutoDTO)parametrosConsulta).setUsuarioParaContagem(usuarioParaContagem);
242
                if (this.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta) == 0) {
243
                        throw new NegocioException("PRODUTO NÃO CONSTA PARA CONTAGEM NA LOJA");
244
                }
245
        }
246
 
247
        @Override
248
        public void lancarAvaria(EstoqueAuditoria estoqueAuditoria, Loja loja, Produto produto, Usuario usuario) {
249
                lancarMudancaEstoque(estoqueAuditoria, loja, produto, usuario, TipoEstoqueAuditoria.AVARIA.getValor());
250
        }
251
 
252
        @Override
253
        public void lancarTroca(EstoqueAuditoria estoqueAuditoria, Loja loja, Produto produto, Usuario usuario) {
254
                if (estoqueAuditoria.getEhDevolucaoMesmoProduto()) {
255
                        estoqueAuditoria.setSequencial(lancarMudancaEstoque(estoqueAuditoria, loja, produto, usuario, TipoEstoqueAuditoria.TROCA.getValor()).getSequencial());
256
                } else {
257
                        estoqueAuditoria.setSequencial(lancarDevolucao(estoqueAuditoria, loja, produto, usuario, TipoEstoqueAuditoria.DEVOLUCAO.getValor()).getSequencial());
258
                }
259
                vincularPedidoComTroca(estoqueAuditoria);
260
        }
261
 
262
        private void vincularPedidoComTroca(EstoqueAuditoria estoqueAuditoria) {
263
                if (VerificadorUtil.naoEstaNulo(estoqueAuditoria.getPedidoParaVincular())) {
264
                        PedidoHistorico pedidoHistorico = new PedidoHistorico();
265
                        pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
266
                        pedidoHistorico.setObservacao("TROCA REALIZADA: " + estoqueAuditoria.getSequencial());
267
                        pedidoHistorico.setTipoSituacao(TipoSituacaoPedido.FINALIZADO.getValor());
268
                        pedidoHistorico.setUsuario(estoqueAuditoria.getUsuario());
269
                        pedidoHistorico.setPedido(estoqueAuditoria.getPedidoParaVincular());
270
                        if (VerificadorUtil.estaNulo(estoqueAuditoria.getPedidoParaVincular().getHistorico())) {
271
                                estoqueAuditoria.getPedidoParaVincular().setHistorico(new ArrayList<PedidoHistorico>());
272
                        }
273
                        estoqueAuditoria.getPedidoParaVincular().getHistorico().add(pedidoHistorico);
274
                        estoqueAuditoria.getPedidoParaVincular().setTipoSituacao(TipoSituacaoPedido.FINALIZADO.getValor());
275
                        estoqueAuditoria.getPedidoParaVincular().setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
276
                        pedidoService.alterar(estoqueAuditoria.getPedidoParaVincular());
277
                }
278
        }
279
 
280
        private EstoqueAuditoria lancarMudancaEstoque(EstoqueAuditoria estoqueAuditoria, Loja loja, Produto produto, Usuario usuario, String tipoEstoqueAuditoria) {
281
                ProdutoLoja produtoLoja = produtoLojaService.consultarProdutoLoja(produto, loja);
282
                if (VerificadorUtil.naoEstaNulo(produtoLoja)) {
283
                        if (VerificadorUtil.estaNulo(produtoLoja.getQuantidadeEstoque())) {
284
                                produtoLoja.setQuantidadeEstoque(0);
285
                        }
286
                        String observacao = estoqueAuditoria.getObservacao();
287
                        if (VerificadorUtil.naoEstaNuloOuVazio(estoqueAuditoria.getNumeroLote())) {
288
                                observacao = "LOTE [" + estoqueAuditoria.getNumeroLote() + "] : " + observacao;
289
                        }
290
                        estoqueAuditoria = cadastrarAuditoria(usuario, produtoLoja, tipoEstoqueAuditoria, produtoLoja.getQuantidadeEstoque(), produtoLoja.getQuantidadeEstoque() - 1, estoqueAuditoria.getCliente(), observacao, TipoEstoqueAuditoriaVerificacao.NAO_VERIFICADO.getValor());
291
                        produtoLoja.setQuantidadeEstoque(produtoLoja.getQuantidadeEstoque() - 1);
292
                        produtoLojaService.alterar(produtoLoja);
293
                }
294
                return estoqueAuditoria;
295
        }
296
 
297
        private EstoqueAuditoria lancarDevolucao(EstoqueAuditoria estoqueAuditoria, Loja loja, Produto produto, Usuario usuario, String tipoEstoqueAuditoria) {
298
                verificarDadosPreenchidos(estoqueAuditoria);
299
 
300
                ProdutoLoja produtoLoja = produtoLojaService.consultarProdutoLoja(produto, loja);
301
                if (VerificadorUtil.naoEstaNulo(produtoLoja)) {
302
                        if (VerificadorUtil.estaNulo(produtoLoja.getQuantidadeEstoque())) {
303
                                produtoLoja.setQuantidadeEstoque(0);
304
                        }
305
                        Cupom cupomGerado = null;
306
                        if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.CUPOM.getValor())) {
307
                                cupomGerado = new Cupom();
308
                                cupomGerado.setCodigo(cupomService.gerarCodigoValido());
309
                                cupomGerado.setDataHoraEmissao(DataUtils.getDataAtual());
310
                                cupomGerado.setPublico(false);
311
                                cupomGerado.setAtivo(true);
312
                                cupomGerado.setTipoCupom(TipoCupom.REEMBOLSO.getValor());
313
                                cupomGerado.setCliente(estoqueAuditoria.getCliente());
314
                                cupomGerado.setValor(estoqueAuditoria.getValorDevolvido());
315
                                cupomGerado.setLimiteUtilizacao(true);
316
                                cupomGerado.setObservacao("CUPOM: " + cupomGerado.getCodigo() + "\nREEMBOLSO DO PRODUTO: " + estoqueAuditoria.getProduto().getDescricaoCompletaCapa());
317
                                cupomService.cadastrar(cupomGerado);
318
                                estoqueAuditoria.setObservacao("CUPOM GERADO: " + cupomGerado.getCodigo() + "\n" + estoqueAuditoria.getObservacao());
319
                        }
320
                        Pagamento pagamentoGerado = null;
321
                        if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.DINHEIRO.getValor())) {
322
                                pagamentoGerado = new Pagamento();
323
                                pagamentoGerado.setLoja(loja);
324
                                pagamentoGerado.setData(DataUtils.getDataAtual());
325
                                pagamentoGerado.setDescricao("DEVOLUÇÃO DO PRODUTO: " + estoqueAuditoria.getProduto().getCodigoProdutoPadrao());
326
                                pagamentoGerado.setValor(estoqueAuditoria.getValorDevolvido());
327
                                pagamentoGerado.setUsuario(usuario);
328
                                pagamentoGerado.setLancado(false);
329
                                pagamentoService.cadastrar(pagamentoGerado);
330
                                estoqueAuditoria.setObservacao("DEVOLUÇÃO EM DINHEIRO: " + estoqueAuditoria.getValorDevolvido() + "\n" + estoqueAuditoria.getObservacao());
331
                        }
332
                        if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.ESTORNO_CARTAO.getValor()) ||
333
                                        estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.TRANSFERENCIA.getValor())) {
334
                                String diaAtual = DataUtils.converterDataComHorarioParaString(DataUtils.getDataAtual());
335
                                StringBuilder conteudo = new StringBuilder();
336
                                conteudo.append("OPERAÇÃO REALIZADA POR: " + usuario.getNome() + "\n");
337
                                conteudo.append("VALOR PARA DEVOLVER: R$" + StringUtil.formatarValor(estoqueAuditoria.getValorDevolvido()) + "\n");
338
                                if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.TRANSFERENCIA.getValor())) {
339
                                        conteudo.append("DADOS BANCÁRIOS: " + estoqueAuditoria.getDadosBancarios() + "\n");
340
                                }
341
                                if (VerificadorUtil.naoEstaNuloOuVazio(estoqueAuditoria.getSequencialVenda())) {
342
                                        conteudo.append("ID DA VENDA: " + estoqueAuditoria.getSequencialVenda() + "\n");
343
                                }
344
                                if (VerificadorUtil.naoEstaNuloOuVazio(estoqueAuditoria.getNumeroNotaFiscal())) {
345
                                        conteudo.append("Nº DA NOTA FISCAL: " + estoqueAuditoria.getNumeroNotaFiscal() + "\n");
346
                                }
347
                                if (VerificadorUtil.naoEstaNuloOuVazio(estoqueAuditoria.getDataVenda())) {
348
                                        conteudo.append("DATA DA VENDA: " + DataUtils.converterDataComHorarioParaString(estoqueAuditoria.getDataVenda()) + "\n");
349
                                }
350
                                if (VerificadorUtil.naoEstaNuloOuVazio(estoqueAuditoria.getDescricaoDaLoja())) {
351
                                        conteudo.append("LOJA: " + estoqueAuditoria.getDescricaoDaLoja() + "\n");
352
                                }
353
                                conteudo.append("OBSERVAÇÕES: " + estoqueAuditoria.getObservacao() + "\n\n");
354
                                if (VerificadorUtil.naoEstaNulo(estoqueAuditoria.getCliente())) {
355
                                        conteudo.append("DADOS DO CLIENTE:\n");
356
                                        conteudo.append("NOME: " + estoqueAuditoria.getCliente().getNome() + "\n");
357
                                        conteudo.append("CPF/CNPJ: " + estoqueAuditoria.getCliente().getCpfCnpjFormatado() + "\n");
358
                                        conteudo.append("EMAIL: " + estoqueAuditoria.getCliente().getEmail() + "\n");
359
                                        conteudo.append("TELEFONE: " + estoqueAuditoria.getCliente().getTelefone() + "\n");
360
                                        conteudo.append("CONTATO: " + estoqueAuditoria.getCliente().getContato() + "\n\n");
361
                                }
362
                                conteudo.append("DATA DA SOLICITAÇÃO: " + diaAtual + "\n");
363
                                conteudo.append("__________________________________________________\n\n");
364
 
365
                                if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.ESTORNO_CARTAO.getValor())) {
366
                                        new GerenciadorEmailImpl()
367
                                                .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_DIRECAO)
368
                                                .comAssunto("ESPAÇO CASE - ESTORNO VIA CARTÃO: " + diaAtual)
369
                                                .comConteudo(conteudo.toString())
370
                                                .enviar();
371
                                }
372
                                if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.TRANSFERENCIA.getValor())) {
373
                                        new GerenciadorEmailImpl()
374
                                                .comEmailsDestino(ConstantesSEC.DESTINATARIOS_EMAIL_DIRECAO)
375
                                                .comAssunto("ESPAÇO CASE - ESTORNO VIA TRANSFERÊNCIA: " + diaAtual)
376
                                                .comConteudo(conteudo.toString())
377
                                                .enviar();
378
                                }
379
                                try {
380
                                        Pendencia pendencia = new Pendencia();
381
                                        pendencia.setDescricao("SOLICITAÇÃO DE " + TipoDevolucao.parse(estoqueAuditoria.getTipoDevolucao()).getDescricao() + ": " + diaAtual + ". VENDA ID: " + estoqueAuditoria.getSequencialVenda());
382
                                        pendencia.setUsuario(usuario);
383
                                        pendencia.setData(DataUtils.getDataAtual());
384
                                        pendencia.setLoja(loja);
385
                                        Perfil perfilRh = new Perfil();
386
                                        perfilRh.setCodigo(ConstantesSEC.SETOR_FINANCEIRO_2);
387
                                        pendencia.setPerfil(perfilRh);
388
                                        pendenciaService.cadastrar(pendencia);
389
                                } catch (Exception e) {}
390
                        }
391
 
392
                        estoqueAuditoria = cadastrarAuditoria(usuario, produtoLoja, tipoEstoqueAuditoria, produtoLoja.getQuantidadeEstoque(), produtoLoja.getQuantidadeEstoque(), estoqueAuditoria.getCliente(), estoqueAuditoria.getObservacao(), TipoEstoqueAuditoriaVerificacao.NAO_VERIFICADO.getValor());
393
                        if (VerificadorUtil.naoEstaNulo(cupomGerado)) {
394
                                cupomGerado.setObservacao("AUDITORIA: " + estoqueAuditoria.getSequencial() + "\n" + cupomGerado.getObservacao());
395
                                cupomService.alterar(cupomGerado);
396
                        }
397
                        if (VerificadorUtil.naoEstaNulo(pagamentoGerado)) {
398
                                pagamentoGerado.setDescricao("AUDITORIA: " + estoqueAuditoria.getSequencial() + "\n" + pagamentoGerado.getDescricao());
399
                                pagamentoService.alterar(pagamentoGerado);
400
                        }
401
                }
402
                return estoqueAuditoria;
403
        }
404
 
405
        private void verificarDadosPreenchidos(EstoqueAuditoria estoqueAuditoria) {
406
                if (VerificadorUtil.estaNuloOuVazio(estoqueAuditoria.getObservacao())) {
407
                        throw new NegocioException("Informe os motivos da devolução (OBSERVAÇÔES)");
408
                }
409
 
410
                if (VerificadorUtil.estaNuloOuVazio(estoqueAuditoria.getValorDevolvido()) ||
411
                                (estoqueAuditoria.getValorDevolvido() <= 0.0)) {
412
                        throw new NegocioException("Informe o valor devolvido");
413
                }
414
                if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.TRANSFERENCIA.getValor()) ||
415
                                estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.ESTORNO_CARTAO.getValor())) {
416
                        if (VerificadorUtil.estaNuloOuVazio(estoqueAuditoria.getCliente())) {
417
                                throw new NegocioException("Informe o cliente com o contato e/ou email");
418
                        }
419
                        if (VerificadorUtil.estaNuloOuVazio(estoqueAuditoria.getCliente().getContato()) &&
420
                                        VerificadorUtil.estaNuloOuVazio(estoqueAuditoria.getCliente().getEmail())) {
421
                                throw new NegocioException("Informe o contato ou email do cliente");
422
                        }
423
                        if (estoqueAuditoria.getTipoDevolucao().equals(TipoDevolucao.TRANSFERENCIA.getValor())) {
424
                                if (VerificadorUtil.estaNuloOuVazio(estoqueAuditoria.getDadosBancarios())) {
425
                                        throw new NegocioException("Informe os dados bancários do cliente");
426
                                }
427
                        }
428
                }
429
        }
430
 
431
        private EstoqueAuditoria cadastrarAuditoria(Usuario usuario, ProdutoLoja produtoLoja, String tipoEstoqueAuditoria, Integer quantidadeEstoqueAnterior, Integer quantidadeEstoqueNovo, Cliente cliente, String observacao, String tipoVerificacao) {
432
                return estoqueAuditoriaService.cadastrarAuditoria(usuario, produtoLoja, quantidadeEstoqueAnterior, quantidadeEstoqueNovo, DataUtils.getDataAtual(), tipoEstoqueAuditoria, cliente, observacao, tipoVerificacao);
433
        }
434
 
435
        @Override
436
        public void desativarProduto(Produto produto) {
437
                produto.setAtivo(false);
438
                this.alterar(produto);
439
        }
440
 
441
        @Override
442
        public void ativarProduto(Produto produto) {
443
                produto.setAtivo(true);
444
                this.alterar(produto);
445
        }
446
 
447
        @Override
448
        public void realizarContagem(ProdutoLoja produtoLoja, Integer quantidadeEstoque, String localizacao, Usuario usuario, Boolean indicadorAvaria) {
449
                if (VerificadorUtil.estaNulo(quantidadeEstoque)) {
450
                        throw new NegocioException("É preciso informar o estoque");
451
                }
452
                verificarSeUsuarioLogadoEhVendedorOuSuperior(usuario);
453
                produtoLoja.setLocalizacao(localizacao);
454
                if (VerificadorUtil.naoEstaNulo(produtoLoja.getDataContagemPreparacao())) {
455
                        if (diferencaMaiorEmDias(ConstantesSEC.StatusContagem.CONTAGEM_AMARELO_30_DIAS, produtoLoja.getDataContagemPreparacao(), DataUtils.getDataAtual())) {
456
                                produtoLoja.setDataContagemPreparacao(null);
457
                        }
458
                }
459
                if (VerificadorUtil.estaNulo(produtoLoja.getDataContagemPreparacao())) {
460
                        produtoLoja.setDataContagemPreparacao(DataUtils.getDataAtual());
461
                        produtoLoja.setQuantidadeEstoqueContagem(quantidadeEstoque);
462
                        produtoLoja.setUsuarioUltimaContagemPreparacao(usuario);
463
                        produtoLojaService.alterar(produtoLoja);
464
                } else if (VerificadorUtil.estaNulo(produtoLoja.getDataContagem()) ||
465
                                        produtoLoja.getDataContagem().before(produtoLoja.getDataContagemPreparacao()) ||
466
                                        produtoLoja.getIndicadorContagemSolicitada() ||
467
                                        produtoLoja.getUsuarioUltimaContagem().equals(produtoLoja.getUsuarioUltimaContagemPreparacao())) {
468
                        verificarSeUsuarioDePreparacaoDiferente(produtoLoja, usuario);
469
                        verificarSeProdutoPossuiTransferenciasAbertas(produtoLoja);
470
                        Integer quantidadeEstoqueAnterior = produtoLoja.getQuantidadeEstoque();
471
                        Integer quantidadeEstoqueNovo = quantidadeEstoque;
472
 
473
                        if (temDivergenciaContagem(produtoLoja, quantidadeEstoqueNovo)) {
474
                                solicitarContagemCasoDivergentes(produtoLoja, quantidadeEstoqueNovo, usuario);
475
                        } else {
476
                                produtoLoja.setDataContagem(DataUtils.getDataAtual());
477
                                produtoLoja.setUsuarioUltimaContagem(usuario);
478
                                produtoLoja.setQuantidadeEstoque(quantidadeEstoqueNovo);
479
                                produtoLoja.setIndicadorContagemSolicitada(false);
480
                                produtoLojaService.alterar(produtoLoja);
481
                                if (quantidadeEstoqueAnterior != quantidadeEstoqueNovo) {
482
                                        cadastrarAuditoria(usuario, produtoLoja, TipoEstoqueAuditoria.CONTAGEM.getValor(), quantidadeEstoqueAnterior, quantidadeEstoqueNovo, null, "", TipoEstoqueAuditoriaVerificacao.NAO_VERIFICADO.getValor());
483
                                }
484
                                if (quantidadeEstoqueNovo > 0) {
485
                                        solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(produtoLoja.getLoja(), usuario, produtoLoja.getProduto());
486
                                }
487
                        }
488
                } else {
489
                        throw new NegocioException("Contagem indisponível, informe à gestão");
490
                }
491
        }
492
 
493
        private Boolean diferencaMaiorEmDias(Integer quantidadeDias, Date dataAnterior, Date dataPosterior) {
494
                Date dataComDias = DataUtils.acrescentarDias(dataAnterior, quantidadeDias);
495
                return dataComDias.before(dataPosterior);
496
        }
497
 
498
        private boolean temDivergenciaContagem(ProdutoLoja produtoLoja, Integer quantidadeEstoqueNovo) {
499
                ProdutoHistoricoDTO produtoHistorico = new ProdutoHistoricoDTO();
500
                produtoHistorico.setProduto(produtoLoja.getProduto());
501
                Integer quantidadeEntradas = 0;
502
                List<ProdutoHistoricoDTO> entradas = produtoRepository.consultarHistoricoDeEntradas(produtoLoja.getProduto(), produtoLoja.getLoja(),
503
                                produtoLoja.getDataContagemPreparacao(), DataUtils.getDataAtual());
504
                for (ProdutoHistoricoDTO entrada : entradas) {
505
                        quantidadeEntradas = quantidadeEntradas + entrada.getQuantidadeLancamentos().intValue();
506
                }
507
                Integer quantidadeSaidas = 0;
508
                List<ProdutoHistoricoDTO> saidas = produtoRepository.consultarHistoricoDeSaidas(produtoLoja.getProduto(), produtoLoja.getLoja(),
509
                                produtoLoja.getDataContagemPreparacao(), DataUtils.getDataAtual());
510
                for (ProdutoHistoricoDTO saida : saidas) {
511
                        quantidadeSaidas = quantidadeSaidas + saida.getQuantidadeLancamentos().intValue();
512
                }
513
                if (VerificadorUtil.estaNulo(produtoLoja.getQuantidadeEstoqueContagem())) {
514
                        produtoLoja.setQuantidadeEstoqueContagem(produtoLoja.getQuantidadeEstoque());
515
                }
516
                return !(produtoLoja.getQuantidadeEstoqueContagem() + quantidadeEntradas - quantidadeSaidas == quantidadeEstoqueNovo);
517
        }
518
 
519
        private void verificarSeUsuarioDePreparacaoDiferente(ProdutoLoja produtoLoja, Usuario usuario) {
520
                if (produtoLoja.getUsuarioUltimaContagemPreparacao().equals(usuario)) {
521
                        throw new NegocioException("Usuário já realizou a preparação da contagem");
522
                }
523
        }
524
 
525
        @Override
526
        public void realizarContagemDireta(ProdutoLoja produtoLoja, Integer quantidadeEstoque, String localizacao, Usuario usuario, Boolean indicadorAvaria) {
527
                if (VerificadorUtil.estaNulo(quantidadeEstoque)) {
528
                        throw new NegocioException("É preciso informar o estoque");
529
                }
530
                verificarSeUsuarioLogadoEhVendedorOuSuperior(usuario);
531
                verificarSeProdutoPossuiTransferenciasAbertas(produtoLoja);
532
                Integer quantidadeEstoqueAnterior = produtoLoja.getQuantidadeEstoque();
533
                Integer quantidadeEstoqueNovo = quantidadeEstoque;
534
                produtoLoja.setLocalizacao(localizacao);
535
                produtoLoja.setDataContagemPreparacao(DataUtils.getDataAtual());
536
                produtoLoja.setDataContagem(DataUtils.getDataAtual());
537
                produtoLoja.setUsuarioUltimaContagem(usuario);
538
                produtoLoja.setUsuarioUltimaContagemPreparacao(usuario);
539
                produtoLoja.setQuantidadeEstoqueContagem(quantidadeEstoqueNovo);
540
                produtoLoja.setQuantidadeEstoque(quantidadeEstoqueNovo);
541
                produtoLoja.setIndicadorContagemSolicitada(false);
542
                produtoLojaService.alterar(produtoLoja);
543
                if (quantidadeEstoqueAnterior != quantidadeEstoqueNovo) {
544
                        cadastrarAuditoria(usuario, produtoLoja, TipoEstoqueAuditoria.CONTAGEM.getValor(), quantidadeEstoqueAnterior, quantidadeEstoqueNovo, null, "", TipoEstoqueAuditoriaVerificacao.VERIFICADO_SEM_PENDENCIA.getValor());
545
                }
546
                if (quantidadeEstoqueNovo > 0) {
547
                        solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(produtoLoja.getLoja(), usuario, produtoLoja.getProduto());
548
                }
549
        }
550
 
551
        private void solicitarContagemCasoDivergentes(ProdutoLoja produtoLoja, Integer quantidadeEstoqueNovo, Usuario usuarioContagem) {
552
                produtoLoja.setDataContagemPreparacao(DataUtils.getDataAtual());
553
                produtoLoja.setQuantidadeEstoqueContagem(quantidadeEstoqueNovo);
554
                produtoLoja.setUsuarioUltimaContagemPreparacao(usuarioContagem);
555
                produtoLojaService.alterar(produtoLoja);
556
        }
557
 
558
        private void verificarSeProdutoPossuiTransferenciasAbertas(ProdutoLoja produtoLoja) {
559
                if (transferenciaRepository.verificarSeProdutoPossuiTransferenciasAbertas(produtoLoja)) {
560
                        throw new NegocioException("Não é permitido contar produto em transferência");
561
                }
562
        }
563
 
564
        private void verificarSeUsuarioLogadoEhVendedorOuSuperior(Usuario usuario) {
565
                if (!perfilService.temPerfilVendedor(usuario) &&
566
                        !perfilService.temPerfilLojistica(usuario) &&
567
                        !perfilService.temPerfilCompras(usuario) &&
568
                        !perfilService.temPerfilRecursosHumanos(usuario)) {
569
                        throw new NegocioException("Sem permissão para esta operação");
570
                }
571
        }
572
 
573
        @Override
574
        public void realizarContagem(Produto produto, Loja loja) {
575
                ProdutoLoja produtoLoja = new ProdutoLoja();
576
                produtoLoja.setProduto(produto);
577
                produtoLoja.setLoja(loja);
578
                produtoLoja.setDataContagem(DataUtils.getDataAtual());
579
                produtoLoja.setIndicadorContagemSolicitada(false);
580
                produtoLojaService.alterar(produtoLoja);
581
        }
582
 
583
        @Override
584
        public void transferirEstoque(Loja lojaEntrada, Loja lojaSaida, Usuario usuario, Produto produto, Integer quantidadeEstoque) {
585
                verificarParametrosParaTransferencia(lojaEntrada, lojaSaida, produto, quantidadeEstoque);
586
 
587
                Integer quantidadeEstoqueAnteriorEntrada = produtoLojaService.consultarEstoqueProdutoEeLoja(produto, lojaEntrada);
588
                Integer quantidadeEstoqueAnteriorSaida = produtoLojaService.consultarEstoqueProdutoEeLoja(produto, lojaSaida);
589
 
590
                produtoLojaService.alterarEstoqueAcrescentandoQuantidadeInformada(quantidadeEstoque, produto, lojaEntrada);
591
                produtoLojaService.alterarEstoqueAcrescentandoQuantidadeInformada(-quantidadeEstoque, produto, lojaSaida);
592
 
593
                cadastrarAuditoria(usuario, new ProdutoLoja(produto, lojaEntrada), TipoEstoqueAuditoria.TRANSFERENCIA.getValor(),
594
                                quantidadeEstoqueAnteriorEntrada, quantidadeEstoqueAnteriorEntrada + quantidadeEstoque, null, "", TipoEstoqueAuditoriaVerificacao.VERIFICADO_SEM_PENDENCIA.getValor());
595
 
596
                cadastrarAuditoria(usuario, new ProdutoLoja(produto, lojaSaida), TipoEstoqueAuditoria.TRANSFERENCIA.getValor(),
597
                                quantidadeEstoqueAnteriorSaida, quantidadeEstoqueAnteriorSaida - quantidadeEstoque, null, "", TipoEstoqueAuditoriaVerificacao.VERIFICADO_SEM_PENDENCIA.getValor());
598
 
599
                solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(lojaEntrada, usuario, produto);
600
 
601
                Usuario usuarioPadrao = new Usuario();
602
                usuarioPadrao.setSequencial(ConstantesSEC.SEQUENCIAL_USUARIO_MATRIZ_60);
603
                realizarContagemComZeroEstoqueNaLojaEntrada(lojaEntrada, usuarioPadrao, produto, quantidadeEstoqueAnteriorEntrada, quantidadeEstoqueAnteriorSaida);
604
        }
605
 
606
        private void realizarContagemComZeroEstoqueNaLojaEntrada(Loja lojaEntrada, Usuario usuario, Produto produto, Integer quantidadeEstoqueAnteriorEntrada, Integer quantidadeEstoque) {
607
                if (quantidadeEstoqueAnteriorEntrada == 0) {
608
                        ProdutoLoja produtoLoja = produtoLojaService.consultarProdutoLoja(produto, lojaEntrada);
609
                        produtoLoja.setQuantidadeEstoqueContagem(quantidadeEstoque);
610
                        produtoLoja.setDataContagem(DataUtils.getDataAtual());
611
                        produtoLoja.setDataContagemPreparacao(DataUtils.getDataAtual());
612
                        produtoLoja.setUsuarioUltimaContagem(usuario);
613
                        produtoLoja.setUsuarioUltimaContagemPreparacao(usuario);
614
                        produtoLoja.setIndicadorContagemSolicitada(false);
615
                        produtoLojaService.alterar(produtoLoja);
616
                }
617
        }
618
 
619
        private void solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(Loja lojaEntrada, Usuario usuario, Produto produto) {
620
                pedidoService.solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(lojaEntrada, produto);
621
        }
622
 
623
        private void verificarParametrosParaTransferencia(Loja lojaEntrada, Loja lojaSaida, Produto produto, Integer quantidade) {
624
                if (VerificadorUtil.estaNulo(lojaEntrada) || VerificadorUtil.estaNulo(lojaSaida) || VerificadorUtil.estaNulo(produto)) {
625
                        throw new NegocioException("Obrigatório informar as lojas para transferência");
626
                } else {
627
                        if (lojaEntrada.getSequencial().equals(lojaSaida.getSequencial())) {
628
                                throw new NegocioException("Não é permitido transferir para uma mesma loja.");
629
                        }
630
                        if (quantidade == 0) {
631
                                throw new NegocioException("Obrigatório informar a quantidade.");
632
                        }
633
                }
634
        }
635
 
636
        @Override
637
        public Integer quantidadeTotalEstoque(Loja loja) {
638
                return produtoRepository.quantidadeTotalEstoque(loja);
639
        }
640
 
641
        @Override
642
        public Double valorTotalEstoque(Loja loja, Modelo modelo) {
643
                return produtoRepository.valorTotalEstoque(loja, modelo);
644
        }
645
 
646
        @Override
647
        public Integer quantidadeEstoque(ParametrosConsultaProdutoDTO parametrosConsulta) {
648
                return produtoRepository.quantidadeEstoque(parametrosConsulta);
649
        }
650
 
651
        @Override
652
        public Integer quantidadeEstoque(ParametrosConsultaProdutoDTO parametrosConsulta, Long sequencialLoja) {
653
                return produtoRepository.quantidadeEstoque(parametrosConsulta, sequencialLoja);
654
        }
655
 
656
        @Override
657
        public Integer quantidadeParaContagem(Loja loja) {
658
                ParametrosConsultaProdutoDTO parametrosConsulta = new ParametrosConsultaProdutoDTO();
659
                ((ParametrosConsultaProdutoDTO)parametrosConsulta).setLojaSelecionadaParaContagem(loja);
660
                ((ParametrosConsultaProdutoDTO)parametrosConsulta).setConsultarAtivo(1);
661
                return this.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta);
662
        }
663
 
664
        @Override
665
        public Integer solicitarContagem(ParametrosConsultaProdutoDTO parametrosConsulta) {
666
                List<Produto> produtos = produtoRepository.consultarPassandoParametrosConsulta(parametrosConsulta, 0, produtoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta), null, null, new HashMap<String, Object>());
667
                for (Produto produto : produtos) {
668
                        if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getLojaSelecionadaParaContagem())) {
669
                                produtoLojaService.solicitarContagem(produto, parametrosConsulta.getLojaSelecionadaParaContagem(), true);
670
                        } else {
671
                                produtoLojaService.solicitarContagem(produto, null, true);
672
                        }
673
                }
674
                return produtos.size();
675
        }
676
 
677
        @Override
678
        public void cancelarContagem(ParametrosConsultaProdutoDTO parametrosConsulta) {
679
                List<Produto> produtos = produtoRepository.consultarPassandoParametrosConsulta(parametrosConsulta, 0, produtoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta), null, null, new HashMap<String, Object>());
680
                for (Produto produto : produtos) {
681
                        produtoLojaService.cancelarContagem(produto, parametrosConsulta.getLojaSelecionadaParaContagem());
682
                }
683
        }
684
 
685
        @Override
686
        public void zerarEstoque(ParametrosConsultaProdutoDTO parametrosConsulta, Usuario usuario) {
687
                List<Produto> produtos = produtoRepository.consultarPassandoParametrosConsulta(parametrosConsulta, 0, produtoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta), null, null, new HashMap<String, Object>());
688
                for (Produto produto : produtos) {
689
                        List<ProdutoLoja> lista = produtoLojaService.consultar(new ProdutoLoja(produto, parametrosConsulta.getLojaSelecionadaParaContagem()), 0, produtoLojaService.obterQuantidadeDeRegistrosPassandoEntidade(new ProdutoLoja(produto, parametrosConsulta.getLojaSelecionadaParaContagem())));
690
                        for (ProdutoLoja produtoLoja : lista) {
691
                                produtoLoja.setIndicadorContagemSolicitada(false);
692
                                produtoLojaService.alterar(produtoLoja);
693
                                if (produtoLoja.getQuantidadeEstoque() > 0 ) {
694
                                        cadastrarAuditoria(usuario, produtoLoja, TipoEstoqueAuditoria.CONTAGEM.getValor(), produtoLoja.getQuantidadeEstoque(), 0, null, "", TipoEstoqueAuditoriaVerificacao.VERIFICADO_SEM_PENDENCIA.getValor());
695
                                        produtoLojaService.alterarEstoqueAcrescentandoQuantidadeInformada(-produtoLoja.getQuantidadeEstoque(), produtoLoja.getProduto(), produtoLoja.getLoja());
696
                                }
697
                        }
698
                }
699
        }
700
 
701
        @Override
702
        public List<ProdutoHistoricoDTO> consultarHistorico(Produto produto, Integer ultimosMeses) {
703
                List<ProdutoHistoricoDTO> historico = new ArrayList<ProdutoHistoricoDTO>();
704
                for (int mes = 0; mes <= ultimosMeses; mes++) {
705
                        Calendar calendarData = new GregorianCalendar();
706
                        calendarData.setTime(DataUtils.acrescentarMeses(DataUtils.getDataAtual(), mes * -1));
707
                        historico.addAll(produtoRepository.consultarHistorico(produto,
708
                                DataUtils.getPrimeiroDiaDoMes(calendarData.get(Calendar.MONTH)+1, calendarData.get(Calendar.YEAR)),
709
                                DataUtils.getUltimoDiaDoMes(calendarData.get(Calendar.MONTH)+1, calendarData.get(Calendar.YEAR))));
710
                }
711
                return historico;
712
        }
713
 
714
        @Override
715
        public List<ProdutoHistoricoDetalhesDTO> detalharHistorico(ProdutoHistoricoDTO produtoHistorico) {
716
                return produtoRepository.detalharHistorico(produtoHistorico,
717
                                DataUtils.getPrimeiroDiaDoMes(new Integer(produtoHistorico.getMes()), new Integer(produtoHistorico.getAno())),
718
                                DataUtils.getUltimoDiaDoMes(new Integer(produtoHistorico.getMes()), new Integer(produtoHistorico.getAno())));
719
        }
720
 
721
        @Override
722
        public Integer quantidadeProdutosParaRetirarDoOnline(Loja loja) {
723
                ParametrosConsultaProdutoDTO parametrosConsulta = new ParametrosConsultaProdutoDTO();
724
                parametrosConsulta.setLojaSelecionada(loja.getSequencial());
725
                parametrosConsulta.setTipoRelatorioProduto(TipoRelatorio.RETIRAR_SITE.getValor());
726
                return produtoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta);
727
        }
728
 
729
        @Override
730
        public Integer quantidadeProdutosParaRetirarDoOnlineMatriz() {
731
                ParametrosConsultaProdutoDTO parametrosConsulta = new ParametrosConsultaProdutoDTO();
732
                parametrosConsulta.setLojaSelecionada(ConstantesSEC.SEQUENCIAL_MATRIZ_ESTOQUE_9);
733
                parametrosConsulta.setTipoRelatorioProduto(TipoRelatorio.RETIRAR_SITE.getValor());
734
                return produtoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta);
735
        }
736
 
737
        @Override
738
        public Integer quantidadeProdutosParaRetirarDoOnlineShoplog() {
739
                ParametrosConsultaProdutoDTO parametrosConsulta = new ParametrosConsultaProdutoDTO();
740
                parametrosConsulta.setLojaSelecionada(ConstantesSEC.SEQUENCIAL_LOJA_PATIO_14);
741
                parametrosConsulta.setTipoRelatorioProduto(TipoRelatorio.RETIRAR_SHOPLOG.getValor());
742
                return produtoRepository.obterQuantidadeDeRegistrosParametrosConsulta(parametrosConsulta);
743
        }
744
 
745
        @Override
746
        public Date dataUltimaVenda(Produto produto) {
747
                return produtoRepository.dataUltimaVenda(produto);
748
        }
749
 
750
        @Override
751
        public Integer quantidadeProdutosAdicionadosSite(Date dataInicial, Date dataFinal) {
752
                return produtoRepository.quantidadeProdutosAdicionadosSite(dataInicial, dataFinal);
753
        }
754
 
755
        @Override
756
        public Integer quantidadeProdutosOnline() {
757
                return produtoRepository.quantidadeProdutosOnline();
758
        }
759
 
760
        @Override
761
        public Integer quantidadeProdutosFavoritosOffline(Loja loja) {
762
                return produtoRepository.quantidadeProdutosFavoritosOffline(loja);
763
        }
764
 
765
        @Override
766
        public void verificarPedidosProdutoParaEntrarEmContato(Produto produto, Long sequencialCompra) {
767
                if (!produto.tipoProdutoEhServico()) {
768
                        List<Pedido> pedidosProduto = new ArrayList<Pedido>();
769
                        List<Produto> compativeis = consultarCompativeis(produto);
770
                        for (Produto produtoCompatival : compativeis) {
771
                                pedidosProduto.addAll(pedidoService.consultarPedidosDoProdutoOuModeloPendentes(produtoCompatival));
772
                        }
773
 
774
                        for (Pedido pedidoConsultado : pedidosProduto) {
775
                                Boolean atualizarPedido = false;
776
                                Boolean atualizarPedidoCompativel = false;
777
                                for (Produto produtoCompatival : compativeis) {
778
                                        if (VerificadorUtil.naoEstaNuloOuVazio(pedidoConsultado.getProdutos())) {
779
                                                for (PedidoProduto pedidoProduto : pedidoConsultado.getProdutos()) {
780
                                                        if (pedidoProduto.getProduto().getSequencial().equals(produtoCompatival.getSequencial())) {
781
                                                                if (!produto.getSequencial().equals(produtoCompatival.getSequencial())) {
782
                                                                        atualizarPedidoCompativel = true;
783
                                                                }
784
                                                                atualizarPedido = true;
785
                                                                break;
786
                                                        }
787
                                                }
788
                                        } else if (VerificadorUtil.estaNulo(pedidoConsultado.getTipoProduto())) {
789
                                                atualizarPedido = true;
790
                                        } else if (VerificadorUtil.estaNulo(pedidoConsultado.getGenero())) {
791
                                                if (pedidoConsultado.getTipoProduto().equals(produtoCompatival.getTipo())) {
792
                                                        atualizarPedido = true;
793
                                                }
794
                                        } else if (pedidoConsultado.getTipoProduto().equals(produtoCompatival.getTipo()) &&
795
                                                        (produtoCompatival.getGenero().equals(TipoGenero.UNISSEX.getValor()) ||
796
                                                         pedidoConsultado.getGenero().equals(TipoGenero.UNISSEX.getValor()) ||
797
                                                         pedidoConsultado.getGenero().equals(produtoCompatival.getGenero()))) {
798
                                                if (VerificadorUtil.naoEstaNulo(pedidoConsultado.getEstiloProduto()) &&
799
                                                        VerificadorUtil.estaNulo(pedidoConsultado.getCorProduto())) {
800
                                                        if (pedidoConsultado.getEstiloProduto().equals(produtoCompatival.getEstilo())) {
801
                                                                atualizarPedido = true;
802
                                                        }
803
                                                } else if (VerificadorUtil.estaNulo(pedidoConsultado.getEstiloProduto()) &&
804
                                                                   VerificadorUtil.naoEstaNulo(pedidoConsultado.getCorProduto())) {
805
                                                        if (VerificadorUtil.naoEstaNulo(produtoCompatival.getCor())) {
806
                                                                if (pedidoConsultado.getCorProduto().equals(produtoCompatival.getCor())) {
807
                                                                        atualizarPedido = true;
808
                                                                }
809
                                                        }
810
                                                } else if (VerificadorUtil.naoEstaNulo(pedidoConsultado.getEstiloProduto()) &&
811
                                                                   VerificadorUtil.naoEstaNulo(pedidoConsultado.getCorProduto())) {
812
                                                        if (pedidoConsultado.getEstiloProduto().equals(produtoCompatival.getEstilo())) {
813
                                                                if (VerificadorUtil.naoEstaNulo(produtoCompatival.getCor())) {
814
                                                                        if (pedidoConsultado.getCorProduto().equals(produtoCompatival.getCor())) {
815
                                                                                atualizarPedido = true;
816
                                                                        }
817
                                                                }
818
                                                        }
819
                                                } else if (VerificadorUtil.estaNulo(pedidoConsultado.getEstiloProduto()) &&
820
                                                                   VerificadorUtil.estaNulo(pedidoConsultado.getCorProduto())) {
821
                                                        atualizarPedido = true;
822
                                                }
823
                                        }
824
                                }
825
                                if (atualizarPedido) {
826
                                        pedidoConsultado = pedidoService.consultarPedidoCompleto(pedidoConsultado);
827
                                        PedidoHistorico pedidoHistorico = new PedidoHistorico();
828
                                        pedidoHistorico.setPedido(pedidoConsultado);
829
                                        pedidoHistorico.setTipoSituacao(TipoSituacaoPedido.ENTRAR_EM_CONTATO.getValor());
830
                                        pedidoHistorico.setDataHistorico(DataUtils.getDataAtual());
831
                                        if (atualizarPedidoCompativel) {
832
                                                pedidoHistorico.setObservacao("PRODUTO COMPATÍVEL DISPONÍVEL PELA COMPRA ID " + sequencialCompra);
833
                                        } else {
834
                                                pedidoHistorico.setObservacao("PRODUTO DISPONÍVEL PELA COMPRA ID " + sequencialCompra);
835
                                        }
836
                                        if (VerificadorUtil.estaNulo(pedidoConsultado.getHistorico())) {
837
                                                pedidoConsultado.setHistorico(new ArrayList<PedidoHistorico>());
838
                                        }
839
                                        pedidoConsultado.setTipoSituacao(TipoSituacaoPedido.ENTRAR_EM_CONTATO.getValor());
840
                                        pedidoConsultado.setDataUltimaAlteracaoSituacao(DataUtils.getDataAtual());
841
                                        pedidoConsultado.setUsuarioAtendimento(null);
842
                                        pedidoConsultado.getHistorico().add(pedidoHistorico);
843
                                        pedidoService.alterar(pedidoConsultado);
844
                                }
845
                        }
846
                }
847
        }
848
        */
849
}