public void GetRepaymentSchedule_ReturnsCorrectValueNumber()
        {
            LoanCalculationService service = new LoanCalculationService();
            RepaymentSchedule      result  = service.GetRepaymentSchedule(50000m, 19);

            Assert.AreEqual(result.Installments.Count, 52);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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"));
        }