Untitled
unknown
java
2 years ago
7.5 kB
9
Indexable
package assignments.assignment3.systemCLI;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import assignments.assignment1.OrderGenerator;
import assignments.assignment3.Order;
import assignments.assignment3.Restaurant;
import assignments.assignment3.payment.CreditCardPayment;
import assignments.assignment3.payment.DepeFoodPaymentSystem;
public class CustomerSystemCLI extends UserSystemCLI {
@Override
boolean handleMenu(int choice) {
switch (choice) {
case 1 -> handleBuatPesanan();
case 2 -> handleCetakBill();
case 3 -> handleLihatMenu();
case 4 -> handleBayarBill();
case 5 -> handleCekSaldo();
case 6 -> {
return false;
}
default -> System.out.println("Perintah tidak diketahui, silakan coba kembali");
}
return true;
}
@Override
void displayMenu() {
System.out.println("\n--------------------------------------------");
System.out.println("Pilih menu:");
System.out.println("1. Buat Pesanan");
System.out.println("2. Cetak Bill");
System.out.println("3. Lihat Menu");
System.out.println("4. Bayar Bill");
System.out.println("5. Cek Saldo");
System.out.println("6. Keluar");
System.out.println("--------------------------------------------");
System.out.print("Pilihan menu: ");
}
private void handleBuatPesanan() {
System.out.println("--------------Buat Pesanan----------------");
while (true) {
System.out.print("Nama Restoran: ");
String restaurantName = input.nextLine().trim();
Restaurant restaurant = getRestaurantByName(restaurantName);
if (restaurant == null) {
System.out.println("Restoran tidak terdaftar pada sistem.\n");
continue;
}
System.out.print("Tanggal Pemesanan (DD/MM/YYYY): ");
String tanggalPemesanan = input.nextLine().trim();
if (!OrderGenerator.validateDate(tanggalPemesanan)) {
System.out.println("Masukkan tanggal sesuai format (DD/MM/YYYY)");
System.out.println();
continue;
}
System.out.print("Jumlah Pesanan: ");
int jumlahPesanan = Integer.parseInt(input.nextLine().trim());
System.out.println("Order: ");
List<String> listMenuPesananRequest = new ArrayList<>();
for (int i = 0; i < jumlahPesanan; i++) {
listMenuPesananRequest.add(input.nextLine().trim());
}
if (!validateRequestPesanan(restaurant, listMenuPesananRequest)) {
System.out.println("Mohon memesan menu yang tersedia di Restoran!");
continue;
}
Order order = new Order(
OrderGenerator.generateOrderID(restaurantName, tanggalPemesanan, userLoggedIn.getNomorTelepon()),
tanggalPemesanan,
OrderGenerator.calculateDeliveryCost(userLoggedIn.getLokasi()),
restaurant,
getMenuRequest(restaurant, listMenuPesananRequest));
System.out.printf("Pesanan dengan ID %s diterima!", order.getOrderId());
userLoggedIn.addOrderHistory(order);
return;
}
}
private void handleCetakBill() {
System.out.println("--------------Cetak Bill----------------");
while (true) {
System.out.print("Masukkan Order ID: ");
String orderId = input.nextLine().trim();
Order order = getOrderOrNull(orderId);
if (order == null) {
System.out.println("Order ID tidak dapat ditemukan.\n");
continue;
}
System.out.println("");
System.out.print(outputBillPesanan(order));
return;
}
}
void handleLihatMenu() {
System.out.println("--------------Lihat Menu----------------");
while (true) {
System.out.print("Nama Restoran: ");
String restaurantName = input.nextLine().trim();
Restaurant restaurant = getRestaurantByName(restaurantName);
if (restaurant == null) {
System.out.println("Restoran tidak terdaftar pada sistem.\n");
continue;
}
System.out.print(restaurant.printMenu());
return;
}
}
void handleUpdateStatusPesanan(Order order) {
order.setOrderFinished(true);
}
void handleBayarBill() {
System.out.println("--------------Bayar Bill----------------");
while (true) {
System.out.print("Masukkan Order ID: ");
String orderId = input.nextLine().trim();
Order order = getOrderOrNull(orderId);
if (order == null) {
System.out.println("Order ID tidak dapat ditemukan.\n");
continue;
}
if (order.getOrderFinished()) {
System.out.println("Pesanan dengan ID ini sudah lunas!\n");
return;
}
System.out.println(outputBillPesanan(order));
System.out.println("Opsi Pembayaran:");
System.out.println("1. Credit Card");
System.out.println("2. Debit");
System.out.print("Pilihan Metode Pembayaran: ");
String paymentOption = input.nextLine().trim();
if (!paymentOption.equals("1") && !paymentOption.equals("2")) {
System.out.println("Pilihan tidak valid, silakan coba kembali\n");
continue;
}
DepeFoodPaymentSystem paymentSystem = userLoggedIn.getPaymentSystem();
boolean isCreditCard = paymentSystem instanceof CreditCardPayment;
if ((isCreditCard && paymentOption.equals("2")) || (!isCreditCard && paymentOption.equals("1"))) {
System.out.println("User belum memiliki metode pembayaran ini!\n");
continue;
}
long amountToPay = 0;
try {
amountToPay = paymentSystem.processPayment(userLoggedIn.getSaldo(), (long) order.getTotalHarga());
} catch (Exception e) {
System.out.println(e.getMessage());
System.out.println();
continue;
}
long saldoLeft = userLoggedIn.getSaldo() - amountToPay;
userLoggedIn.setSaldo(saldoLeft);
handleUpdateStatusPesanan(order);
DecimalFormat decimalFormat = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('.');
decimalFormat.setDecimalFormatSymbols(symbols);
System.out.printf("Berhasil Membayar Bill sebesar Rp %s", decimalFormat.format(amountToPay));
return;
}
}
void handleCekSaldo() {
System.out.println("--------------Cek Saldo----------------");
DecimalFormat decimalFormat = new DecimalFormat();
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('.');
decimalFormat.setDecimalFormatSymbols(symbols);
System.out.printf("Sisa saldo sebesar Rp %s", decimalFormat.format(userLoggedIn.getSaldo()));
}
}Editor is loading...
Leave a Comment