Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }