/// <summary>
        ///	Update products quantities via batch request
        /// </summary>
        /// <param name="skusQuantities"></param>
        /// <param name="token"></param>
        /// <param name="mark"></param>
        /// <returns></returns>
        public async Task UpdateProductsQuantitiesBySkuAsync(Dictionary <string, int> skusQuantities, CancellationToken token, Mark mark = null)
        {
            if (skusQuantities == null || !skusQuantities.Any())
            {
                return;
            }

            if (mark == null)
            {
                mark = Mark.CreateNew();
            }

            if (token.IsCancellationRequested)
            {
                var exceptionDetails = CreateMethodCallInfo(base.Config.ApiBaseUrl, mark, additionalInfo: this.AdditionalLogInfo());
                var mivaException    = new MivaException(string.Format("{0}. Update products quantities request was cancelled", exceptionDetails));
                MivaLogger.LogTraceException(mivaException);
            }

            var chunks = skusQuantities.SplitToChunks(base.Config.InventoryUpdateBatchSize);

            foreach (var chunk in chunks)
            {
                var request   = new UpdateProductsInventoryBatchRequest(base.Config.Credentials, chunk);
                var responses = await base.PostAsync <IEnumerable <MivaResponse> >(request, token, mark).ConfigureAwait(false);

                if (responses != null && responses.Any())
                {
                    for (int i = 0; i < responses.Count(); i++)
                    {
                        var response = responses.ElementAt(i);

                        if (response.Success == 0)
                        {
                            MivaLogger.LogTrace(new MivaException(response.ErrorMessage, response.ErrorCode),
                                                string.Format("Failed to update product {0} quantity to {1}", chunk.ElementAt(i).Key, chunk.ElementAt(i).Value));
                        }
                    }
                }
            }
        }
        /// <summary>
        ///	Update product's quantity using sku
        /// </summary>
        /// <param name="sku"></param>
        /// <param name="quantity"></param>
        /// <param name="token"></param>
        /// <param name="mark"></param>
        /// <returns></returns>
        public async Task UpdateProductQuantityBySkuAsync(string sku, int quantity, CancellationToken token, Mark mark = null)
        {
            if (mark == null)
            {
                mark = Mark.CreateNew();
            }

            if (token.IsCancellationRequested)
            {
                var exceptionDetails = CreateMethodCallInfo(base.Config.ApiBaseUrl, mark, additionalInfo: this.AdditionalLogInfo());
                var mivaException    = new MivaException(string.Format("{0}. Update product's sku quantity request was cancelled", exceptionDetails));
                MivaLogger.LogTraceException(mivaException);
            }

            var request  = new UpdateProductInventoryRequest(base.Config.Credentials, sku, quantity);
            var response = await base.PostAsync <MivaResponse>(request, token, mark).ConfigureAwait(false);

            if (response.Success == 0)
            {
                MivaLogger.LogTrace(new MivaException(response.ErrorMessage, response.ErrorCode), string.Format("Failed to update product's quantity! Sku: {0}, New quantity: {1}", sku, quantity));
                return;
            }
        }