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);
        }
예제 #3
0
        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());
        }
예제 #5
0
        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;
        }