public ActionResult CancelLoanRepayments(sdtoViewLoanRepayments Repayments)
        {
            List<sdtoLoanRepayment> RepaymentCancelList = new List<sdtoLoanRepayment>();
            string[] selectionRepayments = Repayments.InputSelection.Trim(" []".ToCharArray()).Split(',');
            if (selectionRepayments != null && selectionRepayments.Length > 0)
            {
                for (int iLoanRepaymentId = 0; iLoanRepaymentId < selectionRepayments.Length; iLoanRepaymentId++)
                {
                    if (selectionRepayments[iLoanRepaymentId].Equals("true", StringComparison.InvariantCultureIgnoreCase))
                    {
                        var repayment = db.sdtoLoanRepayments.Find(iLoanRepaymentId);
                        RepaymentCancelList.Add(repayment);
                    }
                }

                bfTransaction objTransaction = new bfTransaction(db);
                foreach (var repayment in RepaymentCancelList)
                {
                    repayment.Status = RepaymentStatus.Cancelled;
                    db.Entry(repayment).State = EntityState.Modified;

                    objTransaction.CancelPostedLoanRepayment(repayment);
                }
                db.SaveChanges();

                SetDisplayMessage("Loan repayments are cancelled successfully");

                return RedirectToAction("Index", "LoanRepayments", new { LoanId = Repayments.LoanId });
            }
            return View(Repayments);
        }
        public ActionResult Edit(//[Bind(Include = "LoanRepaymentId,LoanId,RepaymentCode,PrincipalAmount,InterestAmount,InterestRate,RepaymentAmount,PendingPrincipalAmount,Status,PaymentMode,ChequeDetails,Notes,CreatedOn,ModifiedOn,CreatedBy,ModifiedBy,IsDeleted,DeletedBy,DeletedOn")]
            sdtoLoanRepayment sdtoLoanRepayment)
        {
            if (ModelState.IsValid)
            {
                var loandetails = db.sdtoLoanInfoes.Find(sdtoLoanRepayment.LoanId);
                var lastRepaymentDate = loandetails.RepaymentStartDate.Value;
                var pendingPrincipalAmount = loandetails.LoanAmount;
                decimal previousDue = 0;

                var previousLoanRepayment1 = db.sdtoLoanRepayments.Where(x => x.LoanId == sdtoLoanRepayment.LoanId && x.IsDeleted == false && x.Status != RepaymentStatus.Cancelled && x.LoanRepaymentId != sdtoLoanRepayment.LoanRepaymentId).OrderByDescending(x => x.LoanRepaymentId).FirstOrDefault();
                if (previousLoanRepayment1 != null && previousLoanRepayment1.LoanRepaymentId > 0)
                {
                    lastRepaymentDate = previousLoanRepayment1.RepaymentDate.Value;
                    pendingPrincipalAmount = previousLoanRepayment1.PendingPrincipalAmount;
                    previousDue = previousLoanRepayment1.PreviousPaymentDueAmount;
                }
                var loanRepayment1 = db.sdtoLoanRepayments.Where(x => x.LoanRepaymentId == sdtoLoanRepayment.LoanRepaymentId && x.IsDeleted == false && x.Status != RepaymentStatus.Cancelled).FirstOrDefault();

                if (loanRepayment1 != null && loanRepayment1.LoanRepaymentId > 0)
                {
                    var days = (sdtoLoanRepayment.RepaymentDate.Value - lastRepaymentDate).Days;
                    days = days == 0 ? 1 : days;
                    var repaymentInterestAmt = (pendingPrincipalAmount * Convert.ToDecimal(sdtoLoanRepayment.InterestRate / 100) * days) / 365;

                    sdtoLoanRepayment.InterestAmount = Math.Round(repaymentInterestAmt, 2);

                    decimal paymentBalance = sdtoLoanRepayment.RepaymentAmount - repaymentInterestAmt - loandetails.InstallmentAmount;
                    sdtoLoanRepayment.PreviousPaymentDueAmount = paymentBalance > 0 ? (previousDue - paymentBalance) : (previousDue + paymentBalance);

                    sdtoLoanRepayment.PendingPrincipalAmount = pendingPrincipalAmount - loandetails.InstallmentAmount + sdtoLoanRepayment.PreviousPaymentDueAmount; //(sdtoLoanRepayment.RepaymentAmount - repaymentInterestAmt);
                    sdtoLoanRepayment.PendingInstallments -= Convert.ToInt32(Math.Floor(sdtoLoanRepayment.PendingPrincipalAmount / loandetails.InstallmentAmount));
                    sdtoLoanRepayment.PrincipalAmount = loandetails.LoanAmount;
                }

                db.Entry(sdtoLoanRepayment).State = EntityState.Modified;
                db.SaveChanges();

                bfTransaction objTrans = new bfTransaction(db);
                objTrans.CancelPostedLoanRepayment(sdtoLoanRepayment);
                objTrans.PostLoanRepayment(sdtoLoanRepayment);

                return RedirectToAction("Index", new { LoanId = sdtoLoanRepayment.LoanId });
            }
            var itemsLoan = db.sdtoLoanInfoes.Include(x => x.Member).ToList();
            var itemsLoans = itemsLoan.Select(x => new SelectListItem() { Value = x.LoanId.ToString(), Text = x.LoanId + " - " + x.LoanAmount + "[" + x.Member.FirstName + " " + x.Member.LastName + "]" }).ToList();
            itemsLoans.Insert(0, new SelectListItem() { Value = "0", Text = "Select a loan" });
            ViewBag.LoanList = new SelectList(itemsLoans, "Value", "Text");

            return View(sdtoLoanRepayment);
        }