Beispiel #1
0
        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();
            }
        }