import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
public class Withdrawal extends Transaction{
private int amount;
private Keypad keypad;
int price;
int[] amounts = {0, 20, 40, 60, 100, 200};
private CashDispenser cashDispenser;
private final static int CANCELED = 6;
public Withdrawal(int userAccountNumber, Screen gtoScreen, BankDatabase gtoBankDatabase, Keypad gtoKeypad, CashDispenser gtoCashDispenser){
super(userAccountNumber, gtoScreen, gtoBankDatabase);
keypad = gtoKeypad;
cashDispenser = gtoCashDispenser;
}
@Override
public void execute(){
boolean cashDispensed = false;
double availableBalance;
BankDatabase bankDatabase = getBankDatabase();
Screen screen = getScreen();
do{
amount = displayMenuOfAmounts();
if(amount != CANCELED){
availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
if(amount <= availableBalance){
if(cashDispenser.isSufficientCashAvailable(amount)){
bankDatabase.debit(getAccountNumber(), amount);
cashDispenser.dispenseCash(amount);
cashDispensed = true;
screen.displayMessageLine("\nYour cash has been dispensed. Please take your struct now.");
//BankDatabase bankDatabase = getBankDatabase();
availableBalance = bankDatabase.getAvailableBalance(getAccountNumber());
screen.displayMessageLine("\nGTO Information : ");
screen.displayMessage(" - MARCHALL COMPANY -\n");
screen.displayMessage(" - Transaction Date : " + dateFormat.format(date) + " \n");
screen.displayMessage(" - Ticket Price : ");
screen.displayDollarAmount(amounts[price]);
screen.displayMessage("\n");
screen.displayMessage(" - Remaining Balance : ");
screen.displayDollarAmount(availableBalance);
screen.displayMessageLine("");
}
}
else{
screen.displayMessageLine("\nInsufficient funds in your account.");
}
}
else{
screen.displayMessageLine("\nCancelling transactions...");
return;
}
} while(!cashDispensed);
}
private Date date;
private DateFormat dateFormat;
private int displayMenuOfAmounts(){
int userChoice = 0;
dateFormat = new SimpleDateFormat("dd/MM/yyyy");
date = new Date();
Screen screen = getScreen();
while(userChoice == 0){
screen.displayMessageLine("\nDestination Menu : ");
screen.displayMessageLine("1 - Jember $20");
screen.displayMessageLine("2 - Sidoarjo $40");
screen.displayMessageLine("3 - Surabaya $60");
screen.displayMessageLine("4 - Bandung $100");
screen.displayMessageLine("5 - Balikpapan $200");
screen.displayMessageLine("6 - Cancel Transaction");
screen.displayMessage("\nChoose a destination : ");
int input = keypad.getInput();
price = input;
switch(input){
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
userChoice = amounts[input];
break;
case CANCELED :
userChoice = CANCELED;
break;
default :
screen.displayMessageLine("\nInvalid selection.");
screen.displayMessageLine("Try again.");
}
}
return userChoice;
}
}