public BankTransactionState DeleteBankAccount(string password, bool force) { if (!SessionAccount.IsPasswordValid(password)) { return(BankTransactionState.InvalidPassword); } if (SessionAccount == null) { return(BankTransactionState.NotLoggedIn); } if (SessionAccount.Credit.Amount > 0 && !force) { return(BankTransactionState.MoneyRemaining); } if (SessionAccount.Credit.Amount < 0) { return(BankTransactionState.DebtsNotCleared); } BankStorage.DeleteAccount(SessionAccount.Iban); SessionAccount = null; return(BankTransactionState.Success); }
public bool Login(IBAN iban, string password) { var account = BankStorage.GetAccount(iban); if (account.IsPasswordValid(password)) { SessionAccount = account; return(true); } return(false); }
/// <summary> /// Prompts for an valid existing IBAN number. /// </summary> /// <returns>IBAN. If it has no value, operation should be quit</returns> private static IBAN?PromptForIban() { bool ibanCanLogin = false; IBAN?iban = null; while (!ibanCanLogin) { Console.WriteLine("IBAN:[q to exit] "); var ibanInput = Console.ReadLine(); ibanInput = Regex.Replace(ibanInput, @"\s+", ""); // Remove Whitespaces if (ibanInput == "q") { return(null); } if (ibanInput.Length != 22) { Console.WriteLine("IBAN must be 22 characters long!\n"); continue; } try { iban = new IBAN(ibanInput); } catch (ArgumentException) { Console.WriteLine("IBAN is invalid!\n"); } if (!iban.HasValue) { continue; } if (BankStorage.DoesAccountExist(iban.Value)) { ibanCanLogin = true; } else { Console.WriteLine("Account does not exist or is not registered!\n"); } } return(iban); }
public void Transfer(Transaction transaction) { if (transaction.ReceiverIban.Equals(Iban)) { Credit += transaction.Amount; BankStorage.AddTransaction(transaction); } else if (transaction.SenderIban.Equals(Iban)) { Credit -= transaction.Amount; BankStorage.AddTransaction(transaction); } else { throw new InvalidOperationException("The transaction is not be associated with this account!"); } }
/// <summary> /// Displays the money transfer dialog. /// </summary> private static void TransferMoneyDialog() { Console.Clear(); WriteHeader(); Console.WriteLine("Transfer money to another account\n"); double amountValue; do { Console.WriteLine("Enter the amount in euros you want to transfer: "); } while (!double.TryParse(Console.ReadLine(), out amountValue) || amountValue <= 0); var amount = new Money(amountValue, CurrencyCode.EUR); Console.WriteLine("\nEnter the IBAN of the account you want to transfer the money to:"); var iban = PromptForIban(); if (!iban.HasValue) { return; } Console.WriteLine("\nEnter a payment reference: "); var reference = Console.ReadLine(); Console.Clear(); Console.WriteLine($"Receiver: {BankStorage.GetAccount(iban.Value).AccountHolder} <{iban.Value}>"); Console.WriteLine($"Amount: {amount}"); Console.WriteLine($"Reference: {reference}"); Console.WriteLine("\nDo you really want to start the transaction? [y/n]"); var confirmation = Console.ReadLine(); if (confirmation != "y") { return; } Console.WriteLine(currentClerk.TransferMoney(amount, iban.Value, reference) == BankTransactionState.Success ? "Success! Press any key to continue..." : "Something went wrong! Please try again later. Press any key to continue..."); Console.ReadKey(); }
public BankTransactionState PutMoney(Money amount) { if (SessionAccount == null) { return(BankTransactionState.NotLoggedIn); } var transaction = new CashTransaction(amount, SessionAccount.Iban, "bar deposit"); var receiver = BankStorage.GetAccount(SessionAccount.Iban); receiver.Transfer(transaction); BankStorage.AddAccount(receiver); SaveSession(); return(BankTransactionState.Success); }
public BankTransactionState TransferMoney(Money amount, IBAN to, string referenceText) { if (SessionAccount == null) { return(BankTransactionState.NotLoggedIn); } var transaction = new Transaction(amount, SessionAccount.Iban, to, referenceText); var receiver = BankStorage.GetAccount(to); SessionAccount.Transfer(transaction); receiver.Transfer(transaction); BankStorage.AddTransaction(transaction); BankStorage.AddAccount(receiver); SaveSession(); return(BankTransactionState.Success); }
public IBAN CreateBankAccount(Person accountHolder, string accountName, string password, Money?startingCredit) { var bankAccount = new BankAccount(accountHolder, accountName, password); if (DateTime.Now - accountHolder.BirthDate < new TimeSpan(days: 16 * 365, hours: 0, minutes: 0, seconds: 0)) { // Student Bonus of 50€ if AccountHolder younger than 16 var transaction = new CashTransaction(new Money(50, CurrencyCode.EUR), bankAccount.Iban, "Youth Bonus"); bankAccount.Transfer(transaction); } if (startingCredit.HasValue) { var transaction = new CashTransaction(startingCredit.Value, bankAccount.Iban, "Starting credit"); bankAccount.Transfer(transaction); } SessionAccount = bankAccount; BankStorage.AddAccount(bankAccount); return(bankAccount.Iban); }
private void SaveSession() => BankStorage.AddAccount(SessionAccount);