public OverviewDetails GetLoanPaymentOverwiew(LoanParameters loanParameters, LoanTerms loanTerms)
        {
            var loanAmount         = loanParameters.LoanAmount;
            var durationOfLoan     = loanParameters.DurationOfLoanInYears;
            var annualInterestRate = loanTerms.AnnualInterestRate;
            var paymentsPerYear    = loanTerms.PaymentsPerYear;
            var adminFeeRelative   = loanTerms.AdminFeeRelative;
            var maxAdminFee        = loanTerms.MaxAdminFee;

            var amountOfPayments       = durationOfLoan * paymentsPerYear;
            var interestRatePerPayment = annualInterestRate / paymentsPerYear;
            var monthlyPayment         = this.GetMonthlyPayment((double)loanAmount, amountOfPayments, (double)interestRatePerPayment);
            var totalAmmountPayed      = monthlyPayment * amountOfPayments;
            var amountPaidAsInterest   = totalAmmountPayed - loanAmount;
            var administrativeFee      = this.GetAdministrativeFee(loanAmount, adminFeeRelative, maxAdminFee);

            return(new OverviewDetails
            {
                LoanAmount = loanAmount,
                DurationOfLoanInYears = durationOfLoan,
                MonthlyPayment = Math.Round(monthlyPayment, 2),
                AmountPaidAsInterest = Math.Round(amountPaidAsInterest, 2),
                AdministrativeFee = Math.Round(administrativeFee, 2),
            });
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            ValidateArguments(args);

            var parameters = new LoanParameters
            {
                LoanAmount   = Decimal.Parse(args[0]),
                Term         = Int32.Parse(args[1]),
                InterestRate = Decimal.Parse(args[2]),
                PayDay       = Int32.Parse(args[3])
            };

            var calculator = new PaymentCalculator(parameters);
            var graph      = calculator.GetPaymentGraph();
            var i          = 1;

            Console.WriteLine("Įmokos Nr.\t | Data\t\t |  Likutis prieš įmoką\t | Kredito dalis\t | Palūkanos\t | Įmoka\t | Likutis po įmokos");
            foreach (var g in graph.PaymentEntries)
            {
                var str = $"{i}\t\t | {g.Date.ToString("yyyy-MM-dd")}\t | {g.RemainderBeforePayment:0.00}\t\t | {g.CreditPart:0.00}\t\t |" +
                          $" {g.InterestPart:0.00}\t | {g.Payment:0.00}\t | {g.RemainderAfterPayment:0.00}";

                Console.WriteLine(str);
                i++;
            }

            //PrintTotals(graph);
            var bv = new BVKKMNCalculator(parameters.Term, graph.PaymentEntries.FirstOrDefault().Payment, parameters.LoanAmount).Calculate() * 100;

            Console.WriteLine($"BVKKMN - {bv:0.00}");
        }
Exemplo n.º 3
0
        public void GetLoanPaymentOverwiew_ExpectedBehavior()
        {
            // Arrange
            var loanPaymentCalculatorInternal = new LoanPaymentCalculatorInternal();
            var loanParameters = new LoanParameters
            {
                LoanAmount            = 500000,
                DurationOfLoanInYears = 10,
            };

            var loanTerms = new LoanTerms
            {
                AnnualInterestRate = 0.05m,
                PaymentsPerYear    = 12,
                AdminFeeRelative   = 0.01m,
                MaxAdminFee        = 10000,
            };

            // Act
            var result = loanPaymentCalculatorInternal.GetLoanPaymentOverwiew(
                loanParameters,
                loanTerms);

            // Assert
            Assert.Equal(500000, result.LoanAmount);
            Assert.Equal(10, result.DurationOfLoanInYears);
            Assert.Equal(5303.28m, result.MonthlyPayment);
            Assert.Equal(136393.09m, result.AmountPaidAsInterest);
            Assert.Equal(5000m, result.AdministrativeFee);
        }
