public virtual async Task EvaluateProductPricesAsync(IEnumerable <Product> products, WorkContext workContext) { if (products == null) { throw new ArgumentNullException(nameof(products)); } if (workContext == null) { throw new ArgumentNullException(nameof(workContext)); } //Evaluate products prices var evalContext = workContext.ToPriceEvaluationContext(products); var cacheKey = CacheKey.With(GetType(), "EvaluateProductPricesAsync", evalContext.GetCacheKey()); var pricesResponse = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) => { cacheEntry.AddExpirationToken(PricingCacheRegion.CreateChangeToken()); cacheEntry.AddExpirationToken(_apiChangesWatcher.CreateChangeToken()); return(await _pricingApi.EvaluatePricesAsync(evalContext.ToPriceEvaluationContextDto())); }); ApplyProductPrices(products, pricesResponse, workContext); //Evaluate product discounts //Fill product inventories for getting InStockQuantity data for promotion evaluation await _inventoryService.EvaluateProductInventoriesAsync(products.ToList(), workContext); var promoEvalContext = workContext.ToPromotionEvaluationContext(products); await _promotionEvaluator.EvaluateDiscountsAsync(promoEvalContext, products); //Evaluate product taxes var taxEvalContext = workContext.ToTaxEvaluationContext(products); await _taxEvaluator.EvaluateTaxesAsync(taxEvalContext, products); }
public virtual async Task<IEnumerable<ShippingMethod>> GetAvailableShippingMethodsAsync() { var workContext = _workContextAccessor.WorkContext; //Request available shipping rates var retVal = await _cartService.GetAvailableShippingMethodsAsync(Cart); //Evaluate promotions cart and apply rewards for available shipping methods var promoEvalContext = Cart.ToPromotionEvaluationContext(); await _promotionEvaluator.EvaluateDiscountsAsync(promoEvalContext, retVal); //Evaluate taxes for available shipping rates var taxEvalContext = Cart.ToTaxEvalContext(workContext.CurrentStore); taxEvalContext.Lines.Clear(); taxEvalContext.Lines.AddRange(retVal.SelectMany(x => x.ToTaxLines())); await _taxEvaluator.EvaluateTaxesAsync(taxEvalContext, retVal); return retVal; }
public virtual async Task <ICollection <ShippingMethod> > GetAvailableShippingMethodsAsync() { var workContext = _workContextFactory(); //Request available shipping rates var shippingRates = await _cartApi.CartModule.GetAvailableShippingRatesAsync(Cart.Id); var retVal = shippingRates.Select(x => x.ToShippingMethod(Cart.Currency, workContext.AllCurrencies)).OrderBy(x => x.Priority).ToList(); //Evaluate promotions cart and apply rewards for available shipping methods var promoEvalContext = Cart.ToPromotionEvaluationContext(); await _promotionEvaluator.EvaluateDiscountsAsync(promoEvalContext, retVal); //Evaluate taxes for available shipping rates var taxEvalContext = Cart.ToTaxEvalContext(); taxEvalContext.Lines.Clear(); taxEvalContext.Lines.AddRange(retVal.SelectMany(x => x.ToTaxLines())); await _taxEvaluator.EvaluateTaxesAsync(taxEvalContext, retVal); return(retVal); }
public virtual async Task EvaluateProductPricesAsync(ICollection <Product> products, WorkContext workContext) { //Evaluate products prices var evalContext = workContext.ToPriceEvaluationContextDto(products); var pricesResponse = await _pricingApi.PricingModule.EvaluatePricesAsync(evalContext); ApplyProductPricesInternal(products, pricesResponse, workContext); //Evaluate product discounts var promoEvalContext = workContext.ToPromotionEvaluationContext(products); await _promotionEvaluator.EvaluateDiscountsAsync(promoEvalContext, products); //Evaluate product taxes var taxEvalContext = workContext.ToTaxEvaluationContext(products); await _taxEvaluator.EvaluateTaxesAsync(taxEvalContext, products); }
public virtual async Task EvaluateProductPricesAsync(ICollection <Product> products, WorkContext workContext) { //Evaluate products prices var evalContext = workContext.ToPriceEvaluationContextDto(products); var pricesResponse = await _pricingApi.PricingModule.EvaluatePricesAsync(evalContext); ApplyProductPricesInternal(products, pricesResponse, workContext); //Evaluate product discounts //Fill product inventories for getting InStockQuantity data for promotion evaluation await _inventoryService.EvaluateProductInventoriesAsync(products, workContext); var promoEvalContext = workContext.ToPromotionEvaluationContext(products); await _promotionEvaluator.EvaluateDiscountsAsync(promoEvalContext, products); //Evaluate product taxes var taxEvalContext = workContext.ToTaxEvaluationContext(products); await _taxEvaluator.EvaluateTaxesAsync(taxEvalContext, products); }