public static Loan LoadLoan(this Loan loan) { loan.Principal = loan.LoanAmount; loan.LastPaidDate = loan.FirstPaymentDate; loan.LoanHistory = loan.GetLoanHistory(); LoanHistory lastHistory = loan.LoanHistory.OrderBy(x => x.DatePaid).Reverse().FirstOrDefault(); if (lastHistory != null) { loan.LastPaidDate = lastHistory.DatePaid; loan.LastPaidAmount = lastHistory.Payment; loan.Principal = lastHistory.Principal; } if (loan.LoanHistory.Count() > 0) { loan.HistoryMinYear = loan.LoanHistory.Min(x => x.DatePaid.Year); loan.HistoryMaxYear = loan.LoanHistory.Max(x => x.DatePaid.Year); loan.HistoryNumberOfPayments = loan.LoanHistory.Count(); loan.HistoryPaymentTotal = loan.LoanHistory.Sum(x => x.Payment); loan.HistoryBaseTotal = loan.LoanHistory.Sum(x => x.BasicPayment); loan.HistoryAdditionalTotal = loan.LoanHistory.Sum(x => x.AddPayment); loan.HistoryEscrowTotal = loan.LoanHistory.Sum(x => x.Escrow); loan.HistoryInterestTotal = loan.LoanHistory.Sum(x => x.Interest); loan.HistoryPaymentAverage = loan.LoanHistory.Average(x => x.Payment); loan.HistoryBaseAverage = loan.LoanHistory.Average(x => x.BasicPayment); loan.HistoryAdditionalAverage = loan.LoanHistory.Average(x => x.AddPayment); loan.HistoryEscrowAverage = loan.LoanHistory.Average(x => x.Escrow); loan.HistoryInterestAverage = loan.LoanHistory.Average(x => x.Interest); loan.LastPayemnt = loan.LoanHistory.LastOrDefault(); } if (loan.IsActive) { loan.LoanOutlook = loan.GetLoanOutlook(); loan.PaymentsRemaining = loan.LoanOutlook.Count(); loan.OutlookMinYear = loan.LoanOutlook.Min(x => x.Date.Year); loan.OutlookMaxYear = loan.LoanOutlook.Max(x => x.Date.Year); loan.OutlookNumberOfPayments = loan.LoanOutlook.Count(); loan.OutlookPaymentTotal = loan.LoanOutlook.Sum(x => x.Payment); loan.OutlookBaseTotal = loan.LoanOutlook.Sum(x => x.BaseAmount); loan.OutlookAdditionalTotal = loan.LoanOutlook.Sum(x => x.AddAmount); loan.OutlookEscrowTotal = loan.LoanOutlook.Sum(x => x.EscrowAmount); loan.OutlookInterestTotal = loan.LoanOutlook.Sum(x => x.InterestAmount); loan.OutlookPaymentAverage = loan.LoanOutlook.Average(x => x.Payment); loan.OutlookBaseAverage = loan.LoanOutlook.Average(x => x.BaseAmount); loan.OutlookAdditionalAverage = loan.LoanOutlook.Average(x => x.AddAmount); loan.OutlookEscrowAverage = loan.LoanOutlook.Average(x => x.EscrowAmount); loan.OutlookInterestAverage = loan.LoanOutlook.Average(x => x.InterestAmount); loan.LifeNumberOfPayments = loan.HistoryNumberOfPayments + loan.OutlookNumberOfPayments; loan.LifePaymentTotal = loan.HistoryPaymentTotal + loan.OutlookPaymentTotal; loan.LifeBaseTotal = loan.HistoryBaseTotal + loan.OutlookBaseTotal; loan.LifeAdditionalTotal = loan.HistoryAdditionalTotal + loan.OutlookAdditionalTotal; loan.LifeEscrowTotal = loan.HistoryEscrowTotal + loan.OutlookEscrowTotal; loan.LifeInterestTotal = loan.HistoryInterestTotal + loan.OutlookInterestTotal; loan.LifePaymentAverage = loan.LifePaymentTotal / loan.LifeNumberOfPayments; loan.LifeBaseAverage = loan.LifeBaseTotal / loan.LifeNumberOfPayments; loan.LifeAdditionalAverage = loan.LifeAdditionalTotal / loan.LifeNumberOfPayments; loan.LifeEscrowAverage = loan.LifeEscrowTotal / loan.LifeNumberOfPayments; loan.LifeInterestAverage = loan.LifeInterestTotal / loan.LifeNumberOfPayments; loan.NextPayment = new LoanHistory(loan); } return(loan); }
public static Loan Populate(this Loan loan, ApplicationUser user) { loan.NotOwner = loan.User.Id != user.Id; loan.DueDate = loan.FirstPaymentDate; loan.Principal = loan.LoanAmount; loan.OwnerPays = loan.MonthlyPayment - ((loan.SharedWith == null) ? 0 : loan.SharedWith.Sum(x => x.Amount)); if (loan.NotOwner) { loan.YouPay = loan.SharedWith.Where(x => x.SharedWithUser.Id == user.Id).FirstOrDefault().Amount; } else { loan.YouPay = loan.OwnerPays; } DateTime lastPaymentDate = loan.FirstPaymentDate.AddMonths(-1); if (loan.LoanPayments != null && loan.LoanPayments.Any()) { LoanPayment lastPayment = loan.LoanPayments.OrderBy(x => x.DatePaid).LastOrDefault(); if (lastPayment != null) { lastPaymentDate = lastPayment.DatePaid; loan.LastPaymentDate = lastPayment.DatePaid; loan.LastPaymentAmount = lastPayment.Payment; loan.Principal = lastPayment.Principal; loan.DueDate = loan.GetNextDueDate(loan.LastPaymentDate, user); } if (loan.NotOwner) { loan.NotOwnerLoanPayments = loan.LoanPayments.Where(x => x.SharedWith.Where(y => y.SharedWithUser.Id == user.Id).Any()).OrderBy(x => x.DatePaid).ToList(); if (loan.NotOwnerLoanPayments != null && loan.NotOwnerLoanPayments.Any()) { lastPayment = loan.NotOwnerLoanPayments.LastOrDefault(); if (lastPayment != null) { loan.LastPaymentDate = lastPayment.DatePaid; loan.LastPaymentAmount = lastPayment.Payment; } loan.PaymentMinYear = loan.NotOwnerLoanPayments.Min(x => x.DatePaid.Year); loan.PaymentMaxYear = loan.NotOwnerLoanPayments.Max(x => x.DatePaid.Year); } } else { loan.PaymentMinYear = loan.LoanPayments.Min(x => x.DatePaid.Year); loan.PaymentMaxYear = loan.LoanPayments.Max(x => x.DatePaid.Year); } } loan.LoanOutlook = loan.GetLoanOutlook(lastPaymentDate); if (loan.LoanOutlook.Any()) { loan.PaymentsRemaining = loan.LoanOutlook.Count(); loan.OutlookMinYear = loan.LoanOutlook.Min(x => x.Date.Year); loan.OutlookMaxYear = loan.LoanOutlook.Max(x => x.Date.Year); loan.NextPayment = loan.LoanOutlook.FirstOrDefault(); } double dueInDays = (loan.DueDate - new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day)).TotalDays; bool isPastDue = dueInDays < 0; loan.DueIn = GetDueIn(loan.IsActive, isPastDue, dueInDays); loan.Classes = GetClasses(loan.IsActive, isPastDue, dueInDays); return(loan); }