public LoanApplicationResult ProcessLoan(LoanApplication application) { // Check loan qualification rules List <ILoanQualificationRule> failingRules = _loanApprovalRules.Where (rule => rule.CheckLoanApprovalRule(application) == false).ToList(); if (failingRules.Count > 0) { LoanApplicationResult result = LoanApplicationResult.CreateDeniedResult(application, failingRules); return(result); } // Determine interest rate double interestRate; double creditScore = application.CreditScore; LoanRate rate = _loanRates.FirstOrDefault(r => creditScore >= r.LowerCreditScore && creditScore <= r.UpperCreditScore); interestRate = rate.InterestRate; if (application.ApplicantType.ToLower() == "premiere") { interestRate = rate.InterestRate - .01; } // Determine monthly payment double monthlyPayment = CalculateLoanPayment(loanAmount: application.LoanAmount, termYears: application.Term.Years, interestRate: interestRate); return(LoanApplicationResult.CreateApprovedResult(application, interestRate, monthlyPayment)); }
public LoanApplicationResult ProcessLoan(LoanApplication application) { // Check for loan qualification var failingRule = _loanApprovalRules.FirstOrDefault(rule => rule.CheckLoanApprovalRule(application) == false); if (failingRule != null) { var result = LoanApplicationResult.CreateDeniedResult(application, failingRule.RuleName); return(result); } // Applicant qualifies for the loan, so figure out the interest rate we can offer and the monthly payment double interestRate = DetermineInterestRate(application); double monthlyPayment = CalculateLoanPayment(application.LoanAmount, application.Term.Years, interestRate); return(LoanApplicationResult.CreateApprovedResult(application, interestRate, monthlyPayment)); }