none
Tabla de amortizaciones

    Pregunta

  • Saludos buenas a todos, estoy creando un sistema de prestamos y hasta ahora todo bien pero me falta una cosa y es la tabla de amortizacion , quisiera saber como generar una tabla de amortizacion dependiendo si el tipo de pago es mensual,quincenal o dirario y mostrarlo en uin datagridview, muchas gracias de ante mano
    miércoles, 08 de agosto de 2018 15:17

Respuestas

  • hola

    Pero porque deberias persistir un calculo de amortizacion? si tienes el monto, fecha y tasas podrias calcular esto en runtime cada vez que lo necesites

    no es necesario que lo persistas en una tabla

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 08 de agosto de 2018 16:32

Todas las respuestas

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                /*
                 * calcula la anualidad vencida (se paga al final de cada período)
                 * capital: 1000
                 * períodos: 14
                 * tasa efectiva para el período: 1%
                 * fecha de inicio: hoy
                 * cantidad de días en el período: 1
                 */
                PlanDePagos plan = new PlanDePagos(1000, 14, 0.01, DateTime.Now, 1);
    
                dataGridView1.DataSource = plan.ToArray();
                dataGridView1.DefaultCellStyle.Format = "#0.#0";
                dataGridView1.DefaultCellStyle.FormatProvider = System.Globalization.CultureInfo.InvariantCulture; 
                dataGridView1.Columns[0].DefaultCellStyle.Format = "G";
                dataGridView1.Columns[5].DefaultCellStyle.Format = "d";
                dataGridView1.Columns[5].DefaultCellStyle.FormatProvider = System.Globalization.CultureInfo.CurrentCulture;
                dataGridView1.Columns[6].DefaultCellStyle.Format = "d";
                dataGridView1.Columns[6].DefaultCellStyle.FormatProvider = System.Globalization.CultureInfo.CurrentCulture;
            }
        }
    
        class PlanDePagos:IEnumerable<Pago>
        {
            public double ValorPresente { get; private set; }
            public int Plazo { get; private set; }
            public int Período { get; private set; }
            public double Tasa { get; private set; }
            public DateTime Fecha { get; set; }
            public double Renta { get; private set; }
            
            // calcula el valor de la anualidad vencida
            public PlanDePagos(double capital, int n, double i, DateTime desde, int días)
            {
                ValorPresente = capital;
                Plazo = n;
                Período = días;
                Tasa = i;
                Fecha = desde;
    
                double p = Math.Pow((1 + i), n);
                Renta = ValorPresente * (i * p / (p - 1));
            }
    
            // 
            public IEnumerator<Pago> GetEnumerator()
            {
                double monto = ValorPresente;
                DateTime desde = Fecha;
    
                for (int k = 0; k < Plazo; k++)
                {
                    double intereses = monto * Tasa;
                    double capital = Renta - intereses;
                    double saldo = monto - capital;
                    DateTime hasta = desde.AddDays(Período);
    
                    yield return new Pago(k + 1, monto, saldo, intereses, capital, desde, hasta, 0, Renta);
                    monto = saldo;
                    desde = hasta;
                }
                yield break;
            }
    
            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }
    
        class Pago
        {
            public int Nro { get; set; }
            public double Monto { get; set; }
            public double Saldo { get; set; }
            public double Intereses { get; set; }
            public double Capital { get; set; }
            public DateTime FechaInicio { get; set; }
            public DateTime FechaFin { get; set; }
            public double Mora { get; set; }
            public double Cuota{get;set;}
    
            public Pago(int nro, double mto, double sdo, double ines, double cap, DateTime ini, DateTime fin, double mra, double cta)
            {
                Nro = nro;
                Monto = mto;
                Saldo = sdo;
                Intereses = ines;
                Capital = cap;
                FechaInicio = ini;
                FechaFin = fin;
                Mora = mra;
                Cuota = cta;
            }
        }
    }


    miércoles, 08 de agosto de 2018 16:03
  • hola

    Pero porque deberias persistir un calculo de amortizacion? si tienes el monto, fecha y tasas podrias calcular esto en runtime cada vez que lo necesites

    no es necesario que lo persistas en una tabla

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 08 de agosto de 2018 16:32
  • hola miqui

    >>Tuttini no comprende la pregunta

    haber explicame porque no entiendo la pregunta ?

    Para tu informacion la entiendo perfectamente, no todo es necesario persistirse en tablas

    Piensa en la pagina de un banco, cuando usas la calculadora de prestamo para calcular las cuotas, piensas que ellos persisten cada consulta que se realiza? claro que no, bueno esto es lo mismo que recomende

    Solo plantee para que lo evalue, y Pablo por lo visto piensa igual que yo, si alquien mas piensa como tu entonces entonces marcara tu respuesta, el foro el libre de dar opiniones

    Solo exprese una recomendacion, quien planteo la pregunta simplemente puede ignorarla y marcar tu respuesta como valida si asi lo decide

    Tu responde como te parece, yo respondo como pienso, y deja que el resto fluya libre de marcar/proponer como sientan correcto

    >>que imponga un poco de orden y de respeto a los suyos.

    respeto, orden, abuso, de que hablas? estamos para ayudar como mejor nos salga, no es una evaluacion que debamos pasar para ser juzgados

    Si me equivoco soy humano igual que todos

    >>leyó la respuesta, estaba fuera de su comprensión

    mi respuesta era solo un comentario, no pretendia ser la respuesta definitiva, si algo no entendio seguro fue tu codigo

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 09 de agosto de 2018 20:18
  • hola

    >>Nada más. A Charlie no se le pasó por la cabeza "persistir" nada.

    el menciona: hasta ahora todo bien pero me falta una cosa y es la tabla de amortizacion

    una tabla entiendo se refiere a una db

    >>no le dices cómo hacer los cálculos. Vergüenza.

    pero no era mi intencion dar una respuesta, sino un consejo

    >>Podrías honestamente decir que esta respuesta tuya ayuda a alguien

    no claro que no, porque aun no di ninguna respuesta a esta pregunta, entiendo que el tema no esta del todo claro

    planteaba primero dejar claro que el calculo era en runtime sin tabla en la db

    >>No sentís un poco de vergüenza de que esté marcada

    ok entiendo, la verdad no conozco a Pablo, pero si es verdad que esta proponiendo posibles respuestas que no lo son

    El tema es que este tipo de foro no lo tiene, pero en stackoverflow lo que yo puse seria un comentario, aqui no esta esa posibilidad, por eso es parte de una respuesta

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    viernes, 10 de agosto de 2018 16:57