public ActionResult Edit(int Id, LoanAccountConfig loanConfig)
        {
            var glAccountRepository = new Repository <GLAccount>();

            ViewBag.Accounts = glAccountRepository.GetAll();
            try
            {
                using (ISession session = NHibernateHelper.Session)
                {
                    var updateConfig = session.Get <LoanAccountConfig>(Id);
                    var oldentity    = session.Get <LoanAccountConfig>(Id);
                    updateConfig.InterestIncomeGL  = loanConfig.InterestIncomeGL;
                    updateConfig.DebitInterestRate = loanConfig.DebitInterestRate;
                    updateConfig.LoanGL            = loanConfig.LoanGL;
                    updateConfig.DateAdded         = oldentity.DateAdded;
                    updateConfig.DateUpdated       = DateTime.Now;

                    using (ITransaction transaction = session.BeginTransaction())
                    {
                        session.Save(updateConfig);
                        transaction.Commit();
                    }
                }
                return(RedirectToAction("Index"));
            }
            catch
            {
                //return View();
            }
            return(View());
        }
        public ActionResult CloseBusiness()
        {
            //TODO: check for null pointer
            var eod = eodRepo.GetById(1);

            if (eod != null)
            {
                if (!eod.IsOpen)
                {
                    ViewBag.IsBusinessClosed      = true;
                    ViewBag.BusinessClosedMessage = "Business is Closed already!!";
                }
                else
                {
                    ViewBag.IsBusinessClosed = false;
                    SavingAccountConfig  savingsConfig        = savingsAccConfigRepo.GetById(1);
                    CurrentAccountConfig currentAccountConfig = currentAccConfigRepo.GetById(1);
                    LoanAccountConfig    loansConfig          = loanAccConfigRepo.GetById(1);
                    if (savingsConfig == null || currentAccountConfig == null || loansConfig == null)
                    {
                        ViewBag.IsAllAccountsConfigured = false;
                        if (savingsConfig == null)
                        {
                            ViewBag.IsSavingsConfigured = false;
                        }
                        else
                        {
                            ViewBag.IsSavingsConfigured = true;
                        }
                        if (currentAccountConfig == null)
                        {
                            ViewBag.IsCurrentAccountConfigured = false;
                        }
                        else
                        {
                            ViewBag.IsCurrentAccountConfigured = true;
                        }
                        if (loansConfig == null)
                        {
                            ViewBag.IsLoanConfigured = false;
                        }
                        else
                        {
                            ViewBag.IsLoanConfigured = true;
                        }
                    }
                    else
                    {
                        ViewBag.IsAllAccountsConfigured = true;
                    }
                }
            }
            else
            {
                ViewBag.IsBusinessClosed = false;
            }

            ViewBag.CurrentFinancialDate = eodRepo.GetById(1).FinancialDate.ToString("dd, MMMM, yyyy");
            return(View(eod));
        }
예제 #3
0
 public LoanAccountConfigViewModel(LoanAccountConfig config)
 {
     if (config == null)
     {
         Id = 0;
     }
     else
     {
         Id                 = config.Id;
         DInterestRate      = config.DInterestRate;
         InterestIncomeGl   = config.InterestIncomeGl;
         InterestIncomeGlId = config.InterestIncomeGlId;
         Status             = config.Status;
     }
 }
예제 #4
0
        public ActionResult SaveLoanConfig(LoanAccountConfig config)
        {
            var interestIncomeGl     = new GlAccount();
            var configInDb           = _context.GetLoanConfig();
            var interestIncomeGlInDb = _glAccountContext.Get(config.InterestIncomeGlId);

            if (config.Id == 0)                         //setup new configuration
            {
                interestIncomeGlInDb.IsAssigned = true; // Update the gl account to is assigned
                _glAccountContext.Update(interestIncomeGl);

                config.Status = true;
                _context.SaveLoan(config);
                TempData["Success"] = "Configurations Created Successfully";

                return(RedirectToAction("LoanAccount"));
            }

            if (config.Id != 0) //update current configuration
            {
                configInDb.DInterestRate = config.DInterestRate;
                if (config.InterestIncomeGlId == 0) //check if gl account is the same
                {
                    configInDb.InterestIncomeGl = configInDb.InterestIncomeGl;
                }
                else
                {
                    var oldGlAccountInDb = _glAccountContext.Get(configInDb.InterestIncomeGlId); // free up the old gl account that was assigned
                    oldGlAccountInDb.IsAssigned = false;
                    _glAccountContext.Update(interestIncomeGl);

                    configInDb.InterestIncomeGlId = config.InterestIncomeGlId;


                    interestIncomeGlInDb.IsAssigned = true; // Update the  new gl account to is assigned
                    _glAccountContext.Update(interestIncomeGl);
                }

                TempData["Success"] = "Configurations Updated Successfully";
                _context.UpdateLoan(config);
                return(RedirectToAction("LoanAccount"));
            }
            return(RedirectToAction("LoanAccount"));
        }
        public ActionResult Create(LoanAccountConfig loanConfig)
        {
            var glAccountRepository = new Repository <GLAccount>();

            ViewBag.Accounts = glAccountRepository.GetAll();
            try
            {
                using (ISession session = NHibernateHelper.Session)
                {
                    using (ITransaction transaction = session.BeginTransaction())
                    {
                        loanConfig.DateAdded   = DateTime.Now;
                        loanConfig.DateUpdated = DateTime.Now;
                        session.Save(loanConfig);
                        transaction.Commit();
                    }
                }
                return(RedirectToAction("Index"));
            }
            catch (Exception exception)
            {
            }
            return(View());
        }
