public void Loan_Construct_Pass()
        {
            // arrange

            // act
            ILoanResult loan = new LoanResult(id, fakeLender, fakeBorrower, message, pickupTime, returnTime, fakeAddress, books, status);

            // assert
            Assert.NotNull(loan);
        }
Example #2
0
        public ActionResult RequestLoan(Loans_RequestLoan_VM Model)
        {
            if (!UserAccount.IsLoggedIn(this))
            {
                return(RedirectToAction("SendToLogin", "Account", new { Something = "" }));
            }

            if (!ModelState.IsValid)
            {
                return(View(Model));
            }

            int UserID = (UserAccount.ActiveUser != null) ? UserAccount.ActiveUser.ID : 1027 /*For Debug*/;

            var Loan = new  LoanRequest().New();

            Loan.UserID         = UserID;
            Loan.SocialSecurity = Model.SocialSecurity;
            Loan.Income         = Model.Income;
            Loan.Employer       = Model.Employer;
            Loan.JobTitle       = Model.JobTitle;
            Loan.EmploymentType = Model.EmploymentType;
            Loan.Amount         = Model.Amount;
            Loan.Terms          = Model.Terms;
            Loan.DownPayment    = Model.DownPayment;
            Loan.LoanType       = Model.LoanType;
            Loan.Status         = "Pending";

            if (!Loan.Save())
            {
                TempData["AlertTag"]     = "danger";
                TempData["AlertLabel"]   = "Error: ";
                TempData["AlertMessage"] = "Loan request could not be saved.";

                return(View(Model));
            }

            var Score = CreditScore.GetByUserID(UserID).TransUnion;

            //JDR: Call Api to calclate Result
            // ... Code ...

            var LoanProperties = new
            {
                Terms       = Model.Terms,
                Amount      = Model.Amount,
                Income      = Model.Income,
                DownPayment = Model.DownPayment,
                CreditScore = Score,
                APR         = LoanResult.CalculateAPR((int)Score, (int)Model.Terms),
            };

            var Result = new LoanResult().New();

            Result.RequestID      = Loan.ID;
            Result.Amount         = Model.Amount;
            Result.Term           = Model.Terms;
            Result.ResolutionDate = DateTime.Now;
            Result.CreditScore    = LoanProperties.CreditScore;
            Result.APR            = LoanProperties.APR;
            Result.MonthlyPayment = LoanResult.CalculateMonthlyPayment(LoanProperties);
            Result.Decision       = "Pending";
            Result.Comments       = "Loan has been recived and is pending review.";

            double IncomeYrTotal  = (double)Model.Income;
            double DebtMonthTotal = (double)Result.MonthlyPayment;

            var UserLoans = LoanRequest.GetLoanRequestsByUserID(UserID);

            //JDR: Factor in other loans to debt equation
            foreach (LoanRequest LoanElement in UserLoans)
            {
                //if (!LoanElement.Active()) continue;
                if (LoanElement.Status.Trim() != "Approved")
                {
                    continue;
                }

                LoanResult ResultElement = LoanElement.GetLoanResults();

                if (ResultElement == null)
                {
                    continue;
                }

                DebtMonthTotal += (double)ResultElement.MonthlyPayment;
            }

            var DebtToIncome = LoanResult.CalculateDebtToIncomePercent(IncomeYrTotal, DebtMonthTotal);

            //JDR: Save Loan approved/denied result
            if (LoanResult.IsLoanApproved(DebtToIncome, Model.LoanType))
            {
                Loan.Status     = "Approved";
                Result.Decision = "Approved";
                Result.Comments = "Loan has been approved for a total of " + Result.Amount.ToString("$###,###.##") + ".";
            }
            else
            {
                Loan.Status     = "Denied";
                Result.Decision = "Denied";
                Result.Comments = "Loan has beed denied do to debt to income ratio.";

                Result.APR            = 0.0;
                Result.MonthlyPayment = 0.0;
            }

            Loan.Save();

            if (!Result.Save())
            {
                TempData["AlertTag"]     = "danger";
                TempData["AlertLabel"]   = "Error: ";
                TempData["AlertMessage"] = "Loan request cound not save/compute result of request.";

                return(RedirectToAction("Dashboard", "Account"));
            }

            /*//DEBUG
             * TempData["AlertMessage"] = "";
             * TempData["AlertMessage"] += DEBUG.ObjectToString(Loan)           + "<hr>";
             * TempData["AlertMessage"] += DEBUG.ObjectToString(Result)         + "<hr>";
             * TempData["AlertMessage"] += DEBUG.ObjectToString(LoanProperties) + "<hr>";
             * TempData["AlertMessage"] += "Result.MonthlyPayment   = " + Result.MonthlyPayment + "<hr>";
             * TempData["AlertMessage"] += "IncomeYrTotal  = "+ IncomeYrTotal  + "<hr>";
             * TempData["AlertMessage"] += "DebtMonthTotal = " + DebtMonthTotal + "<hr>";
             * TempData["AlertMessage"] += "DebtToIncome   = " + DebtToIncome   + "<hr>";
             * return View();
             * //*/

            TempData["AlertTag"]     = "success";
            TempData["AlertLabel"]   = "Success!: ";
            TempData["AlertMessage"] = "Loan request has been submited.";


            return(RedirectToAction("Dashboard", "Account"));
        }