public async Task <IActionResult> Index()
        {
            var sessionCart = HttpContext.Session.GetData <ShoppingCart>();

            if (!(sessionCart is null))
            {
                var cartItems = await _shoppingCartService.GetShoppingCartAsync();

                if (sessionCart.Items.Count() == cartItems.Count())
                {
                    return(View(sessionCart));
                }
            }

            var cart = await InitializeShoppingCartAsync();

            cart = await _campaignService.CalculateAsync(cart);

            cart = await _couponService.CalculateAsync(cart);

            cart.DeliveryCost = await _deliveryService.CalculateDeliveryCostAsync(cart.Items,
                                                                                  COST_PER_DELIVERY, COST_PER_PRODUCT, FIXED_COST);

            //Save shopping cart.
            HttpContext.Session.SetData(cart);

            return(View(cart));
        }