/// <summary> /// Returns the index option selected by the user /// </summary> private int SelectOption(int optionIndex = 0) { //the following code enables option selection with arrow keys and enter int optIndex = 0; int optionsCount = ObjectSelections.OptionsList.Count; Console.CursorVisible = false; ObjectSelections.SelectCurrentOptionAt(optionIndex); ConsoleKeyInfo key = Console.ReadKey(true); while (key.Key != ConsoleKey.Enter) { switch (key.Key) { case ConsoleKey.DownArrow: ObjectSelections.DeselectCurrentOptionAt(optIndex); if (optIndex + 1 >= optionsCount) { optIndex = (optIndex % (optionsCount - 1)) - 1; } ObjectSelections.SelectCurrentOptionAt(++optIndex); break; case ConsoleKey.UpArrow: ObjectSelections.DeselectCurrentOptionAt(optIndex); if (optIndex - 1 < 0) { optIndex += optionsCount; } ObjectSelections.SelectCurrentOptionAt(--optIndex); break; case ConsoleKey.Tab: GInterface.SetWindowSize(GInterface.productPageWindowSize[0], GInterface.productPageWindowSize[1]); GInterface.ShowCart(); do { Console.CursorLeft = 0; Console.Write(' '); key = Console.ReadKey(true); } while (key.Key != ConsoleKey.Tab && key.Key != ConsoleKey.Escape); Console.Clear(); GInterface.SetWindowSize(GInterface.mainPageWindowSize[0], GInterface.mainPageWindowSize[1]); Console.WriteLine($"Total: {shoppingCartTotal:f2}bgn"); GInterface.PrintMainPageHeadder(); GInterface.PrintOptions(ObjectSelections.OptionsList); ObjectSelections.SelectCurrentOptionAt(optionIndex); break; case ConsoleKey.Escape: Console.Clear(); Console.WriteLine("Visit us again :)"); //Console.ReadKey(); Environment.Exit(0); break; } key = Console.ReadKey(true); } Console.CursorVisible = true; return(pickedOptionIndex = optIndex); }
/// <summary> /// Enables option selection /// </summary> /// <param name="optionIndex"></param> private void SelectProduct(int optionIndex) { int productIndex = 0; int categoryIndex = -1; int listLenght = GInterface.GetListLenghtByCategory(optionIndex); ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); var key = Console.ReadKey(true); while (!(key.Key == ConsoleKey.Escape || key.Key == ConsoleKey.Backspace)) { switch (key.Key) { case ConsoleKey.DownArrow: //select next product ObjectSelections.DeselectCurrentProductAt(productIndex, optionIndex); if (productIndex + 1 >= listLenght) { productIndex = (productIndex % (listLenght - 1)) - 1; } ObjectSelections.SelectCurrentProductAt(++productIndex, optionIndex); break; case ConsoleKey.UpArrow: //select previous product ObjectSelections.DeselectCurrentProductAt(productIndex, optionIndex); if (productIndex - 1 < 0) { productIndex = listLenght; } ObjectSelections.SelectCurrentProductAt(--productIndex, optionIndex); break; case ConsoleKey.Enter: //add to cart bool isOutOfStock = false; dynamic categorizedList = GInterface.GetCategorizedList(optionIndex, controller); string productType = categorizedList[productIndex].GetType().Name.ToString(); object currentProduct = categorizedList[productIndex]; switch (currentProduct.GetType().Name.ToString()) { case "Supplement": categoryIndex = 0; Supplement supplement = (Supplement)currentProduct; if (supplement.Quantity <= 0) { isOutOfStock = true; GInterface.ShowOutOfStockMsg(productIndex); Console.CursorLeft = 0; ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); } else //add to cart and update database { controller.DecreaseQuantityOf(currentProduct, 1); //controller.AddToCart(supplement, categoryIndex); GInterface.SupplementList = (List <Supplement>)controller.GetAllBasedOnCategory(SupplementIndex); ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); shoppingCartTotal += supplement.Price; GInterface.RefreshCartTotal(shoppingCartTotal); } break; case "Drink": categoryIndex = 1; Drink drink = (Drink)currentProduct; if (drink.Quantity <= 0) { isOutOfStock = true; GInterface.ShowOutOfStockMsg(productIndex); Console.CursorLeft = 0; ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); } else //add to cart and update database { controller.DecreaseQuantityOf(currentProduct, 1); //controller.AddToCart(supplement, categoryIndex); GInterface.DrinksList = (List <Drink>)controller.GetAllBasedOnCategory(drinksIndex); ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); shoppingCartTotal += drink.Price; GInterface.RefreshCartTotal(shoppingCartTotal); } break; case "Equipment": categoryIndex = 2; Equipment equipment = (Equipment)currentProduct; if (equipment.Quantity <= 0) { isOutOfStock = true; GInterface.ShowOutOfStockMsg(productIndex); Console.CursorLeft = 0; ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); } else { controller.DecreaseQuantityOf(currentProduct); GInterface.EquipmentsList = (List <Equipment>)controller.GetAllBasedOnCategory(2); ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); GInterface.RefreshCartTotal(shoppingCartTotal); shoppingCartTotal += equipment.Price; GInterface.RefreshCartTotal(shoppingCartTotal); } break; } if (!isOutOfStock) { //if product exists in cart, increase ShoppingCartProductCounter by 1; if (GInterface.ObjectListContainsProduct(GInterface.ShoppingCartList, currentProduct, productType)) { GInterface.ShoppingCartProductCounter[GInterface.indexerOfProductsCounter]++; controller.IncreaseQuantityOfCartProductIfExists(currentProduct, categoryIndex); GInterface.CartList = controller.GetCart(); } //if product does not exist in cart, create it else { //integrated logic prohibits quantity increasing if product alreadt exists if (controller.IncreaseQuantityOfCartProductIfExists(currentProduct, categoryIndex)) { controller.AddToCart(currentProduct, categoryIndex); GInterface.CartList = controller.GetCart(); } GInterface.ShoppingCartProductCounter.Add(1); GInterface.ShoppingCartList.Add(currentProduct); } Console.WriteLine(); } break; case ConsoleKey.Tab: //show/hide cart do { GInterface.ShowCart(); Console.CursorLeft = 0; key = Console.ReadKey(true); /* * if (key.Key == ConsoleKey.Spacebar) * { * GInterface.ShowCartInTableForm(GInterface.CartList, controller.GetThePriceOfAllProductsInCart()); * }*/ } while (key.Key != ConsoleKey.Tab && key.Key != ConsoleKey.Escape); Console.Clear(); GInterface.PrintProductsPageHeadder(shoppingCartTotal, optionIndex); GInterface.PrintProductsFormated(optionIndex); ObjectSelections.SelectCurrentProductAt(productIndex, optionIndex); break; } key = Console.ReadKey(true); } Console.Clear(); return; }