Ejemplo n.º 1
0
        private static void TestLoanRespaymentCalc()
        {
            decimal payment1 = BizLogic.LoanCalcs.CalculatePayment(9500.00M, 7.5M, 52);

            var lrs = new BizBase.LoanRepaymentSchedule();

            var loanAmount = 50000;

            int     numberOfPayments = 52;
            int     installmentCount = 0;
            decimal payment          = Math.Round(BizLogic.LoanCalcs.CalculatePayment(loanAmount, 19M, numberOfPayments), 2);

            var totalToPay    = Math.Round((payment * numberOfPayments), 2);
            var totalInterest = Math.Round(totalToPay - loanAmount, 2);

            var     interestInstallment = Math.Round(totalInterest / numberOfPayments, 2);
            decimal loanInstallment     = Math.Round((decimal)loanAmount / (decimal)numberOfPayments, 2);

            decimal principal = loanAmount;

            var interestPaymentAdjustment  = totalInterest - (interestInstallment * numberOfPayments);
            var prinicpalPaymentAdjustment = loanAmount - (loanInstallment * numberOfPayments);

            for (int i = 1; i <= 52; i++)
            {
                installmentCount++;

                if (i == 1)
                {
                    Console.WriteLine("installmentNumber " + i + "amountDue " + totalToPay + "principal " + principal + "interest " + (interestInstallment + interestPaymentAdjustment));
                }
                else
                {
                    Console.WriteLine("installmentNumber " + i + "amountDue " + totalToPay + "principal " + principal + "interest " + interestInstallment);
                }

                totalToPay -= payment;
                principal  -= loanInstallment;
                //totalInterest -= interestInstallment;

                lrs.installments.Add(new BizBase.Installment
                {
                    installmentNumber = i,
                    amountDue         = totalToPay
                    ,
                    interest  = interestInstallment,
                    principal = principal
                });
            }

            //    var json = new JavaScriptSerializer().Serialize(lrs.installments);

            //foreach (var item in lrs.installments)
            //{
            //    Console.WriteLine(item.installmentNumber + " | " + item.amountDue + "|" + "|" + item.numberOfPayments);

            //    var json = new JavaScriptSerializer().Serialize(lrs.installments);
            //}
            Console.ReadLine();
        }
Ejemplo n.º 2
0
        public static LoanRepaymentSchedule GetRepaymentSchedule(decimal loanAmount, decimal apr, int numberOfPayments)
        {
            var lrs = new LoanRepaymentSchedule();

            //get periodical payment amount
            decimal payment = Math.Round(Loans.LoanCalcs.CalculatePayment(loanAmount, apr, numberOfPayments), 2);

            ///* Do adjustments to cater for rounding 'errors'
            //    Typically the first payment on any loan/DD schedule is slightly different to future payments
            // */
            var loanAdjustments = LoanAdjustment.GetLoanAdjustment(loanAmount, numberOfPayments, payment);


            decimal principalStillToPay = loanAdjustments.loanInstallment * numberOfPayments;

            for (int i = 1; i <= numberOfPayments; i++)
            {
                if (i == 1)
                {
                    loanAdjustments.interestInstallment -= loanAdjustments.interestAdjustment;
                    principalStillToPay += loanAdjustments.loanAdjustment;
                }
                lrs.installments.Add(new Installment
                {
                    installmentNumber = i,
                    amountDue         = loanAdjustments.totalToPay,
                    principal         = principalStillToPay,
                    interest          = loanAdjustments.interestInstallment
                });

                loanAdjustments.totalToPay -= payment;
                principalStillToPay        -= loanAdjustments.loanInstallment;
            }

            return(lrs);
        }