Subversion Repositories Integrator Subversion

Rev

Rev 710 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

package br.com.ec.domain.service.cashback.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import br.com.ec.core.generic.AbstractService;
import br.com.ec.core.generic.GenericRepository;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.core.validador.Validador;
import br.com.ec.domain.dto.CashbackDTO;
import br.com.ec.domain.dto.ParametrosVendaDTO;
import br.com.ec.domain.model.Cashback;
import br.com.ec.domain.model.Cliente;
import br.com.ec.domain.model.Lancamento;
import br.com.ec.domain.model.Venda;
import br.com.ec.domain.model.tipos.TipoCashback;
import br.com.ec.domain.model.tipos.TipoProduto;
import br.com.ec.domain.service.cashback.CashbackService;
import br.com.ec.infrastructure.repository.CashbackRepository;

@Service
public class CashbackServiceImpl extends AbstractService<Cashback> implements CashbackService {
       
        private CashbackRepository cashbackRepository;

        @Autowired
        public CashbackServiceImpl(Validador validador, CashbackRepository cashbackRepository) {
                super(validador);
                this.cashbackRepository = cashbackRepository;
        }

        @Override
        protected GenericRepository<Cashback> getRepository() {
                return cashbackRepository;
        }
       
        @Override
        public List<CashbackDTO> consultarCashbackCliente(Long sequencialCliente) {
                return cashbackRepository.consultarCashbackCliente(sequencialCliente);
        }
       
        @Override
        public Double consultarSaldoCliente(Long sequencialCliente) {
                Double saldo = 0.0;
                Double valorCreditado = cashbackRepository.consultarSaldoCliente(sequencialCliente, TipoCashback.ENTRADA.getValor());
                Double valorUtilizado = cashbackRepository.consultarSaldoCliente(sequencialCliente, TipoCashback.SAIDA.getValor());
                if (VerificadorUtil.naoEstaNulo(valorCreditado)) {
                        saldo += valorCreditado;
                        if (VerificadorUtil.naoEstaNulo(valorUtilizado)) {
                                saldo -= valorUtilizado;
                        }
                }
                return saldo;
        }
       
        @Override
        public void gerarCashback(ParametrosVendaDTO parametrosVendaDTO, Long sequencialVenda) {
                // TODO: 10% capas e pelĂ­culas e 5% no geral (sem descontos ou cupons)
                Double valorCashback = 0.0;
                if (VerificadorUtil.naoEstaNulo(parametrosVendaDTO.getCliente())) {
                        if (VerificadorUtil.naoEstaNuloOuVazio(parametrosVendaDTO.getLancamentos())) {
                                for (Lancamento lancamento : parametrosVendaDTO.getLancamentos()) {
                                        valorCashback += lancamento.valorCashbackGerado();
                                }
                        }
                        if (valorCashback > 0.0) {
                                Cashback cashback = new Cashback();
                                cashback.setCliente(parametrosVendaDTO.getCliente());
                                cashback.setVenda(new Venda(sequencialVenda));
                                cashback.setDataHoraEmissao(DataUtils.getDataAtual());
                                cashback.setPrazoInicial(DataUtils.acrescentarDias(DataUtils.getDataAtual(), 7));
                                cashback.setPrazoFinal(DataUtils.acrescentarDias(cashback.getPrazoInicial(), 365));
                                cashback.setTipoCashback(TipoCashback.ENTRADA.getValor());
                                cashback.setValor(valorCashback);
                                cashback.setAtivo(true);
                                cashbackRepository.cadastrar(cashback);
                        }
                }
        }
       
        @Override
        public void utilizarCashback(Long sequencialVenda, Long sequencialCliente, Double valorCashback) {
                Cashback cashback = new Cashback();
                cashback.setCliente(new Cliente(sequencialCliente));
                cashback.setVenda(new Venda(sequencialVenda));
                cashback.setDataHoraEmissao(DataUtils.getDataAtual());
                cashback.setPrazoInicial(null);
                cashback.setPrazoFinal(null);
                cashback.setTipoCashback(TipoCashback.SAIDA.getValor());
                cashback.setValor(valorCashback);
                cashback.setAtivo(true);
                cashbackRepository.cadastrar(cashback);
        }
       
        @Override
        public void excluirCashbackVenda(Long sequencialVenda) {
                cashbackRepository.excluirCashbackVenda(sequencialVenda);
        }
       
}