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.Lancamento;
import br.com.ec.domain.model.Venda;
import br.com.ec.domain.model.tipos.TipoCashback;
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
) {
// TODO Auto-generated method stub
return null;
}
@
Override
public Double consultarSaldoCliente
(Long sequencialCliente,
String tipoCashback
) {
return cashbackRepository.
consultarSaldoCliente(sequencialCliente, tipoCashback
);
}
@
Override
public void gerarCashback
(ParametrosVendaDTO parametrosVendaDTO, Venda venda
) {
// 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()) {
if (VerificadorUtil.
naoEstaNulo(lancamento.
getValorVenda()) && VerificadorUtil.
naoEstaNulo(lancamento.
getValorVarejo())) {
if (VerificadorUtil.
estaNulo(lancamento.
getCupom()) && lancamento.
getValorVenda() >= lancamento.
getValorVarejo()) {
if (lancamento.
getProduto().
tipoProdutoEhCapaOuPelicula()) {
valorCashback = valorCashback + lancamento.
getValorVenda()/
10;
} else {
valorCashback = valorCashback + lancamento.
getValorVenda()/
20;
}
}
}
}
}
if (valorCashback
> 0.0) {
Cashback cashback =
new Cashback
();
cashback.
setCliente(parametrosVendaDTO.
getCliente());
cashback.
setVenda(venda
);
cashback.
setDataHoraEmissao(DataUtils.
getDataAtual());
cashback.
setPrazoInicial(DataUtils.
acrescentarDias(DataUtils.
getDataAtual(),
7));
cashback.
setPrazoFinal(DataUtils.
acrescentarDias(DataUtils.
getDataAtual(),
365));
cashback.
setTipoCashback(TipoCashback.
ENTRADA.
getValor());
cashback.
setValor(valorCashback
);
cashback.
setAtivo(true);
cashbackRepository.
cadastrar(cashback
);
}
}
}
@
Override
public void utilizarCashback
(CashbackDTO cashbackDTO
) {
// TODO Auto-generated method stub
}
}