Beispiel #1
0
        // Tasa de interés ya transformada a la periodicidad
        public IEnumerable <FilaPlanPago> CrearPlanDePagos(int numeroDeCuotas, int numeroDiasSumarPorPeriodicidad, decimal valorCuotaAproximada, decimal montoSolicitado, DateTime fechaPrimerPago, DateTime?fechaAprobacion = null, TipoCuota tipoCuota = TipoCuota.Escalonada, int tipoCalendario = 0, decimal tasaDeInteres = 0)
        {
            List <FilaPlanPago> lstPlanDePago = new List <FilaPlanPago>();
            decimal             valorAcumuladoAbonadoCapital = 0;

            for (int i = 1; i <= numeroDeCuotas; i++)
            {
                FilaPlanPago filaPlanPago = new FilaPlanPago(i, numeroDiasSumarPorPeriodicidad, fechaPrimerPago, tipoCalendario);
                valorAcumuladoAbonadoCapital += filaPlanPago.InicializarFila(valorCuotaAproximada, montoSolicitado, tasaDeInteres, numeroDeCuotas, valorAcumuladoAbonadoCapital, tipoCuota, fechaAprobacion);

                lstPlanDePago.Add(filaPlanPago);
            }

            PlanDePagos = lstPlanDePago;
            return(lstPlanDePago);
        }
Beispiel #2
0
        public decimal InicializarFila(decimal valorCuotaAproximada, decimal montoSolicitado, decimal tasaInteres, int numeroDeCuotas, decimal valorAcumuladoAbonadoCapital = 0, TipoCuota tipoCuota = TipoCuota.Escalonada, DateTime?fechaAprobacion = null)
        {
            tasaInteres       /= 100;
            ValorAbonarInteres = Math.Round((montoSolicitado - valorAcumuladoAbonadoCapital) * tasaInteres);

            if (NumeroCuota == 1 && fechaAprobacion.HasValue && _fechaPrimerPago != DateTime.MinValue)
            {
                // Calculo los dias de ajuste
                long diferenciaEntreFechas = DateTimeHelper.DiferenciaEntreDosFechasDias(_fechaPrimerPago, fechaAprobacion.Value);
                long diasAjuste            = diferenciaEntreFechas - _numeroDiasSumarPorPeriodicidad;

                // Sumo a mi interes actuales los intereses de mis dias de ajuste
                ValorAbonarInteres += Math.Round((ValorAbonarInteres / _numeroDiasSumarPorPeriodicidad) * diasAjuste);
            }

            if (tipoCuota == TipoCuota.Fija)
            {
                TotalValorCuota    = Math.Round(valorCuotaAproximada);
                ValorAbonarCapital = Math.Round(TotalValorCuota - ValorAbonarInteres);
            }
            else if (tipoCuota == TipoCuota.Escalonada)
            {
                TotalValorCuota    = Math.Round(ValorAbonarCapital + ValorAbonarInteres);
                ValorAbonarCapital = Math.Round(valorCuotaAproximada);
            }

            SaldoCapitalPendiente = Math.Round(montoSolicitado - (ValorAbonarCapital + valorAcumuladoAbonadoCapital));

            // Ajusto la ultima cuota en caso de diferencias tanto positiva como negativa
            if (NumeroCuota == numeroDeCuotas)
            {
                TotalValorCuota      += Math.Round(SaldoCapitalPendiente);
                ValorAbonarCapital   += Math.Round(SaldoCapitalPendiente);
                SaldoCapitalPendiente = 0;
            }

            return(ValorAbonarCapital);
        }