예제 #6
0
 public void UpdateLoan(LoanAccountConfig loanConfig)
 {
     _loanAccContext.Save(loanConfig);
 }
예제 #7
0
 public void SaveLoan(LoanAccountConfig config)
 {
     _loanAccContext.Add(config);
     _loanAccContext.Save(config);
 }
        private void RunEOD(SavingAccountConfig savingsConfig, CurrentAccountConfig currentAccountConfig, LoanAccountConfig loansConfig)
        {
            var sac         = savingsAccConfigRepo.GetById(1);
            var cac         = currentAccConfigRepo.GetById(1);
            var lac         = loanAccConfigRepo.GetById(1);
            var cotIncomeGL = cac.COTIncomeGL;
            var currentInterestExpenseGL  = cac.InterestExpenseGL;
            var savingInterestExpenseGL   = sac.InterestExpenseGL;
            var loanInterestIncomeGL      = lac.InterestIncomeGL;
            var glAccountRepository       = new Repository <GLAccount>();
            var customerAccountRepository = new Repository <CustomerAccount>();
            var customerAccounts          = customerAccountRepository.GetAll().ToList();
            var loanAccountRepository     = new Repository <LoanAccount>();
            var loanAccounts     = loanAccountRepository.GetAll().ToList();
            var savingGLAccount  = sac.CustomerSavingAccount;
            var currentGLAccount = cac.CustomerCurrentAccount;
            var loanGLAccount    = lac.LoanGL;

            using (ISession session = NHibernateHelper.Session)
            {
                using (ITransaction transaction = session.BeginTransaction())
                {
                    if (customerAccounts == null || cotIncomeGL == null || currentInterestExpenseGL == null ||
                        savingInterestExpenseGL == null || savingGLAccount == null || currentGLAccount == null)
                    {
                        throw new Exception("Create All GL Accounts and customer accounts");
                    }

                    foreach (var accounts in customerAccounts)
                    {
                        var acctType    = accounts.AccountType;
                        var acctBalance = accounts.AccountBalance;
                        var acctStatus  = accounts.AccountStatus;
                        var loanAccount = loanAccounts.Where(x => x.CustomerAccount.Id == accounts.Id).FirstOrDefault();
                        if (acctStatus == Status.Inactive.ToString())
                        {
                            break;
                        }
                        switch (acctType)
                        {
                        case AccountType.Savings:
                            if (acctStatus == Status.Inactive.ToString())
                            {
                                break;
                            }
                            else
                            {
                                if (acctBalance < sac.MinimumBalance)
                                {
                                    break;
                                }

                                var dailyRate = Math.Round((sac.CreditInterestRate / 360), 2);
                                var InterestOnSavingsAccount = Math.Round((acctBalance * dailyRate) / 100, 2);
                                acctBalance            += InterestOnSavingsAccount;
                                acctBalance            += InterestOnSavingsAccount;
                                accounts.AccountBalance = acctBalance;

                                /*glAccount to debit and credit
                                 * debit savingsMirror,current mirror account
                                 * credit InterestExpense
                                 */
                                savingGLAccount.AccountBalance         -= InterestOnSavingsAccount;
                                savingInterestExpenseGL.AccountBalance -= InterestOnSavingsAccount;
                            }
                            break;

                        case AccountType.Current:
                            if (acctStatus == Status.Inactive.ToString())
                            {
                                break;
                            }
                            else
                            {
                                if (acctBalance < cac.MinimumBalance)
                                {
                                    break;
                                }

                                var dailyRate = Math.Round(cac.CreditInterestRate / 360, 2);
                                var interestOnCurrentAccount = Math.Round((acctBalance * dailyRate) / 100);
                                acctBalance                              = acctBalance + interestOnCurrentAccount;
                                accounts.AccountBalance                  = acctBalance;
                                currentGLAccount.AccountBalance         -= interestOnCurrentAccount;
                                currentInterestExpenseGL.AccountBalance -= interestOnCurrentAccount;
                                cotIncomeGL.AccountBalance              += cac.COT;
                                currentGLAccount.AccountBalance         -= cac.COT;
                            }
                            break;

                        default:
                            break;
                        }
                        if (loanAccount != null)
                        {
                            if (lac == null)
                            {
                                throw new Exception("Please create loan Account configurations to complete EOD process");
                            }
                            if (loanInterestIncomeGL == null || loanGLAccount == null)
                            {
                                throw new Exception("Please Check creation of all loan gl accounts to enable properly documention of loan process");
                            }

                            var interestOnLoan       = (lac.DebitInterestRate * loanAccount.PrincipalAmount * loanAccount.Duration) / (360 * 100);
                            var loanTenureMths       = ((double)loanAccount.Duration / 30);
                            var mnthlyInterestOnLoan = interestOnLoan / loanTenureMths;
                            var dailyInterestOnLoan  = mnthlyInterestOnLoan / 30;
                            //Debit InterestReceivable
                            //interestReceivable.AccountBalance += dailyInterestOnLoan;
                            //Credit InterestIncome
                            loanInterestIncomeGL.AccountBalance += dailyInterestOnLoan;
                            var amountPayable = loanAccount.PrincipalAmount + interestOnLoan;
                            // if (loanAccount.LoanDueDate == businessStatus.FinancialDate)
                            {
                                if (accounts.AccountBalance < amountPayable)
                                {
                                    //Debit Income(Interest Income)
                                    loanGLAccount.AccountBalance -= interestOnLoan;
                                }
                                else
                                {
                                    accounts.AccountBalance -= amountPayable;
                                    //  loanGLAccount.AccountBalance -= loanAccount.PrincipalAmount;
                                }
                            }
                        }

                        glAccountRepository.Update(cac.CustomerCurrentAccount, cac.CustomerCurrentAccount.Id);
                        glAccountRepository.Update(sac.CustomerSavingAccount, sac.CustomerSavingAccount.Id);
                        glAccountRepository.Update(lac.LoanGL, lac.LoanGL.Id);
                        glAccountRepository.Update(cac.COTIncomeGL, cac.COTIncomeGL.Id);
                        glAccountRepository.Update(cac.InterestExpenseGL, cac.InterestExpenseGL.Id);
                        glAccountRepository.Update(sac.InterestExpenseGL, sac.InterestExpenseGL.Id);
                        //accounts updated
                    }
                    var eod = eodRepo.GetById(1);
                    eod.IsOpen        = false;
                    eod.FinancialDate = eodRepo.GetById(1).FinancialDate;
                    var newFinDate = eod.FinancialDate.AddDays(1);
                    eod.FinancialDate = newFinDate;
                    eodRepo.Update(eod, eod.Id);
                    //eod updated
                }
            }
        }
        public ActionResult CloseBusiness(int?id)
        {
            var eod = eodRepo.GetById(1);

            if (!eod.IsOpen == true)
            {
                ViewBag.IsBusinessClosed      = true;
                ViewBag.BusinessClosedMessage = "Business is Closed already!!";
            }
            else
            {
                ViewBag.IsBusinessClosed = false;
                SavingAccountConfig  savingsConfig        = savingsAccConfigRepo.GetById(1);//
                CurrentAccountConfig currentAccountConfig = currentAccConfigRepo.GetById(1);
                LoanAccountConfig    loansConfig          = loanAccConfigRepo.GetById(1);
                if (savingsConfig == null || currentAccountConfig == null || loansConfig == null)
                {
                    ViewBag.IsAllAccountsConfigured = false;
                    if (savingsConfig == null)
                    {
                        ViewBag.IsSavingsConfigured = false;
                    }
                    else
                    {
                        ViewBag.IsSavingsConfigured = true;
                    }
                    if (currentAccountConfig == null)
                    {
                        ViewBag.IsCurrentAccountConfigured = false;
                    }
                    else
                    {
                        ViewBag.IsCurrentAccountConfigured = true;
                    }
                    if (loansConfig == null)
                    {
                        ViewBag.IsLoanConfigured = false;
                    }
                    else
                    {
                        ViewBag.IsLoanConfigured = true;
                    }
                }
                else
                {
                    ViewBag.IsAllAccountsConfigured = true;
                }
                if (ViewBag.IsAllAccountsConfigured)
                {
                    RunEOD(savingsConfig, currentAccountConfig, loansConfig);
                    eod.IsOpen                    = false;
                    eod.FinancialDate             = DateTime.Now;
                    ViewBag.CurrentFinancialDate  = eod.FinancialDate.ToString("dd,MMMM,yyyy");
                    MvcApplication.IsBusinessOpen = false;
                    ViewBag.IsBusinessClosed      = true;
                    ViewBag.BusinessClosedMessage = "Business was closed successfully";
                }
            }

            ViewBag.CurrentFinancialDate = eodRepo.GetById(1).FinancialDate.ToString("dd, MMMM, yyyy");
            return(RedirectToAction("Business", "EOD"));
            //return View();
        }
예제 #10
0
 public double InterestAmount(LoanAccountConfig loanAccConfig, double amount, int duration)
 {
     return(Math.Round((amount * loanAccConfig.DebitInterestRate * duration) / (100 * 365), 2));
 }