private void loanPaymentPlanner(LoanItem loanItem) { int monthsLeft = loanItem.MonthLeft; decimal interestRate = loanItem.Rate; decimal originalBalance = loanItem.Balance; decimal remainingBalance = originalBalance; decimal totalMonthlyPayment = getTotalMonthlyPayment(originalBalance, interestRate, monthsLeft); // equal amount is paid every month List <PaymentPlanItem> ppiList = new List <PaymentPlanItem>(); //loops through all months given to repay loanItem and creates a full repayment plan. for (int month = 0; month < monthsLeft; month++) { decimal interestPayment = getInterestPayment(remainingBalance, interestRate); decimal principalPayment = getPrincipalPayment(totalMonthlyPayment, interestPayment); //above this line is previous remainingBalance remainingBalance = getRemainingBalance(remainingBalance, principalPayment); PaymentPlanItem ppi = new PaymentPlanItem(loanItem.Id, month + 1, interestPayment, principalPayment, remainingBalance); ppiList.Add(ppi); } _context.PaymentPlanItems.AddRange(ppiList); _context.SaveChanges(); }
public static CalculatePaymentPlanReturnValues CalculatePaymentPlan(CalculatePaymentPlanParameters parameters) { var totalTaxRatio = TotalTaxRatio.Get(parameters.ProductType); var effectiveLoanAmount = EffectiveLoanAmount.Get(parameters.BankCommissionCollectionType, parameters.LoanAmount, parameters.TotalFee); var monthlyInstallment = MonthlyInstallment.Get(new CalculateMonthlyInstallmentParameters { InterestRateAsPercentage = parameters.InterestRateAsPercentage, LoanAmount = parameters.LoanAmount, MaturityInMonths = parameters.MaturityInMonths, ProductType = parameters.ProductType }); var returnValues = new CalculatePaymentPlanReturnValues { PaymentPlan = new List <PaymentPlanItem>(), TotalInstallment = 0, TotalTax = 0, MonthlyInstallment = monthlyInstallment.MonthlyInstallment }; var remainingLoanAmount = effectiveLoanAmount; for (var i = 0; i < parameters.MaturityInMonths; i++) { var paymentPlanItem = new PaymentPlanItem { Period = i + 1, Installment = returnValues.MonthlyInstallment, Interest = remainingLoanAmount * parameters.InterestRateAsPercentage / 100 }; paymentPlanItem.Tax = paymentPlanItem.Interest * totalTaxRatio; paymentPlanItem.Principal = paymentPlanItem.Installment - paymentPlanItem.Interest - paymentPlanItem.Tax; remainingLoanAmount -= paymentPlanItem.Principal; paymentPlanItem.RemainingLoanAmount = remainingLoanAmount; returnValues.PaymentPlan.Add(paymentPlanItem); returnValues.TotalInterest += paymentPlanItem.Interest; returnValues.TotalTax += paymentPlanItem.Tax; } returnValues.TotalInstallment = returnValues.MonthlyInstallment * parameters.MaturityInMonths; returnValues.TotalPayback = TotalPayback.Get(parameters.BankCommissionCollectionType, returnValues.MonthlyInstallment, parameters.MaturityInMonths, parameters.TotalFee); return(returnValues); }
public void TestContractUpload() { ContractUploadBuinessService uploadContract = new ContractUploadBuinessService(); List <Contract> list = new List <Contract>(); Contract c = new Contract(); c.Amount = 100; c.Comment = "UR1"; //c.CompletionDate = DateTime.Now; c.Currency = "USD"; c.CustomerDetails = "Новое ООО Денис"; c.CustomerId = 0; c.RateCBRPercents = null; c.Rate = 1; c.Date = DateTime.Now; c.DateFrom = DateTime.Now.AddDays(-10); c.DateTo = DateTime.Now.AddDays(10); c.ExecutorDetails = "ExecutorDetails"; c.ExecutorId = 0; c.Id = "24"; c.Manager = "test"; c.Number = 212042011; c.PaymentTerms = "Условия оплаты"; c.Prefix = "GH"; Contract sc1 = new Contract(); sc1.Amount = 5; sc1.Comment = "UR1_sub"; sc1.CompletionDate = DateTime.Now; sc1.Currency = "USD"; sc1.CustomerDetails = "Новое ООО Денис"; sc1.CustomerId = 0; sc1.Date = DateTime.Now; sc1.DateFrom = DateTime.Now.AddDays(-10); sc1.DateTo = DateTime.Now.AddDays(10); sc1.ExecutorDetails = "ExecutorDetails"; sc1.ExecutorId = 0; sc1.Id = "25"; sc1.Manager = "test"; sc1.Number = 212042011; sc1.PaymentTerms = "Условия оплаты"; sc1.Prefix = "GH"; c.Subcontracts = new List <Contract>() { sc1 }; var pi1 = new PaymentPlanItem() { Amount = 10, Comment = "PI1-New", Date = DateTime.Now, DateFrom = DateTime.Now, DateTo = DateTime.Now, FromEmployee = 0, ToEmployee = 0, Id = 10050217, Number = 100, PaymentTerms = "PT1-000", Prefix = "P1", FactPay = true, DogId = "02042012" }; var pi2 = new PaymentPlanItem() { Amount = 12, Comment = "PI2", Date = DateTime.Now, DateFrom = DateTime.Now, DateTo = DateTime.Now, FromEmployee = 0, ToEmployee = 0, Id = 1005022, Number = 102, PaymentTerms = "PT2-000", Prefix = "P2", FactPay = true, DogId = "25" }; var spi1 = new PaymentPlanItem() { Amount = 1000, Comment = "spi1", Date = DateTime.Now, DateFrom = DateTime.Now, DateTo = DateTime.Now, FromEmployee = 0, ToEmployee = 0, Id = 123, Number = 100, PaymentTerms = "PT1-000", Prefix = "P1", FactPay = true, DogId = "25" }; var spi2 = new PaymentPlanItem() { Amount = 1000, Comment = "spi2", Date = DateTime.Now, DateFrom = DateTime.Now, DateTo = DateTime.Now, FromEmployee = 0, ToEmployee = 0, Id = 124, Number = 102, PaymentTerms = "PT2-000", Prefix = "P2", FactPay = false, DogId = "25" }; c.PaymentPlan = new List <PaymentPlanItem>() { pi1, pi2, spi1, spi2 }; //sc1.PaymentPlan = new List<PaymentPlanItem>() { spi1, spi2 }; list.Add(c); var result = uploadContract.UploadContract(list); Assert.IsNull(result); }