package gcom.faturamento.controladores; import java.util.Collection; import javax.ejb.CreateException; import gcom.arrecadacao.repositorio.RepositorioDevolucao; import gcom.cadastro.imovel.Imovel; import gcom.enums.Status; import gcom.faturamento.credito.CreditoARealizar; import gcom.faturamento.debito.DebitoACobrar; import gcom.faturamento.debito.DebitoCreditoSituacao; import gcom.faturamento.repositorio.RepositorioCreditoARealizar; import gcom.util.ControladorComum; import gcom.util.ControladorException; public class ControladorAnaliseGeracaoConta extends ControladorComum { private static final long serialVersionUID = 5517389533745886938L; private RepositorioCreditoARealizar creditoRealizarRepositorio; private RepositorioDevolucao repositorioDevolucao; public ControladorAnaliseGeracaoConta(){} public void ejbCreate() throws CreateException { creditoRealizarRepositorio = RepositorioCreditoARealizar.getInstance(); repositorioDevolucao = RepositorioDevolucao.getInstance(); } public boolean verificarGeracaoConta(boolean imovelSemConsumo, int anoMesFaturamento, Imovel imovel) throws ControladorException { return verificarSituacaoImovelParaGerarConta(imovelSemConsumo, imovel) || verificarDebitosECreditosParaGerarConta(anoMesFaturamento, imovel) || verificarSituacaoDeCondominio(imovelSemConsumo, imovel); } public boolean verificarSituacaoDeCondominio(boolean imovelSemConsumo, Imovel imovel) { return imovelSemConsumo && !imovel.aguaLigada() && !imovel.esgotoLigado() && imovel.pertenceACondominio(); } public boolean verificarDebitosECreditosParaGerarConta(int anoMesFaturamento, Imovel imovel) throws ControladorException{ boolean segundaCondicaoGerarConta = true; try { Collection<DebitoACobrar> debitosACobrar = getControladorDebitoACobrar().debitosCobrarSemPagamentos(imovel.getId()); if (naoHaDebitosACobrar(debitosACobrar) || imovel.paralisacaoFaturamento()) { return false; } Collection<CreditoARealizar> creditosARealizar = creditoRealizarRepositorio.buscarCreditoRealizarPorImovel(imovel.getId(), DebitoCreditoSituacao.NORMAL, anoMesFaturamento); if (naoHaCreditoARealizar(creditosARealizar) || repositorioDevolucao.existeCreditoComDevolucao(creditosARealizar)) { segundaCondicaoGerarConta = haDebitosCobrarAtivos(debitosACobrar); } } catch (Exception e) { throw new ControladorException("Erro ao verificar debitos e creditos para gerar conta", e); } return segundaCondicaoGerarConta; } public boolean verificarSituacaoImovelParaGerarConta(boolean imovelSemConsumo, Imovel imovel) { return !(imovelSemConsumo || (!imovelSemConsumo && !imovel.aguaLigada() && !imovel.esgotoLigado() && !imovel.pertenceACondominio())); } private boolean haDebitosCobrarAtivos(Collection<DebitoACobrar> debitosACobrar) { boolean haDebitosCobrarAtivos = false; for (DebitoACobrar debitoACobrar: debitosACobrar) { if (debitoACobrar.getDebitoTipo().getIndicadorGeracaoConta().shortValue() == Status.ATIVO.getId()) { haDebitosCobrarAtivos = true; break; } } return haDebitosCobrarAtivos; } private boolean naoHaCreditoARealizar(Collection<CreditoARealizar> creditosRealizar) { return creditosRealizar == null || creditosRealizar.isEmpty(); } private boolean naoHaDebitosACobrar(Collection<DebitoACobrar> debitosACobrar) { return debitosACobrar == null || debitosACobrar.isEmpty(); } }