Subversion Repositories Integrator Subversion

Rev

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

Rev Author Line No. Line
685 blopes 1
package br.com.ec.domain.service.cashback.impl;
2
 
3
import java.util.List;
4
 
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;
10
import br.com.ec.core.util.DataUtils;
11
import br.com.ec.core.util.VerificadorUtil;
12
import br.com.ec.core.validador.Validador;
13
import br.com.ec.domain.dto.CashbackDTO;
14
import br.com.ec.domain.dto.ParametrosVendaDTO;
15
import br.com.ec.domain.model.Cashback;
710 blopes 16
import br.com.ec.domain.model.Cliente;
685 blopes 17
import br.com.ec.domain.model.Lancamento;
18
import br.com.ec.domain.model.Venda;
19
import br.com.ec.domain.model.tipos.TipoCashback;
686 blopes 20
import br.com.ec.domain.model.tipos.TipoProduto;
685 blopes 21
import br.com.ec.domain.service.cashback.CashbackService;
22
import br.com.ec.infrastructure.repository.CashbackRepository;
23
 
24
@Service
25
public class CashbackServiceImpl extends AbstractService<Cashback> implements CashbackService {
26
 
27
        private CashbackRepository cashbackRepository;
28
 
29
        @Autowired
30
        public CashbackServiceImpl(Validador validador, CashbackRepository cashbackRepository) {
31
                super(validador);
32
                this.cashbackRepository = cashbackRepository;
33
        }
34
 
35
        @Override
36
        protected GenericRepository<Cashback> getRepository() {
37
                return cashbackRepository;
38
        }
39
 
40
        @Override
41
        public List<CashbackDTO> consultarCashbackCliente(Long sequencialCliente) {
686 blopes 42
                return cashbackRepository.consultarCashbackCliente(sequencialCliente);
685 blopes 43
        }
44
 
45
        @Override
686 blopes 46
        public Double consultarSaldoCliente(Long sequencialCliente) {
47
                Double saldo = 0.0;
48
                Double valorCreditado = cashbackRepository.consultarSaldoCliente(sequencialCliente, TipoCashback.ENTRADA.getValor());
49
                Double valorUtilizado = cashbackRepository.consultarSaldoCliente(sequencialCliente, TipoCashback.SAIDA.getValor());
50
                if (VerificadorUtil.naoEstaNulo(valorCreditado)) {
51
                        saldo += valorCreditado;
52
                        if (VerificadorUtil.naoEstaNulo(valorUtilizado)) {
53
                                saldo -= valorUtilizado;
54
                        }
55
                }
56
                return saldo;
685 blopes 57
        }
58
 
59
        @Override
710 blopes 60
        public void gerarCashback(ParametrosVendaDTO parametrosVendaDTO, Long sequencialVenda) {
685 blopes 61
                // TODO: 10% capas e películas e 5% no geral (sem descontos ou cupons)
62
                Double valorCashback = 0.0;
63
                if (VerificadorUtil.naoEstaNulo(parametrosVendaDTO.getCliente())) {
64
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosVendaDTO.getLancamentos())) {
65
                                for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
66
                                        if (VerificadorUtil.naoEstaNulo(lancamento.getValorVenda()) && VerificadorUtil.naoEstaNulo(lancamento.getValorVarejo())) {
67
                                                if (VerificadorUtil.estaNulo(lancamento.getCupom()) && lancamento.getValorVenda() >= lancamento.getValorVarejo()) {
686 blopes 68
                                                        valorCashback = valorCashback + lancamento.getValorVenda()/100 * TipoProduto.parse(lancamento.getProduto().getTipo()).getPercentualCashback();
685 blopes 69
                                                }
70
                                        }
71
                                }
72
                        }
73
                        if (valorCashback > 0.0) {
74
                                Cashback cashback = new Cashback();
75
                                cashback.setCliente(parametrosVendaDTO.getCliente());
710 blopes 76
                                cashback.setVenda(new Venda(sequencialVenda));
685 blopes 77
                                cashback.setDataHoraEmissao(DataUtils.getDataAtual());
78
                                cashback.setPrazoInicial(DataUtils.acrescentarDias(DataUtils.getDataAtual(), 7));
689 blopes 79
                                cashback.setPrazoFinal(DataUtils.acrescentarDias(cashback.getPrazoInicial(), 365));
685 blopes 80
                                cashback.setTipoCashback(TipoCashback.ENTRADA.getValor());
81
                                cashback.setValor(valorCashback);
82
                                cashback.setAtivo(true);
83
                                cashbackRepository.cadastrar(cashback);
84
                        }
85
                }
86
        }
87
 
88
        @Override
710 blopes 89
        public void utilizarCashback(Long sequencialVenda, Long sequencialCliente, Double valorCashback) {
689 blopes 90
                Cashback cashback = new Cashback();
710 blopes 91
                cashback.setCliente(new Cliente(sequencialCliente));
92
                cashback.setVenda(new Venda(sequencialVenda));
689 blopes 93
                cashback.setDataHoraEmissao(DataUtils.getDataAtual());
94
                cashback.setPrazoInicial(null);
95
                cashback.setPrazoFinal(null);
96
                cashback.setTipoCashback(TipoCashback.SAIDA.getValor());
97
                cashback.setValor(valorCashback);
98
                cashback.setAtivo(true);
99
                cashbackRepository.cadastrar(cashback);
685 blopes 100
        }
101
 
686 blopes 102
        @Override
689 blopes 103
        public void excluirCashbackVenda(Long sequencialVenda) {
104
                cashbackRepository.excluirCashbackVenda(sequencialVenda);
686 blopes 105
        }
106
 
685 blopes 107
}