public IActionResult Submit()
        {
            using (var transaction = _db.Database.BeginTransaction()){
                _db.Orders.Add(new Order()
                {
                    OrderCreated = UsersOrder.Storage().OrderCreated,
                    LocationId   = UsersOrder.Storage().Location.Id,
                    UserId       = CurrentUser.Storage().Id
                });

                _db.SaveChanges();
                var fetchOrderId = _db.Orders.Single(o => o.OrderCreated == UsersOrder.Storage().OrderCreated).Id;
                foreach (var PizzaObject in UsersOrder.Storage().Pizzas)
                {
                    _db.Pizzas.Add(new Pizza()
                    {
                        CrustId     = PizzaObject.Crust.Id,
                        SizeId      = PizzaObject.Size.Id,
                        Cost        = PizzaObject.Cost,
                        Description = PizzaObject.Description,
                        OrderId     = fetchOrderId
                    });
                }
                _db.SaveChanges();
                transaction.Commit();
            }
            CurrentUser.Storage().UserAbleToOrder = false;
            UsersOrder.DeleteStorage();
            //remove order infomation
            return(RedirectToAction("Receipt", "Order"));
        }
        public IActionResult AddPizzaToOrder(User a)
        {
            //we have the sizeid and crustid and a list of topping id
            //which the user selected

            //If the user reach this part that mean that
            //user can make an order
            if (UsersOrder.IsEmpty())
            {
                UsersOrder.Storage().Location = _db.Locations.Single(l => l.Id == CurrentUser.Storage().SelectedLocation);
                // _order.Location.PhoneNumber = _db.Locations.Single(l => l.Id == CurrentUser.Storage().SelectedLocation).PhoneNumber;
                // _order.Location.Address = _db.Locations.Single(l => l.Id == a.SelectedLocation).Address;
                UsersOrder.Storage().OrderCreated = DateTime.Now;
                UsersOrder.Storage().User         = CurrentUser.Storage();

                // _order.Pizzas =  new List<Pizza>();

                //place the first pizza in order
                // AddPizzaToUsersOrder(ref a);
            }
            // else{
            // AddPizzaToUsersOrder(ref a);
            // }
            //Check for max toppings
            if (!CheckSelections(a))
            {
                return(RedirectToAction("Index", "Order"));
            }
            AddPizzaToUsersOrder(a);
            CurrentUser.Storage().Messages.MessageType = "AddedToOrder";
            CurrentUser.Storage().Messages.MessageToUser = $"Added a {UsersOrder.Storage().Pizzas.Last().Size.Name} and {UsersOrder.Storage().Pizzas.Last().Crust.Name} pizza to your order!";
            return(RedirectToAction("Index", "Order"));
        }
 public IActionResult Cart()
 {
     if (CurrentUser.Storage().Messages != null)
     {
         CurrentUser.Storage().Messages.MessageType = "";
     }
     //if the user is wants to re-access the cart after a order he will be
     //sent back to the main index
     if (!CurrentUser.Storage().UserAbleToOrder)
     {
         return(RedirectToAction("Index", "Main"));
     }
     return(View(UsersOrder.Storage()));
 }
        private void AddPizzaToUsersOrder(User a)
        {
            var newPizzaToPlace = new Pizza();

            newPizzaToPlace.Crust = _db.Crusts.Single(c => c.Id == a.SelectedCrust);
            newPizzaToPlace.Cost += newPizzaToPlace.Crust.Price;

            newPizzaToPlace.Size  = _db.Sizes.Single(s => s.Id == a.SelectedSize);
            newPizzaToPlace.Cost += newPizzaToPlace.Size.Price;

            newPizzaToPlace.Toppings    = new List <Topping>();
            newPizzaToPlace.Description = "";

            foreach (var selectedToppingId in a.SelectedToppings)
            {
                var fetchTopping = _db.Toppings.Single(t => t.Id == selectedToppingId);
                newPizzaToPlace.Description += fetchTopping.Name + " ";

                newPizzaToPlace.Toppings.Add(fetchTopping);
                newPizzaToPlace.Cost += fetchTopping.Price;
            }
            UsersOrder.Storage().Pizzas.Add(newPizzaToPlace);
        }