예제 #1
0
        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));
        }