package br.com.ec.domain.service.ponto.impl;
import java.util.Date;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import br.com.ec.domain.model.Loja;
import br.com.ec.domain.model.Ponto;
import br.com.ec.domain.model.Usuario;
import br.com.ec.domain.service.loja.LojaService;
import br.com.ec.domain.service.ponto.PontoService;
import br.com.ec.domain.service.usuario.UsuarioService;
import br.com.ec.infrastructure.repository.PontoRepository;
import br.edu.cesmac.core.exception.NegocioException;
import br.edu.cesmac.core.generic.AbstractService;
import br.edu.cesmac.core.generic.GenericRepository;
import br.edu.cesmac.core.util.DataUtils;
import br.edu.cesmac.core.util.VerificadorUtil;
import br.edu.cesmac.core.validador.Validador;
@Service
public class PontoServiceImpl
extends AbstractService
<Ponto
> implements PontoService
{
private UsuarioService usuarioService
;
private LojaService lojaService
;
private PontoRepository pontoRepository
;
@Autowired
public PontoServiceImpl
(Validador validador, PontoRepository pontoRepository, UsuarioService usuarioService, LojaService lojaService
) {
super(validador
);
this.
pontoRepository = pontoRepository
;
this.
usuarioService = usuarioService
;
this.
lojaService = lojaService
;
}
@
Override
protected GenericRepository
<Ponto
> getRepository
() {
return pontoRepository
;
}
@
Override
public Ponto consultarPonto
(Date dataAtual,
String senhaUsuario,
Long lojaSequencial
) {
Ponto ponto =
new Ponto
();
ponto.
setDataPonto(DataUtils.
getDataAtual());
if (VerificadorUtil.
naoEstaNulo(lojaSequencial
)) {
Loja loja =
new Loja
();
loja.
setSequencial(lojaSequencial
);
ponto.
setLoja(lojaService.
consultarPorId(loja
));
}
if (VerificadorUtil.
estaNulo(ponto.
getLoja())) {
throw new NegocioException
("LOJA NÃO IDENTIFICADA");
}
Usuario usuarioConsultado = usuarioService.
consultarUsuarioPorSenha(senhaUsuario
);
if (VerificadorUtil.
estaNulo(usuarioConsultado
)) {
throw new NegocioException
("USUÁRIO NÃO IDENTIFICADO");
}
ponto.
setPessoa(usuarioConsultado.
getPessoa());
List<Ponto
> pontoConsultado = pontoRepository.
consultarPassandoEntidade(ponto,
0, pontoRepository.
obterQuantidadeDeRegistrosPassandoEntidade(ponto
));
if (pontoConsultado.
isEmpty()) {
pontoConsultado.
add(ponto
);
}
return pontoConsultado.
get(0);
}
/*
@Override
public void adicionarPonto(final Ponto ponto, final String senhaUsuario) {
if (VerificadorUtil.estaNulo(ponto.getCliente()) &&
VerificadorUtil.estaNuloOuVazio(ponto.getContatoCliente())) {
throw new NegocioException("Informe o contato do cliente.");
}
if (VerificadorUtil.estaNulo(ponto.getProduto()) &&
(VerificadorUtil.estaNulo(ponto.getModelo()) ||
VerificadorUtil.estaNulo(ponto.getTipoProduto()) ||
VerificadorUtil.estaNulo(ponto.getGenero()))) {
throw new NegocioException("Informe o produto ou o modelo, tipo e gênero do produto");
}
if (VerificadorUtil.naoEstaNulo(ponto.getProduto())) {
ponto.setModelo(ponto.getProduto().getModelo());
ponto.setTipoProduto(ponto.getProduto().getTipo());
ponto.setGenero(ponto.getProduto().getGenero());
ponto.setEstiloProduto(ponto.getProduto().getEstilo());
ponto.setCorProduto(ponto.getProduto().getCor());
}
ponto.setTipoSituacao(TipoSituacaoPonto.PENDENTE.getValor());
ponto.setUsuarioPonto(usuarioService.consultarUsuarioPorSenha(senhaUsuario));
ponto.setDataPonto(DataUtils.getDataAtual());
cadastrar(ponto);
}
@Override
public List<RankingPontoDTO> consultarRankingPontosNaoAtendidos(String generoPontos) {
return pontoRepository.consultarRankingPontosNaoAtendidos(generoPontos);
}
@Override
public List<RankingPontoDTO> consultarRankingPontos(String generoPontos, Integer quantidadeDiasAnteriores) {
return pontoRepository.consultarRankingPontos(generoPontos, quantidadeDiasAnteriores);
}
*/
}