/// <summary>
 /// Get OrderItem by ID
 /// </summary>
 /// <param name="OrderItemID">OrderItem ID</param>
 /// <returns></returns>
 public Task <OrderItem> GetOrderItemAsync(int OrderItemID)
 {
     return(Task.Run(() =>
     {
         return OrderItem.ExecuteCreate(OrderItemID);
     }));
 }
        /// <summary>
        /// Delete an OrderItem
        /// </summary>
        /// <param name="ID"></param>
        /// <returns></returns>
        public Task <bool> DeleteOrderItemAsync(int ID)
        {
            return(Task.Run(async() =>
            {
                OrderItem orderItem = OrderItem.ExecuteCreate(ID);
                orderItem.Delete();

                await UpdateTotalOfOrder(orderItem.OrderID);

                orderItem = OrderItem.ExecuteCreate(ID);

                return (orderItem == null) ? true : false;
            }));
        }
        public ActionResult ShoppingCartView(string name)
        {
            if (name != null)
            {
                ShoppingCartModels cart = ShoppingCartModels.GetInstanceOfObject();

                cart.TotalPrice = cart.TotalPrice - cart.ProductsList[name].Price;
                cart.ProductsList.Remove(name);

                return(View(cart));
            }
            else
            {
                //Save shopping cart code
                ShoppingCartModels cart = ShoppingCartModels.GetInstanceOfObject();
                int          accountID  = Int32.Parse(Session["CurrentID"].ToString());
                Order        order      = Order.ExecuteCreate(accountID, 1, 1, cart.TotalPrice);
                decimal      subtotal   = 0;
                bool         isPresent  = false;
                List <Order> orderList  = Order.ListByAccountID(accountID);

                order.Insert();

                foreach (Order o in orderList)
                {
                    List <OrderItem> orderItemList = OrderItem.ListByOrderID(o.ID);

                    foreach (OrderItem item in orderItemList)
                    {
                        item.Delete();
                    }
                }

                foreach (string key in cart.ProductsList.Keys)
                {
                    Product product = cart.ProductsList[key];
                    subtotal = subtotal + product.Price;
                    OrderItem orderItem = OrderItem.ExecuteCreate(order.ID, product.ID, 1, product.Price, subtotal);

                    if (!isPresent)
                    {
                        orderItem.Insert();
                    }
                }
                return(View(cart));
            }
        }
        /// <summary>
        /// Create an OrderItem
        /// </summary>
        /// <param name="OrderID"></param>
        /// <param name="ProductID"></param>
        /// <param name="Quantity"></param>
        /// <param name="UnitCost"></param>
        /// <param name="Subtotal"></param>
        /// <returns></returns>
        public Task <bool> CreateOrderItemAsync(
            int OrderID,
            int ProductID,
            int Quantity,
            decimal UnitCost,
            decimal Subtotal)
        {
            return(Task.Run(async() =>
            {
                bool result = false;
                OrderItem orderItem = OrderItem.ExecuteCreate(OrderID, ProductID, Quantity, UnitCost, Subtotal);
                orderItem.Insert();

                await UpdateTotalOfOrder(orderItem.OrderID);

                result = true;
                return result;
            }));
        }
        /// <summary>
        /// Update an Existing OrderItem
        /// </summary>
        /// <param name="ID"></param>
        /// <param name="Quantity"></param>
        /// <param name="UnitCost"></param>
        /// <param name="Subtotal"></param>
        /// <returns></returns>
        public Task <bool> UpdateOrderItemAsync(
            int ID,
            int Quantity,
            decimal UnitCost,
            decimal Subtotal)
        {
            return(Task.Run(async() =>
            {
                bool result = false;
                OrderItem orderItem = OrderItem.ExecuteCreate(ID);

                if (orderItem != null)
                {
                    orderItem.Update(Quantity, UnitCost, Subtotal);

                    result = true;

                    await UpdateTotalOfOrder(orderItem.OrderID);
                }

                return result;
            }));
        }