public static CarLiabilityListViewModel GetCarLiabilityByUser(string username) { Entities entities = new Entities(); CarLiabilityListViewModel result = new CarLiabilityListViewModel(); DateTime current = DateTime.Now; var liabilities = entities.Liabilities.Where(x => x.Username.Equals(username) && x.LiabilityType == (int)Constants.Constants.LIABILITY_TYPE.CAR && !x.DisabledDate.HasValue).OrderBy(x => x.Name); foreach (var liability in liabilities) { CarLiabilityViewModel viewModel = CreateViewModel(liability); result.Liabilities.Add(viewModel); } var lbts = result.Liabilities.Where(x => x.StartDate <= current && x.EndDate >= current); result.TotalOriginalValue = lbts.Sum(x => x.LiabilityValue); result.TotalLiabilityValue = lbts.Sum(x => x.Value.Value); result.TotalInterestPayment = lbts.Sum(x => x.MonthlyInterestPayment); result.TotalOriginalPayment = lbts.Sum(x => x.MonthlyOriginalPayment); result.TotalPayment = lbts.Sum(x => x.TotalMonthlyPayment); result.TotalRemainedValue = lbts.Sum(x => x.RemainedValue); result.TotalInterestRate = result.TotalLiabilityValue > 0 ? lbts.Sum(x => x.OriginalInterestPayment) / result.TotalLiabilityValue * 12 : 0; result.IsInitialized = UserQueries.IsCompleteInitialized(username); return(result); }
public static CarLiabilityViewModel CreateViewModel(Liabilities liability) { DateTime current = DateTime.Now; CarLiabilityViewModel liabilityViewModel = new CarLiabilityViewModel(); liabilityViewModel.Id = liability.Id; liabilityViewModel.Source = liability.Name; liabilityViewModel.LiabilityValue = liability.OriginalValue.Value; liabilityViewModel.Value = liability.Value; liabilityViewModel.InterestType = Helper.GetInterestType(liability.InterestType.Value); liabilityViewModel.InterestRatePerX = Helper.GetInterestTypePerX(liability.InterestRatePerX); liabilityViewModel.InterestRate = liability.InterestRate / 100; liabilityViewModel.StartDate = liability.StartDate.Value; liabilityViewModel.EndDate = liability.EndDate.Value; liabilityViewModel.Note = liability.Note; liabilityViewModel.PaymentPeriod = Helper.CalculateTimePeriod(liabilityViewModel.StartDate.Value, liabilityViewModel.EndDate.Value); if (liabilityViewModel.StartDate <= current && current <= liabilityViewModel.EndDate) { int currentPeriod = Helper.CalculateTimePeriod(liabilityViewModel.StartDate.Value, DateTime.Now); double interestRate = liability.InterestRatePerX == (int)Constants.Constants.INTEREST_RATE_PER.MONTH ? liability.InterestRate / 100 : liability.InterestRate / 1200; liabilityViewModel.OriginalInterestPayment = liabilityViewModel.Value.Value * interestRate; //Fixed interest type if (liability.InterestType == (int)Constants.Constants.INTEREST_TYPE.FIXED) { liabilityViewModel.MonthlyOriginalPayment = liabilityViewModel.Value.Value / liabilityViewModel.PaymentPeriod; liabilityViewModel.MonthlyInterestPayment = liabilityViewModel.Value.Value * interestRate; liabilityViewModel.TotalMonthlyPayment = liabilityViewModel.MonthlyOriginalPayment + liabilityViewModel.MonthlyInterestPayment; liabilityViewModel.TotalPayment = RealEstateLiabilityQueries.Helper.CalculateAnnualPayment(liability); liabilityViewModel.RemainedValue = liabilityViewModel.Value.Value - liabilityViewModel.MonthlyOriginalPayment * (currentPeriod + 1); liabilityViewModel.Status = "Đang nợ"; liabilityViewModel.StatusCode = "label-success"; } //Reduced interest type else { liabilityViewModel.MonthlyOriginalPayment = liabilityViewModel.Value.Value / liabilityViewModel.PaymentPeriod; liabilityViewModel.RemainedValue = liabilityViewModel.Value.Value - liabilityViewModel.MonthlyOriginalPayment * (currentPeriod + 1); liabilityViewModel.MonthlyInterestPayment = (liabilityViewModel.Value.Value - liabilityViewModel.MonthlyOriginalPayment * currentPeriod) * interestRate; liabilityViewModel.TotalMonthlyPayment = liabilityViewModel.MonthlyOriginalPayment + liabilityViewModel.MonthlyInterestPayment; liabilityViewModel.TotalPayment = RealEstateLiabilityQueries.Helper.CalculateAnnualPayment(liability); liabilityViewModel.Status = "Đang nợ"; liabilityViewModel.StatusCode = "label-success"; } } else { liabilityViewModel.MonthlyOriginalPayment = 0; liabilityViewModel.MonthlyInterestPayment = 0; liabilityViewModel.TotalMonthlyPayment = 0; liabilityViewModel.TotalPayment = 0; liabilityViewModel.RemainedValue = 0; if (liabilityViewModel.EndDate < current) { liabilityViewModel.StatusCode = "label-warning"; liabilityViewModel.Status = "Đã trả hết nợ"; } else { liabilityViewModel.StatusCode = "label-danger"; liabilityViewModel.Status = "Chưa tới kì hạn"; } } return(liabilityViewModel); }