public ActionResult WithdrawAmount(//[Bind(Include = "LoanRepaymentId,LoanId,RepaymentCode,PrincipalAmount,InterestAmount,InterestRate,RepaymentAmount,PendingPrincipalAmount,Status,PaymentMode,ChequeDetails,Notes,CreatedOn,ModifiedOn,CreatedBy,ModifiedBy,IsDeleted,DeletedBy,DeletedOn")] sdtoWithdrawalInfo depositWithdrawal) { if (ModelState.IsValid) { if (depositWithdrawal.DepositId > 0) { var depositDetails = db.sdtoDepositInfoes.Find(depositWithdrawal.DepositId); var depositBalanceAmt = depositDetails.DepositAmount; var depositInterest = depositDetails.InteresRate; //var loanPendingInstallments = depositDetails.TotalInstallments; int days = (DateTime.Now - depositDetails.CreatedOn.Value).Days; var withdrawalInterest = depositInterest; var withdrawalInterestAmt = ((depositDetails.DepositAmount * Convert.ToDecimal(withdrawalInterest / 100) * (days < depositDetails.Duration ? days : depositDetails.Duration)) / 365); var depositWithdrawalsPrev = db.DepositWithdrawals.Where(x => x.DepositId == depositWithdrawal.DepositId).OrderByDescending(x => x.WithdrawalId).FirstOrDefault(); if (depositWithdrawalsPrev != null && depositWithdrawalsPrev.WithdrawalId > 0) { depositBalanceAmt = depositWithdrawalsPrev.BalanceDepositAmount; //loanPendingInstallments = loanRepayment.PendingInstallments; withdrawalInterest = depositWithdrawalsPrev.NewInterestRate; } withdrawalInterestAmt = ((depositWithdrawal.WithdrawalAmount * Convert.ToDecimal(withdrawalInterest / 100) * (days < depositDetails.Duration ? days : depositDetails.Duration)) / 365); depositWithdrawal.InterestAmount = Math.Round(withdrawalInterestAmt, 2); depositWithdrawal.BalanceDepositAmount = depositBalanceAmt - depositWithdrawal.WithdrawalAmount; //sdtoLoanRepayment.PendingInstallments -= Convert.ToInt32(Math.Floor(sdtoLoanRepayment.PendingPrincipalAmount / loandetails.InstallmentAmount)); //sdtoLoanRepayment.PrincipalAmount = loandetails.LoanAmount; depositWithdrawal.Status = Data.Models.Enumerations.WithdrawalStatus.Paid; } db.DepositWithdrawals.Add(depositWithdrawal); db.SaveChanges(); bfTransaction objTrans = new bfTransaction(db); objTrans.CancelPostedDepositWithdrawal(depositWithdrawal); objTrans.PostDepositWithdrawal(depositWithdrawal); return RedirectToAction("Withdrawals", new { DepositId = depositWithdrawal.DepositId }); } var itemsDeposit = db.sdtoDepositInfoes.Include(x => x.Member).Where(x => x.Status == DepositStatus.Active).ToList(); var itemsDeposits = itemsDeposit.Select(x => new SelectListItem() { Value = x.DepositId.ToString(), Text = x.DepositId + " - " + x.DepositAmount + "[" + x.Member.FirstName + " " + x.Member.LastName + "]" }).ToList(); itemsDeposits.Insert(0, new SelectListItem() { Value = "0", Text = "Select a deposit" }); ViewBag.DepositList = new SelectList(itemsDeposits, "Value", "Text"); return View(depositWithdrawal); }
public ActionResult WithdrawAmount(int? DepositId) { sdtoWithdrawalInfo withdraw = new sdtoWithdrawalInfo(); var itemsDeposit = db.sdtoDepositInfoes.Include(x => x.Member).Where(x => x.Status == DepositStatus.Active).ToList(); var itemsDeposits = itemsDeposit.Select(x => new SelectListItem() { Value = x.DepositId.ToString(), Text = x.DepositId + " - " + x.DepositAmount + "[" + x.Member.FirstName + " " + x.Member.LastName + "]" }).ToList(); itemsDeposits.Insert(0, new SelectListItem() { Value = "0", Text = "Select a deposit" }); ViewBag.DepositList = new SelectList(itemsDeposits, "Value", "Text"); if (DepositId != null && DepositId.Value > 0) { var depositDetails = db.sdtoDepositInfoes.Find(DepositId); var depositBalanceAmt = depositDetails.DepositAmount; var depositInterest = depositDetails.InteresRate; //var loanPendingInstallments = depositDetails.TotalInstallments; var withdrawalInterest = depositInterest; int days = (DateTime.Now - depositDetails.CreatedOn.Value).Days; var withdrawalInterestAmt = ((depositDetails.DepositAmount * Convert.ToDecimal(withdrawalInterest / 100) * (days < depositDetails.Duration ? days : depositDetails.Duration)) / 365); var depositWithdrawals = db.DepositWithdrawals.Where(x => x.DepositId == DepositId).OrderByDescending(x => x.WithdrawalId).FirstOrDefault(); if (depositWithdrawals != null && depositWithdrawals.WithdrawalId > 0) { depositBalanceAmt = depositWithdrawals.BalanceDepositAmount; //loanPendingInstallments = loanRepayment.PendingInstallments; withdrawalInterest = depositWithdrawals.NewInterestRate; withdrawalInterestAmt = ((depositBalanceAmt * Convert.ToDecimal(withdrawalInterest / 100) * (days < depositDetails.Duration ? days : depositDetails.Duration)) / 365); withdraw.WithdrawalCode = depositWithdrawals.WithdrawalCode; } withdraw.InterestRate = withdrawalInterest; withdraw.NewInterestRate = withdrawalInterest; withdraw.InterestAmount = Math.Round(withdrawalInterestAmt, 2); withdraw.BalanceDepositAmount = depositBalanceAmt; //withdraw.PendingInstallments = loanPendingInstallments; //withdraw.BalanceDepositAmount = loandetails.LoanAmount; withdraw.Status = WithdrawalStatus.Paid; withdraw.InstrumentMode = Instrument.Cash; withdraw.WithdrawalAmount = withdraw.BalanceDepositAmount + withdraw.InterestAmount; } return View(withdraw); }
public bool PostDepositWithdrawal(sdtoWithdrawalInfo WithdrawalInfo) { bool tranFlag = true; var DepositInfo = AppDb.sdtoDepositInfoes.Where(x => x.DepositId == WithdrawalInfo.DepositId).FirstOrDefault(); var member = AppDb.User.Where(x => x.UserID == DepositInfo.UserId).FirstOrDefault(); if (member != null) { var accHeadMember = AppDb.AccountHeads.Find(member.AccountHeadId); if (accHeadMember != null) { var settingCashBookId = AppDb.GeneralSettings.FirstOrDefault().CashBookId; var settingBankBookId = AppDb.GeneralSettings.FirstOrDefault().BankBookId; //Post for Bank book var accCashBook = AppDb.AccountBooks.Where(x => x.AccountBookId == settingCashBookId).FirstOrDefault(); var accBankBook = AppDb.AccountBooks.Where(x => x.AccountBookId == settingBankBookId).FirstOrDefault(); var settingsInterestAccId = AppDb.GeneralSettings.FirstOrDefault().InterestAccountId; var accInterest = AppDb.AccountHeads.Where(x => x.AccountHeadId == settingsInterestAccId).FirstOrDefault(); if (accCashBook != null && accBankBook != null) { var receipt = new sdtoReceiptHeader() { BookId = WithdrawalInfo.InstrumentMode == Instrument.Cash ? accCashBook.AccountBookId : accBankBook.AccountBookId, TransDate = DateTime.Now, VoucherTotal = WithdrawalInfo.WithdrawalAmount, //Doubt: Voucher total should be loan amount or loan amount + additional value from user TransType = ReceiptType.Receipt, FinancialYearId = CurrentUser.UserSession.FinancialYearId.Value, FromModule = 1, //Doubt: 0 for "From Accounts", 1 for "From Posting" Transaction = TransactionType.DepositWithdrawal, //Doubt: //0 for Cash Receipt, 1 for Cash Payment, 2 for "Loan Entry", 3 for "Loan repayment" TransId = WithdrawalInfo.WithdrawalId, //Doubt: Is transaction id loan id? Cancelled = 0 }; AppDb.ReceiptHeader.Add(receipt); AppDb.SaveChanges(); if (WithdrawalInfo.InstrumentMode == Instrument.Cash) receipt.VoucherNo = accCashBook.ReceiptVoucherPrefix + receipt.Id + accCashBook.ReceiptVoucherSuffix; else receipt.VoucherNo = accBankBook.ReceiptVoucherPrefix + receipt.Id + accBankBook.ReceiptVoucherSuffix; AppDb.Entry(receipt).State = EntityState.Modified; AppDb.SaveChanges(); // Member var receiptDetailsDb = new sdtoReceiptDetails() { ReceiptsId = receipt.Id, AccountId = accHeadMember.AccountHeadId, Narration = "Deposit Amount Withdrawn", Amount = WithdrawalInfo.WithdrawalAmount, Display = 1 }; // Cash Account var receiptDetailsCr = new sdtoReceiptDetails() { ReceiptsId = receipt.Id, AccountId = WithdrawalInfo.InstrumentMode == Instrument.Cash ? accCashBook.AccountHeadId.Value : accBankBook.AccountHeadId.Value, Narration = "Deposit Amount Withdrawn", Amount = -1 * (WithdrawalInfo.WithdrawalAmount - WithdrawalInfo.InterestAmount), Display = 1 }; var receiptDetailsCrInt = new sdtoReceiptDetails() { ReceiptsId = receipt.Id, AccountId = accInterest.AccountHeadId, Narration = "Deposit Amount Withdrawn", Amount = -1 * WithdrawalInfo.InterestAmount, Display = 1 }; AppDb.ReceiptDetails.Add(receiptDetailsCrInt); AppDb.ReceiptDetails.Add(receiptDetailsCr); AppDb.ReceiptDetails.Add(receiptDetailsDb); AppDb.SaveChanges(); } } } return tranFlag; }
// GET: LoanRepayments public ActionResult Withdrawals(long? DepositId) { //var query = from c in db.sdtoLoanRepayments //join o in db.sdtoLoanInfoes on c.LoanId equals o.LoanId //where c.LoanId == ((LoanId == null || LoanId.Value == 0) ? c.LoanId : LoanId) //group c by c.LoanId into g //select new //{ // Name = g.Key, // Sum = g.Sum(oi => oi.RepaymentAmount), // RepaymentCode = c.RepaymentCode //}; sdtoWithdrawalInfo withdrawal = new sdtoWithdrawalInfo(); var itemsDeposit = db.sdtoDepositInfoes.Include(x => x.Member).Where(x => x.Status == DepositStatus.Active).ToList(); var itemsDeposits = itemsDeposit.Select(x => new SelectListItem() { Value = x.DepositId.ToString(), Text = x.DepositId + " - " + x.DepositAmount + " [" + x.Member.FirstName + " " + x.Member.LastName + "]" }).ToList(); itemsDeposits.Insert(0, new SelectListItem() { Value = "0", Text = "Select a deposit" }); ViewBag.DepositList = new SelectList(itemsDeposits, "Value", "Text"); var deposit = db.sdtoDepositInfoes.Where(x => x.DepositId == DepositId).FirstOrDefault(); ViewBag.DepositDetails = deposit; ViewBag.TotalWithdrawan = 0; ViewBag.TotalBalance = deposit.DepositAmount; var sdtoWidthdrawals = db.DepositWithdrawals.Where(x => x.DepositId == DepositId).Include(s => s.Deposit); if (sdtoWidthdrawals != null && sdtoWidthdrawals.Count() > 0) { ViewBag.TotalWithdrawan = sdtoWidthdrawals.Sum(y => y.WithdrawalAmount); ViewBag.TotalBalance = sdtoWidthdrawals.OrderByDescending(x => x.WithdrawalId).FirstOrDefault().BalanceDepositAmount; ViewBag.NewInterestRate = sdtoWidthdrawals.OrderByDescending(x => x.WithdrawalId).FirstOrDefault().NewInterestRate; } return View(sdtoWidthdrawals.ToList()); }
public bool CancelPostedDepositWithdrawal(sdtoWithdrawalInfo WithdrawalInfo) { bool bFlag = true; var DepositInfo = AppDb.sdtoDepositInfoes.Find(WithdrawalInfo.DepositId); var member = AppDb.User.Where(x => x.UserID == DepositInfo.UserId).FirstOrDefault(); if (member != null) { var accHeadMember = AppDb.AccountHeads.Find(member.AccountHeadId); if (accHeadMember != null) { var settingCashBookId = AppDb.GeneralSettings.FirstOrDefault().CashBookId; var settingBankBookId = AppDb.GeneralSettings.FirstOrDefault().BankBookId; //Post for Bank book var accCashBook = AppDb.AccountBooks.Where(x => x.AccountBookId == settingCashBookId).FirstOrDefault(); var accBankBook = AppDb.AccountBooks.Where(x => x.AccountBookId == settingBankBookId).FirstOrDefault(); if (accCashBook != null && accBankBook != null) { var header = AppDb.ReceiptHeader.Where(x => x.IsDeleted == false && x.Cancelled == 0 && (x.BookId == accCashBook.AccountBookId || x.BookId == accBankBook.AccountBookId) && x.TransId == WithdrawalInfo.WithdrawalId && x.Transaction == TransactionType.DepositWithdrawal).FirstOrDefault(); if (header != null) { header.Cancelled = 1; AppDb.Entry(header).State = EntityState.Modified; AppDb.SaveChanges(); var dtls = AppDb.ReceiptDetails.Where(x => x.ReceiptsId == header.Id && x.IsDeleted == false).ToList(); //dtls.ForEach(x => x.IsDeleted = true); foreach (var dtlItem in dtls) { dtlItem.IsDeleted = true; AppDb.Entry(dtlItem).State = EntityState.Modified; } AppDb.SaveChanges(); } } } } return bFlag; }