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); }