Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 12.91 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.         List<MenuItem> bundleMeals = new List<MenuItem>();
  26.         List<MenuItem> valueMeals = new List<MenuItem>();
  27.         List<MenuItem> sides = new List<MenuItem>();
  28.         List<MenuItem> beverages = new List<MenuItem>();
  29.         Dictionary<string, MenuItem> tradeIns = new Dictionary<string, MenuItem>();
  30.  
  31.         List<string> tradeInIds;
  32.  
  33.         List<MenuItem> menu = new List<MenuItem>();
  34.         Order cart = new Order();
  35.  
  36.         // displayText
  37.         string alert;
  38.         double total = -1;
  39.         string content;
  40.         string receipt;
  41.  
  42.         public MainPage()
  43.         {
  44.             this.InitializeComponent();
  45.             resetContent();
  46.             createItems();
  47.             displayItemsList();
  48.             displayDisplayText();
  49.         }
  50.  
  51.         private void resetContent()
  52.         {
  53.             content = @"Welcome to Tom's Cafe!
  54.  
  55. Choose your item from the menu.";
  56.         }
  57.  
  58.         private void displayItemsList()
  59.         {
  60.             // Render it
  61.             List<string> data = new List<string>();
  62.             foreach (MenuItem i in menu)
  63.             {
  64.                 // Check for Value Meal availibility
  65.                 bool notAvailable = false;
  66.                 foreach (Product p in i.ProductList)
  67.                 {
  68.                     if (p is ValueMeal && !((ValueMeal)p).IsAvailable())
  69.                     {
  70.                         notAvailable = true;
  71.                     }
  72.                 }
  73.                 if (notAvailable) continue;
  74.  
  75.                 data.Add(i.ToString());
  76.             }
  77.             itemsListView.ItemsSource = data;
  78.         }
  79.  
  80.         private void displayCartsList()
  81.         {
  82.             List<string> data = new List<string>();
  83.             foreach (OrderItem i in cart.ItemList)
  84.             {
  85.                 data.Add(i.ToString());
  86.             }
  87.             cartsListView.ItemsSource = data;
  88.         }
  89.  
  90.         // alert: string or null
  91.         // total: positive or negative (no display)
  92.         // content: string or null
  93.         // receipt: string or null
  94.         private void displayDisplayText()
  95.         {
  96.             string str = "";
  97.  
  98.             if (alert != null)
  99.             {
  100.                 str += alert;
  101.                 str += "\n";
  102.             }
  103.  
  104.             if (total >= 0)
  105.             {
  106.                 str += $"Total: ${total:0.00}";
  107.                 str += "\n\n";
  108.             }
  109.             else if (alert != null)
  110.             {
  111.                 str += "\n";
  112.             }
  113.  
  114.             if (content != null)
  115.             {
  116.                 str += content;
  117.                 str += "\n\n";
  118.             }
  119.  
  120.             if (receipt != null)
  121.             {
  122.                 str += receipt;
  123.             }
  124.  
  125.             displayText.Text = str;
  126.         }
  127.  
  128.         private void createItems()
  129.         {
  130.             /* Products */
  131.             Beverage cola =     new Beverage("Cola",      2.85,  0.0);
  132.             Beverage greenTea = new Beverage("Green Tea", 3.70,  0.0);
  133.             Beverage coffee =   new Beverage("Coffee",    2.70,  0.0);
  134.             Beverage tea =      new Beverage("Tea",       2.70,  0.0);
  135.             Beverage rootBeer = new Beverage("Root Beer", 9.70,  0.0);
  136.             Beverage mocktail = new Beverage("Mocktail",  15.90, 0.0);
  137.  
  138.             Side hashBrown =    new Side("Hash brown",    2.10);
  139.             Side truffleFries = new Side("Truffle fries", 3.70);
  140.             Side calamari =     new Side("Calamari",      3.40);
  141.             Side caesarSalad =  new Side("Caesar salad",  4.30);
  142.  
  143.             ValueMeal hotcakeWithSausage = new ValueMeal("Hotcake with sausage", 6.90,  new DateTime(), new DateTime());
  144.             ValueMeal hamburger =          new ValueMeal("Hamburger",            7.50,  new DateTime(), new DateTime());
  145.             ValueMeal nasiLemak =          new ValueMeal("Nasi Lemak",           5.40,  new DateTime(), new DateTime());
  146.             ValueMeal ribeyeSteak =        new ValueMeal("Ribeye steak",         10.20, new DateTime(), new DateTime());
  147.  
  148.             /* Menu Item */
  149.             beverages.Add(new MenuItem(cola));
  150.             beverages.Add(new MenuItem(greenTea));
  151.             beverages.Add(new MenuItem(coffee));
  152.             beverages.Add(new MenuItem(tea));
  153.             beverages.Add(new MenuItem(rootBeer));
  154.             beverages.Add(new MenuItem(mocktail));
  155.  
  156.             sides.Add(new MenuItem(hashBrown));
  157.             sides.Add(new MenuItem(truffleFries));
  158.             sides.Add(new MenuItem(calamari));
  159.             sides.Add(new MenuItem(caesarSalad));
  160.  
  161.             valueMeals.Add(new MenuItem(hotcakeWithSausage));
  162.             valueMeals.Add(new MenuItem(hamburger));
  163.             valueMeals.Add(new MenuItem(nasiLemak));
  164.             valueMeals.Add(new MenuItem(ribeyeSteak));
  165.  
  166.             MenuItem breakfastSet = new MenuItem("Breakfast set", 7.90);
  167.             breakfastSet.ProductList.Add(hotcakeWithSausage);
  168.             breakfastSet.ProductList.Add(hashBrown);
  169.             bundleMeals.Add(breakfastSet);
  170.  
  171.             MenuItem hamburgerCombo = new MenuItem("Hamburger combo", 10.20);
  172.             hamburgerCombo.ProductList.Add(hamburger);
  173.             hamburgerCombo.ProductList.Add(truffleFries);
  174.             hamburgerCombo.ProductList.Add(cola);
  175.             bundleMeals.Add(hamburgerCombo);
  176.  
  177.             MenuItem dinnerSet = new MenuItem("Dinner set", 18.50);
  178.             dinnerSet.ProductList.Add(ribeyeSteak);
  179.             dinnerSet.ProductList.Add(truffleFries);
  180.             dinnerSet.ProductList.Add(cola);
  181.             bundleMeals.Add(dinnerSet);
  182.         }
  183.  
  184.         private void doEmptyState()
  185.         {
  186.             menu = bundleMeals;
  187.             displayItemsList();
  188.  
  189.             alert = "There is nothing in your cart.";
  190.             displayDisplayText();
  191.         }
  192.  
  193.         private void mainsButton_Click(object sender, RoutedEventArgs e)
  194.         {
  195.             tradeInIds = null;
  196.             menu = valueMeals;
  197.             displayItemsList();
  198.         }
  199.  
  200.         private void sidesButton_Click(object sender, RoutedEventArgs e)
  201.         {
  202.             tradeInIds = null;
  203.             menu = sides;
  204.             displayItemsList();
  205.         }
  206.  
  207.         private void beveragesButton_Click(object sender, RoutedEventArgs e)
  208.         {
  209.             tradeInIds = null;
  210.             menu = beverages;
  211.             displayItemsList();
  212.         }
  213.  
  214.         private void bundlesButton_Click(object sender, RoutedEventArgs e)
  215.         {
  216.             tradeInIds = null;
  217.             menu = bundleMeals;
  218.             displayItemsList();
  219.         }
  220.  
  221.         private void addButton_Click(object sender, RoutedEventArgs e)
  222.         {
  223.             // If currently a prompt is being displayed, add the bundle meal instead
  224.             if (tradeInIds != null)
  225.             {
  226.                 string tradeInId = tradeInIds[itemsListView.SelectedIndex];
  227.                 MenuItem tradeIn = tradeIns[tradeInId];
  228.                 orderMenuItem(tradeIn);
  229.  
  230.                 // Display the normal menu
  231.                 menu = bundleMeals;
  232.                 displayItemsList();
  233.  
  234.                 return;
  235.             }
  236.  
  237.             MenuItem mi = menu[itemsListView.SelectedIndex];
  238.  
  239.             // Find the possible beverage
  240.             Beverage beverage = null;
  241.             if (mi.ProductList.Count > 1)
  242.             {
  243.                 foreach (Product p in mi.ProductList)
  244.                 {
  245.                     if (p is Beverage)
  246.                     {
  247.                         beverage = (Beverage)p;
  248.                         break;
  249.                     }
  250.                 }
  251.             }
  252.  
  253.             // If beverage exists, change menu to beverage selection
  254.             if (beverage != null)
  255.             {
  256.                 // Generate new list of MenuItems containing Beverages
  257.                 tradeInIds = new List<string>();
  258.                 List<MenuItem> tradeInList = new List<MenuItem>();
  259.                 foreach (MenuItem i in beverages)
  260.                 {
  261.                     Beverage b = (Beverage)i.ProductList[0];
  262.  
  263.                     string tradeInId = mi.Name + beverage.Name + b.Name;
  264.                     MenuItem tradeIn;
  265.  
  266.                     if (tradeIns.ContainsKey(tradeInId))
  267.                     {
  268.                         tradeIn = tradeIns[tradeInId];
  269.                     }
  270.                     else
  271.                     {
  272.                         // Create the trade-in beverage
  273.                         double tradeInPrice = Math.Max(0, b.Price - beverage.Price);
  274.                         Beverage tradeInBeverage = new Beverage(b.Name, b.Price, tradeInPrice);
  275.  
  276.                         // Copy `mi` and change the beverage
  277.                         tradeIn = new MenuItem(mi.Name, mi.Price + tradeInPrice);
  278.                         foreach (Product p in mi.ProductList)
  279.                         {
  280.                             if (p is Beverage)
  281.                             {
  282.                                 tradeIn.ProductList.Add(tradeInBeverage);
  283.                             }
  284.                             else
  285.                             {
  286.                                 tradeIn.ProductList.Add(p);
  287.                             }
  288.                         }
  289.  
  290.                         // Add it to the global dict
  291.                         tradeIns.Add(tradeInId, tradeIn);
  292.                     }
  293.  
  294.                     foreach (Product p in tradeIn.ProductList)
  295.                     {
  296.                         if (p is Beverage)
  297.                         {
  298.                             tradeInIds.Add(tradeInId);
  299.                             tradeInList.Add(new MenuItem((Beverage)p));
  300.                         }
  301.                     }
  302.                 }
  303.  
  304.                 // Set the list to menu and display
  305.                 menu = tradeInList;
  306.                 displayItemsList();
  307.  
  308.                 return;
  309.             }
  310.  
  311.             // Otherwise add the menu item to the order as per usual
  312.             orderMenuItem(mi);
  313.         }
  314.  
  315.         private void orderMenuItem(MenuItem mi)
  316.         {
  317.             OrderItem oi = null;
  318.  
  319.             // If the item exists, increment the quantity
  320.             foreach (OrderItem i in cart.ItemList)
  321.             {
  322.                 if (i.Item == mi)
  323.                 {
  324.                     i.AddQty();
  325.                     oi = i;
  326.                     break;
  327.                 }
  328.             }
  329.  
  330.             // Otherwise, create a whole new OrderItem
  331.             if (oi == null)
  332.             {
  333.                 oi = new OrderItem(mi);
  334.                 cart.Add(oi);
  335.             }
  336.  
  337.             // Refresh the cart
  338.             displayCartsList();
  339.  
  340.             // Refresh display
  341.             alert = $"{oi.Item.Name} has been added.";
  342.             total = cart.GetTotalAmt();
  343.             displayDisplayText();
  344.         }
  345.  
  346.         private void orderButton_Click(object sender, RoutedEventArgs e)
  347.         {
  348.             if (cart.ItemList.Count == 0)
  349.             {
  350.                 doEmptyState();
  351.                 return;
  352.             }
  353.  
  354.             alert = null;
  355.             total = -1;
  356.             content = "Tom's Cafe";
  357.             receipt = cart.ToString();
  358.             displayDisplayText();
  359.             resetContent();
  360.             receipt = null;
  361.  
  362.             cart = new Order();
  363.             displayCartsList();
  364.         }
  365.  
  366.         private void cancelButton_Click(object sender, RoutedEventArgs e)
  367.         {
  368.             if (cart.ItemList.Count == 0)
  369.             {
  370.                 doEmptyState();
  371.                 return;
  372.             }
  373.  
  374.             cart = new Order();
  375.             displayCartsList();
  376.  
  377.             alert = "Your order has been cancelled.";
  378.             total = -1;
  379.             displayDisplayText();
  380.         }
  381.  
  382.         private void removeButton_Click(object sender, RoutedEventArgs e)
  383.         {
  384.             if (cart.ItemList.Count == 0)
  385.             {
  386.                 doEmptyState();
  387.                 return;
  388.             }
  389.  
  390.             OrderItem oi = cart.ItemList[cartsListView.SelectedIndex];
  391.             if (!oi.RemoveQty())
  392.             {
  393.                 cart.Remove(cartsListView.SelectedIndex);
  394.             }
  395.  
  396.             displayCartsList();
  397.  
  398.             alert = $"{oi.Item.Name} has been removed.";
  399.             total = cart.GetTotalAmt();
  400.             displayDisplayText();
  401.         }
  402.     }
  403. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement