public virtual async Task EvaluateTaxesAsync(TaxEvaluationContext context, IEnumerable <ITaxable> owners) { IList <coreService.TaxRate> taxRates = new List <coreService.TaxRate>(); if (context.StoreTaxCalculationEnabled) { var cacheKey = CacheKey.With(GetType(), context.GetCacheKey()); taxRates = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, (cacheEntry) => { cacheEntry.AddExpirationToken(TaxCacheRegion.CreateChangeToken()); return(_commerceApi.EvaluateTaxesAsync(context.StoreId, context.ToTaxEvaluationContextDto())); }); } ApplyTaxRates(taxRates, owners); }
public virtual async Task EvaluateTaxesAsync(TaxEvaluationContext context, IEnumerable <ITaxable> owners) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (owners == null) { throw new ArgumentNullException(nameof(owners)); } IList <coreService.TaxRate> taxRates = new List <coreService.TaxRate>(); if (context.StoreTaxCalculationEnabled) { //Do not execute platform API for tax evaluation if fixed tax rate is used if (context.FixedTaxRate != 0) { foreach (var line in context.Lines ?? Enumerable.Empty <TaxLine>()) { var rate = new coreService.TaxRate() { Rate = (double)(line.Amount * context.FixedTaxRate * 0.01m).Amount, Currency = context.Currency.Code, Line = line.ToTaxLineDto() }; taxRates.Add(rate); } } else { var cacheKey = CacheKey.With(GetType(), context.GetCacheKey()); taxRates = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, (cacheEntry) => { cacheEntry.AddExpirationToken(TaxCacheRegion.CreateChangeToken()); return(_commerceApi.EvaluateTaxesAsync(context.StoreId, context.ToTaxEvaluationContextDto())); }); } } ApplyTaxRates(taxRates, owners); }