Rev 346 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
package br.com.ec.repository.jpa;
import java.util.Date;
import java.util.List;
import javax.persistence.TypedQuery;
import org.springframework.stereotype.Repository;
import br.com.ec.core.util.DataUtils;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.EntregaDTO;
import br.com.ec.domain.dto.ExtratoEntregasDTO;
import br.com.ec.domain.model.Pedido;
import br.com.ec.repository.PedidoRepository;
import br.com.ec.repository.SistemaAbstractRepository;
@Repository
public class PedidoRepositoryJpaImpl
extends SistemaAbstractRepository
<Pedido
> implements PedidoRepository
{
@
Override
protected String getColunaOrdenadora
() {
// return "dataUltimaAlteracaoSituacao, dataPedido";
return "dataPedido";
}
@
Override
public List<EntregaDTO
> consultarEntregas
(ExtratoEntregasDTO extratoEntregasDTO
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT new br.com.ec.domain.dto.EntregaDTO(p.sequencial, p.dataPedido, p.dataEntrega, p.kilometragemEntrega) FROM Pedido p ");
sql.
append("WHERE p.dataEntrega >= :dataInicial AND p.dataEntrega <= :dataFinal ");
sql.
append("ORDER BY dataEntrega ");
try {
TypedQuery
<EntregaDTO
> query = getEntityManager
().
createQuery(sql.
toString(), EntregaDTO.
class);
query.
setParameter("dataInicial", DataUtils.
getDataComHorarioMinimo(extratoEntregasDTO.
getVigenciaDTO().
getDataInicio()));
query.
setParameter("dataFinal", DataUtils.
getDataComHorarioMaximo(extratoEntregasDTO.
getVigenciaDTO().
getDataFim()));
return query.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public Integer obterQuantidadePedidosPorSituacaoEePeriodo
(String tipoPedido,
String tipoSituacaoPedido,
Date dataInicial,
Date dataFinal
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT COUNT(p) FROM Pedido p ");
sql.
append("WHERE p.tipoSituacao = :tipoSituacao ");
if (VerificadorUtil.
naoEstaNuloOuVazio(tipoPedido
)) {
sql.
append("AND p.tipoPedido = :tipoPedido ");
}
if (VerificadorUtil.
naoEstaNulo(dataInicial
)) {
sql.
append("AND p.dataUltimaAlteracaoSituacao >= :dataInicial ");
}
sql.
append("AND p.dataUltimaAlteracaoSituacao <= :dataFinal ");
TypedQuery
<Long> query = getEntityManager
().
createQuery(sql.
toString(),
Long.
class);
if (VerificadorUtil.
naoEstaNulo(tipoPedido
)) {
query.
setParameter("tipoPedido", tipoPedido
);
}
if (VerificadorUtil.
naoEstaNulo(dataInicial
)) {
query.
setParameter("dataInicial", DataUtils.
getDataComHorarioMinimo(dataInicial
));
}
query.
setParameter("dataFinal", DataUtils.
getDataComHorarioMaximo(dataFinal
));
query.
setParameter("tipoSituacao", tipoSituacaoPedido
);
return query.
getSingleResult().
intValue();
}
/*
@Override
protected void setarStringParametrosConsulta(StringBuilder sql, ParametrosConsulta<Pedido> parametros) {
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade())) {
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencial())) {
sql.append("AND e.sequencial = :sequencial ");
} else {
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getContatoCliente())) {
sql.append("AND (");
sql.append(sqlConsultarSemAcento("e.contatoCliente") + " LIKE upper(:contatoCliente) ");
sql.append("OR EXISTS (SELECT c FROM Cliente c WHERE c.sequencial = e.cliente.sequencial AND ( ");
sql.append(sqlConsultarSemAcento("e.cliente.nome") + " LIKE upper(:contatoCliente) OR ");
sql.append("e.cliente.telefone LIKE upper(:contatoCliente) OR e.cliente.contato LIKE upper(:contatoCliente)))");
sql.append(") ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoSituacao())) {
sql.append("AND e.tipoSituacao = :tipoSituacao ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getLoja())) {
sql.append("AND e.loja.sequencial = :sequencialLoja ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getObservacao())) {
sql.append("AND ");
sql.append(sqlConsultarSemAcento("e.observacao"));
sql.append(" LIKE upper(:observacaoPedido) ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getModelo())) {
sql.append("AND e.modelo.sequencial = :sequencialModelo ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoPedido())) {
sql.append("AND e.tipoPedido = :tipoPedido ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getAtendido())) {
if (((ParametrosConsultaPedidoDTO)parametros).getAtendido()) {
sql.append("AND e.tipoSituacao IN (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
} else {
sql.append("AND e.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
}
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getValidos())) {
if (((ParametrosConsultaPedidoDTO)parametros).getValidos()) {
sql.append("AND e.tipoSituacao != '" + TipoSituacaoPedido.INVALIDO.getValor() + "' ");
}
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getCompraSolicitada())) {
if (((ParametrosConsultaPedidoDTO)parametros).getCompraSolicitada()) {
sql.append("AND e.dataSolicitadoParaComprar != NULL ");
} else {
sql.append("AND e.dataSolicitadoParaComprar IS NULL ");
}
}
}
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getPessoa())) {
sql.append("AND e.usuarioPedido.pessoa.sequencial = :sequencialPessoa ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataInicial())
&& VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataFinal())) {
sql.append("AND e.dataPedido >= :dataInicial ");
sql.append("AND e.dataPedido <= :dataFinal ");
}
}
@Override
protected void setarQueryParametrosConsulta(Query query, ParametrosConsulta<Pedido> parametros) {
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade())) {
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencial())) {
query.setParameter("sequencial", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencial());
} else {
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getContatoCliente())) {
query.setParameter("contatoCliente", "%" + removerAcentuacao(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getContatoCliente()) + "%");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoSituacao())) {
query.setParameter("tipoSituacao", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoSituacao());
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoPedido())) {
query.setParameter("tipoPedido", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getTipoPedido());
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getLoja())) {
query.setParameter("sequencialLoja", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencialDaLoja()); }
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getObservacao())) {
query.setParameter("observacaoPedido", "%" + removerAcentuacao(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getObservacao()) + "%");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getEntidade().getModelo())) {
query.setParameter("sequencialModelo", ((ParametrosConsultaPedidoDTO)parametros).getEntidade().getSequencialDoModelo());
}
}
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getPessoa())) {
query.setParameter("sequencialPessoa", ((ParametrosConsultaPedidoDTO)parametros).getPessoa().getSequencial());
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataInicial())
&& VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaPedidoDTO)parametros).getDataFinal())) {
Date dataInicial = DataUtils.getDataComHorarioMinimo(((ParametrosConsultaPedidoDTO)parametros).getDataInicial());
Date dataFinal = DataUtils.getDataComHorarioMaximo(((ParametrosConsultaPedidoDTO)parametros).getDataFinal());
query.setParameter("dataInicial", dataInicial);
query.setParameter("dataFinal", dataFinal);
}
}
@Override
protected void setarStringParametrosConsultar(StringBuilder sql, Pedido pedido) {
if (VerificadorUtil.naoEstaNuloOuVazio(pedido)) {
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoSituacao())) {
sql.append("AND e.tipoSituacao = :tipoSituacao ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoPedido())) {
sql.append("AND e.tipoPedido = :tipoPedido ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getLoja())) {
sql.append("AND e.loja.sequencial = :sequencialLoja ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getObservacao())) {
sql.append("AND ");
sql.append(sqlConsultarSemAcento("e.observacao"));
sql.append(" like upper(:observacaoPedido) ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getModelo())) {
sql.append("AND e.modelo.sequencial = :sequencialModelo ");
}
}
}
@Override
protected void setarQueryParametrosConsultar(Query query, Pedido pedido) {
if (VerificadorUtil.naoEstaNuloOuVazio(pedido)) {
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoSituacao())) {
query.setParameter("tipoSituacao", pedido.getTipoSituacao());
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getTipoPedido())) {
query.setParameter("tipoPedido", pedido.getTipoPedido());
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getLoja())) {
query.setParameter("sequencialLoja", pedido.getSequencialDaLoja()); }
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getObservacao())) {
query.setParameter("observacaoPedido", "%" + removerAcentuacao(pedido.getObservacao()) + "%");
}
if (VerificadorUtil.naoEstaNuloOuVazio(pedido.getModelo())) {
query.setParameter("sequencialModelo", pedido.getSequencialDoModelo());
}
}
}
@Override
public Pedido consultarPedidoCompleto(Pedido pedido) {
StringBuilder jpql = new StringBuilder();
try {
jpql.append("SELECT p FROM Pedido p ");
jpql.append("LEFT JOIN FETCH p.historico h ");
jpql.append("WHERE p = :pedido");
return getEntityManager().createQuery(jpql.toString(), Pedido.class).setParameter("pedido", pedido).getSingleResult();
} catch (NoResultException e) {
return null;
}
}
@Override
public Pedido consultarPedidoCompletoDaVenda(Venda venda) {
StringBuilder jpql = new StringBuilder();
try {
jpql.append("SELECT p FROM Pedido p ");
jpql.append("LEFT JOIN FETCH p.historico h ");
jpql.append("WHERE p.venda = :venda");
return getEntityManager().createQuery(jpql.toString(), Pedido.class).setParameter("venda", venda).getSingleResult();
} catch (NoResultException e) {
return null;
}
}
@Override
public List<RankingPedidoDTO> consultarRankingPedidosNaoAtendidos(String generoPedidos, Date dataInicial, Date dataFinal) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT new br.com.ec.domain.dto.RankingPedidoDTO(p.modelo, COUNT(p.modelo)) FROM Pedido p ");
sql.append("WHERE p.dataPedido >= :dataInicial AND p.dataPedido <= :dataFinal ");
sql.append("AND p.tipoSituacao not in (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
if (VerificadorUtil.naoEstaNuloOuVazio(generoPedidos)) {
sql.append("AND p.genero = :genero ");
}
sql.append("GROUP BY p.modelo ");
sql.append("ORDER BY COUNT(p.modelo) DESC ");
try {
TypedQuery<RankingPedidoDTO> query = getEntityManager().createQuery(sql.toString(), RankingPedidoDTO.class);
query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial));
query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
if (VerificadorUtil.naoEstaNulo(generoPedidos)) {
query.setParameter("genero", generoPedidos);
}
return query.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public List<RankingPedidoDTO> consultarRankingPedidos(String generoPedidos, Date dataInicial, Date dataFinal) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT new br.com.ec.domain.dto.RankingPedidoDTO(p.modelo, COUNT(p.modelo)) FROM Pedido p ");
sql.append("WHERE p.dataPedido >= :dataInicial AND p.dataPedido <= :dataFinal ");
if (VerificadorUtil.naoEstaNuloOuVazio(generoPedidos)) {
sql.append("AND p.genero = :genero ");
}
sql.append("GROUP BY p.modelo ");
sql.append("ORDER BY COUNT(p.modelo) DESC ");
try {
TypedQuery<RankingPedidoDTO> query = getEntityManager().createQuery(sql.toString(), RankingPedidoDTO.class);
if (VerificadorUtil.naoEstaNulo(generoPedidos)) {
query.setParameter("genero", generoPedidos);
}
query.setParameter("dataInicial", DataUtils.getDataComHorarioMinimo(dataInicial));
query.setParameter("dataFinal", DataUtils.getDataComHorarioMaximo(dataFinal));
return query.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public Integer obterQuantidadePedidosPorSituacao(String tipoPedido, String tipoSituacaoPedido) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(p) FROM Pedido p ");
sql.append("WHERE p.tipoSituacao = :tipoSituacao ");
if (VerificadorUtil.naoEstaNuloOuVazio(tipoPedido)) {
sql.append("AND p.tipoPedido = :tipoPedido ");
}
TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
if (VerificadorUtil.naoEstaNulo(tipoPedido)) {
query.setParameter("tipoPedido", tipoPedido);
}
query.setParameter("tipoSituacao", tipoSituacaoPedido);
return query.getSingleResult().intValue();
}
@Override
public void excluirHistoricosDoPedido(Pedido pedido) {
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM PedidoHistorico ph ");
sql.append("WHERE ph.pedido = :pedido ");
try {
getEntityManager().createQuery(sql.toString())
.setParameter("pedido", pedido)
.executeUpdate();
getEntityManager().flush();
} catch(Exception ex) {
ex.printStackTrace();
}
}
@Override
public void solicitarEntrarEmContatoCasoExistaPedidoParaLojaSolicitante(Loja lojaEntrada, Produto produto) {
StringBuilder sql = new StringBuilder();
sql.append("UPDATE Pedido ppc SET ppc.usuarioAtendimento = null, ppc.dataUltimaAlteracaoSituacao = now(), ppc.tipoSituacao = '" + TipoSituacaoPedido.ENTRAR_EM_CONTATO.getValor() + "' ");
sql.append("WHERE ppc.loja = :lojaEntrada ");
sql.append("AND ppc.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesNaoPendentes() + ") ");
sql.append("AND ppc in (SELECT pp.pedido FROM PedidoProduto pp WHERE pp.pedido = ppc AND pp.produto = :produto) ");
try {
getEntityManager().createQuery(sql.toString())
.setParameter("lojaEntrada", lojaEntrada)
.setParameter("produto", produto)
.executeUpdate();
getEntityManager().flush();
} catch(Exception ex) {
ex.printStackTrace();
}
}
@Override
public List<PedidoProduto> consultarPedidosNaoAtendidos(Produto produto) {
StringBuilder sql = new StringBuilder();
try {
sql.append("SELECT pp FROM PedidoProduto pp ");
sql.append("WHERE pp.produto.sequencial = :sequencialProduto ");
sql.append("AND pp.pedido.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesAtendidos() + ") ");
TypedQuery<PedidoProduto> query = getEntityManager().createQuery(sql.toString(), PedidoProduto.class);
query.setParameter("sequencialProduto", produto.getSequencial());
return query.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public List<Pedido> consultarPedidosDoCliente(Cliente cliente) {
StringBuilder sql = new StringBuilder();
try {
sql.append("SELECT p FROM Pedido p ");
sql.append("WHERE p.cliente = :cliente ");
TypedQuery<Pedido> query = getEntityManager().createQuery(sql.toString(), Pedido.class);
query.setParameter("cliente", cliente);
return query.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public List<Pedido> consultarPedidosDoProdutoOuModeloPendentes(Produto produto) {
StringBuilder sql = new StringBuilder();
try {
sql.append("SELECT p FROM Pedido p ");
sql.append("WHERE p.tipoPedido = '" + TipoPedido.RESERVA.getValor() + "' ");
sql.append("AND p.tipoSituacao NOT IN (" + TipoSituacaoPedido.tipoSituacoesNaoPendentes() + ") ");
sql.append("AND ((p.modelo.sequencial = :modeloProduto ");
sql.append("AND (p.tipoProduto = :tipoProduto OR p.tipoProduto IS NULL) ");
if (!produto.getGenero().equals(TipoGenero.UNISSEX.getValor())) {
sql.append("AND (p.genero = :generoProduto OR p.genero IS NULL)) ");
} else {
sql.append(") ");
}
sql.append("OR p in (SELECT pp.pedido FROM PedidoProduto pp WHERE pp.pedido = p AND pp.produto.sequencial = :sequencialProduto)) ");
TypedQuery<Pedido> query = getEntityManager().createQuery(sql.toString(), Pedido.class);
query.setParameter("modeloProduto", produto.getSequencialDoModelo());
query.setParameter("tipoProduto", produto.getTipo());
if (!produto.getGenero().equals(TipoGenero.UNISSEX.getValor())) {
query.setParameter("generoProduto", produto.getGenero());
}
query.setParameter("sequencialProduto", produto.getSequencial());
return query.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
*/
}