public void VerificarDisponibilidadeGlobal(ConcessaoEntidade concessao, decimal valorPrestacao, decimal valorLiquido, decimal valorSolicitado) { var motivoIndisponivel = string.Empty; if ((concessao.ValorLimite >= 0) & (valorSolicitado.Arredonda(2) > concessao.TetoMaximo.Arredonda(2))) { motivoIndisponivel += "Valor Solicitado excede o teto máximo estipulado\n"; } if ((concessao.TetoMinimo >= 0) & (valorSolicitado.Arredonda(2) < concessao.TetoMinimo.Arredonda(2))) { motivoIndisponivel += "Valor Solicitado inferior ao teto mínimo estipulado \n"; } if (valorPrestacao.Arredonda(2) > concessao.MargemConsignavelCalculada.Arredonda(2)) { motivoIndisponivel += "Valor da Prestação excede o Valor da margem consignável calculado \n"; } if (valorSolicitado.Arredonda(2) < concessao.ValorContratosReformados.Arredonda(2)) { motivoIndisponivel += "Valor solicitado inferior ao valor dos contratos a reformar \n"; } //if (valorLiquido == 0) // motivoIndisponivel += "Saldo do novo contrato é zero.\n"; if (valorLiquido < 0) { motivoIndisponivel += "Saldo insuficiente \n"; } var disponibilidade = string.IsNullOrEmpty(motivoIndisponivel); MotivoContrato += motivoIndisponivel; DisponibilidadeContrato = disponibilidade; }
public decimal CalcularLimitePorPrazo( decimal margemConsiginavel, decimal limitante1, decimal limitante2 = 0, decimal prazo = 0, bool calculaMargem = true) { /* * baseado na calculo_limite_por_prazo.xlsx * =SE( * SE( * PGTO(taxaJuros; prazo; - (total + valorCorrecao)) <= prestacaoSemTaxas; * limitante; * total / (fatorCorrecao + 1) * ) * <= limitante; * SE( * PGTO(taxaJuros; prazo; - (total + valorCorrecao)) <= prestacaoSemTaxas; * limitante; * total / (fatorCorrecao + 1) * ); * limitante) */ decimal prestacaoSemTaxas = CalcularPrestacaoSemTaxas(margemConsiginavel, calculaMargem).Arredonda(2); var prazoUsar = prazo != 0 ? prazo : Natureza.PRAZO_MAX.Value; decimal taxaJuros = (TaxaConcessao.TX_JUROS.Value / 100); if (CATEGORIAS_AJUSTAR_RESERVA.Contains(Plano.CD_CATEGORIA)) { limitante1 = AjustarReservaPelaTaxa(limitante1); limitante2 = AjustarReservaPelaTaxa(limitante2); } decimal fatorCorrecao = ObterFatorAtualizacao(DataCredito); if (!string.IsNullOrEmpty(Modalidade.IND_CORR_VL_SOLIC)) { fatorCorrecao -= 1; } decimal valorCorrecao = ObterValorAtualizacao(limitante1, DataCredito); if (limitante2 == 0) { limitante2 = limitante1; } decimal total = VP(prazoUsar, taxaJuros, 0, prestacaoSemTaxas); var pgmt = PMT((double)taxaJuros, (int)prazoUsar, (double)(total + valorCorrecao)); var totalCorrigido = total / (fatorCorrecao + 1); var valorLimiteInicial = pgmt < prestacaoSemTaxas ? limitante1 : totalCorrigido; decimal limiteCalculado = valorLimiteInicial <= limitante2 ? valorLimiteInicial : limitante2; return(limiteCalculado.Arredonda(2)); }