Subversion Repositories Integrator Subversion

Rev

Rev 182 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 espaco 1
package br.com.ec.domain.service.cupom.impl;
2
 
3
import org.springframework.beans.factory.annotation.Autowired;
4
import org.springframework.stereotype.Service;
5
 
6
import br.com.ec.domain.model.Cupom;
7
import br.com.ec.domain.model.tipos.TipoCupom;
8
import br.com.ec.domain.service.cupom.CupomService;
9
import br.com.ec.domain.service.lancamento.LancamentoService;
10
import br.com.ec.infrastructure.repository.CupomRepository;
11
import br.edu.cesmac.core.exception.NegocioException;
12
import br.edu.cesmac.core.generic.AbstractService;
13
import br.edu.cesmac.core.generic.GenericRepository;
14
import br.edu.cesmac.core.util.DataUtils;
15
import br.edu.cesmac.core.util.VerificadorUtil;
16
import br.edu.cesmac.core.validador.Validador;
17
 
18
@Service
19
public class CupomServiceImpl extends AbstractService<Cupom> implements CupomService {
20
 
21
        private CupomRepository cupomRepository;
22
        private LancamentoService lancamentoService;
23
 
24
        @Autowired
25
        public CupomServiceImpl(Validador validador, CupomRepository cupomRepository, LancamentoService lancamentoService) {
26
                super(validador);
27
                this.cupomRepository = cupomRepository;
28
                this.lancamentoService = lancamentoService;
29
        }
30
 
31
        @Override
32
        protected GenericRepository<Cupom> getRepository() {
33
                return cupomRepository;
34
        }
35
 
36
        @Override
37
        protected void regrasNegocioCadastrar(Cupom cupom) {
38
                verificarSeCodigoJaExiste(cupom);
39
        }
40
 
41
        private void verificarSeCodigoJaExiste(Cupom cupom) {
42
                if (VerificadorUtil.naoEstaNulo(consultarCupomPorCodigo(cupom.getCodigo()))) {
43
                        throw new NegocioException("CÓDIGO DO CUPOM JÁ EXISTE");
44
                }
45
        }
46
 
47
        @Override
48
        public Cupom consultarCupomPorCodigo(String codigo) {
49
                return cupomRepository.consultarCupomPorCodigo(codigo);
50
        }
51
 
52
        @Override
53
        public String gerarCodigoValido() {
54
                Cupom cupomGerado = new Cupom();
55
                cupomGerado.gerarCodigo();
56
                if (VerificadorUtil.naoEstaNulo(consultarCupomPorCodigo(cupomGerado.getCodigo()))) {
57
                        return gerarCodigoValido();
58
                }
59
                return cupomGerado.getCodigo();
60
        }
61
 
62
        @Override
63
        public void excluirCupom(Cupom cupom) {
64
                if (existeCupomComLancamentoVendas(cupom)) {
65
                        throw new NegocioException("Não é permitido excluir um cupom com lançamentos em vendas");
66
                }
67
                super.excluir(cupom);
68
        }
69
 
70
        private Boolean existeCupomComLancamentoVendas(Cupom cupom) {
71
                Integer quantidadeUtilizada = lancamentoService.obterQuantidadeVendasComCupom(cupom);
72
                if (VerificadorUtil.naoEstaNulo(quantidadeUtilizada)) {
73
                        if (quantidadeUtilizada > 0) {
74
                                return true;
75
                        }
76
                }
77
                return false;
78
        }
79
 
80
        @Override
81
        public Cupom separarCupom(Cupom cupom, Double valorSeparacao) {
82
                verificarCupomValido(cupom);
83
                if (0.0 >= valorSeparacao || valorSeparacao >= cupom.getValor()) {
84
                        throw new NegocioException("VALOR NÃO PERMITIDO");
85
                }
86
                Cupom cupomNovo = new Cupom();
87
                try {
88
                        cupomNovo = cupom.clone();
89
                } catch (CloneNotSupportedException e) {
90
                        e.printStackTrace();
91
                }
92
                cupomNovo.setSequencial(null);
93
                cupomNovo.setCodigo(gerarCodigoValido());
94
                cupomNovo.setDataHoraEmissao(DataUtils.getDataAtual());
95
                cupomNovo.setValor(valorSeparacao);
96
                cupomNovo.setObservacao("PARCIAL DO CUPOM: " + cupom.getCodigo() + "\n" + cupomNovo.getObservacao());
97
                cadastrar(cupomNovo);
98
 
99
                cupom.setValor(cupom.getValor() - valorSeparacao);
100
                cupom.setObservacao("PARCIAL DO CUPOM: " + cupomNovo.getCodigo() + "\n" + cupom.getObservacao());
101
                alterar(cupom);
102
 
103
                return cupomNovo;
104
        }
105
 
106
        @Override
107
        public Cupom unirCupons(Cupom cupom, Cupom cupomParaUnir) {
108
                verificarCupomValido(cupom);
109
                verificarCupomValido(cupomParaUnir);
110
                if (!cupom.getCliente().equals(cupomParaUnir.getCliente())) {
111
                        throw new NegocioException("OPERAÇÃO NÃO PERMITIRDA: CUPONS PARA DIFERENTES CLIENTES");
112
                }
113
                if (VerificadorUtil.naoEstaNulo(cupom.getPercentual()) || VerificadorUtil.naoEstaNulo(cupomParaUnir.getPercentual())) {
114
                        throw new NegocioException("OPERAÇÃO NÃO PERMITIRDA: CUPOM COM PERCENTUAL");
115
                }
116
                Cupom cupomNovo = new Cupom();
117
                try {
118
                        cupomNovo = cupom.clone();
119
                } catch (CloneNotSupportedException e) {
120
                        e.printStackTrace();
121
                }
122
                cupomNovo.setSequencial(null);
123
                cupomNovo.setCodigo(gerarCodigoValido());
124
                cupomNovo.setDataHoraEmissao(DataUtils.getDataAtual());
125
                cupomNovo.setValor(cupom.getValor() + cupomParaUnir.getValor());
126
                cupomNovo.setObservacao("UNIÃO DOS CUPONS: " + cupom.getCodigo() + " E " + cupomParaUnir.getCodigo() + "\n");
127
                cupomNovo.setObservacao(cupomNovo.getObservacao() + "\n" + cupom.getObservacao() + "\n" + cupomParaUnir.getObservacao());
128
                cadastrar(cupomNovo);
129
 
130
                cupom.setAtivo(false);
131
                cupom.setObservacao("UNIDO NO CUPOM: " + cupomNovo.getCodigo() + "\n" + cupom.getObservacao());
132
                alterar(cupom);
133
 
134
                cupomParaUnir.setAtivo(false);
135
                cupomParaUnir.setObservacao("UNIDO NO CUPOM: " + cupomNovo.getCodigo() + "\n" + cupomParaUnir.getObservacao());
136
                alterar(cupomParaUnir);
137
                return cupomNovo;
138
        }
139
 
140
        private void verificarCupomValido(Cupom cupom) {
141
                if (VerificadorUtil.naoEstaNulo(cupom)) {
142
                        if (existeCupomComLancamentoVendas(cupom)) {
143
                                throw new NegocioException("OPERAÇÃO NÃO PERMITIDA; CUPOM JÁ UTILIZADO");
144
                        }
145
                        if (!cupom.getAtivo() || !cupom.valido()) {
146
                                throw new NegocioException("OPERAÇÃO NÃO PERMITIDA; CUPOM INDISPONÍVEL");
147
                        }
148
                        if (!cupom.getTipoCupom().equals(TipoCupom.REEMBOLSO.getValor())) {
149
                                throw new NegocioException("OPERAÇÃO NÃO PERMITIDA: CUPOM DEVE SER PARA REEMBOLSO");
150
                        }
151
                }
152
        }
153
 
154
}