package gcom.faturamento.repositorio; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import org.hibernate.Session; import gcom.faturamento.debito.DebitoACobrar; import gcom.faturamento.debito.DebitoCreditoSituacao; import gcom.util.ErroRepositorioException; import gcom.util.HibernateUtil; public class RepositorioDebitoACobrar{ private static RepositorioDebitoACobrar instancia; private RepositorioDebitoACobrar() {} public static RepositorioDebitoACobrar getInstancia() { if (instancia == null){ instancia = new RepositorioDebitoACobrar(); } return instancia; } @SuppressWarnings("unchecked") public Collection<DebitoACobrar> debitosCobrarPorImovelComPendenciaESemRevisao(Integer idImovel) throws ErroRepositorioException{ Session session = HibernateUtil.getSession(); StringBuilder sql = new StringBuilder(); sql.append("select dc from DebitoACobrar dc ") .append(" inner join fetch dc.debitoTipo dt ") .append(" left join dc.parcelamento parc ") .append(" where dc.imovel.id = :idImovel ") .append(" and dc.numeroPrestacaoCobradas < (dc.numeroPrestacaoDebito - coalesce(dc.numeroParcelaBonus, 0))") .append(" and dc.dataRevisao is null") .append(" and dc.contaMotivoRevisao is null") .append(" and dc.situacaoAtual = :situacao"); Collection<DebitoACobrar> debitos = new ArrayList<DebitoACobrar>(); try { debitos = (Collection<DebitoACobrar>) session.createQuery(sql.toString()) .setParameter("idImovel", idImovel) .setParameter("situacao", DebitoCreditoSituacao.NORMAL) .list(); } catch (Exception e) { throw new ErroRepositorioException(e); }finally{ session.close(); } return debitos; } public void reduzirParcelasCobradas(Integer referencia, Integer grupoFaturamento, List<Integer> idsImoveis) throws ErroRepositorioException{ Session session = HibernateUtil.getSession(); try { if (idsImoveis != null && idsImoveis.size() > 0){ StringBuilder sql = new StringBuilder(); sql.append(" update faturamento.debito_a_cobrar ") .append(" set dbac_nnprestacaocobradas = dbac_nnprestacaocobradas - 1 ") .append(" where dbac_amreferenciaprestacao >= :referencia ") .append(" and dbac_nnprestacaocobradas > 0 ") .append(" and imov_id in (:ids)"); session.createSQLQuery(sql.toString()) .setParameter("referencia", referencia) .setParameterList("ids", idsImoveis) .executeUpdate(); } } catch (Exception e) { throw new ErroRepositorioException(e); }finally{ session.close(); } } public void atualizarDebitoCobrar(List<DebitoACobrar> debitos) throws ErroRepositorioException { for (DebitoACobrar debitoACobrar : debitos) { atualizarDebitoCobrar(debitoACobrar); } } public void atualizarDebitoCobrar(DebitoACobrar debitoCobrar) throws ErroRepositorioException { Session session = HibernateUtil.getSession(); StringBuffer sql = new StringBuffer(); sql.append(" update DebitoACobrar dc set"); sql.append(" dc.anoMesReferenciaPrestacao = :anoMesPrestacao, "); sql.append(" dc.numeroPrestacaoCobradas = :numeroPrestacao, "); sql.append(" dc.ultimaAlteracao = :dataAtual "); sql.append(" where dc.id = :idDebitoAcobrar"); try { session.createQuery(sql.toString()) .setParameter("numeroPrestacao", debitoCobrar.getNumeroPrestacaoCobradas()) .setParameter("idDebitoAcobrar", debitoCobrar.getId()) .setParameter("anoMesPrestacao", debitoCobrar.getAnoMesReferenciaPrestacao()) .setParameter("dataAtual", new Date()) .executeUpdate(); } catch (Exception e) { throw new ErroRepositorioException(e); }finally{ session.close(); } } }