public bool ReduceInventory(Order order)
        {
            order.AllItemsRetreived = true;
            foreach (OrderDetail orderDetail in order.OrderDetails)
            {
                int inventoryID = orderDetail.InventoryId;
                int count = orderDetail.Quantity;

                Inventory inventoryItem = db.Inventories.Single(i => i.InventoryID == inventoryID);

                if (inventoryItem.QuantityInStock >= orderDetail.Quantity)
                {
                    inventoryItem.QuantityInStock = inventoryItem.QuantityInStock - orderDetail.Quantity;
                    orderDetail.RetreivedFromInventory = true;
                }
                else
                {
                    orderDetail.QuantityShort = orderDetail.Quantity - inventoryItem.QuantityInStock;
                    order.AllItemsRetreived = false;
                    orderDetail.RetreivedFromInventory = false;
                }
            }

            if (order.AllItemsRetreived)
                db.SaveChanges();
            return order.AllItemsRetreived;
        }
        public ActionResult BillingProfile(FormCollection values)
        {
            var order = new Order();
            TryUpdateModel(order);

            try
            {
                if (string.Equals(values["PromoCode"].Trim(), PromoCode,
                    StringComparison.OrdinalIgnoreCase) == false)
                {
                    ViewBag.PromotionCodeAlert = "Use the following promotion code to receive your order without paying: ";
                    ViewBag.PromoCodeValue = PromoCode;
                    return View(order);
                }
                else
                {
                    order.Username = User.Identity.Name;
                    order.OrderDate = DateTime.Now;
                    storeDb.Orders.Add(order);
                    storeDb.SaveChanges();
                    return RedirectToAction("Finalize", new { id = order.OrderId });
                }
            }
            catch
            {
                //Invalid - redisplay with errors
                return View(order);
            }
        }
        public int CreateOrder(Order order)
        {
            decimal orderTotal = 0;
            var cartItems = GetCartItems();

            order.OrderDetails = new List<OrderDetail>();

            // Iterate over the items in the cart, adding the order details for each
            foreach (var item in cartItems)
            {
                var orderDetail = new OrderDetail
                {
                    RecordId = item.RecordId,
                    InventoryId = item.InventoryId,
                    ItemId = item.ItemId,
                    OrderId = order.OrderId,
                    UnitPrice = item.Price,
                    Quantity = item.Count
                };

                order.OrderDetails.Add(orderDetail);

                // Set the order total of the shopping cart
                orderTotal += (item.Count * item.Price);
            }

            order.Total = orderTotal;
            storeDb.SaveChanges();
            //EmptyCart();
            return order.OrderId;
        }
        //
        // GET: /Checkout/AddressAndPayment
        public ActionResult BillingProfile()
        {
            try
            {
                Order mostRecentOrder = storeDb.Orders.Where(o => o.Username == User.Identity.Name)
                                                      .OrderByDescending(o => o.OrderDate).First();

                Order order = new Order();
                order.FirstName = mostRecentOrder.FirstName;
                order.LastName = mostRecentOrder.LastName;
                order.Address = mostRecentOrder.Address;
                order.City = mostRecentOrder.City;
                order.State = mostRecentOrder.State;
                order.PostalCode = mostRecentOrder.PostalCode;
                order.Country = mostRecentOrder.Country;
                order.Phone = mostRecentOrder.Phone;
                order.Email = mostRecentOrder.Email;

                return View(order);
            }
            catch
            {
                return View();
            }
        }
        public bool CheckInventory(Order order)
        {
            order.AllItemsAvailable = true;
            foreach (OrderDetail orderDetail in order.OrderDetails)
            {
                int inventoryID = orderDetail.InventoryId;
                int count = orderDetail.Quantity;

                Inventory inventoryItem = db.Inventories.Single(i => i.InventoryID == inventoryID);

                if (inventoryItem.QuantityInStock < orderDetail.Quantity)
                {
                    orderDetail.QuantityShort = orderDetail.Quantity - inventoryItem.QuantityInStock;
                    order.AllItemsAvailable = false;
                }
                else
                    orderDetail.QuantityShort = 0;
            }
            return order.AllItemsAvailable;
        }