Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Runtime.InteropServices.WindowsRuntime;
- using Windows.Foundation;
- using Windows.Foundation.Collections;
- using Windows.UI.Xaml;
- using Windows.UI.Xaml.Controls;
- using Windows.UI.Xaml.Controls.Primitives;
- using Windows.UI.Xaml.Data;
- using Windows.UI.Xaml.Input;
- using Windows.UI.Xaml.Media;
- using Windows.UI.Xaml.Navigation;
- // The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
- namespace TomCafe
- {
- /// <summary>
- /// An empty page that can be used on its own or navigated to within a Frame.
- /// </summary>
- public sealed partial class MainPage : Page
- {
- List<MenuItem> bundleMeals = new List<MenuItem>();
- List<MenuItem> valueMeals = new List<MenuItem>();
- List<MenuItem> sides = new List<MenuItem>();
- List<MenuItem> beverages = new List<MenuItem>();
- Dictionary<string, MenuItem> tradeIns = new Dictionary<string, MenuItem>();
- List<string> tradeInIds;
- List<MenuItem> menu = new List<MenuItem>();
- Order cart = new Order();
- // displayText
- string alert;
- double total = -1;
- string content;
- string receipt;
- public MainPage()
- {
- this.InitializeComponent();
- resetContent();
- createItems();
- displayItemsList();
- displayDisplayText();
- }
- private void resetContent()
- {
- content = @"Welcome to Tom's Cafe!
- Choose your item from the menu.";
- }
- private void displayItemsList()
- {
- // Render it
- List<string> data = new List<string>();
- foreach (MenuItem i in menu)
- {
- // Check for Value Meal availibility
- bool notAvailable = false;
- foreach (Product p in i.ProductList)
- {
- if (p is ValueMeal && !((ValueMeal)p).IsAvailable())
- {
- notAvailable = true;
- }
- }
- if (notAvailable) continue;
- data.Add(i.ToString());
- }
- itemsListView.ItemsSource = data;
- }
- private void displayCartsList()
- {
- List<string> data = new List<string>();
- foreach (OrderItem i in cart.ItemList)
- {
- data.Add(i.ToString());
- }
- cartsListView.ItemsSource = data;
- }
- // alert: string or null
- // total: positive or negative (no display)
- // content: string or null
- // receipt: string or null
- private void displayDisplayText()
- {
- string str = "";
- if (alert != null)
- {
- str += alert;
- str += "\n";
- }
- if (total >= 0)
- {
- str += $"Total: ${total:0.00}";
- str += "\n\n";
- }
- else if (alert != null)
- {
- str += "\n";
- }
- if (content != null)
- {
- str += content;
- str += "\n\n";
- }
- if (receipt != null)
- {
- str += receipt;
- }
- displayText.Text = str;
- }
- private void createItems()
- {
- /* Products */
- Beverage cola = new Beverage("Cola", 2.85, 0.0);
- Beverage greenTea = new Beverage("Green Tea", 3.70, 0.0);
- Beverage coffee = new Beverage("Coffee", 2.70, 0.0);
- Beverage tea = new Beverage("Tea", 2.70, 0.0);
- Beverage rootBeer = new Beverage("Root Beer", 9.70, 0.0);
- Beverage mocktail = new Beverage("Mocktail", 15.90, 0.0);
- Side hashBrown = new Side("Hash brown", 2.10);
- Side truffleFries = new Side("Truffle fries", 3.70);
- Side calamari = new Side("Calamari", 3.40);
- Side caesarSalad = new Side("Caesar salad", 4.30);
- ValueMeal hotcakeWithSausage = new ValueMeal("Hotcake with sausage", 6.90, new DateTime(), new DateTime());
- ValueMeal hamburger = new ValueMeal("Hamburger", 7.50, new DateTime(), new DateTime());
- ValueMeal nasiLemak = new ValueMeal("Nasi Lemak", 5.40, new DateTime(), new DateTime());
- ValueMeal ribeyeSteak = new ValueMeal("Ribeye steak", 10.20, new DateTime(), new DateTime());
- /* Menu Item */
- beverages.Add(new MenuItem(cola));
- beverages.Add(new MenuItem(greenTea));
- beverages.Add(new MenuItem(coffee));
- beverages.Add(new MenuItem(tea));
- beverages.Add(new MenuItem(rootBeer));
- beverages.Add(new MenuItem(mocktail));
- sides.Add(new MenuItem(hashBrown));
- sides.Add(new MenuItem(truffleFries));
- sides.Add(new MenuItem(calamari));
- sides.Add(new MenuItem(caesarSalad));
- valueMeals.Add(new MenuItem(hotcakeWithSausage));
- valueMeals.Add(new MenuItem(hamburger));
- valueMeals.Add(new MenuItem(nasiLemak));
- valueMeals.Add(new MenuItem(ribeyeSteak));
- MenuItem breakfastSet = new MenuItem("Breakfast set", 7.90);
- breakfastSet.ProductList.Add(hotcakeWithSausage);
- breakfastSet.ProductList.Add(hashBrown);
- bundleMeals.Add(breakfastSet);
- MenuItem hamburgerCombo = new MenuItem("Hamburger combo", 10.20);
- hamburgerCombo.ProductList.Add(hamburger);
- hamburgerCombo.ProductList.Add(truffleFries);
- hamburgerCombo.ProductList.Add(cola);
- bundleMeals.Add(hamburgerCombo);
- MenuItem dinnerSet = new MenuItem("Dinner set", 18.50);
- dinnerSet.ProductList.Add(ribeyeSteak);
- dinnerSet.ProductList.Add(truffleFries);
- dinnerSet.ProductList.Add(cola);
- bundleMeals.Add(dinnerSet);
- }
- private void doEmptyState()
- {
- menu = bundleMeals;
- displayItemsList();
- alert = "There is nothing in your cart.";
- displayDisplayText();
- }
- private void mainsButton_Click(object sender, RoutedEventArgs e)
- {
- tradeInIds = null;
- menu = valueMeals;
- displayItemsList();
- }
- private void sidesButton_Click(object sender, RoutedEventArgs e)
- {
- tradeInIds = null;
- menu = sides;
- displayItemsList();
- }
- private void beveragesButton_Click(object sender, RoutedEventArgs e)
- {
- tradeInIds = null;
- menu = beverages;
- displayItemsList();
- }
- private void bundlesButton_Click(object sender, RoutedEventArgs e)
- {
- tradeInIds = null;
- menu = bundleMeals;
- displayItemsList();
- }
- private void addButton_Click(object sender, RoutedEventArgs e)
- {
- // If currently a prompt is being displayed, add the bundle meal instead
- if (tradeInIds != null)
- {
- string tradeInId = tradeInIds[itemsListView.SelectedIndex];
- MenuItem tradeIn = tradeIns[tradeInId];
- orderMenuItem(tradeIn);
- // Display the normal menu
- menu = bundleMeals;
- displayItemsList();
- return;
- }
- MenuItem mi = menu[itemsListView.SelectedIndex];
- // Find the possible beverage
- Beverage beverage = null;
- if (mi.ProductList.Count > 1)
- {
- foreach (Product p in mi.ProductList)
- {
- if (p is Beverage)
- {
- beverage = (Beverage)p;
- break;
- }
- }
- }
- // If beverage exists, change menu to beverage selection
- if (beverage != null)
- {
- // Generate new list of MenuItems containing Beverages
- tradeInIds = new List<string>();
- List<MenuItem> tradeInList = new List<MenuItem>();
- foreach (MenuItem i in beverages)
- {
- Beverage b = (Beverage)i.ProductList[0];
- string tradeInId = mi.Name + beverage.Name + b.Name;
- MenuItem tradeIn;
- if (tradeIns.ContainsKey(tradeInId))
- {
- tradeIn = tradeIns[tradeInId];
- }
- else
- {
- // Create the trade-in beverage
- double tradeInPrice = Math.Max(0, b.Price - beverage.Price);
- Beverage tradeInBeverage = new Beverage(b.Name, b.Price, tradeInPrice);
- // Copy `mi` and change the beverage
- tradeIn = new MenuItem(mi.Name, mi.Price + tradeInPrice);
- foreach (Product p in mi.ProductList)
- {
- if (p is Beverage)
- {
- tradeIn.ProductList.Add(tradeInBeverage);
- }
- else
- {
- tradeIn.ProductList.Add(p);
- }
- }
- // Add it to the global dict
- tradeIns.Add(tradeInId, tradeIn);
- }
- foreach (Product p in tradeIn.ProductList)
- {
- if (p is Beverage)
- {
- tradeInIds.Add(tradeInId);
- tradeInList.Add(new MenuItem((Beverage)p));
- }
- }
- }
- // Set the list to menu and display
- menu = tradeInList;
- displayItemsList();
- return;
- }
- // Otherwise add the menu item to the order as per usual
- orderMenuItem(mi);
- }
- private void orderMenuItem(MenuItem mi)
- {
- OrderItem oi = null;
- // If the item exists, increment the quantity
- foreach (OrderItem i in cart.ItemList)
- {
- if (i.Item == mi)
- {
- i.AddQty();
- oi = i;
- break;
- }
- }
- // Otherwise, create a whole new OrderItem
- if (oi == null)
- {
- oi = new OrderItem(mi);
- cart.Add(oi);
- }
- // Refresh the cart
- displayCartsList();
- // Refresh display
- alert = $"{oi.Item.Name} has been added.";
- total = cart.GetTotalAmt();
- displayDisplayText();
- }
- private void orderButton_Click(object sender, RoutedEventArgs e)
- {
- if (cart.ItemList.Count == 0)
- {
- doEmptyState();
- return;
- }
- alert = null;
- total = -1;
- content = "Tom's Cafe";
- receipt = cart.ToString();
- displayDisplayText();
- resetContent();
- receipt = null;
- cart = new Order();
- displayCartsList();
- }
- private void cancelButton_Click(object sender, RoutedEventArgs e)
- {
- if (cart.ItemList.Count == 0)
- {
- doEmptyState();
- return;
- }
- cart = new Order();
- displayCartsList();
- alert = "Your order has been cancelled.";
- total = -1;
- displayDisplayText();
- }
- private void removeButton_Click(object sender, RoutedEventArgs e)
- {
- if (cart.ItemList.Count == 0)
- {
- doEmptyState();
- return;
- }
- OrderItem oi = cart.ItemList[cartsListView.SelectedIndex];
- if (!oi.RemoveQty())
- {
- cart.Remove(cartsListView.SelectedIndex);
- }
- displayCartsList();
- alert = $"{oi.Item.Name} has been removed.";
- total = cart.GetTotalAmt();
- displayDisplayText();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement