package br.com.ec.repository.jpa;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.springframework.stereotype.Repository;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.VigenciaDTO;
import br.com.ec.domain.model.Ponto;
import br.com.ec.repository.PontoRepository;
import br.com.ec.repository.SistemaAbstractRepository;
@Repository
public class PontoRepositoryJpaImpl
extends SistemaAbstractRepository
<Ponto
> implements PontoRepository
{
@
Override
protected String getColunaOrdenadora
() {
return "dataPonto";
}
@
Override
public List<Ponto
> consultarPontosEletronicos
(VigenciaDTO vigenciaDTO,
Long sequencialPessoa
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT p FROM Ponto p ");
sql.
append("WHERE (p.dataPonto >= :dataInicial AND p.dataPonto <= :dataFinal) ");
sql.
append("AND (p.pessoa.sequencial = :sequencialPessoa) ");
sql.
append("ORDER BY p.dataPonto ");
try {
TypedQuery
<Ponto
> query = getEntityManager
().
createQuery(sql.
toString(), Ponto.
class)
.
setParameter("dataInicial", DataUtils.
getDataComHorarioMinimo(vigenciaDTO.
getDataInicio()))
.
setParameter("dataFinal", DataUtils.
getDataComHorarioMaximo(vigenciaDTO.
getDataFim()))
.
setParameter("sequencialPessoa", sequencialPessoa
);
return query.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
protected void setarStringParametrosConsulta
(StringBuilder sql, ParametrosConsulta
<Ponto
> parametros
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade())) {
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade().
getPessoa())) {
sql.
append("AND e.pessoa = :pessoa ");
}
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade().
getLoja())) {
sql.
append("AND e.loja.sequencial = :sequencialLoja ");
}
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade().
getDataPonto())) {
sql.
append("AND e.dataPonto = :dataPonto ");
}
}
}
@
Override
protected void setarQueryParametrosConsulta
(Query query, ParametrosConsulta
<Ponto
> parametros
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade())) {
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade().
getPessoa())) {
query.
setParameter("pessoa", parametros.
getEntidade().
getPessoa());
}
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade().
getLoja())) {
query.
setParameter("sequencialLoja", parametros.
getEntidade().
getSequencialDaLoja());
}
if (VerificadorUtil.
naoEstaNuloOuVazio(parametros.
getEntidade().
getDataPonto())) {
query.
setParameter("dataPonto", parametros.
getEntidade().
getDataPonto()); }
}
}
@
Override
protected void setarStringParametrosConsultar
(StringBuilder sql, Ponto ponto
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto
)) {
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto.
getPessoa())) {
sql.
append("AND e.pessoa = :pessoa ");
}
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto.
getLoja())) {
sql.
append("AND e.loja.sequencial = :sequencialLoja ");
}
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto.
getDataPonto())) {
sql.
append("AND e.dataPonto = :dataPonto ");
}
}
}
@
Override
protected void setarQueryParametrosConsultar
(Query query, Ponto ponto
) {
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto
)) {
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto.
getPessoa())) {
query.
setParameter("pessoa", ponto.
getPessoa());
}
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto.
getLoja())) {
query.
setParameter("sequencialLoja", ponto.
getSequencialDaLoja());
}
if (VerificadorUtil.
naoEstaNuloOuVazio(ponto.
getDataPonto())) {
query.
setParameter("dataPonto", ponto.
getDataPonto());
}
}
}
}