package gcom.faturamento;
import gcom.cadastro.cliente.ClienteRelacaoTipo;
import gcom.micromedicao.consumo.LigacaoTipo;
import gcom.micromedicao.medicao.MedicaoTipo;
import gcom.util.ErroRepositorioException;
import gcom.util.HibernateUtil;
import java.util.Collection;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
/**
* < <Descri��o da Classe>>
*
* @author Administrador
*/
public class RepositorioFaturamentoPostgresHBM extends RepositorioFaturamentoHBM {
/**
* [UC1051] Gerar Relat�rio de Amostragem das Anormalidades Informadas
*
* @author Hugo Leonardo
* @date 09/08/2010
*
* @exception ErroRepositorioException
*/
public Collection pesquisarDadosRelatorioAnormalidadeConsumoPorAmostragem(
Integer idGrupoFaturamento, Short codigoRota,
Integer idGerenciaRegional, Integer idUnidadeNegocio,
Integer idLocalidadeInicial, Integer idLocalidadeFinal,
Integer idSetorComercialInicial, Integer idSetorComercialFinal,
Integer referencia, Integer idImovelPerfil,
Integer numOcorConsecutivas, String indicadorOcorrenciasIguais,
Integer mediaConsumoInicial, Integer mediaConsumoFinal,
Collection<Integer> colecaoIdsAnormalidadeConsumo,
Collection<Integer> colecaoIdsAnormalidadeLeitura,
Collection<Integer> colecaoIdsAnormalidadeLeituraInformada,
Integer tipoMedicao, Collection<Integer> colecaoIdsEmpresa,
Integer numeroQuadraInicial, Integer numeroQuadraFinal,Integer idCategoria, Integer limite)
throws ErroRepositorioException {
Session session = HibernateUtil.getSession();
Collection retorno = null;
String consulta = null;
try {
consulta = "SELECT "
+ " grupoFat.ftgr_id as idGrupoFaturamento,"
+ " grupoFat.ftgr_dsfaturamentogrupo as descricaoGrupoFaturamento,"
+ " greg.greg_id as idGerencia,"
+ " greg.greg_nmabreviado as nomeGerencia,"
+ " unidNeg.uneg_id as idUnidadeNegocio,"
+ " unidNeg.uneg_nmabreviado as nomeUnidadeNegocio,"
+ " elo.loca_id as idElo,"
+ " elo.loca_nmlocalidade as nomeElo,"
+ " loc.loca_id as idLocalidade,"
+ " loc.loca_nmlocalidade as nomeLocalidade,"
+ " mrem.imov_id as idImovel,"
+ " clieUsuario.clie_nmcliente as nomeUsuario,"
+ " mrem.last_id as sitLigAgua,"
+ " mrem.lest_id as sitLigEsgoto,"
+ " imov.imov_icdebitoconta as indicadorDebito, "
+ " mrem.mrem_nnconsumomedio as consumoMedio, "
+ " consHist.cshi_nnconsumofaturadomes as consumoMes,"
+ " consAnor.csan_dsabrvconsanormalidade as anormalidadeConsumo,"
+ " mrem.ltan_id as anormalidadeLeitura,"
+ " mrem.mrem_qteconomias as qtdeEconomias,"
+ " mrem.medt_id as tipoMedicao,";
if (tipoMedicao.equals(MedicaoTipo.LIGACAO_AGUA)) {
consulta = consulta
+ " hidrCapAgua.hicp_dsabreviadahidrcapacidade as capHidAgua, "
+ " hidrLocInstAgua.hili_dshidmtlocalinstalacao as locInstHidAgua, ";
} else {
consulta = consulta
+ " hidrCapPoco.hicp_dsabreviadahidrcapacidade as capHidPoco, "
+ " hidrLocInstPoco.hili_dshidmtlocalinstalacao as locInstHidPoco, ";
}
consulta = consulta
+ " setor.stcm_id as idSetorComercial, "
+ " setor.stcm_cdsetorcomercial as codigoSetorComercial,"
+ " medHist.mdhi_nnleituraatualinformada as nnLeituraInformada,"
+ " empr.empr_id as idEmpresa,"
+ " empr.empr_nmempresa as nomeEmpresa, "
+ " mrem.mrem_inscricaoimovel as inscricaoImovel,"
+ " mrem_enderecoimovel as enderecoImovel"
+ " FROM micromedicao.movimento_roteiro_empr mrem"
+ " INNER JOIN faturamento.faturamento_grupo grupoFat on grupoFat.ftgr_id = mrem.ftgr_id"
+ " INNER JOIN cadastro.gerencia_regional greg on greg.greg_id = mrem.greg_id"
+ " INNER JOIN cadastro.localidade loc on loc.loca_id = mrem.loca_id"
+ " INNER JOIN cadastro.localidade elo on elo.loca_id = loc.loca_cdelo"
+ " INNER JOIN cadastro.unidade_negocio unidNeg on unidNeg.uneg_id = loc.uneg_id"
+ " INNER JOIN cadastro.imovel imov on imov.imov_id = mrem.imov_id"
+ " INNER JOIN cadastro.setor_comercial setor on setor.stcm_id = imov.stcm_id"
+ " INNER JOIN cadastro.cliente_imovel clieImovUsuario on clieImovUsuario.imov_id = imov.imov_id"
+ " and clieImovUsuario.crtp_id = " + ClienteRelacaoTipo.USUARIO
+ " and clieImovUsuario.clim_dtrelacaofim is null "
+ " INNER JOIN cadastro.cliente clieUsuario on clieUsuario.clie_id = clieImovUsuario.clie_id"
+ " INNER JOIN cadastro.empresa empr on empr.empr_id = mrem.empr_id";
if (tipoMedicao.equals(MedicaoTipo.LIGACAO_AGUA)) {
consulta = consulta
+ " INNER JOIN micromedicao.consumo_historico consHist on consHist.imov_id = imov.imov_id"
+ " and consHist.lgti_id = " + LigacaoTipo.LIGACAO_AGUA
+ " and consHist.cshi_amfaturamento = :referencia "
+ " INNER JOIN micromedicao.medicao_historico medHist on medHist.lagu_id = imov.imov_id"
+ " and medHist.medt_id = " + MedicaoTipo.LIGACAO_AGUA
+ " and medHist.mdhi_amleitura = :referencia ";
} else {
consulta = consulta
+ " INNER JOIN micromedicao.consumo_historico consHist on consHist.imov_id = imov.imov_id"
+ " and consHist.lgti_id = " + LigacaoTipo.LIGACAO_ESGOTO
+ " and consHist.cshi_amfaturamento = :referencia "
+ " INNER JOIN micromedicao.medicao_historico medHist on medHist.imov_id = imov.imov_id"
+ " and medHist.medt_id = " + MedicaoTipo.POCO
+ " and medHist.mdhi_amleitura = :referencia ";
}
consulta = consulta
+ " LEFT OUTER JOIN micromedicao.consumo_anormalidade consAnor on consAnor.csan_id = consHist.csan_id"
+ " LEFT OUTER JOIN micromedicao.leitura_anormalidade leitAnor on leitAnor.ltan_id = medhist.ltan_idleitanormfatmt";
if (tipoMedicao.equals(MedicaoTipo.LIGACAO_AGUA)) {
consulta = consulta
+ " LEFT OUTER JOIN atendimentopublico.ligacao_agua lagu"
+ " on lagu.lagu_id = imov.imov_id "
+ " LEFT OUTER JOIN micromedicao.hidrometro_inst_hist hidrInstHistAgua"
+ " on hidrInstHistAgua.hidi_id = lagu.hidi_id "
+ " LEFT OUTER JOIN micromedicao.hidrometro hidrAgua"
+ " on hidrAgua.hidr_id = hidrInstHistAgua.hidr_id "
+ " LEFT OUTER JOIN micromedicao.hidrometro_capacidade hidrCapAgua"
+ " on hidrCapAgua.hicp_id = hidrAgua.hicp_id "
+ " LEFT OUTER JOIN micromedicao.hidrometro_local_inst hidrLocInstAgua"
+ " on hidrLocInstAgua.hili_id = hidrInstHistAgua.hili_id ";
} else {
consulta = consulta
+ " LEFT OUTER JOIN micromedicao.hidrometro_inst_hist hidrInstHistPoco "
+ " on hidrInstHistPoco.hidi_id = imov.hidi_id "
+ " LEFT OUTER JOIN micromedicao.hidrometro hidrPoco"
+ " on hidrPoco.hidr_id = hidrInstHistPoco.hidr_id "
+ " LEFT OUTER JOIN micromedicao.hidrometro_capacidade hidrCapPoco "
+ " on hidrCapPoco.hicp_id = hidrPoco.hicp_id "
+ " LEFT OUTER JOIN micromedicao.hidrometro_local_inst hidrLocInstPoco "
+ " on hidrLocInstPoco.hili_id = hidrInstHistPoco.hili_id ";
}
consulta = consulta
+ criarCondicionaisRelatorioAnormalidadesConsumo(
idGrupoFaturamento, codigoRota, idGerenciaRegional,
idUnidadeNegocio, idLocalidadeInicial,
idLocalidadeFinal, idSetorComercialInicial,
idSetorComercialFinal, referencia, idImovelPerfil,
numOcorConsecutivas, indicadorOcorrenciasIguais,
mediaConsumoInicial, mediaConsumoFinal,
colecaoIdsAnormalidadeConsumo,
colecaoIdsAnormalidadeLeitura,
colecaoIdsAnormalidadeLeituraInformada,
colecaoIdsEmpresa, numeroQuadraInicial,
numeroQuadraFinal, idCategoria) ;
consulta = consulta
+ " ORDER BY grupoFat.ftgr_id, greg.greg_id, unidNeg.uneg_id, elo.loca_id, "
+ " loc.loca_id, setor.stcm_cdsetorcomercial, empr.empr_id, imov.imov_id "
+ " limit :limite ";
SQLQuery query = session.createSQLQuery(consulta);
if (colecaoIdsAnormalidadeConsumo != null
&& colecaoIdsAnormalidadeConsumo.size() > 0) {
query.setParameterList("colecaoIdsAnormalidadeConsumo",
colecaoIdsAnormalidadeConsumo);
}
if (colecaoIdsAnormalidadeLeitura != null
&& colecaoIdsAnormalidadeLeitura.size() > 0) {
query.setParameterList("colecaoIdsAnormalidadeLeitura",
colecaoIdsAnormalidadeLeitura);
}
if (colecaoIdsAnormalidadeLeituraInformada != null
&& colecaoIdsAnormalidadeLeituraInformada.size() > 0) {
query.setParameterList(
"colecaoIdsAnormalidadeLeituraInformada",
colecaoIdsAnormalidadeLeituraInformada);
}
if (colecaoIdsEmpresa != null && colecaoIdsEmpresa.size() > 0) {
query.setParameterList("colecaoIdsEmpresa", colecaoIdsEmpresa);
}
if (tipoMedicao.equals(MedicaoTipo.LIGACAO_AGUA)) {
retorno = query.addScalar("idGrupoFaturamento", Hibernate.INTEGER)
.addScalar("descricaoGrupoFaturamento", Hibernate.STRING)
.addScalar("idGerencia", Hibernate.INTEGER)
.addScalar("nomeGerencia", Hibernate.STRING)
.addScalar("idUnidadeNegocio", Hibernate.INTEGER)
.addScalar("nomeUnidadeNegocio", Hibernate.STRING)
.addScalar("idElo", Hibernate.INTEGER)
.addScalar("nomeElo", Hibernate.STRING)
.addScalar("idLocalidade", Hibernate.INTEGER)
.addScalar("nomeLocalidade", Hibernate.STRING)
.addScalar("idImovel", Hibernate.INTEGER)
.addScalar("nomeUsuario", Hibernate.STRING)
.addScalar("sitLigAgua", Hibernate.INTEGER)
.addScalar("sitLigEsgoto", Hibernate.INTEGER)
.addScalar("indicadorDebito", Hibernate.SHORT)
.addScalar("consumoMedio", Hibernate.INTEGER)
.addScalar("consumoMes", Hibernate.INTEGER)
.addScalar("anormalidadeConsumo", Hibernate.STRING)
.addScalar("anormalidadeLeitura", Hibernate.INTEGER)
.addScalar("qtdeEconomias", Hibernate.SHORT)
.addScalar("tipoMedicao", Hibernate.INTEGER)
.addScalar("capHidAgua", Hibernate.STRING)
.addScalar("locInstHidAgua", Hibernate.STRING)
.addScalar("idSetorComercial", Hibernate.INTEGER)
.addScalar("codigoSetorComercial", Hibernate.INTEGER)
.addScalar("nnLeituraInformada", Hibernate.INTEGER)
.addScalar("idEmpresa", Hibernate.INTEGER)
.addScalar("nomeEmpresa", Hibernate.STRING)
.addScalar("inscricaoImovel", Hibernate.STRING)
.addScalar("enderecoImovel", Hibernate.STRING)
.setInteger("referencia", referencia)
.setInteger("limite", limite)
.list();
} else {
retorno = query.addScalar("idGrupoFaturamento", Hibernate.INTEGER)
.addScalar("descricaoGrupoFaturamento", Hibernate.STRING)
.addScalar("idGerencia", Hibernate.INTEGER)
.addScalar("nomeGerencia", Hibernate.STRING)
.addScalar("idUnidadeNegocio", Hibernate.INTEGER)
.addScalar("nomeUnidadeNegocio", Hibernate.STRING)
.addScalar("idElo", Hibernate.INTEGER)
.addScalar("nomeElo", Hibernate.STRING)
.addScalar("idLocalidade", Hibernate.INTEGER)
.addScalar("nomeLocalidade", Hibernate.STRING)
.addScalar("idImovel", Hibernate.INTEGER)
.addScalar("nomeUsuario", Hibernate.STRING)
.addScalar("sitLigAgua", Hibernate.INTEGER)
.addScalar("sitLigEsgoto", Hibernate.INTEGER)
.addScalar("indicadorDebito", Hibernate.SHORT)
.addScalar("consumoMedio", Hibernate.INTEGER)
.addScalar("consumoMes", Hibernate.INTEGER)
.addScalar("anormalidadeConsumo", Hibernate.STRING)
.addScalar("anormalidadeLeitura", Hibernate.INTEGER)
.addScalar("qtdeEconomias", Hibernate.SHORT)
.addScalar("tipoMedicao", Hibernate.INTEGER)
.addScalar("capHidPoco", Hibernate.STRING)
.addScalar("locInstHidPoco", Hibernate.STRING)
.addScalar("idSetorComercial", Hibernate.INTEGER)
.addScalar("codigoSetorComercial", Hibernate.INTEGER)
.addScalar("nnLeituraInformada", Hibernate.INTEGER)
.addScalar("idEmpresa", Hibernate.INTEGER)
.addScalar("nomeEmpresa", Hibernate.STRING)
.addScalar("inscricaoImovel", Hibernate.STRING)
.addScalar("enderecoImovel", Hibernate.STRING)
.setInteger("referencia", referencia)
.setInteger("limite", limite)
.list();
}
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
return retorno;
}
/**
* [UC0113] Faturar Grupo de Faturamento
*
* @author Raphael Rossiter
* @date 10/03/2011
*
* @throws ErroRepositorioException
*/
public Integer gerarSequencialContaBoleto() throws ErroRepositorioException {
Session session = HibernateUtil.getSession();
Integer retorno = null;
String consulta = null;
try {
consulta = "select nextval('faturamento.seq_conta_numero_boleto') as sequencial ";
retorno = (Integer) session.createSQLQuery(consulta).addScalar("sequencial", Hibernate.INTEGER).uniqueResult();
} catch (HibernateException e) {
// levanta a exce��o para a pr�xima camada
throw new ErroRepositorioException(e, "Erro no Hibernate");
} finally {
// fecha a sess�o
HibernateUtil.closeSession(session);
}
return retorno;
}
}