public async Task <ActionResult> Save(BankAccount bankAccount)
        {
            if (!ModelState.IsValid)
            {
                var viewModel = new BankAccountFormViewModel()
                {
                    BankAccount        = bankAccount,
                    IndividualFullName = unitOfWork.Individuals.GetJustIndividual(bankAccount.IndividualId).FullName, //6
                    BankAccountTypes   = unitOfWork.BankAccountTypes.GetBankAccountTypes().ToList()                   //7
                };
                return(View("BankAccountForm", viewModel));
            }

            if (bankAccount.AccountNumber == null)
            {
                bankAccount.AccountNumber         = BankAccount.CreateRandomAccountNumber();
                bankAccount.OpenedDate            = DateTime.Now;
                bankAccount.StatusUpdatedDateTime = DateTime.Now;
                unitOfWork.BankAccounts.AddBankAccount(bankAccount);//8

                var request = unitOfWork.BankAccountRequests
                              .GetBankAccRequestByStatus(bankAccount.IndividualId, RequestStatus.Processing);  //9
                await request.Approve();
            }
            else
            {
                var bankAccountInDb = unitOfWork.BankAccounts.GetBankAccount(bankAccount.AccountNumber);//10

                bankAccountInDb.WithdrawalLimit = bankAccount.WithdrawalLimit;
                bankAccountInDb.NickName        = bankAccount.NickName;
            }
            unitOfWork.Complete();//11
            return(RedirectToAction("index", "Individuals"));
        }
        // GET
        public ActionResult Edit(string accountNumber)
        {
            if (accountNumber == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var bankAccount = context.BankAccounts
                              .Include(a => a.Individual)
                              .SingleOrDefault(a => a.AccountNumber == accountNumber);

            if (bankAccount == null)
            {
                return(HttpNotFound());
            }

            var viewModel = new BankAccountFormViewModel()
            {
                BankAccount        = bankAccount,
                BankAccountTypes   = context.BankAccountTypes.ToList(),
                IndividualFullName = bankAccount.Individual.FullName
            };

            return(View("EditNickName", viewModel));
        }
        // GET
        public ActionResult New(string individualId)
        {
            if (individualId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var individual = unitOfWork.Individuals.GetJustIndividual(individualId);//1

            if (individual == null)
            {
                return(HttpNotFound());
            }

            var bankAccount = new BankAccount();

            bankAccount.IndividualId = individual.Id;
            var viewModel = new BankAccountFormViewModel()
            {
                BankAccount        = bankAccount,
                IndividualFullName = individual.FullName,
                BankAccountTypes   = unitOfWork.BankAccountTypes.GetBankAccountTypes().ToList(),//2
            };

            return(View("BankAccountForm", viewModel));
        }
        //GET
        public ActionResult Details(string accountNumber)
        {
            if (accountNumber == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var bankAccount = unitOfWork.BankAccounts.GetBankAccount(accountNumber);                         //3
            var acctype     = unitOfWork.BankAccountTypes.GetBankAccountType(bankAccount.BankAccountTypeId); //4

            if (bankAccount == null)
            {
                return(HttpNotFound());
            }

            var viewModel = new BankAccountFormViewModel()
            {
                BankAccount           = bankAccount,
                BankAccountTypes      = unitOfWork.BankAccountTypes.GetBankAccountTypes().ToList(),//5
                IndividualFullName    = bankAccount.Individual.FullName,
                AccoutTypeDescription = acctype.Summary
            };

            return(View("Details", viewModel));
        }
        public ActionResult Save(BankAccountFormViewModel bafViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View("BankAccountForm", bafViewModel));
            }
            //else everything is fine so we map and save
            if (bafViewModel.BankAccountDto.Id == 0)//Then it's a new bank account
            {
                var bankaccount = Mapper.Map <BankAccountDto, BankAccount>(bafViewModel.BankAccountDto);
                _context.BankAccounts.Add(bankaccount);
                _context.SaveChanges();
            }
            else
            {
                var bankaccountInDb = _context.BankAccounts.Find(bafViewModel.BankAccountDto.Id);
                if (bankaccountInDb == null)
                {
                    return(HttpNotFound());
                }
                Mapper.Map(bafViewModel.BankAccountDto, bankaccountInDb);
                _context.SaveChanges();
            }

            return(RedirectToAction("Index"));
        }
        public IActionResult CreateBankAccount(BankAccountFormViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            return(Ok(bankAccountService.SaveBankAccount(model)));
        }
        public ActionResult Edit(int id)
        {
            var bankAccountInDb = _context.BankAccounts.Find(id);
            var bankAccountDto  = Mapper.Map <BankAccount, BankAccountDto>(bankAccountInDb);
            var bafViewModel    = new BankAccountFormViewModel
            {
                ActionIndicator = 2,
                BankAccountDto  = bankAccountDto,
                AccountDtos     = _context.Accounts.ToList().Select(Mapper.Map <Account, AccountDto>)
            };

            return(View("BankAccountForm", bafViewModel));
        }
        public ActionResult New()
        {
            var bankAccountDto = new BankAccountDto
            {
                Id = 0
            };
            var baViewModel = new BankAccountFormViewModel
            {
                ActionIndicator = 1,
                BankAccountDto  = bankAccountDto,
                AccountDtos     = _context.Accounts.ToList().Select(Mapper.Map <Account, AccountDto>)
            };

            return(View("BankAccountForm", baViewModel));
        }
        [Authorize]//iparxei pia?
        public ActionResult NewAccountRequest(int requestId)
        {
            var bankAccReq = context.BankAccRequests
                             .Include(r => r.Individual)
                             .SingleOrDefault(r => r.Id == requestId);

            var viewModel = new BankAccountFormViewModel()
            {
                IndividualFullName = bankAccReq.Individual.FullName,
                BankAccountTypes   = context.BankAccountTypes.Where(t => t.Id == bankAccReq.BankAccTypeId).ToList(),
                BankAccount        = new BankAccount()
                {
                    IndividualId = bankAccReq.IndividualId
                }
            };

            return(View("BankAccountForm", viewModel));
        }
 public bool SaveBankAccount(BankAccountFormViewModel model)
 {
     return(bankAccountRepository.SaveBankAccount(mapper.Map <BankAccount>(model)));
 }