public IActionResult PlaceOrder(PizzaViewModel pvm) { CrustModel c = new CrustModel() { Name = pvm.Crust }; SizeModel s = new SizeModel() { Name = pvm.Size }; ToppingModel t = new ToppingModel() { Name = pvm.Toppings[0].Name }; PizzaModel p = new PizzaModel() { Crust = c, Size = s, Topping = new List <ToppingModel>() { t } }; OrderModel o = new OrderModel() { Pizzas = new List <PizzaModel>() { p } }; _db.Orders.Add(o); return(RedirectToPage("/Home Page")); }
public IActionResult OrderHistory(OrderViewModel model) { List<OrderModel> orders; try { _ = userLoggedIn; // exception not caught if you just use uLI orders = _repo.GetOrdersForUser(userLoggedIn); } catch (NullReferenceException) { model.ReasonForError = "You are not logged in. Please return to the main page to login and try again."; return View("Error", model); } List<OrderViewClass> orderHistory = new List<OrderViewClass>(); foreach (OrderModel order in orders) { StringBuilder toppings = new StringBuilder(); foreach (string topping in order.Toppings.Split(',')) { int toppingID; if (!int.TryParse(topping, out toppingID)) { Console.WriteLine($"Database error: Expected integer for pizza ID, received {topping}"); toppings.Append("Error, "); continue; } ToppingModel top = _repo.GetTopping(toppingID); toppings.Append($"{top.Name}, "); } toppings.Remove(toppings.Length - 2, 2); OrderViewClass orderView = new OrderViewClass{ OrderID = order.OrderID, Created = order.Created, Size = order.Size, Crust = _repo.GetCrust(order.CrustID).Name, Toppings = toppings.ToString(), Quantity = order.Quantity, Cost = order.TotalCost, StoreName = _repo.GetStore(order.StoreID).Name }; if (order.PizzaID == 0) { orderView.Pizza = "Custom"; } else { try { orderView.Pizza = _repo.GetPizza(order.PizzaID).Name; } catch (NullReferenceException) { Console.WriteLine($"Database error: Could not find a pizza with ID {order.PizzaID} in the Pizza table"); orderView.Pizza = "Error"; } } orderHistory.Add(orderView); } model.OrderHistory = orderHistory; return View(model); }
//CREATE, READ, UPDATE, DELETE public void CreatePizza(PizzaModel pizza) { pizza.Crust = db.Crust.FirstOrDefault(c => c.Name == pizza.Crust.Name); pizza.Size = db.Size.FirstOrDefault(s => s.Name == pizza.Size.Name); foreach (ToppingModel top in pizza.Toppings) { ToppingModel top2 = db.Topping.FirstOrDefault(t => t.Name == top.Name); db.PizzaToppings.Add(new PizzaToppings() { Topping = top2, Pizza = pizza }); } db.SaveChanges(); }
//[ValidateAntiForgeryToken] public IActionResult ConfirmOrder(PizzaViewModel pizzaViewModel) //model binding { //if (ModelState.IsValid) //validating that the requirements in PizzaViewModel are being met //{ CrustModel crust = new CrustModel() { Name = pizzaViewModel.Crust }; SizeModel size = new SizeModel() { Name = pizzaViewModel.Size }; ToppingModel topping = new ToppingModel() { Name = pizzaViewModel.SelectedTopping }; List <ToppingModel> ToppingList = new List <ToppingModel>() { topping }; PizzaModel pizza = new PizzaModel() { Crust = crust, Size = size, Toppings = ToppingList }; _db.Pizzas.Add(pizza); OrderModel order = new OrderModel(); order.UserID = pizzaViewModel.UserID; //order.Pizzas.Add(new PizzaModel(){}) _db.Orders.Add(order); _db.SaveChanges(); return(RedirectToAction("Summary", "User", pizzaViewModel));//http 300-series status //should probably redirect to a user/cart/ or something like that //} //return View("MainOrder"); }
public OrderModel PlaceOrder(OrderModel order) { foreach (PizzaModel pizza1 in order.Pizzas) { PizzaModel pizza; if (!pizza1.Name.Equals("Custom")) { pizza = db.Pizza.FirstOrDefault(p => p.Name.Equals(pizza1.Name)); } else { pizza = new PizzaModel(); pizza.Crust = db.Crust.FirstOrDefault(c => c.Name == pizza1.Crust.Name); pizza.Size = db.Size.FirstOrDefault(s => s.Name == pizza1.Size.Name); foreach (ToppingModel topping in pizza1.Toppings) { ToppingModel topping2 = db.Topping.FirstOrDefault(t => t.Name == topping.Name); db.PizzaToppings.Add(new PizzaToppings() { Pizza = pizza, Topping = topping2 }); //Add to junction table } } db.OrderPizzas.Add(new OrderPizzas() { Order = order, Pizza = pizza }); //Add to junction table } db.SaveChanges(); return(order); }
public void Create(PizzaModel pizza, PizzaStoreDbContext _db) { // Bind Domain PizzaModel to Storing PizzaModel var newPizza = new domain.PizzaModel(); newPizza.Crust = new domain.CrustModel(); newPizza.Size = new domain.SizeModel(); newPizza.Toppings = new List <domain.ToppingModel>(); newPizza.Crust.Name = pizza.Crust.Name; newPizza.Size.Name = pizza.Size.Name; newPizza.Name = pizza.Name; newPizza.Price = pizza.Price; foreach (var t in pizza.Toppings) { List <ToppingModel> newToppings = new List <ToppingModel>(); ToppingModel newTopping = new ToppingModel(); newTopping.Name = t.Name; newPizza.Toppings.Add(newTopping); } _db.Pizzas.Add(newPizza); _db.SaveChanges(); }
// [ValidateAntiForgeryToken] public IActionResult Post(PizzaViewModel pizzaViewModel, int id) //model binding { var return_view = ""; switch (id) { case 1: // set return view for standard pizza orders return_view = "OrderStandard"; break; case 2: // set return view for custom pizza orders pizzaViewModel.Type = "Custom"; return_view = "OrderCustom"; break; default: break; } ; if (ModelState.IsValid) // what is the validation? (add to viewmodel) { var p = new PizzaFactory(); // use dependency injection PizzaModel domainPizzaModel = new PizzaModel(); domainPizzaModel = p.Create(); // factory-created Domain PizzaModel if (pizzaViewModel.Types.Contains(pizzaViewModel.Type) || pizzaViewModel.Type == "Custom") { switch (id) { case 1: //standard pizza chosen pizzaViewModel.SelectedToppings.Clear(); pizzaViewModel.SelectedToppings.AddRange(pizzaViewModel.ToppingSets[pizzaViewModel.Type]); // add topping sets based on chosen pizza type break; case 2: //custom pizza chosen if (pizzaViewModel.SelectedToppings.Contains("dummy")) { return(View(return_view, pizzaViewModel)); // no toppings were chosen at all, return to custom pizza order page } break; default: break; } var pricepertopping = 1.0m; switch (id) { case 1: // set prices for standard pizza orders domainPizzaModel.Price = pizzaViewModel.Prices[pizzaViewModel.Type]; break; case 2: // set prices for custom pizza orders domainPizzaModel.Price = pizzaViewModel.Prices["Cheese"]; //cheapest domainPizzaModel.Price += pizzaViewModel.SelectedToppings.Count * pricepertopping; break; default: break; } ; } else { domainPizzaModel.Price = pizzaViewModel.Prices["Cheese"]; //cheapest pizzaViewModel.SelectedToppings.AddRange(pizzaViewModel.ToppingSets["Cheese"]); } // bind PizzaViewModel to Domain PizzaModel domainPizzaModel.Name = pizzaViewModel.Type; var newC = new CrustModel(); newC.Name = pizzaViewModel.Crust; domainPizzaModel.Crust = newC; var newS = new SizeModel(); newS.Name = pizzaViewModel.Size; domainPizzaModel.Size = newS; foreach (var t in pizzaViewModel.SelectedToppings) { var newToppings = new List <ToppingModel>(); var newTopping = new ToppingModel(); newTopping.Name = t; domainPizzaModel.Toppings.Add(newTopping); } var repo_pizza = new PizzaRepository(); repo_pizza.Create(domainPizzaModel, _db); return_view = "ThankYou"; return(View(return_view)); } return(View(return_view, pizzaViewModel)); }
public void Update(ToppingModel topping) { _DBContext.Toppings.Update(topping); }
public void Remove(ToppingModel topping) { _DBContext.Toppings.Remove(topping); }
public void Add(ToppingModel topping) { _DBContext.Toppings.Add(topping); }
private static void SeedDB(PizzaStoreDBContext DBContext) { var Store1 = new StoreModel { Name = "The Pizza Store", Description = "123 West-Sdie St" }; var Store2 = new StoreModel { Name = "The Pizza Store", Description = "123 Easat-Side St" }; var Stores = new List <StoreModel>() { Store1, Store2 }; var Pizza1 = new PizzaModel { Name = "Cheese", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 10.00M, Description = "Signature Cheese Pizza with our secret 2 blend cheese", Image = "http://placecorgi.com/250" }; var Pizza2 = new PizzaModel { Name = "Pepperoni", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 10.00M, Description = "Peppernoi Pizza with our secret All natural pepperoni", Image = "http://placecorgi.com/250" }; var Pizza3 = new PizzaModel { Name = "Sausage", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 10.00M, Description = "Sausage Pizza with spicy italian sausage", Image = "http://placecorgi.com/250" }; var Pizza4 = new PizzaModel { Name = "Hawaiian", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 15.00M, Description = "Hawaiian Pizza with fresh pinaple", Image = "http://placecorgi.com/250" }; var Pizzas = new List <PizzaModel>() { Pizza1, Pizza2, Pizza3, Pizza4 }; var top1 = new ToppingModel { Name = "Cheese" }; var top2 = new ToppingModel { Name = "Pepperoni" }; var top3 = new ToppingModel { Name = "sausage" }; var top4 = new ToppingModel { Name = "Ham" }; var top5 = new ToppingModel { Name = "Pineapple" }; var Toppings = new List <ToppingModel>() { top1, top2, top3, top4, top5 }; var pizzaFact = new List <PizzaFactory>() { new PizzaFactory { Pizza = Pizza1, Topping = top1 }, new PizzaFactory { Pizza = Pizza1, Topping = top1 }, new PizzaFactory { Pizza = Pizza2, Topping = top1 }, new PizzaFactory { Pizza = Pizza2, Topping = top2 }, new PizzaFactory { Pizza = Pizza3, Topping = top1 }, new PizzaFactory { Pizza = Pizza3, Topping = top3 }, new PizzaFactory { Pizza = Pizza4, Topping = top1 }, new PizzaFactory { Pizza = Pizza4, Topping = top4 }, new PizzaFactory { Pizza = Pizza4, Topping = top5 }, }; var order1 = new OrderModel { FName = "Jordan", LName = "Pittman", Address = "123 OverThere", PlaceTime = DateTime.Now.AddDays(-2), OTotal = 30.00M, }; var orders = new List <OrderModel>() { order1 }; var Odetail = new List <ODetail>() { new ODetail { Order = order1, Pizza = Pizza1, Total = 2, Cost = Pizza1.Price } }; DBContext.Pizza.AddRange(Pizzas); DBContext.order.AddRange(orders); DBContext.Toppings.AddRange(Toppings); DBContext.PizzaToppings.AddRange(pizzaFact); DBContext.Odetail.AddRange(Odetail); DBContext.store.AddRange(Stores); DBContext.SaveChanges(); }
public void SeedDB() { var mnger = _service.GetRequiredService <RoleManager <IdentityRole> >(); var User = _service.GetRequiredService <UserManager <IdentityUser> >(); var Pizza1 = new PizzaModel { Name = "Cheese", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 10.00M }; var Pizza2 = new PizzaModel { Name = "Pepperoni", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 10.00M }; var Pizza3 = new PizzaModel { Name = "Sausage", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 10.00M }; var Pizza4 = new PizzaModel { Name = "Hawaiian", crust = new CrustModel() { Name = "Regular" }, size = new SizeModel() { Name = "Medium" }, Price = 15.00M }; var Pizzas = new List <PizzaModel>() { Pizza1, Pizza2, Pizza3, Pizza4 }; var top1 = new ToppingModel { Name = "Cheese" }; var top2 = new ToppingModel { Name = "Pepperoni" }; var top3 = new ToppingModel { Name = "sausage" }; var top4 = new ToppingModel { Name = "Ham" }; var top5 = new ToppingModel { Name = "Pineapple" }; var Toppings = new List <ToppingModel>() { top1, top2, top3, top4, top5 }; var pizzaFact = new List <PizzaFactory>() { new PizzaFactory { Pizza = Pizza1, Topping = top1 }, new PizzaFactory { Pizza = Pizza1, Topping = top1 }, new PizzaFactory { Pizza = Pizza2, Topping = top1 }, new PizzaFactory { Pizza = Pizza2, Topping = top2 }, new PizzaFactory { Pizza = Pizza3, Topping = top1 }, new PizzaFactory { Pizza = Pizza3, Topping = top3 }, new PizzaFactory { Pizza = Pizza4, Topping = top1 }, new PizzaFactory { Pizza = Pizza4, Topping = top4 }, new PizzaFactory { Pizza = Pizza4, Topping = top5 }, }; var order1 = new OrderModel { FName = "Jordan", LName = "Pittman", Address = "123 OverThere", PlaceTime = DateTime.Now.AddDays(-2), OTotal = 30.00M, }; var orders = new List <OrderModel>() { order1 }; var Odetail = new List <ODetail>() { new ODetail { Order = order1, Pizza = Pizza1, Total = 2, Cost = Pizza1.Price } }; _DBContext.Pizza.AddRange(Pizzas); _DBContext.order.AddRange(orders); _DBContext.Toppings.AddRange(Toppings); _DBContext.PizzaToppings.AddRange(pizzaFact); _DBContext.Odetail.AddRange(Odetail); _DBContext.SaveChanges(); }
public IActionResult SalesReport(SalesReportViewModel model) { _ = storeLoggedIn; model.StoreName = _repo.GetStore(storeLoggedIn).Name; bool submitClicked = Request.Form["submit"].ToString() != ""; bool backClicked = Request.Form["back"].ToString() != ""; if (submitClicked && backClicked) { Console.WriteLine("Both buttons in Sales Report registered as clicked"); model.ReasonForError = "There was an error processing your request. Please try again."; return(View("SalesReport", model)); } else if (submitClicked) { List <OrderModel> listOfOrders = _repo.GetOrders(); Dictionary <DateTime, OrderViewModel> salesReport = new Dictionary <DateTime, OrderViewModel>(); foreach (OrderModel order in listOfOrders) { DateTime dayOfOrder = order.Created.Date; DateTime startingDayOfInterval = dayOfOrder; if (model.Interval == 7) { startingDayOfInterval = dayOfOrder.AddDays(-((int)dayOfOrder.DayOfWeek)); } else if (model.Interval == 30) { startingDayOfInterval = dayOfOrder.AddDays(-(dayOfOrder.Day - 1)); } else { model.ReasonForError = "Please select an interval"; return(View("SalesReport", model)); } StringBuilder toppings = new StringBuilder(); foreach (string topping in order.Toppings.Split(',')) { int toppingID; if (!int.TryParse(topping, out toppingID)) { Console.WriteLine($"Database error: Expected integer for pizza ID, received {topping}"); toppings.Append("Error, "); continue; } ToppingModel top = _repo.GetTopping(toppingID); toppings.Append($"{top.Name}, "); } toppings.Remove(toppings.Length - 2, 2); OrderViewClass orderView = new OrderViewClass { UserID = order.UserID, OrderID = order.OrderID, Created = order.Created, Size = order.Size, Crust = _repo.GetCrust(order.CrustID).Name, Toppings = toppings.ToString(), Quantity = order.Quantity, Cost = order.TotalCost, StoreName = _repo.GetStore(order.StoreID).Name }; if (order.PizzaID == 0) { orderView.Pizza = "Custom"; } else { try { orderView.Pizza = _repo.GetPizza(order.PizzaID).Name; } catch (NullReferenceException) { Console.WriteLine($"Database error: Could not find a pizza with ID {order.PizzaID} in the Pizza table"); orderView.Pizza = "Error"; } } try { salesReport[startingDayOfInterval].OrderHistory.Add(orderView); } catch (KeyNotFoundException) { salesReport.Add(startingDayOfInterval, new OrderViewModel { OrderHistory = new List <OrderViewClass> { orderView } }); } } model.SalesReport = new Dictionary <DateTime, OrderViewModel>(); foreach (DateTime startDate in salesReport.Keys) { OrderViewModel orderView = salesReport[startDate]; model.SalesReport.Add(startDate, new OrderViewModel { OrderHistory = new List <OrderViewClass>() }); foreach (OrderViewClass order in orderView.OrderHistory) { string pizza = order.Pizza; List <OrderViewClass> srOrderHistory = model.SalesReport[startDate].OrderHistory; int i; for (i = 0; i < srOrderHistory.Count(); i++) { OrderViewClass srOrder = model.SalesReport[startDate].OrderHistory[i]; if (srOrder.Pizza == pizza) { break; } } if (i == srOrderHistory.Count()) { srOrderHistory.Add(new OrderViewClass { Pizza = pizza, Quantity = 1, Cost = order.Cost }); } else { srOrderHistory[i].Quantity += 1; srOrderHistory[i].Cost += order.Cost; } model.SalesReport[startDate].IntervalQuantity += 1; model.SalesReport[startDate].IntervalSales += order.Cost; } } return(View("SalesReport", model)); } else // if backClicked { StoreViewModel storeModel = new StoreViewModel { StoreName = model.StoreName, ID = storeLoggedIn }; return(View("Store", storeModel)); } }
public IActionResult OrderHistory(StoreViewModel model) { model.ID = storeLoggedIn; model.StoreName = _repo.GetStore(model.ID).Name; model.OrderHistory = new List <OrderViewClass>(); bool submitClicked = Request.Form["submit"].ToString() != ""; bool backClicked = Request.Form["back"].ToString() != ""; if (submitClicked && backClicked) { model.ReasonForError = "There was a problem processing your request. Please try again."; return(View("OrderHistory", model)); } else if (backClicked) { return(Redirect("/Store/Store")); } if (model.OptionSelected != 1 && model.OptionSelected != 2) { model.ReasonForError = "There was an error processing your request. Please try again."; return(View("OrderHistory", model)); } List <OrderModel> orders; if (model.OptionSelected == 1) { orders = _repo.GetOrdersForStore(model.ID); } else // if model.OptionSelected == 2 { int parsedUserID; if (!int.TryParse(model.FilterHistoryToUser, out parsedUserID)) { model.ReasonForError = "Please enter a positive integer for a user ID"; return(View("OrderHistory", model)); } orders = _repo.GetOrdersForStoreAndUser(model.ID, parsedUserID); } foreach (OrderModel order in orders) { StringBuilder toppings = new StringBuilder(); foreach (string topping in order.Toppings.Split(',')) { int toppingID; if (!int.TryParse(topping, out toppingID)) { Console.WriteLine($"Database error: Expected integer for pizza ID, received {topping}"); toppings.Append("Error, "); continue; } ToppingModel top = _repo.GetTopping(toppingID); toppings.Append($"{top.Name}, "); } toppings.Remove(toppings.Length - 2, 2); OrderViewClass orderView = new OrderViewClass { UserID = order.UserID, OrderID = order.OrderID, Created = order.Created, Size = order.Size, Crust = _repo.GetCrust(order.CrustID).Name, Toppings = toppings.ToString(), Quantity = order.Quantity, Cost = order.TotalCost, StoreName = _repo.GetStore(order.StoreID).Name }; if (order.PizzaID == 0) { orderView.Pizza = "Custom"; } else { try { orderView.Pizza = _repo.GetPizza(order.PizzaID).Name; } catch (NullReferenceException) { Console.WriteLine($"Database error: Could not find a pizza with ID {order.PizzaID} in the Pizza table"); orderView.Pizza = "Error"; } } model.OrderHistory.Add(orderView); } model.ReasonForError = $"{model.OrderHistory.Count()} records found"; return(View("OrderHistory", model)); }
public IActionResult Visit(int ID) { StoreModel store; try { store = _repo.GetStore(ID); } catch (SqlException e) { if (e.Message.Contains("server was not found")) { Console.WriteLine("Could not connect to the SQL database"); StoreViewModel thisModel = new StoreViewModel(); thisModel.ReasonForError = "An internal error has occured. Please return to the main page and try again."; return(View("Error", thisModel)); } throw e; } if (store == null) { StoreViewModel thisModel = new StoreViewModel(); thisModel.ReasonForError = $"A store with an ID of {ID} does not exist. Please enter a different ID from the URL, or select a store from the selection page after logging in."; return(View("Error", thisModel)); } List <MenuModel> items = _repo.GetMenu(ID); List <PizzaModel> pizzas = new List <PizzaModel>(); List <CheckModel> pizzasToSelectFrom = new List <CheckModel>(); List <ToppingModel> toppings = _repo.GetToppings(); foreach (MenuModel item in items) { PizzaModel pizza = _repo.GetPizza(item.PizzaID); if (pizza == null) { Console.WriteLine($"Unknown pizza found with ID {item.PizzaID} from store {item.StoreID} at menu ID {item.ID}"); continue; } string[] temp = pizza.DefaultToppings.Split(','); int[] defaultToppingIDs = new int[temp.Length]; for (int i = 0; i < temp.Length; i++) { if (!int.TryParse(temp[i], out defaultToppingIDs[i])) { Console.WriteLine($"Database error: Expected integer for default topping ID in pizza {pizza.ID}, got {temp[i]}"); continue; } } pizzas.Add(pizza); CrustModel crust = _repo.GetCrust(pizza.DefaultCrustID); ToppingViewModel[] toppingsSelected = new ToppingViewModel[toppings.Count()]; for (int i = 0; i < toppingsSelected.Length; i++) { ToppingModel topping = toppings[i]; toppingsSelected[i] = new ToppingViewModel { ID = topping.ID, Name = topping.Name, IsSelected = defaultToppingIDs.Contains(topping.ID) }; } pizzasToSelectFrom.Add(new CheckModel { ID = pizza.ID, Name = pizza.Name, Checked = false, Cost = pizza.Cost, DefaultCrust = crust.ID, SelectedCrust = crust.ID.ToString(), SelectedToppings = toppingsSelected }); } List <SelectListItem> crustDropDownOptions = new List <SelectListItem>(); foreach (CrustModel crust in _repo.GetCrusts()) { crustDropDownOptions.Add(new SelectListItem { Text = crust.Name, Value = crust.ID.ToString() }); } StoreViewModel model = new StoreViewModel(); model.StoreName = store.Name; model.Menu = pizzasToSelectFrom; try { _ = userLoggedIn; // keeps the session data alive } catch (NullReferenceException) { // people can view menus if they're not logged in, but not order } model.Crusts = crustDropDownOptions; model.Toppings = toppings; TempData["StoreID"] = store.ID; TempData.Keep("StoreID"); return(View(model)); }
public IActionResult SubmitOrder(StoreViewModel model) { TempData.Keep("StoreID"); int storeID = (int)TempData["StoreID"]; try { _ = userLoggedIn; } catch (NullReferenceException) { model.ReasonForError = "You are not logged into the system. You will only be able to view menus until you return to the main page and log in."; return(View("Visit", model)); } StoreModel store = _repo.GetStore(storeID); model.StoreName = store.Name; // reference needs to be re-established if an error occurs submitting the order List <SelectListItem> c = new List <SelectListItem>(); foreach (CrustModel crust in _repo.GetCrusts()) { c.Add(new SelectListItem { Text = crust.Name, Value = crust.ID.ToString() }); } model.Crusts = c; bool submitOrderClicked = Request.Form["SubmitOrder"].ToString() != ""; bool addCustomPizzaClicked = Request.Form["AddCustom"].ToString() != ""; bool backButtonClicked = Request.Form["Back"].ToString() != ""; int buttonsClicked = (submitOrderClicked ? 1 : 0) + (addCustomPizzaClicked ? 1 : 0) + (backButtonClicked ? 1 : 0); if (buttonsClicked > 1) { Console.WriteLine("Multiple buttons registered as clicked on the menu page"); model.ReasonForError = "There was a problem processing your request. Please try again."; return(View("Visit", model)); } else if (submitOrderClicked) { Tuple <int, string> userCanOrder = _repo.UserCanOrder(storeID, userLoggedIn); if (userCanOrder.Item1 == 1) { model.ReasonForError = $"You cannot place another order at any store for {userCanOrder.Item2}"; return(View("Visit", model)); } else if (userCanOrder.Item1 == 2) { model.ReasonForError = $"You cannot place another order at this store for {userCanOrder.Item2}"; return(View("Visit", model)); } decimal overallCost = 0.00M; int overallQuantity = 0; int max = _repo.GetNextOrderNumber(); bool noIssues = true; foreach (CheckModel selectedPizza in model.Menu) { if (selectedPizza.Checked) { string size = selectedPizza.SelectedSize.ToString().ToLower(); if (Enum.IsDefined(typeof(Size), size)) { model.ReasonForError = $"Invalid size on pizza {selectedPizza.Name}"; return(View("Visit", model)); } if (selectedPizza.Quantity == 0) { model.ReasonForError = $"{selectedPizza.Name} pizza must have a quantity greater than 0 if selected to be ordered"; return(View("Visit", model)); } else if (selectedPizza.Quantity < 0) { model.ReasonForError = $"{selectedPizza.Name} pizza must have a positive quantity greater"; return(View("Visit", model)); } int crustID; CrustModel crust = null; if (int.TryParse(selectedPizza.SelectedCrust, out crustID)) { crust = _repo.GetCrust(crustID); } if (crust == null) { model.ReasonForError = $"No crust was selected on the {selectedPizza.Name} pizza. Please try selecting a different crust."; return(View("Visit", model)); } PizzaModel pizza; if (selectedPizza.ID != 0) { pizza = _repo.GetPizza(selectedPizza.ID); } else { pizza = new PizzaModel { Cost = 20.00M }; } if (pizza == null) { Console.WriteLine($"Unknown pizza with ID {selectedPizza.ID} submitted; skipping"); continue; } decimal costOfThesePizzas = pizza.Cost * (decimal)selectedPizza.Quantity; string toppingIDs = ""; int toppingCount = 0; foreach (ToppingViewModel topping in selectedPizza.SelectedToppings) { if (topping.IsSelected) { toppingIDs += $"{topping.ID},"; toppingCount++; } } if (toppingCount > 5) { model.ReasonForError = $"{selectedPizza.Name} has more than 5 toppings selected. Please uncheck some toppings on this pizza."; return(View("Visit", model)); } else if (toppingCount < 2) { model.ReasonForError = $"{selectedPizza.Name} needs at least 2 toppings selected. Please add some more toppings on this pizza."; return(View("Visit", model)); } toppingIDs = toppingIDs.Substring(0, toppingIDs.Length - 1); noIssues &= _repo.AddOrder(new OrderModel { OrderID = max + 1, StoreID = storeID, PizzaID = pizza.ID, UserID = userLoggedIn, Created = DateTime.Now, Quantity = selectedPizza.Quantity, TotalCost = costOfThesePizzas, Size = selectedPizza.SelectedSize.ToString(), CrustID = crust.ID, Toppings = toppingIDs }); overallCost += costOfThesePizzas; overallQuantity += selectedPizza.Quantity; } } if (overallCost > 250.00M) { model.ReasonForError = "This order exceeds $250. Please remove some pizzas, then try again."; return(View("Visit", model)); } else if (overallQuantity > 50) { model.ReasonForError = "This order exceeds 50 pizzas. Please remove some pizzas, then try again."; return(View("Visit", model)); } else if (overallQuantity == 0) { model.ReasonForError = "There are no pizzas in this order. Please add some pizzas, then try again."; return(View("Visit", model)); } else if (!noIssues) { model.ReasonForError = "There was a problem adding some pizzas to your order"; } return(View("Submitted")); } else if (addCustomPizzaClicked) { List <ToppingModel> toppings = _repo.GetToppings(); ToppingViewModel[] toppingsSelected = new ToppingViewModel[toppings.Count()]; for (int i = 0; i < toppingsSelected.Length; i++) { ToppingModel topping = toppings[i]; toppingsSelected[i] = new ToppingViewModel { ID = topping.ID, Name = topping.Name, IsSelected = false }; } model.Menu.Add(new CheckModel { ID = 0, Name = "Custom", Checked = true, Cost = 20.00M, DefaultCrust = 0, SelectedToppings = toppingsSelected }); return(View("Visit", model)); } else if (backButtonClicked) { return(Redirect("/User/StoreSelection")); } else // no buttons check is placed down here to remove the 'not all code paths return a value' error { Console.WriteLine("Request was sent but no buttons registered as clicked"); model.ReasonForError = "There was a problem processing your request. Please try again."; return(View("Visit", model)); } }