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), }); }
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}"); }
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); }
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"); }
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 )); }
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); } }
public HousingLoan(LoanParameters loanParameters) : base(loanParameters) { }