package gcom.micromedicao;
import java.util.Collection;
import gcom.util.ErroRepositorioException;
import gcom.util.HibernateUtil;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
/**
* Classe criada para sobrescrever(override) os metodos no padr�o da base de dados Postgres
*
* @author Arthur Carvalho
* @date 16/12/2010
*/
public class RepositorioMicromedicaoPostgresHBM extends RepositorioMicromedicaoHBM {
/**
*
* [UC0629] Consultar Arquivo Texto para Leitura
*
* [FS0011 - Verificar Leituras];
*
* @author Hugo Amorim
* @date 20/08/2010
*/
public Collection pesquisarSituacaoLeitura(Integer anoMes,Integer idGrupo,Integer idRota)
throws ErroRepositorioException {
Collection retorno = null;
Session session = HibernateUtil.getSession();
String consulta;
try {
consulta = "SELECT \n"
+" COALESCE(medidosEnviados.qt_medidos_enviados,0) as qt_medidos_enviados, \n"
+" COALESCE(medidosRecebidos.qt_medidos_recebidos,0) as qt_medidos_recebidos, \n"
+" ABS(COALESCE(medidosEnviados.qt_medidos_enviados,0) - COALESCE(medidosRecebidos.qt_medidos_recebidos,0)) as diferencaMedidos, \n"
+" COALESCE(naoMedidosEnviados.qt_nao_medidos_enviados,0) as qt_nao_medidos_enviados, \n"
+" COALESCE(naoMedidosRecebidos.qt_nao_medidos_recebidos,0) as qt_nao_medidos_recebidos, \n"
+" ABS(COALESCE(naoMedidosEnviados.qt_nao_medidos_enviados,0) - COALESCE(naoMedidosRecebidos.qt_nao_medidos_recebidos,0)) as diferencaNaoMedidos, \n"
+" COALESCE(medidosImpressos.qt_medidos_impressos,0) as qt_medidos_impressos, \n"
+" COALESCE(medidosNaoImpressos.qt_medidos_nao_impressos,0) as qt_medidos_nao_impressos, \n"
+" COALESCE(naoMedidosImpressos.qt_nao_medidos_impressos,0) as qt_nao_medidos_impressos, \n"
+" COALESCE(naoMedidosNaoImpressos.qt_nao_medidos_nao_impressos,0) as qt_nao_medidos_nao_impressos, \n"
+" atre.txre_dsmotivofinalizacao as motivoFinalizacao, \n"
+" COALESCE(anormalidades.qt_anormalidades,0) as qt_anormalidades \n"
+" from micromedicao.arquivo_texto_rot_empr atre \n"
+" inner join micromedicao.rota rt on (atre.rota_id = rt.rota_id) \n"
//qt_medidos_enviados
+" LEFT JOIN ( \n"
+" SELECT r.rota_id as rota,mre.mrem_ammovimento as anomes, count(distinct(i.imov_id)) as qt_medidos_enviados \n"
+" FROM micromedicao.movimento_roteiro_empr mre \n"
+" INNER JOIN cadastro.imovel i on i.imov_id = mre.imov_id \n"
+" INNER JOIN cadastro.quadra q on q.qdra_id = i.qdra_id \n"
+" INNER JOIN micromedicao.rota r on r.rota_id = q.rota_id \n"
+" LEFT JOIN atendimentopublico.ligacao_agua la on la.lagu_id = mre.imov_id \n"
+" WHERE (la.hidi_id is not null or i.hidi_id is not null) and mre.mrem_ammovimento = :anoMes and mre.rota_id = :idRota " +
" GROUP BY rota,anomes) medidosEnviados \n"
+" on (atre.rota_id = medidosEnviados.rota and atre.txre_amreferencia = medidosEnviados.anomes) \n"
//qt_medidos_recebidos
+" LEFT JOIN ( \n"
+" SELECT \n"
+" mov.rota_id as rota, \n"
+" mcpf_ammovimento as anomes, \n"
+" count(distinct(mov.imov_id)) as qt_medidos_recebidos \n"
+" FROM \n"
+" faturamento.mov_conta_prefaturada mov \n"
+" inner join cadastro.imovel imo on ( mov.imov_id = imo.imov_id ) \n"
+" left join atendimentopublico.ligacao_agua la on ( imo.imov_id = la.lagu_id ) \n"
+" where \n"
+" imo.hidi_id is not null or la.hidi_id is not null \n"
+" GROUP BY rota,anomes ) medidosRecebidos \n"
+" on (atre.rota_id = medidosRecebidos.rota and atre.txre_amreferencia = medidosRecebidos.anomes) \n"
//qt_nao_medidos_enviados
+" LEFT JOIN ( \n"
+" SELECT r.rota_id as rota,mre.mrem_ammovimento as anomes, count(distinct(i.imov_id)) as qt_nao_medidos_enviados \n"
+" FROM micromedicao.movimento_roteiro_empr mre \n"
+" INNER JOIN cadastro.imovel i on i.imov_id = mre.imov_id \n"
+" INNER JOIN cadastro.quadra q on q.qdra_id = i.qdra_id \n"
+" INNER JOIN micromedicao.rota r on r.rota_id = q.rota_id \n"
+" LEFT JOIN atendimentopublico.ligacao_agua la on la.lagu_id = mre.imov_id \n"
+" WHERE (la.hidi_id is null and i.hidi_id is null) and mre.mrem_ammovimento = :anoMes and mre.rota_id = :idRota "
+" GROUP BY rota,anomes) naoMedidosEnviados \n"
+" on (atre.rota_id = naoMedidosEnviados.rota and atre.txre_amreferencia = naoMedidosEnviados.anomes) \n"
//qt_nao_medidos_recebidos
+" LEFT JOIN ( \n"
+" SELECT mcp.rota_id as rota, mcp.mcpf_ammovimento as anomes, count(distinct(mcp.imov_id)) as qt_nao_medidos_recebidos \n"
+" FROM faturamento.mov_conta_prefaturada mcp \n"
+" INNER JOIN cadastro.imovel i on i.imov_id = mcp.imov_id \n"
+" LEFT JOIN atendimentopublico.ligacao_agua la on la.lagu_id = mcp.imov_id \n"
+" WHERE (la.hidi_id is null and i.hidi_id is null) \n"
+" group by rota,anomes) naoMedidosRecebidos \n"
+" on (atre.rota_id = naoMedidosRecebidos.rota and atre.txre_amreferencia = naoMedidosRecebidos.anomes) \n"
//qt_medidos_impressos
+" LEFT JOIN( \n"
+" SELECT rota_id as rota, mcp.mcpf_ammovimento as anomes, count(distinct(mcp.imov_id)) as qt_medidos_impressos \n"
+" FROM faturamento.mov_conta_prefaturada mcp \n"
+" INNER JOIN cadastro.imovel imo on imo.imov_id = mcp.imov_id \n"
+" left join atendimentopublico.ligacao_agua la on ( imo.imov_id = la.lagu_id ) \n"
+" where \n"
+" ( imo.hidi_id is not null or la.hidi_id is not null ) and \n"
+" mcp.mcpf_icemissaoconta = 1 \n"
+" group by rota,anomes) medidosImpressos on (atre.rota_id = medidosImpressos.rota and atre.txre_amreferencia = medidosImpressos.anomes) \n"
// qt_medidos_nao_impressos
+" LEFT JOIN( \n"
+" SELECT rota_id as rota, mcp.mcpf_ammovimento as anomes, count(distinct(mcp.imov_id)) as qt_medidos_nao_impressos \n"
+" FROM faturamento.mov_conta_prefaturada mcp \n"
+" INNER JOIN cadastro.imovel imo on imo.imov_id = mcp.imov_id \n"
+" left join atendimentopublico.ligacao_agua la on ( imo.imov_id = la.lagu_id ) \n"
+" where \n"
+" ( imo.hidi_id is not null or la.hidi_id is not null ) and \n"
+" mcp.mcpf_icemissaoconta = 2 \n"
+" group by rota,anomes) medidosNaoImpressos on (atre.rota_id = medidosNaoImpressos.rota and atre.txre_amreferencia = medidosNaoImpressos.anomes) \n"
//qt_nao_medidos_impressos
+" LEFT JOIN( \n"
+" SELECT rota_id as rota, mcp.mcpf_ammovimento as anomes, count(distinct(mcp.imov_id)) as qt_nao_medidos_impressos \n"
+" FROM faturamento.mov_conta_prefaturada mcp \n"
+" INNER JOIN cadastro.imovel i on i.imov_id = mcp.imov_id \n"
+" LEFT JOIN atendimentopublico.ligacao_agua la on la.lagu_id = mcp.imov_id \n"
+" WHERE (la.hidi_id is null and i.hidi_id is null) and \n"
+" mcp.mcpf_icemissaoconta = 1 and (mcpf_nnleiturahidrometro is null or mcp.ltan_id is null) \n"
+" group by rota,anomes) naoMedidosImpressos on (atre.rota_id = naoMedidosImpressos.rota and atre.txre_amreferencia = naoMedidosImpressos.anomes) \n"
//qt_nao_medidos_nao_impressos
+" LEFT JOIN( \n"
+" SELECT rota_id as rota, mcp.mcpf_ammovimento as anomes, count(distinct(mcp.imov_id)) as qt_nao_medidos_nao_impressos \n"
+" FROM faturamento.mov_conta_prefaturada mcp \n"
+" INNER JOIN cadastro.imovel i on i.imov_id = mcp.imov_id \n"
+" LEFT JOIN atendimentopublico.ligacao_agua la on la.lagu_id = mcp.imov_id \n"
+" WHERE (la.hidi_id is null and i.hidi_id is null) and \n"
+" mcp.mcpf_icemissaoconta = 2 and (mcpf_nnleiturahidrometro is null or mcp.ltan_id is null) \n"
+" group by rota,anomes) naoMedidosNaoImpressos on (atre.rota_id = naoMedidosNaoImpressos.rota and atre.txre_amreferencia = naoMedidosNaoImpressos.anomes) \n"
// qt_anormalidades
+" LEFT JOIN( \n"
+" SELECT rota_id as rota, mcp.mcpf_ammovimento as anomes, count(distinct(imov_id)) as qt_anormalidades \n"
+" FROM faturamento.mov_conta_prefaturada mcp where \n"
+" csan_id is not null \n"
+" group by rota,anomes) anormalidades on (anormalidades.rota = medidosNaoImpressos.rota and anormalidades.anomes = medidosNaoImpressos.anomes) \n"
+" WHERE txre_amreferencia = :anoMes and rt.rota_id = :idRota ";
retorno = session.createSQLQuery(consulta)
.addScalar("qt_medidos_enviados", Hibernate.INTEGER)
.addScalar("qt_medidos_recebidos", Hibernate.INTEGER)
.addScalar("diferencaMedidos", Hibernate.INTEGER)
.addScalar("qt_nao_medidos_enviados", Hibernate.INTEGER)
.addScalar("qt_nao_medidos_recebidos", Hibernate.INTEGER)
.addScalar("diferencaNaoMedidos", Hibernate.INTEGER)
.addScalar("qt_medidos_impressos", Hibernate.INTEGER)
.addScalar("qt_medidos_nao_impressos", Hibernate.INTEGER)
.addScalar("qt_nao_medidos_impressos", Hibernate.INTEGER)
.addScalar("qt_nao_medidos_nao_impressos", Hibernate.INTEGER)
.addScalar("motivoFinalizacao", Hibernate.STRING)
.addScalar("qt_anormalidades", Hibernate.INTEGER)
.setInteger("anoMes", anoMes)
.setInteger("idRota", idRota)
.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;
}
}