diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 94a25f7..b598bb7 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/restaurant b/restaurant new file mode 160000 index 0000000..b188606 --- /dev/null +++ b/restaurant @@ -0,0 +1 @@ +Subproject commit b1886066fb28001a618610e36289bc2927c22e9c diff --git a/src/main/java/org/example/manager/OrderManager.java b/src/main/java/org/example/manager/OrderManager.java index 5f74098..35de632 100644 --- a/src/main/java/org/example/manager/OrderManager.java +++ b/src/main/java/org/example/manager/OrderManager.java @@ -2,17 +2,16 @@ import org.example.model.Menu; import org.example.model.Order; +import org.example.model.Table; import org.example.repository.RestaurantDB; import org.example.utils.Utilities; -import java.sql.SQLOutput; import java.util.ArrayList; import java.util.Date; import java.util.Scanner; import java.util.UUID; public class OrderManager { - public static void testOrder(RestaurantDB r1){ ArrayList m = new ArrayList<>(); @@ -27,7 +26,7 @@ public static void testOrder(RestaurantDB r1){ r1.getTables().get("TABLE-01").setBusy(true); - System.out.println("Total to pay:"+ o1.calculateTotalPayment()); + System.out.println("Total to pay:"+ calculateTotalPayment(o1)); System.out.println(o1); o1.setPaid(true); @@ -54,89 +53,165 @@ public static void payOrder(){ } public static boolean createOrder(Scanner scanner, RestaurantDB r1){ - - boolean statusOperation = false; // create object Order order1 = new Order(); - // create date - Date date = new Date(); - order1.setDate(date); - + order1.setDate(new Date()); // create waiter - String waiter = Utilities.ask(scanner, "Waiter? "); - order1.setWaiter(waiter); - + order1.setWaiter(Utilities.ask(scanner, "Waiter? ").toUpperCase()); // people qty - while (true) { + order1.setPeopleQty(peopleQtyInput(scanner)); + // table selection + order1.setTable(tableSelection(scanner, r1)); + // create menus + order1.setMenus(menuSelection(scanner, r1)); + // total payment + order1.setTotalPayment(calculateTotalPayment(order1)); + // setPaid + order1.setPaid(isPaid(scanner)); + // saver order to repo + boolean orderIsSaved = saveOrder(order1, r1); + if(!orderIsSaved){ + System.out.println("The order is not saved properly."); + return false; + }else{ + System.out.println(printTicket(order1)); + return true; + } + } + private static int peopleQtyInput(Scanner scanner) { + boolean inputOk = false; + int peopleQty = 0; + while (!inputOk) { String qty = Utilities.ask(scanner, "People qty? "); + // while qty is not a number try { - int qtyInt = Integer.parseInt(qty); - order1.setPeopleQty(qtyInt); - break; // Exit the loop if input is valid + peopleQty = Integer.parseInt(qty); + if (peopleQty < 20 && peopleQty > 0) { + inputOk = true; + }else{ + System.out.println("Please enter a number between 1 and 20"); + } } catch (NumberFormatException ex) { - System.out.println("Invalid input. Please enter an integer."); + System.out.println("Please enter a number"); } } - - // create table + return peopleQty; + } + private static Table tableSelection(Scanner scanner, RestaurantDB r1) { + Table tableSelected = null; System.out.println("\nSelect table:"); - - TableManager.printAvailableTables(r1); System.out.println("0 - Take Away"); - String tableSelection = Utilities.ask(scanner, "Table? "); - - if (tableSelection.equals("0")) order1.setTable(null); - else - order1.setTable(r1.getTables().get(tableSelection)); - - // create menus - System.out.println("\nSelect menus:"); - ArrayList menus = new ArrayList(); - while(true) { - - System.out.println("0 - Quit"); - r1.getMenus().forEach((key, menu) -> { - // if menu is active - System.out.println( key + " - " + menu.getName()); - }); - - String option = Utilities.ask(scanner, "Menu? "); - if (option.equals("0")){ break; } - else { - menus.add(r1.getMenus().get(option)); + for (String tableKey : r1.getTables().keySet()) { + Table t = r1.getTables().get(tableKey); + if (!t.isBusy()) { + String tableNumber = tableKey.replace("TABLE-0", ""); + System.out.println(tableNumber + " - " + t.getName()); } - } - order1.setMenus(menus); + try { + int tableSelectionNum = Integer.parseInt(Utilities.ask(scanner, "Table? ")); + + if (tableSelectionNum == 0) { + tableSelected = null; + } else { + String tableKey = "TABLE-0" + tableSelectionNum; + tableSelected = r1.getTables().getOrDefault(tableKey, null); + + if (tableSelected == null) { + System.out.println("Invalid table number."); + } + } + } catch (NumberFormatException e) { + System.out.println("Invalid input. Please enter a valid number."); + } + tableSelected.setBusy(true); + return tableSelected; + } + private static ArrayList menuSelection(Scanner scanner, RestaurantDB r1) { + ArrayList menus = new ArrayList<>(); + while (true) { + System.out.println("\nSelect menu:"); + boolean found = false; + System.out.println("0 - Finish"); - // total payment - double totalPayment = order1.calculateTotalPayment(); - order1.setTotalPayment(totalPayment); + for (String fullMenuKey : r1.getMenus().keySet()) { + String menuLetter = fullMenuKey.replace("MENU-", "").substring(0, 1).toUpperCase(); + System.out.println(menuLetter + " - " + fullMenuKey + " - " + r1.getMenus().get(fullMenuKey).getName()); + } - // create paid - order1.setPaid(false); + String menuSelection = Utilities.ask(scanner, "Menu? (ENTER THE LETTER OR 0)").toUpperCase(); + if (menuSelection.equals("0")) { + break; + } - // saver order to repo - String uuid = UUID.randomUUID().toString(); - r1.getOrders().put(uuid, order1); - Order orderSaved = r1.getOrders().get(uuid); + for (String fullMenuKey : r1.getMenus().keySet()) { + if (fullMenuKey.replace("MENU-", "").toUpperCase().startsWith(menuSelection)) { + Menu menu = r1.getMenus().get(fullMenuKey); + menus.add(menu); + System.out.println(menu.getName() + " added to your selection."); + found = true; + } + } + if (!found) { + System.out.println("Invalid menu selection. Please try again."); + } + } + return menus; + } + private static double calculateTotalPayment(Order order1){ - if (orderSaved != null){ - statusOperation = true; + double totalPyment = 0.0; + for (Menu m : order1.getMenus()) { + totalPyment = totalPyment + m.getPrice(); + } - System.out.println("\nOrder"); - System.out.println("Order ID: " + uuid); - System.out.println(orderSaved); + double totalPymentIVA = calculateIVA(totalPyment); + order1.setTotalPayment(totalPymentIVA); - r1.getTables().get(tableSelection).setBusy(true); - System.out.println( "\nTable status BUSY(" + r1.getTables().get(tableSelection).getName() + "):" + r1.getTables().get(tableSelection).isBusy()); - //TableManager.printAvailableTables(r1); + //System.out.println(this); + return totalPymentIVA; + } + private static double calculateIVA(double number){ //Calculate IVA 21% + double iva = 0.21; + number = number * (1.0 + iva); + return number; + } + private static boolean isPaid(Scanner scanner){ + System.out.println("Is paid?"); + System.out.println("1 - Yes"); + System.out.println("2 - No"); + int option = Integer.parseInt(Utilities.ask(scanner, "Option? ")); + if(option == 1){ + return true; + }else{ + return false; } - - return statusOperation; + } + private static boolean saveOrder(Order order, RestaurantDB r1){ + String uuid = UUID.randomUUID().toString(); + r1.getOrders().put(uuid, order); + System.out.println("Order saved with id: "+ uuid); + if(r1.getOrders().containsKey(uuid)){ + return true; + }else{ + return false; + } + } + private static String printTicket(Order order1){ + String ticket = ""; + ticket = ticket + "Waiter: " + order1.getWaiter() + "\n"; + ticket = ticket + "Date: " + order1.getDate() + "\n"; + ticket = ticket + "Table: " + order1.getTable().getName() + " - Busy: " + order1.getTable().isBusy() + "\n"; + ticket = ticket + "People Qty: " + order1.getPeopleQty() + "\n"; + ticket = ticket + "Menus: " + "\n"; + for (Menu m : order1.getMenus()) { + ticket = ticket + m.getName() + " - " + m.getPrice() + "\n"; + } + ticket = ticket + "Total payment: " + order1.getTotalPayment(); + return ticket; } } diff --git a/src/main/java/org/example/model/Order.java b/src/main/java/org/example/model/Order.java index 465b953..c01a074 100644 --- a/src/main/java/org/example/model/Order.java +++ b/src/main/java/org/example/model/Order.java @@ -19,26 +19,8 @@ public class Order { private Table table; private ArrayList menus; - //Calculate the amount to pay with IVA - public double calculateTotalPayment (){ - double totalPyment = 0.0; - for (Menu m : this.getMenus()) { - totalPyment = totalPyment + m.getPrice(); - } - double totalPymentIVA = calculateIVA(totalPyment); - this.setTotalPayment(totalPymentIVA); - - //System.out.println(this); - return totalPymentIVA; - } - // calculate IVA with 21% - public double calculateIVA(double number){ - double iva = 0.21; - number = number * (1.0 + iva); - return number; - } @Override