/// <summary>
        /// Calculates the subtotal (unit price multiplied by <see cref="ShoppingCartItem.Quantity"/>) for a given shopping cart item.
        /// </summary>
        /// <param name="priceCalculationService">Price calculation service.</param>
        /// <param name="cartItem">Shopping cart item.</param>
        /// <param name="ignoreDiscounts">A value indicating whether to ignore discounts.</param>
        /// <param name="targetCurrency">The target currency to use for money conversion. Obtained from <see cref="IWorkContext.WorkingCurrency"/> if <c>null</c>.</param>
        /// <returns>Calculated subtotal.</returns>
        public static async Task <CalculatedPrice> CalculateSubtotalAsync(
            this IPriceCalculationService2 priceCalculationService,
            OrganizedShoppingCartItem cartItem,
            bool ignoreDiscounts    = false,
            Currency targetCurrency = null)
        {
            Guard.NotNull(priceCalculationService, nameof(priceCalculationService));
            Guard.NotNull(cartItem, nameof(cartItem));

            var options = priceCalculationService.CreateDefaultOptions(false, cartItem.Item.Customer, targetCurrency);

            options.IgnoreDiscounts = ignoreDiscounts;

            var context = new PriceCalculationContext(cartItem, options);

            var(_, subtotal) = await priceCalculationService.CalculateSubtotalAsync(context);

            return(subtotal);
        }