public void Withdraw() { if (Program.currentLoggedInAccount != null) { Console.Clear(); Console.WriteLine("Withdraw money at the SB system."); Console.WriteLine("Please enter the amount to withdraw: "); var amount = double.Parse(Console.ReadLine()); if (amount <= 0) { Console.WriteLine("Invalid amount. Please try again!"); return; } var transaction = new TransactionSB { TransactionId = Guid.NewGuid().ToString(), SenderAccountNumber = Program.currentLoggedInAccount.AccountNumber, ReceiverAccountNumber = Program.currentLoggedInAccount.AccountNumber, Type = TransactionSB.TransactionType.Withdraw, Amount = amount, Message = "Withdraw money in the ATM with amount: " + amount, CreatedAtMls = DateTime.Now.Ticks, UpdatedAtMls = DateTime.Now.Ticks, Status = (TransactionSB.TransactionStatus) 1 }; if (sbAccountModel.UpdateBalance(Program.currentLoggedInAccount, transaction)) { Console.Clear(); Console.WriteLine("Withdraw success!"); Console.WriteLine("Continue with SB-Bank? (y/n)"); if (Console.ReadLine().ToLower().Equals("n")) { Program.currentLoggedInAccount = null; } } else { Console.WriteLine("Transaction failed. Please try again later!\nEnter to continue!"); Console.ReadLine(); } } else { Console.WriteLine("Please login to use this function!"); } }
public bool UpdateBalance(SBAccount currentLoggedInAccount, TransactionSB transactionSb) { var trans = ConnectionHelper.GetConnection().BeginTransaction(); try { var cmd = new MySqlCommand("select balance from accounts where accountNumber = @accountNumber", ConnectionHelper.GetConnection()); cmd.Parameters.AddWithValue("@accountNumber", currentLoggedInAccount.AccountNumber); var reader = cmd.ExecuteReader(); double currentBalance = 0; if (reader.Read()) { currentBalance = reader.GetDouble("balance"); } reader.Close(); if (transactionSb.Type == TransactionSB.TransactionType.Withdraw && currentBalance < transactionSb.Amount) { throw new Exception("Not enough money in the account."); } if (transactionSb.Type == TransactionSB.TransactionType.Withdraw) { currentBalance -= transactionSb.Amount; } if (transactionSb.Type == TransactionSB.TransactionType.Deposit) { currentBalance += transactionSb.Amount; } var cmd1 = new MySqlCommand( "update accounts set balance = @balance where accountNumber = @accountNumber", ConnectionHelper.GetConnection()); cmd1.Parameters.AddWithValue("@balance", currentBalance); cmd1.Parameters.AddWithValue("@accountNumber", currentLoggedInAccount.AccountNumber); var updateResult = cmd1.ExecuteNonQuery(); var cmd2 = new MySqlCommand( "insert into transactions (transactionId, senderAccountNumber, receiverAccountNumber, type, amount, message, createdAt, updatedAt, status) values ( @transactionId, @senderAccountNumber, @receiverAccountNumber, @type, @amount, @message, @createdAt, @updatedAt, @status) ", ConnectionHelper.GetConnection()); cmd2.Parameters.AddWithValue("@transactionId", transactionSb.TransactionId); cmd2.Parameters.AddWithValue("@senderAccountNumber", transactionSb.SenderAccountNumber); cmd2.Parameters.AddWithValue("@receiverAccountNumber", transactionSb.ReceiverAccountNumber); cmd2.Parameters.AddWithValue("@type", transactionSb.Type); cmd2.Parameters.AddWithValue("@amount", transactionSb.Amount); cmd2.Parameters.AddWithValue("@message", transactionSb.Message); cmd2.Parameters.AddWithValue("@createdAt", transactionSb.CreatedAtMls); cmd2.Parameters.AddWithValue("@updatedAt", transactionSb.UpdatedAtMls); cmd2.Parameters.AddWithValue("@status", transactionSb.Status); var transactionResult = cmd2.ExecuteNonQuery(); if (updateResult != 1 || transactionResult != 1) { throw new Exception("Cannot add transactions or update accounts."); } trans.Commit(); return(true); } catch (Exception e) { trans.Rollback(); Console.WriteLine(e); return(false); } finally { ConnectionHelper.CloseConnection(); } }