public TransactionStatus MakeDeposit(decimal amount, DateTime date, string note)
 {
     if (!TranscationChecker.IsAmountValid(amount))
     {
         return(new TransactionStatus(Number, Owner, TransactionStatusCode.FAILED, DateTime.Now, "Amount of deposit is not valid"));
     }
     return(_MakeDeposit(amount, date, note));
 }
 public TransactionStatus MakeWithdrawal(decimal amount, DateTime date, string note)
 {
     if (!TranscationChecker.IsAmountValid(amount))
     {
         return(new TransactionStatus(Number, Owner, TransactionStatusCode.FAILED, DateTime.Now, "Amount of withdrawal is not valid"));
     }
     if (!TranscationChecker.IsFundSufficientForWithdrawal(amount, this))
     {
         return(new TransactionStatus(Number, Owner, TransactionStatusCode.FAILED, DateTime.Now, "Not sufficient fund for this withdrawal"));
     }
     return(_MakeWithdrawal(amount, date, note));
 }
        public BankAccount(string name, string password, decimal initialBalance = 0M)
        {
            Password = password;
            Owner    = name;
            if (!TranscationChecker.IsInitialDepositValid(initialBalance))
            {
                throw new ArgumentOutOfRangeException(nameof(initialBalance), "Cannot open account");
            }
            Number = (AccountNumberSeed++).ToString();
            var firstTransaction = new Transaction(Number, Owner, initialBalance, DateTime.Now, "Opens account");

            AllTransactions.Add(firstTransaction);
            Serialize.WriteBankAccount(this);
            Serialize.WriteTransaction(this, firstTransaction);
        }