import br.com.xkey.cax.model.Cliente; import br.com.xkey.cax.model.ClienteVersionamento; import com.google.common.collect.Lists; import java.util.List; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.ejb.TransactionManagement; import javax.ejb.TransactionManagementType; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless(name = "ClienteRepositoryImpl", mappedName = "ejb/ClienteRepositoryImpl") @Remote(value = ClienteRepository.class) @TransactionManagement(TransactionManagementType.CONTAINER) public class ClienteRepositoryImpl implements ClienteRepository { @PersistenceContext(unitName = "CAX") EntityManager em; @Override public void saveOrUpdate(Cliente modelo) { if (modelo.getId() == null) { em.persist(modelo); } else { em.merge(modelo); } em.flush(); } @Override public void delete(Cliente modelo) { em.remove(em.getReference(Cliente.class, modelo.getId())); } @Override public List findAll() { return em.createQuery("Select c from Cliente c ORDER BY c.razaoSocial ASC").getResultList(); } @Override public Cliente findById(Long id) { return null; } @Override public List findPagination(int first, int max) { return em.createQuery("Select c from Cliente c ORDER BY c.razaoSocial ASC").setFirstResult(first).setMaxResults(max).getResultList(); } @Override public List findBusca(int first, int max, String texto) { em.clear(); return em.createQuery("SELECT c FROM Cliente c where c.razaoSocial like :razao or c.nomeFantasia like :nome or c.cnpj like :cnpj or c.cep like :cep or c.cidade like :cidade or c.logradouro like :rua or c.email01 like :email01 or c.email02 like :email02").setParameter("email02", "%" + texto + "%").setParameter("email01", "%" + texto + "%").setParameter("razao", "%" + texto + "%").setParameter("cnpj", "%" + texto + "%").setParameter("cidade", "%" + texto + "%").setParameter("cep", "%" + texto + "%").setParameter("rua", "%" + texto + "%").setParameter("nome", "%" + texto + "%").setFirstResult(first).setMaxResults(max).getResultList(); } @Override public Long rowCount() { return (Long) em.createQuery("select count(c) from Cliente c").getSingleResult(); } @Override public Cliente findCnpj(String cnpj) { try { return (Cliente) em.createQuery("select c from Cliente c where c.cnpj = :cnpj").setParameter("cnpj", cnpj).getSingleResult(); } catch (Exception e) { return null; } } @Override public void merge(Cliente cliente) { em.merge(cliente); } @Override public Long rowBusca(String texto) { return (Long) em.createQuery("SELECT count(c) FROM Cliente c where c.razaoSocial like :razao or c.nomeFantasia like :nome or c.cnpj like :cnpj or c.cep like :cep or c.cidade like :cidade or c.logradouro like :rua or c.email01 like :email01 or c.email02 like :email02").setParameter("email02", "%" + texto + "%").setParameter("email01", "%" + texto + "%").setParameter("razao", "%" + texto + "%").setParameter("cnpj", "%" + texto + "%").setParameter("cidade", "%" + texto + "%").setParameter("cep", "%" + texto + "%").setParameter("rua", "%" + texto + "%").setParameter("nome", "%" + texto + "%").getSingleResult(); } @Override public List orderByASC(int first, int max, String field) { List lists = Lists.newArrayList(); System.out.println("first "+first); System.out.println("max "+max); switch (field.toLowerCase()) { case "id": lists = em.createQuery("Select c from Cliente c ORDER BY c.id ASC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "razao": lists = em.createQuery("Select c from Cliente c ORDER BY c.nomeFantasia ASC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "cnpj": lists = em.createQuery("Select c from Cliente c ORDER BY c.cnpj ASC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "email": lists = em.createQuery("Select c from Cliente c ORDER BY c.email01 ASC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "consultor": lists = em.createQuery("Select c from Cliente c ORDER BY c.idColaboradorResponsavel.nome ASC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "telefone": lists = em.createQuery("Select c from Cliente c ORDER BY c.telefone01 ASC").setFirstResult(first).setMaxResults(max).getResultList(); break; } return lists; } @Override public List orderByDESC(int first, int max, String field) { List lists = Lists.newArrayList(); switch (field.toLowerCase()) { case "id": lists = em.createQuery("Select c from Cliente c ORDER BY c.id DESC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "razao": lists = em.createQuery("Select c from Cliente c ORDER BY c.nomeFantasia DESC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "cnpj": lists = em.createQuery("Select c from Cliente c ORDER BY c.cnpj DESC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "email": lists = em.createQuery("Select c from Cliente c ORDER BY c.email01 DESC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "consultor": lists = em.createQuery("Select c from Cliente c ORDER BY c.idColaboradorResponsavel.nome DESC").setFirstResult(first).setMaxResults(max).getResultList(); break; case "telefone": lists = em.createQuery("Select c from Cliente c ORDER BY c.telefone01 DESC").setFirstResult(first).setMaxResults(max).getResultList(); break; } return lists; } @Override public List findVersionamentoByCliente(Integer id) { return em.createQuery("Select c from ClienteVersionamento c JOIN FETCH c.idVersionamento v JOIN FETCH v.idProduto p where c.idCliente.id=:id").setParameter("id", id).getResultList(); } }