Skip to content
1 change: 1 addition & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions restaurant
Submodule restaurant added at b18860
201 changes: 138 additions & 63 deletions src/main/java/org/example/manager/OrderManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Menu> m = new ArrayList<>();
Expand All @@ -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);
Expand All @@ -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<Menu> 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<Menu> menuSelection(Scanner scanner, RestaurantDB r1) {
ArrayList<Menu> 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;
}
}
18 changes: 0 additions & 18 deletions src/main/java/org/example/model/Order.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,8 @@ public class Order {
private Table table;
private ArrayList<Menu> 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
Expand Down