forked from BenjaminChun/OODP
-
Notifications
You must be signed in to change notification settings - Fork 0
/
OrderDetails.java
180 lines (167 loc) · 5.03 KB
/
OrderDetails.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.Scanner;
import java.util.ArrayList;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
/**
* Represents order details in a restaurant.
* @author Tan Zheng Kai
* @version 2.0
* @since 2021-11-13
*/
public class OrderDetails {
/**
* The table id of this order details.
*/
private int tableID;
/**
* The order of this order details.
*/
private Order order;
/**
* The time of this order details.
*/
private LocalTime time;
/**
* The date of this order details.
*/
private LocalDate date;
/**
* Creates Order Details through taking in an order.
* @param order The order of this order details.
*/
public OrderDetails(Order order) {
Scanner sc = new Scanner(System.in);
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("d/MM/yyyy");
System.out.println("Date of order: (d/MM/yyyy)\n");
String tempDate = sc.nextLine();
//convert String to LocalDate
try {
this.date = LocalDate.parse(tempDate, dateFormatter);
} catch (DateTimeParseException e) {
System.out.println("Please follow the correct format for inputting of date!");
System.out.println("program exiting...");
System.exit(0);
}
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm");
System.out.println("Time of order: HH:mm\n");
String tempTime = sc.nextLine();
try {
this.time = LocalTime.parse(tempTime, timeFormatter);
} catch (DateTimeParseException e) {
System.out.println("Please follow the correct format for inputting of time!");
System.out.println("program exiting...");
System.exit(0);
}
this.order = order;
Invoice newInvoice = RestaurantApp.globalInvoiceManager.createInvoice(this);
ArrayList<Table> availTables = RestaurantApp.globalTableManager.getAvailableTables(); //get a list of available table
ArrayList<Table> reservedTables = RestaurantApp.globalTableManager.getReservedTables();
if (RestaurantApp.globalReservationManager.checkExist(newInvoice.getCustomer().getContact()) == null){
RestaurantApp.globalTableManager.printTables(availTables);
}
else {
System.out.println("There is a reservation made with this contact...");
RestaurantApp.globalTableManager.printTables(reservedTables);
}
System.out.println("What table ID is this order for?");
try {
int id = sc.nextInt();
sc.nextLine();
boolean tableFound = false;
for (int i = 0; i < availTables.size(); i++){
if(availTables.get(i).getId() == id){
tableFound = true;
}
}
for (int i = 0; i < reservedTables.size(); i++){
if(reservedTables.get(i).getId() == id){
tableFound = true;
}
}
if (!tableFound){
throw new IncorrectTableIDException("Table ID "+id+" is not found in available/reserved table list!");
}
this.tableID = id;
RestaurantApp.globalTableManager.setTableToOccupied(id);
} catch (IncorrectTableIDException e) {
System.out.println(e.getMessage());
System.out.println("program exiting ...");
System.exit(0);
}
}
/**
* Gets the table id of this order details.
* @return the table id of this order details.
*/
public int getTableID() {
return this.tableID;
}
/**
* Changes the table id of this order details.
* @param tableID The table id of this order details
*/
public void setTableID(int tableID) {
this.tableID = tableID;
}
/**
* Gets the order item of this order details.
* @return the order of this order details.
*/
public Order getOrder() {
return this.order;
}
/**
* Changes the order of this order details.
* @param o returns the order of this order details.
*/
public void setOrder(Order o) {
this.order = o;
}
/**
* Gets the time of this order details.
* @return the time of this order details.
*/
public LocalTime getTime() {
return this.time;
}
/**
* Changes the time of this order details.
* @param time the time of this order details.
*/
public void setTime(LocalTime time) {
this.time = time;
}
/**
* Gets the date of this order details.
* @return the date of this order details.
*/
public LocalDate getDate() {
return this.date;
}
/**
* Changes the local time of this order details.
* @param date the date of this order details.
*/
public void setDate(LocalDate date) {
this.date = date;
}
/**
* Prints the attributes of this order details.
*/
public void printOrderDetails() {
System.out.println("Date of Order: "+this.date);
System.out.println("Time of Order: "+this.time);
System.out.println("Order for Table Number: "+this.tableID);
System.out.println("Order details: ");
this.order.printOrder();
}
/**
* Calculates the base price of the order in this order details.
* @return the calculated base price of this order details.
*/
public double calculatePrice() {
return this.order.calculateBasePrice(); // return the basePrice of a particular order
}
}