/// <summary> /// Return true if user input equals trueOption. trueOption set to "Y" by default. /// </summary> /// <param name="message"></param> public static bool UserConfirmationPrompt(string message, string trueOption = "Y", string falseOption = "N") { string input = UserInput.GetUserInput(message); if (new Regex($"{trueOption}", RegexOptions.IgnoreCase).IsMatch(input)) { return(true); } if (new Regex($"{falseOption}", RegexOptions.IgnoreCase).IsMatch(input)) { return(false); } else { return(UserConfirmationPrompt(message)); } }
public void ProcessPayment() { IMessage view = new MessageView(); //Calculate Subtotal, tax and total myOrder.Subtotal = 0; foreach (Product p in myOrder.PurchaseList) { myOrder.Subtotal += p.Price * p.Qty; } myOrder.Tax = myOrder.Subtotal * Tax.tax; myOrder.Total = myOrder.Subtotal + myOrder.Tax; //Display the information IView paymentView = new PaymentView(myOrder); paymentView.Display(); //ask how they want to pay int input; do { view.Display("Input payment type: "); input = UserInput.GetUserInputAsInteger(""); } while (!IsItemInProductList(input, 0, 3)); switch (input) { case 1: //Cash - Get amount tendered and calculate change myOrder.PayInfo.PayType = POSTerminal.PayType.Cash; do { view.Display($"{myOrder.PayInfo.AmountTenderedMessage}"); myOrder.PayInfo.AmountTendered += UserInput.GetUserInputAsDouble(""); myOrder.PayInfo.Change = myOrder.PayInfo.AmountTendered - myOrder.Total; } while (myOrder.PayInfo.AmountTendered < myOrder.Total); view.Display($"{myOrder.PayInfo.ChangeMessage} {myOrder.PayInfo.Change:C2}"); break; case 2: //Credit - ask for number, expiration and cvv string cancel = string.Empty; do { cancel = string.Empty; myOrder.PayInfo.PayType = POSTerminal.PayType.Credit; view.Display(myOrder.PayInfo.CreditCardNumberMessage); myOrder.PayInfo.CardNumber = UserInput.GetCreditCardNumber().Replace(" ", ""); view.Display(myOrder.PayInfo.ExpirationDateMessage); myOrder.PayInfo.ExpirationDate = UserInput.GetCreditCardExpiration(); if ((myOrder.PayInfo.ExpirationDate.Year == DateTime.Now.Year && myOrder.PayInfo.ExpirationDate.Month < DateTime.Now.Month) || myOrder.PayInfo.ExpirationDate.Year < DateTime.Now.Year) { view.Display("This credit card has expired."); view.Display("Enter r to re-enter the credit card information, enter c to cancel the order: "); cancel = UserInput.GetUserInput(""); if (cancel.ToLower() != "r") { return; } } } while (cancel.ToLower() == "r"); view.Display(myOrder.PayInfo.CvvMessage); myOrder.PayInfo.Cvv = UserInput.GetCreditCardCVV(); view.Display("Enter cash back (press enter or input 0 to skip): "); myOrder.PayInfo.CashBack = UserInput.GetCashBack(); myOrder.PayInfo.AmountTendered = myOrder.Total + myOrder.PayInfo.CashBack; if (myOrder.PayInfo.CashBack != 0) { view.Display($"{myOrder.PayInfo.CashBackMessage} {myOrder.PayInfo.CashBack}"); } break; case 3: //Check - ask for check number myOrder.PayInfo.PayType = POSTerminal.PayType.Check; view.Display(myOrder.PayInfo.CheckNumberMessage); myOrder.PayInfo.CheckNumber = UserInput.GetCheckNumber().Replace(" ", ""); myOrder.PayInfo.AmountTendered = myOrder.Total; break; default: Console.WriteLine("Invalid Selection"); break; } ReceiptView receiptView = new ReceiptView(myOrder); FileIO.WriteToOrderFile(myOrder); receiptView.Display(); }
public void AddToProductFile() { Product newProduct = new Product(); IView addProductView = new AddProductView(productList); IMessage view = new MessageView(); addProductView.Display(); view.Display("\nPlease enter EXIT at any time to quit.\n"); view.Display("Enter new product name: "); string input = UserInput.GetUserInput(""); if (input.ToLower() == "exit") { return; } newProduct.Name = input; view.Display("Enter new product category: "); input = UserInput.GetUserInput(""); if (input.ToLower() == "exit") { return; } newProduct.Category = input; bool checkPrice = false; while (!checkPrice) { view.Display("Enter new product price: "); input = UserInput.GetUserInput(""); if (input.ToLower() == "exit") { return; } if (double.TryParse(input, out double newPrice)) { newProduct.Price = newPrice; checkPrice = true; } } view.Display("Enter new product description: "); input = UserInput.GetUserInput(""); if (input.ToLower() == "exit") { return; } newProduct.Description = input; while (input.ToLower() != "y" && input.ToLower() != "n") { view.Display($"\nName: {newProduct.Name}\nCategory: {newProduct.Category}\nPrice: {newProduct.Price}\nDescription: {newProduct.Description}"); view.Display("\nEnter this product into the database? (y/n): "); input = UserInput.GetUserInput(""); } bool alreadyExists = false; if (input.ToLower() == "y") { foreach (Product p in productList) { if (p.Name.ToLower() == newProduct.Name.ToLower()) { view.Display("A product with this name already exists!\n"); view.Display("This new product will not be added to the database!"); Console.ReadKey(); alreadyExists = true; } } if (!alreadyExists) { FileIO.WriteToProductFile(newProduct); Console.WriteLine("Wrote to File!"); Console.ReadKey(); } } else { view.Display("The new product was not added to the database."); } }
public void AddProductToCart() { ProductListView productListView = new ProductListView(productList); IMessage view = new MessageView(); int quantity = 0; view.Display("1: Search By Name\n2: Search By Category\n3: List All Products\n4: Go Back\n\nMake a selection: "); bool goBack = false; while (!goBack) { int input = UserInput.GetUserInputAsInteger(""); switch (input) { case 1: goBack = true; ProductListView filteredList; do { view.Display("Enter product name: "); string name = UserInput.GetUserInput(""); filteredList = new ProductListView(productListView.GetFilteredList("name", name)); }while (filteredList.ProductList.Count < 1); filteredList.Display(); do { view.Display(string.Format("\nChoose a product (1-{0}): ", filteredList.ProductList.Count)); input = UserInput.GetUserInputAsIntegerOrReturnOne(""); } while (!IsItemInProductList(input, 0, filteredList.ProductList.Count)); input--; view.Display("Enter Quantity: "); quantity = UserInput.GetUserInputAsIntegerOrReturnOne(""); if (myOrder.PurchaseList.Contains(filteredList.ProductList[input])) { myOrder.PurchaseList.Find(x => x.Name == filteredList.ProductList[input].Name).Qty += quantity; } else { filteredList.ProductList[input].Qty += quantity; myOrder.PurchaseList.Add(filteredList.ProductList[input]); } break; case 2: goBack = true; string category; bool proceed = false; do { view.Display("Enter product category (food/beverage): "); category = UserInput.GetUserInput("").ToLower(); switch (category) { case "food": proceed = true; break; case "beverage": proceed = true; break; default: proceed = false; break; } } while (!proceed); ProductListView filteredListByCat = new ProductListView(productListView.GetFilteredList("category", category)); filteredListByCat.Display(); do { view.Display(string.Format("\nChoose a product (1-{0})", filteredListByCat.ProductList.Count)); input = UserInput.GetUserInputAsInteger(""); } while (!IsItemInProductList(input, 0, filteredListByCat.ProductList.Count)); input--; view.Display("Enter Quantity: "); quantity = UserInput.GetUserInputAsIntegerOrReturnOne(""); if (myOrder.PurchaseList.Contains(filteredListByCat.ProductList[input])) { myOrder.PurchaseList.Find(x => x.Name == filteredListByCat.ProductList[input].Name).Qty += quantity; } else { myOrder.PurchaseList.Add(filteredListByCat.ProductList[input]); myOrder.PurchaseList.Find(x => x.Name == filteredListByCat.ProductList[input].Name).Qty += quantity; } break; case 3: goBack = true; productListView.Display(); do { view.Display(string.Format("\nChoose a product (1-{0})", productList.Count)); input = UserInput.GetUserInputAsInteger(""); }while (!IsItemInProductList(input, 0, productList.Count)); input--; view.Display("Enter Quantity: "); quantity = UserInput.GetUserInputAsIntegerOrReturnOne(""); if (myOrder.PurchaseList.Contains(productList[input])) { myOrder.PurchaseList.Find(x => x.Name == productList[input].Name).Qty += quantity; } else { myOrder.PurchaseList.Add(productList[input]); myOrder.PurchaseList.Find(x => x.Name == productList[input].Name).Qty += quantity; } break; case 4: goBack = true; break; default: break; } } }