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 | } |