public void GetRepaymentSchedule_ReturnsCorrectValueNumber() { LoanCalculationService service = new LoanCalculationService(); RepaymentSchedule result = service.GetRepaymentSchedule(50000m, 19); Assert.AreEqual(result.Installments.Count, 52); }
public RepaymentSchedule GetRepaymentSchedule(LoanInformation loanInformation) { var repaymentSchedule = new RepaymentSchedule() { Installments = new List <Installment>() }; var payment = PaymentHelpers.GetPayment(loanInformation.Amount, loanInformation.NumberOfPayments, loanInformation.APR); var amountDue = loanInformation.Amount; for (var i = 0; i < loanInformation.NumberOfPayments; i++) { var installment = new Installment { InstallmentNumber = i + 1 }; installment.AmountDue = amountDue; installment.Interest = PaymentHelpers.GetInterest(amountDue, loanInformation.NumberOfPayments, loanInformation.APR); installment.Principal = payment - installment.Interest; amountDue -= installment.Principal; repaymentSchedule.Installments.Add(installment); } return(repaymentSchedule); }
public RepaymentSchedule GetRepaymentSchedule(decimal amount, int apr) { ValidateAmount(amount); ValidateApr(apr); var currentAmount = amount; var interestRate = 0.01m * apr / totalPayments; var installmentAmount = GetInstallmentAmount(amount, totalPayments, apr); var repaymentSchedule = new RepaymentSchedule(); for (var installmentNumber = 1; installmentNumber <= totalPayments; installmentNumber++) { var currentInterest = currentAmount * interestRate; var currentPrincipal = installmentAmount - currentInterest; var installment = new Installment( installmentNumber, Math.Round(currentAmount, 2, MidpointRounding.AwayFromZero), Math.Round(currentPrincipal, 0, MidpointRounding.AwayFromZero), Math.Round(currentInterest, 0, MidpointRounding.AwayFromZero)); repaymentSchedule.Installments.Add(installment); currentAmount -= currentPrincipal; } return(repaymentSchedule); }
public void GetRepaymentSchedule_ReturnsNotNull() { RepaymentScheduleController controller = new RepaymentScheduleController(); RepaymentSchedule result = controller.GetRepaymentSchedule(50000m, 19); Assert.IsNotNull(result); }
public void GetRepaymentSchedule_ReturnsCorrectValues( int installmentNumber, double amountDue, double principal, double interest) { LoanCalculationService service = new LoanCalculationService(); RepaymentSchedule result = service.GetRepaymentSchedule(50000m, 19); var installments = new List <Installment>(); installments.AddRange(result.Installments); Assert.IsTrue( InstallmentHasValues( installments[installmentNumber - 1], installmentNumber, (decimal)amountDue, (decimal)principal, (decimal)interest)); }
/// <summary> /// deduct salary of employee monthly /// </summary> /// <param name="date"></param> /// <param name="lid"></param> /// <param name="inid"></param> /// <param name="eid"></param> /// <param name="id"></param> /// <returns></returns> public ActionResult SalaryDeduct(DateTime date, int lid, int inid, int eid, int id) { foreach (RepaymentSchedule s in db.RepaymentSchedules) { if (s.Status == 6 && s.EmployeeId == eid && s.LoanId == lid && s.InstallementId == inid && s.Id == id) { TempData["msg"] = "<script>alert('Salary Deduction for this particular Employee loan is already done.');</script>"; return(RedirectToAction("EmployeeLoan", "Admin")); } } SalaryDeduction obj = new SalaryDeduction(); int tempamount = 0; string cmd0 = "SELECT * FROM RepaymentSchedule"; SqlDataReader reader0 = Database_Connection.get_instance().Getdata(cmd0); while (reader0.Read()) { if (reader0.GetInt32(0) == eid && reader0.GetInt32(1) == inid) { tempamount = reader0.GetInt32(2); break; } } obj.Month = DateTimeFormatInfo.CurrentInfo.GetAbbreviatedMonthName(date.Month); //if (date.Month == 01) // obj.Month = "January"; //else if (date.Month == 02) // obj.Month = "Feburary"; //else var person = db.Employees.Where(y => y.Id == eid).First(); int temp = person.Salary; obj.SalaryAfterDeduction = person.Salary - tempamount; obj.LoanId = lid; obj.InstallementId = inid; obj.EmployeeId = eid; obj.Date = DateTime.Now; SqlConnection cn = new SqlConnection(@"Data Source=HAIER-PC;Initial Catalog=DB64;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework"); cn.Open(); SqlCommand cmd = new SqlCommand("INSERT INTO SalaryDeduction(EmployeeId,InstallementId,LoanId,SalaryAfterDeduction,Date,Month) VALUES (@eid,@inid,@lid,@amount,@date,@month)", cn); cmd.Parameters.AddWithValue("@eid", obj.EmployeeId); cmd.Parameters.AddWithValue("@inid", obj.InstallementId); cmd.Parameters.AddWithValue("@lid", obj.LoanId); cmd.Parameters.AddWithValue("@amount", obj.SalaryAfterDeduction); cmd.Parameters.AddWithValue("@date", DateTime.Now.Date); cmd.Parameters.AddWithValue("@month", obj.Month); cmd.ExecuteNonQuery(); cmd.Dispose(); cn.Close(); //now updating status in repayment schedule table RepaymentSchedule model = new RepaymentSchedule(); string cmd1 = "SELECT * FROM Lookup"; SqlDataReader reader = Database_Connection.get_instance().Getdata(cmd1); while (reader.Read()) { if (reader.GetString(1) == "Paid") { model.Status = reader.GetInt32(0); } } string cmd3 = string.Format("UPDATE RepaymentSchedule SET Status = '{0}' WHERE EmployeeId= '{1}' AND LoanId= '{2}' AND InstallementId= '{3}' AND Id= '{4}'", model.Status, eid, lid, inid, id); int rows = Database_Connection.get_instance().Executequery(cmd3); return(RedirectToAction("RepaymentSchedule", "Admin")); }
/// <summary> /// Add repayment schedule for approved loan's in database /// </summary> /// <param name="id"></param> /// <param name="eid"></param> /// <param name="insid"></param> /// <param name="lid"></param> /// <returns></returns> public ActionResult AddRepaymentSchedule(int id, int eid, int insid, int lid) { int instId; int instPlan; foreach (RepaymentSchedule d in db.RepaymentSchedules) { if (d.EmployeeId == eid && d.InstallementId == insid) { TempData["msg"] = "<script>alert('Repayment Schedule for this particular Employee loan is already generated.');</script>"; return(RedirectToAction("EmployeeLoan", "Admin")); } } foreach (EmployeeLoan u in db.EmployeeLoans) { if (u.Id == id) { instId = u.InstallementId; foreach (Installement i in db.Installements) { if (i.Id == instId) { int j = 0; instPlan = i.InstallementPlan; //add installments list with number of installment's selected and monthly date while (instPlan != 0) { RepaymentSchedule obj = new RepaymentSchedule(); obj.EmployeeId = u.EmployeeId; obj.InstallementId = i.Id; obj.LoanId = i.LoanId; obj.Amount = i.Amount; obj.Date = DateTime.Now.Date.AddMonths(j); string cmdd = "SELECT * FROM Lookup"; SqlDataReader readerr = Database_Connection.get_instance().Getdata(cmdd); while (readerr.Read()) { if (readerr.GetString(1) == "Due") { obj.Status = readerr.GetInt32(0); } } //Insert in repaymentSchedule table in database SqlConnection cn = new SqlConnection(@"Data Source=HAIER-PC;Initial Catalog=DB64;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework"); cn.Open(); SqlCommand cmd = new SqlCommand("INSERT INTO RepaymentSchedule(EmployeeId,InstallementId,LoanId,Amount,Date,Status) VALUES (@eid,@iid,@lid,@amount,@date,@status)", cn); cmd.Parameters.AddWithValue("@eid", obj.EmployeeId); cmd.Parameters.AddWithValue("@iid", obj.InstallementId); cmd.Parameters.AddWithValue("@lid", obj.LoanId); cmd.Parameters.AddWithValue("@amount", obj.Amount); cmd.Parameters.AddWithValue("@date", obj.Date); cmd.Parameters.AddWithValue("@status", obj.Status); cmd.ExecuteNonQuery(); cmd.Dispose(); cn.Close(); j++; instPlan--; } } } } } return(RedirectToAction("RepaymentSchedule", "Admin")); }