Exemplo n.º 4
0
        public PaymentCalculator(LoanParameters parameters)
        {
            _parameters          = parameters;
            _remainingLoanAmount = parameters.LoanAmount;
            _remaindingTerm      = parameters.Term;
            _interestRate        = parameters.InterestRate / 100;

            var now = DateTime.Now;

            _currentDate = new DateTime(now.Year, now.Month, parameters.PayDay);
        }
 public void CheckSavedParameters(LoanParameters parameters)
 {
     Assert.IsFalse(this.ApplicationNumber.GetAttribute("value").ToString().Trim() == string.Empty, "Application Number");
     Assert.AreEqual("Недовършена", this.ApplicationStatus.GetAttribute("value"), "Application Status");
     Assert.AreEqual(this.Pid.GetAttribute("value").ToString().Trim(), parameters.Pid.Trim(), "ЕГН");
     Assert.AreEqual(parameters.ProductType, this.ProductType.SelectedOption.Text, "Product type");
     Assert.AreEqual(parameters.LoanAmount, this.LoanAmount.SelectedOption.Text, "Loan amount");
     Assert.AreEqual(parameters.LoanRate, this.LoanRate.SelectedOption.Text, "Loan rate");
     Assert.AreEqual(parameters.MonthlyAmount, this.MonthlyAmount.GetAttribute("value").ToString(), "Monthly amount");
     Assert.AreEqual(parameters.PaymentDate, this.PaymentDate.SelectedOption.Text, "Payment date");
     Assert.AreEqual(parameters.LoanPurpose, this.LoanPurpose.SelectedOption.Text, "Loan purpose");
     Assert.AreEqual(parameters.RequestSource, this.RequestSource.SelectedOption.Text, "Request source");
 }
Exemplo n.º 6
0
        public PaymentOverview CalculatePaymentOverview(LoanParameters parameters, LoanTerms terms)
        {
            var totalNumberOfPayments = parameters.DurationInYears * terms.PaymentsInYear;

            var administrativeFee = _loanCalculations.CalculateAdministrativeFee(
                parameters.MoneyToLoan.Amount,
                terms.AdministrativeFeeRate,
                terms.AdministrativeFeeMaxCap
                );

            var singlePayment = _loanCalculations.CalculateSinglePayment(
                parameters.MoneyToLoan.Amount,
                terms.AnnualInterestRate,
                terms.PaymentsInYear, totalNumberOfPayments
                );

            var totalPayment = _loanCalculations.CalculateTotalPayment(
                singlePayment,
                totalNumberOfPayments
                );

            var totalInterest = _loanCalculations.CalculateTotalInterest(
                totalPayment,
                parameters.MoneyToLoan.Amount
                );

            var aop = _loanCalculations.CalculateAop(
                totalPayment,
                administrativeFee,
                parameters.MoneyToLoan.Amount,
                parameters.DurationInYears
                );

            return(new PaymentOverview(
                       new Money(singlePayment),
                       new Money(totalPayment),
                       new Money(totalInterest),
                       new Money(administrativeFee),
                       new Percent(aop),
                       parameters,
                       terms
                       ));
        }
Exemplo n.º 7
0
        public void FillLoanParameters(LoanParameters parameters)
        {
            Thread.Sleep(2500);
            if (parameters.Pid != "null")
            {
                this.Type(this.Pid, parameters.Pid);
            }
            else if (this.Pid.GetAttribute("value").ToString().Trim() == string.Empty)
            {
                this.AssertMissingPid();
            }

            Thread.Sleep(1000);
            this.ClicableSelectByText(this.ProductType, parameters.ProductType, Driver);
            this.ClicableSelectByText(this.LoanAmount, parameters.LoanAmount, Driver);
            if (parameters.LoanRate != "null")
            {
                this.ClicableSelectByText(this.LoanRate, parameters.LoanRate, Driver);
                Thread.Sleep(500);
                this.AssertMonthlyAmountExist();
            }

            if (parameters.PaymentDate != "null")
            {
                this.ClicableSelectByText(this.PaymentDate, parameters.PaymentDate, Driver);
            }

            if (parameters.LoanPurpose != "null")
            {
                this.ClicableSelectByText(this.LoanPurpose, parameters.LoanPurpose, Driver);
            }

            if (parameters.RequestSource != "null")
            {
                this.ClicableSelectByText(this.RequestSource, parameters.RequestSource, Driver);
            }
        }
Exemplo n.º 8
0
        public HousingLoan(LoanParameters loanParameters) : base(loanParameters)
        {

        }