public string OpenAccount(int clientsId, decimal balance, int bonusPoints, bool isClosed, BankAccountType accountType)
        {
            IbanGenerator iban        = new IbanGenerator();
            string        accountIban = iban.IbanGerate();

            var account = CreateAccount(accountIban, clientsId, balance, bonusPoints, isClosed, accountType);

            Repository.Add(account.ToBankAccountDto());

            return(accountIban);
        }
        public void AddAccountToUser(Account account)
        {
            string userId = httpContextAccessor.HttpContext.User
                            .FindFirst(ClaimTypes.NameIdentifier).Value;

            account.IBAN = IbanGenerator.Generate();

            BankUser userFromDb = this.context.Users.Find(userId);

            userFromDb.Accounts.Add(account);

            this.context.SaveChanges();
        }
        public string AddBankAccount(NewBankAccountModel newBankAccountModel)
        {
            var accountRepo   = new AccountsRepo();
            var accountNumber = BankAccountNumberGenerator.GetUniqueAccountNumber();

            newBankAccountModel.AccountNumber = accountNumber;
            newBankAccountModel.Iban          = IbanGenerator.GenerateIban(accountNumber);
            newBankAccountModel.Expired       = false;

            var withdrawnAccount = accountRepo.GetWhitdrawnAccount(newBankAccountModel.Username_Fk, newBankAccountModel.WithdrawnAccountNo);

            if (withdrawnAccount == null)
            {
                return("Invalid Withdrawn Account");
            }
            if (newBankAccountModel.FriendlyName.Length <= 0)
            {
                return("A New Bank Account Must Be Given A Friendly Name");
            }
            if (newBankAccountModel.AmountWithdrawn <= 10)
            {
                return("A New Bank Account Must Have Some Funds Withdrawn (10 Minimum)");
            }
            if (!IsSufficientFunds(withdrawnAccount, newBankAccountModel.AmountWithdrawn))
            {
                return("Not Enough Funds (Withdrawn Account)");
            }
            if (newBankAccountModel.Currency_Fk == withdrawnAccount.Currency_Fk)
            {
                withdrawnAccount.Balance    -= newBankAccountModel.AmountWithdrawn;
                newBankAccountModel.Balance += newBankAccountModel.AmountWithdrawn;

                accountRepo.UpdateAccount(withdrawnAccount);
            }
            if (newBankAccountModel.Currency_Fk != withdrawnAccount.Currency_Fk)
            {
                withdrawnAccount.Balance    -= newBankAccountModel.AmountWithdrawn;
                newBankAccountModel.Balance += ConvertCurrency(withdrawnAccount.Currency_Fk, newBankAccountModel.Currency_Fk,
                                                               newBankAccountModel.AmountWithdrawn);

                accountRepo.UpdateAccount(withdrawnAccount);
            }

            newBankAccountModel.DateOpened  = DateTime.Now;
            newBankAccountModel.DateExpired = newBankAccountModel.DateOpened.AddMonths(newBankAccountModel.DurationMonth);

            var newBankAccount = BankAccountModelToEntity(newBankAccountModel);

            accountRepo.AddBankAccount(newBankAccount);
            return("Success");
        }