Subversion Repositories Integrator Subversion

Rev

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