Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.25 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.InteropServices.WindowsRuntime;
  6. using Windows.Foundation;
  7. using Windows.Foundation.Collections;
  8. using Windows.UI.Xaml;
  9. using Windows.UI.Xaml.Controls;
  10. using Windows.UI.Xaml.Controls.Primitives;
  11. using Windows.UI.Xaml.Data;
  12. using Windows.UI.Xaml.Input;
  13. using Windows.UI.Xaml.Media;
  14. using Windows.UI.Xaml.Navigation;
  15.  
  16. // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
  17.  
  18. namespace TomCafe
  19. {
  20. /// <summary>
  21. /// An empty page that can be used on its own or navigated to within a Frame.
  22. /// </summary>
  23. public sealed partial class MainPage : Page
  24. {
  25. //Stores List of Beverages
  26. List<MenuItem> beverageList;
  27. //Stores List of Sides
  28. List<MenuItem> sideList;
  29. //Stores List of Value Meals
  30. List<MenuItem> valueMealList;
  31. //Stores List of Bundles
  32. List<MenuItem> bundleMealList;
  33. public DateTime morningStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 7, 0, 0);
  34. public DateTime morningEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 14, 59, 59);
  35. public DateTime afternoonStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 10, 0, 0);
  36. public DateTime afternoonEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 19, 59, 59);
  37. public DateTime dinnerStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 16, 0, 0);
  38. public DateTime dinnerEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 22, 59, 59);
  39. public DateTime wholeStart = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 00, 0, 0);
  40. public DateTime wholeEnd = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
  41.  
  42. private bool isBundle = false;
  43.  
  44.  
  45. Order order = new Order();
  46.  
  47. private List<MenuItem> currentMenu;
  48.  
  49. string defaultDisplayText = "Welcome to Tom's Cafe!\nChoose your item from the menu.";
  50. private void initLists()
  51. {
  52.  
  53. Side sHashbrown = new Side("Hash brown", 2.1);
  54. Side sFries = new Side("Truffle fries", 3.7);
  55. Side sCalamari = new Side("Calamari\t", 3.4);
  56. Side sSalad = new Side("Caesar salad", 4.3);
  57.  
  58. Beverage bCola = new Beverage("Cola\t", 2.85, 0);
  59. Beverage bGreentea = new Beverage("Green Tea", 3.70, 0);
  60. Beverage bCoffee = new Beverage("Coffee\t", 2.70, 0);
  61. Beverage bTea = new Beverage("Tea\t", 2.70, 0);
  62. Beverage bRootbeer = new Beverage("Tom's Root Beer", 9.70, 0);
  63. Beverage bMocktail = new Beverage("Mocktail\t", 15.90, 0);
  64.  
  65. //ValueMeals
  66. ValueMeal vHotcake = new ValueMeal("Hotcake with sausage", 7.90, morningStart, morningEnd);
  67. ValueMeal vHamburger = new ValueMeal("Hamburger\t", 10.20, afternoonStart, afternoonEnd);
  68. ValueMeal vSteak = new ValueMeal("Ribeye steak", 18.50, dinnerStart, dinnerEnd);
  69. ValueMeal vNasiLemak = new ValueMeal("Nasi lemak", 6.90, wholeStart, wholeEnd);
  70.  
  71. //Menuitems Sides
  72. MenuItem hashbrown = new MenuItem(sHashbrown.Name, sHashbrown.Price, sHashbrown);
  73. MenuItem fries = new MenuItem(sFries.Name, sFries.Price, sFries);
  74. MenuItem calamari = new MenuItem(sCalamari.Name, sCalamari.Price, sCalamari);
  75. MenuItem salad = new MenuItem(sSalad.Name, sSalad.Price, sSalad);
  76. sideList = new List<MenuItem> { hashbrown, fries, calamari, salad };
  77.  
  78. //Beverages
  79. MenuItem cola = new MenuItem(bCola.Name, bCola.Price, bCola);
  80. MenuItem greentea = new MenuItem(bGreentea.Name, bGreentea.Price, bGreentea);
  81. MenuItem coffee = new MenuItem(bCoffee.Name, bCoffee.Price, bCoffee);
  82. MenuItem tea = new MenuItem(bTea.Name, bTea.Price, bTea);
  83. MenuItem rootbeer = new MenuItem(bRootbeer.Name, bRootbeer.Price, bRootbeer);
  84. MenuItem mocktail = new MenuItem(bMocktail.Name, bMocktail.Price, bMocktail);
  85. beverageList = new List<MenuItem> { cola, greentea, coffee, tea, rootbeer, mocktail };
  86.  
  87. MenuItem hotcake = new MenuItem(vHotcake.Name, vHotcake.Price, vHotcake);
  88. MenuItem hamburger = new MenuItem(vHamburger.Name, vHamburger.Price, vHamburger);
  89. MenuItem steak = new MenuItem(vSteak.Name, vSteak.Price, vSteak);
  90. MenuItem nasiLemak = new MenuItem(vNasiLemak.Name, vNasiLemak.Price, vNasiLemak);
  91. valueMealList = new List<MenuItem> { hotcake, hamburger, steak, nasiLemak };
  92.  
  93. // Bundle meals
  94. MenuItem breakfast = new MenuItem("Breakfast set", 7.9, vHotcake, sHashbrown);
  95. MenuItem lunch = new MenuItem("Hamburger Combo", 10.2, vHamburger, sFries, bCola);
  96. MenuItem dinner = new MenuItem("Dinner Set", 18.5, vSteak, sFries, sSalad, bCoffee);
  97. bundleMealList = new List<MenuItem> { breakfast, lunch, dinner };
  98.  
  99. }
  100.  
  101. private void refreshMenu(List<MenuItem> list)
  102. {
  103. itemsListView.ItemsSource = null;
  104. itemsListView.ItemsSource = list;
  105. }
  106.  
  107. private void onBundleSelected()
  108. {
  109. currentMenu = checkMealTime(bundleMealList);
  110. refreshMenu(currentMenu);
  111. isBundle = true;
  112. }
  113.  
  114. private void onValueMealSelected()
  115. {
  116. currentMenu = checkMealTime(valueMealList);
  117. refreshMenu(currentMenu);
  118. isBundle = false;
  119. }
  120.  
  121. private void onSideSelected()
  122. {
  123. currentMenu = sideList;
  124. refreshMenu(sideList);
  125. isBundle = false;
  126. }
  127.  
  128. private void onBeveragesSelected()
  129. {
  130. currentMenu = beverageList;
  131. refreshMenu(beverageList);
  132. isBundle = false;
  133. }
  134.  
  135. private List<MenuItem> checkMealTime(List<MenuItem> list)
  136. {
  137. List<MenuItem> result = new List<MenuItem>();
  138. foreach (MenuItem item in list)
  139. {
  140. MenuItem res = CheckItemTiming(item);
  141. if (res != null) result.Add(res);
  142. }
  143. return result;
  144. }
  145.  
  146. private MenuItem CheckItemTiming(MenuItem item)
  147. {
  148. MenuItem result = null;
  149. foreach (Product p in item.ProductList)
  150. {
  151. if (p is ValueMeal)
  152. {
  153. DateTime today = DateTime.Now;
  154. ValueMeal vm = (ValueMeal)p;
  155. if (today.Hour > vm.StartTime.Hour && today.Hour < vm.EndTime.Hour)
  156. {
  157. result = item;
  158. break;
  159. }
  160. }
  161. }
  162. return result;
  163. }
  164.  
  165.  
  166. public void refreshCartView()
  167. {
  168. cartsListView.ItemsSource = null;
  169. cartsListView.ItemsSource = order.ItemList;
  170. }
  171. public MainPage()
  172. {
  173. this.InitializeComponent();
  174. initLists();
  175. onBundleSelected();
  176. displayText.Text = defaultDisplayText;
  177. }
  178.  
  179. private void mainsButton_Click(object sender, RoutedEventArgs e)
  180. {
  181. //Valuemeal Button
  182. onValueMealSelected();
  183. }
  184.  
  185. private void sidesButton_Click(object sender, RoutedEventArgs e)
  186. {
  187. //Side Button
  188. onSideSelected();
  189. }
  190.  
  191. private void beveragesButton_Click(object sender, RoutedEventArgs e)
  192. {
  193. //Beverage Button
  194. onBeveragesSelected();
  195. }
  196.  
  197. private void bundlesButton_Click(object sender, RoutedEventArgs e)
  198. {
  199. //BundleMeal Button
  200. onBundleSelected();
  201. }
  202.  
  203. private Beverage checkifDrinkInMenuItem(MenuItem item)
  204. {
  205. foreach (Product p in item.ProductList)
  206. {
  207. if (p is Beverage) return (Beverage)p;
  208. }
  209. return null;
  210. }
  211.  
  212. private double checkNegative(double a, double b)
  213. {
  214. double res = a - b;
  215. if (res < 0) return 0;
  216. return res;
  217. }
  218.  
  219. bool tradeInDrinkMenuShown = false;
  220. MenuItem selectedBundleItem = null;
  221. bool first = true;
  222.  
  223. private void addButton_Click(object sender, RoutedEventArgs e)
  224. {
  225. //Add MenuItem as OrderItem
  226. if (itemsListView.SelectedIndex != -1)
  227. {
  228. MenuItem selectedMenuItem = (MenuItem)itemsListView.SelectedItem;
  229. print($"is menuitem bundle: {isBundle}\nis there a drink: {checkifDrinkInMenuItem(selectedMenuItem)}");
  230. //Find index in Order object's orderitem list
  231. if (isBundle && checkifDrinkInMenuItem(selectedMenuItem) != null && first)
  232. {
  233. first = false;
  234. selectedBundleItem = selectedMenuItem;
  235. Beverage currentDrink = checkifDrinkInMenuItem(selectedMenuItem);
  236. List<MenuItem> drinkList = new List<MenuItem>();
  237. List<MenuItem> tradeInDrinkList = beverageList.Select(bMI => new MenuItem(bMI.Name, bMI.Price, new Beverage(bMI.Name, bMI.Price, checkNegative(bMI.Price, currentDrink.Price)))).ToList();
  238. refreshMenu(tradeInDrinkList);
  239. tradeInDrinkMenuShown = true;
  240. return;
  241. }
  242.  
  243. if (tradeInDrinkMenuShown && selectedBundleItem != null)
  244. {
  245. print("Drink is selected");
  246. tradeInDrinkMenuShown = false;
  247. selectedBundleItem.ProductList.RemoveAll(n => n is Beverage);
  248.  
  249. MenuItem selectedDrink = (MenuItem)itemsListView.SelectedValue;
  250. selectedBundleItem.ProductList.Add(checkifDrinkInMenuItem(selectedDrink));
  251. selectedMenuItem = selectedBundleItem;
  252. }
  253.  
  254. int orderIndex = (order.ItemList.Select(oi => oi.Item.ToString()).ToList().FindIndex(n => n == selectedMenuItem.ToString()));
  255. if (orderIndex == -1)
  256. {
  257. OrderItem newOrderItem = new OrderItem(selectedMenuItem);
  258. order.Add(newOrderItem);
  259. }
  260. else
  261. {
  262. order.ItemList[orderIndex].AddQty();
  263. }
  264. refreshCartView();
  265. statusText.Text = $"{selectedMenuItem.Name} added!\nTotal: {order.GetTotalAmt().ToString("c2")}";
  266. }
  267. displayText.Text = defaultDisplayText;
  268. }
  269.  
  270. //When user confirms order
  271. private void orderButton_Click(object sender, RoutedEventArgs e)
  272. {
  273. //Only if it is not empty
  274. if (order.ItemList.Count != 0)
  275. {
  276. string orderItemsString = "";
  277. order.ItemList.ForEach((OrderItem oi) => { orderItemsString += $"{oi.Quantity}\t{oi.Item.Name}\t {oi.GetItemTotalAmt().ToString("c2")}\n"; });
  278. displayText.Text = $"Receipt #{order.OrderNo}\n{orderItemsString}\n\nTotal\t{order.GetTotalAmt().ToString("c2")}";
  279. order.OrderNo += 1;
  280. order.ItemList.Clear();
  281. refreshCartView();
  282. }
  283. else
  284. {
  285. statusText.Text = "Your shopping Cart is empty!";
  286. }
  287. }
  288.  
  289.  
  290. //Clear Order when cancel Button is clicked
  291. private void cancelButton_Click(object sender, RoutedEventArgs e)
  292. {
  293. statusText.Text = "Your order has been cancelled :(";
  294. if (order.ItemList.Count == 0) statusText.Text = "Your shopping Cart is empty!";
  295. order.ItemList.Clear();
  296. //Change back to bundle meals
  297. refreshCartView();
  298. displayText.Text = defaultDisplayText;
  299. }
  300.  
  301. private void removeButton_Click(object sender, RoutedEventArgs e)
  302. {
  303. //Reduce Quantity of OrderItem
  304. int selectedIndex = cartsListView.SelectedIndex;
  305. if (selectedIndex != -1)
  306. {
  307. statusText.Text = $"{order.ItemList[selectedIndex].Item.Name} has been removed.\n";
  308. if (order.ItemList[selectedIndex].Quantity != 1)
  309. {
  310. order.ItemList[selectedIndex].RemoveQty();
  311. }
  312. else
  313. {
  314. order.ItemList.RemoveAt(selectedIndex);
  315. }
  316. statusText.Text += $"Total: {order.GetTotalAmt().ToString("c2")}";
  317. refreshCartView();
  318. }
  319. else if (order.ItemList.Count == 0)
  320. {
  321. statusText.Text = "Your shopping Cart is empty!";
  322. }
  323. displayText.Text = defaultDisplayText;
  324.  
  325. }
  326.  
  327. private void print(object value)
  328. {
  329. System.Diagnostics.Debug.WriteLine(value);
  330. }
  331. }
  332. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement