public virtual async Task <ICollection <ShippingMethod> > GetAvailableShippingMethodsAsync() { var availableShippingMethods = new List <ShippingMethod>(); // TODO: Remake with shipmentId var serviceModels = await _cartApi.CartModuleGetShipmentMethodsAsync(_cart.Id); foreach (var serviceModel in serviceModels) { availableShippingMethods.Add(serviceModel.ToWebModel(_cart.Currency)); } //Evaluate tax for shipping methods var taxEvalContext = _cart.ToTaxEvalContext(); taxEvalContext.Lines.Clear(); taxEvalContext.Lines.AddRange(availableShippingMethods.Select(x => x.ToTaxLine())); var taxResult = await _commerceApi.CommerceEvaluateTaxesAsync(_cart.StoreId, taxEvalContext); if (taxResult != null) { var taxRates = taxResult.Select(x => x.ToWebModel(_cart.Currency)).ToList(); foreach (var shippingMethod in availableShippingMethods) { shippingMethod.ApplyTaxRates(taxRates); } } //Evaluate promotions for shipping methods var promoEvalContext = _cart.ToPromotionEvaluationContext(); await _promotionEvaluator.EvaluateDiscountsAsync(promoEvalContext, availableShippingMethods); return(availableShippingMethods); }
public async Task EvaluateProductPricesAsync(ICollection <Product> products) { var workContext = _workContextFactory(); //Evaluate products prices var evalContext = products.ToServiceModel(workContext); var pricesResponse = await _pricingApi.PricingModuleEvaluatePricesAsync(evalContext); ApplyProductPricesInternal(products, pricesResponse); //Evaluate product taxes var taxEvalContext = workContext.ToTaxEvaluationContext(products); var taxRates = await _commerceApi.CommerceEvaluateTaxesAsync(workContext.CurrentStore.Id, taxEvalContext); ApplyProductTaxInternal(products, taxRates); }