package br.com.ec.repository.jpa;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.NoResultException;
import javax.persistence.TypedQuery;
import org.springframework.stereotype.Repository;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.VendedorDTO;
import br.com.ec.domain.model.Vendedor;
import br.com.ec.repository.SistemaAbstractRepository;
import br.com.ec.repository.VendedorRepository;
@Repository
public class VendedorRepositoryJpaImpl
extends SistemaAbstractRepository
<Vendedor
> implements VendedorRepository
{
private static final String VENDEDOR_INFORMADO_NAO_EXISTE_PARA_ESTA_PESSOA =
"Vendedor informado não existe para esta pessoa";
@
Override
protected String getColunaOrdenadora
() {
return "nome";
}
/*
@Override
protected void setarStringParametrosConsultar(StringBuilder sql, Vendedor vendedor) {
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor)) {
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getNome())) {
sql.append("AND ");
sql.append(sqlConsultarSemAcento("e.nome"));
sql.append(" like upper(:nomeVendedor) ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getAtivo())) {
sql.append("AND e.ativo = :ativo ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getIndicadorColaborador())) {
sql.append("AND e.indicadorColaborador = :indicadorColaborador ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getPessoa())) {
sql.append("AND e.pessoa = :pessoa ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getLoja())) {
sql.append("AND e.loja = :loja ");
}
}
}
@Override
protected void setarQueryParametrosConsultar(Query query, Vendedor vendedor) {
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor)) {
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getNome())) {
query.setParameter("nomeVendedor", "%" + removerAcentuacao(vendedor.getNome()) + "%");
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getAtivo())) {
query.setParameter("ativo", vendedor.getAtivo());
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getIndicadorColaborador())) {
query.setParameter("indicadorColaborador", vendedor.getIndicadorColaborador());
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getPessoa())) {
query.setParameter("pessoa", vendedor.getPessoa());
}
if (VerificadorUtil.naoEstaNuloOuVazio(vendedor.getLoja())) {
query.setParameter("loja", vendedor.getLoja());
}
}
}
*/
@
Override
public VendedorDTO consultarVendedorPorPessoa
(Long sequencialPessoa
) {
StringBuilder jpql =
new StringBuilder();
jpql.
append("SELECT new br.com.ec.domain.dto.VendedorDTO(v.sequencial, v.pessoa.sequencial, v.nome, v.loja.sequencial, v.loja.descricao) ");
jpql.
append("FROM Vendedor v ");
jpql.
append("WHERE v.pessoa.sequencial = :sequencialPessoa");
try {
return getEntityManager
().
createQuery(jpql.
toString(), VendedorDTO.
class)
.
setParameter("sequencialPessoa", sequencialPessoa
)
.
getSingleResult();
} catch (NoResultException nre
) {
throw new RuntimeException(VENDEDOR_INFORMADO_NAO_EXISTE_PARA_ESTA_PESSOA
);
}
}
@
Override
public List<VendedorDTO
> consultarVendedoresColaboradores
() {
return consultarVendedoresColaboradores
(null);
}
private List<VendedorDTO
> consultarVendedoresColaboradores
(Boolean indicadorAtivo
) {
StringBuilder jpql =
new StringBuilder();
jpql.
append("SELECT new br.com.ec.domain.dto.VendedorDTO(v.sequencial, v.pessoa.sequencial, v.nome, v.loja.sequencial, v.loja.descricao) ");
jpql.
append("FROM Vendedor v ");
jpql.
append("WHERE v.indicadorColaborador = true ");
if (VerificadorUtil.
naoEstaNulo(indicadorAtivo
)) {
jpql.
append("AND v.ativo = :indicadorAtivo ");
}
try {
TypedQuery
<VendedorDTO
> query =
(TypedQuery
<VendedorDTO
>) getEntityManager
().
createQuery(jpql.
toString(), VendedorDTO.
class);
if (VerificadorUtil.
naoEstaNulo(indicadorAtivo
)) {
query.
setParameter("indicadorAtivo", indicadorAtivo
);
}
return query.
getResultList();
} catch (NoResultException re
) {
return new ArrayList<VendedorDTO
>();
}
}
}