package gcom.cadastro.cliente;
import gcom.cadastro.endereco.LogradouroBairro;
import gcom.cadastro.endereco.LogradouroCep;
import gcom.cadastro.localidade.Localidade;
import gcom.util.ConstantesSistema;
import gcom.util.ErroRepositorioException;
import gcom.util.HibernateUtil;
import gcom.util.filtro.GeradorHQLCondicional;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.concurrent.CopyOnWriteArraySet;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
public class RepositorioClienteEnderecoHBM implements
IRepositorioClienteEndereco {
private static IRepositorioClienteEndereco instancia;
public RepositorioClienteEnderecoHBM() {
}
public static IRepositorioClienteEndereco getInstancia() {
if (instancia == null) {
instancia = new RepositorioClienteEnderecoHBM();
}
return instancia;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
public Collection pesquisarClienteEndereco(
FiltroClienteEndereco filtroClienteEndereco)
throws ErroRepositorioException {
Collection retorno = null;
Session session = HibernateUtil.getSession();
try {
retorno = new ArrayList(new CopyOnWriteArraySet(GeradorHQLCondicional
.gerarCondicionalQuery(
filtroClienteEndereco,
"clienteEndereco",
"select distinct clienteEndereco.cliente.id,clienteEndereco.cliente.nome,clienteEndereco.cliente.clienteTipo.descricao,clienteEndereco.cliente.cpf,clienteEndereco.cliente.cnpj, clienteEndereco.cliente.indicadorUso "
+ "from gcom.cadastro.cliente.ClienteEndereco as clienteEndereco "
+ "left join clienteEndereco.cliente.clienteTipo "
+ "left join clienteEndereco.logradouroCep ",
session).list()));
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
@SuppressWarnings({ "unchecked", "rawtypes" })
public Collection<Cliente> pesquisarClienteEnderecoClienteImovel(
FiltroClienteEndereco filtroClienteEndereco)
throws ErroRepositorioException {
Collection<Cliente> retorno = null;
Session session = HibernateUtil.getSession();
try {
retorno = new ArrayList(new CopyOnWriteArraySet<Cliente>(GeradorHQLCondicional
.gerarCondicionalQuery(
filtroClienteEndereco,
"clienteEndereco",
"select distinct clienteEndereco.cliente from gcom.cadastro.cliente.ClienteEndereco as clienteEndereco "
+ "inner join clienteEndereco.cliente.clienteImoveis clienteImovel",
session).list()));
} catch (HibernateException e) {
throw new ErroRepositorioException("Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
@SuppressWarnings("rawtypes")
public Collection pesquisarEnderecosClienteAbreviado(Integer idCliente)
throws ErroRepositorioException {
Collection retorno = null;
Session session = HibernateUtil.getSession();
String consulta = null;
try {
consulta = "select logradouro.nome," + // 0
" logradouroTipo.descricaoAbreviada," + // 1
" logradouroTitulo.descricaoAbreviada," + // 2
" bairro.id," + // 3
" bairro.nome," + // 4
" municipio.id," + // 5
" municipio.nome," + // 6
" unidadeFederacao.id," + // 7
" unidadeFederacao.sigla," + // 8
" enderecoReferencia.descricaoAbreviada," + // 9
" cep.cepId," + // 10
" cep.logradouro," + // 11
" cep.descricaoTipoLogradouro," + // 12
" cep.bairro," + // 13
" cep.municipio," + // 14
" cep.sigla, " + // 15
" cep.codigo, " + // 16
" clienteEndereco.numero," + // 17
" clienteEndereco.complemento," + // 18
" logradouro.id," + // 19
" logradouroCep.id," + // 20
" logradouroBairro.id," + // 21
" logradouroTipo.descricao," + // 22
" logradouroTitulo.descricao," + // 23
" enderecoReferencia.descricao, " + // 24
" clienteEndereco.indicadorEnderecoCorrespondencia, " + // 25
" clienteEndereco.id, " + // 26
" clienteEndereco.ultimaAlteracao, " // 27
+ // 28
" perimetroInicial.id, "
+ // 29
" perimetroInicial.nome, "
+ // 30
" logradouroTipoPerimetroInicial.descricaoAbreviada, "
+ // 31
" logradouroTituloPerimetroInicial.descricaoAbreviada, "
+ // 32
" perimetroFinal.id, "
+ // 33
" perimetroFinal.nome, "
+ // 34
" logradouroTipoPerimetroFinal.descricaoAbreviada, "
+ // 35
" logradouroTituloPerimetroFinal.descricaoAbreviada "
+ "from ClienteEndereco clienteEndereco "
+ "left join clienteEndereco.logradouroCep logradouroCep "
+ "left join logradouroCep.cep cep "
+ "left join logradouroCep.logradouro logradouro "
+ "left join logradouro.logradouroTipo logradouroTipo "
+ "left join logradouro.logradouroTitulo logradouroTitulo "
+ "left join clienteEndereco.logradouroBairro logradouroBairro "
+ "left join logradouroBairro.bairro bairro "
+ "left join bairro.municipio municipio "
+ "left join municipio.unidadeFederacao unidadeFederacao "
+ "left join clienteEndereco.enderecoReferencia enderecoReferencia "
+ "left join clienteEndereco.perimetroInicial perimetroInicial "
+ "left join perimetroInicial.logradouroTipo logradouroTipoPerimetroInicial "
+ "left join perimetroInicial.logradouroTitulo logradouroTituloPerimetroInicial "
+ "left join clienteEndereco.perimetroFinal perimetroFinal "
+ "left join perimetroFinal.logradouroTipo logradouroTipoPerimetroFinal "
+ "left join perimetroFinal.logradouroTitulo logradouroTituloPerimetroFinal "
+ "inner join clienteEndereco.cliente cliente "
+ "where cliente.id = :idCliente";
retorno = session.createQuery(consulta).setInteger("idCliente",
idCliente.intValue()).list();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return retorno;
}
public void atualizarLogradouroBairro(LogradouroBairro logradouroBairroAntigo,
LogradouroBairro logradouroBairroNovo) throws ErroRepositorioException {
String consulta = "";
Session session = HibernateUtil.getSession();
try {
consulta = "UPDATE gcom.cadastro.cliente.ClienteEndereco SET "
+ "lgbr_id = :idLogradouroBairroNovo, cled_tmultimaalteracao = :ultimaAlteracao "
+ "WHERE lgbr_id = :idLogradouroBairroAntigo ";
session.createQuery(consulta).setInteger(
"idLogradouroBairroNovo", logradouroBairroNovo.getId())
.setTimestamp("ultimaAlteracao", new Date())
.setInteger("idLogradouroBairroAntigo", logradouroBairroAntigo.getId())
.executeUpdate();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
}
public void atualizarLogradouroCep(LogradouroCep logradouroCepAntigo,
LogradouroCep logradouroCepNovo) throws ErroRepositorioException {
String consulta = "";
Session session = HibernateUtil.getSession();
try {
consulta = "UPDATE gcom.cadastro.cliente.ClienteEndereco SET "
+ "lgcp_id = :idLogradouroCepNovo, cled_tmultimaalteracao = :ultimaAlteracao "
+ "WHERE lgcp_id = :idLogradouroCepAntigo ";
session.createQuery(consulta).setInteger(
"idLogradouroCepNovo", logradouroCepNovo.getId())
.setTimestamp("ultimaAlteracao", new Date())
.setInteger("idLogradouroCepAntigo", logradouroCepAntigo.getId())
.executeUpdate();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
}
public Localidade pesquisarLocalidadeCliente(Integer idCliente) throws ErroRepositorioException {
Integer idLocalidade = null;
Session session = HibernateUtil.getSession();
try {
StringBuilder consulta = new StringBuilder();
consulta.append(" select localidade.loca_id ")
.append(" from cadastro.cliente_endereco clienteEndereco ")
.append(" inner join cadastro.cliente cliente on cliente.clie_id = clienteEndereco.clie_id ")
.append(" left join cadastro.logradouro_bairro logradouroBairro on logradouroBairro.lgbr_id = clienteEndereco.lgbr_id ")
.append(" left join cadastro.bairro bairro on bairro.bair_id = logradouroBairro.bair_id ")
.append(" left join cadastro.municipio municipio on municipio.muni_id = bairro.muni_id ")
.append(" inner join cadastro.localidade localidade on localidade.muni_idprincipal = municipio.muni_id ")
.append(" where cliente.clie_id = :idCliente ")
.append(" and clienteEndereco.cled_icenderecocorrespondencia = indicadorSim ")
.append(" order by localidade.loca_id ")
.append(" limit 1 ");
idLocalidade = (Integer)session.createSQLQuery(consulta.toString())
.addScalar("id", Hibernate.INTEGER)
.setInteger("idCliente", idCliente.intValue())
.setShort("indicadorSim", ConstantesSistema.SIM)
.setMaxResults(1).uniqueResult();
} catch (HibernateException e) {
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
HibernateUtil.closeSession(session);
}
return new Localidade(idLocalidade);
}
}