/// <summary> /// Select and set price in relevant currency /// </summary> /// <param name="product">The product to set price on</param> /// <param name="apiProduct">The Atomia Billing product to select prices from</param> private void SetPricingVariants(CoreProduct product, ApiProduct apiProduct) { product.PricingVariants = new List<PricingVariant>(); if (apiProduct.RenewalPeriods != null && apiProduct.RenewalPeriods.Count > 0) { foreach (var renewalPeriod in apiProduct.RenewalPeriods) { var price = GetPrice(renewalPeriod.Prices, apiProduct.Taxes); product.PricingVariants.Add(new PricingVariant { Price = price, RenewalPeriod = new RenewalPeriod(renewalPeriod.RenewalPeriodValue, renewalPeriod.RenewalPeriodUnit) }); } } else if (apiProduct.Prices != null && apiProduct.Prices.Count > 0) { var price = GetPrice(apiProduct.Prices, apiProduct.Taxes); product.PricingVariants.Add(new PricingVariant { Price = price, RenewalPeriod = null }); } if (apiProduct.CounterTypes != null && apiProduct.CounterTypes.Count > 0) { foreach (var apiCounterType in apiProduct.CounterTypes) { PricingVariant counterPrice = new PricingVariant { FixedPrice = false }; CounterType counterType = new CounterType(); counterType.CounterId = apiCounterType.CounterId; counterType.Name = apiCounterType.Name; counterType.Description = apiCounterType.Description; if (apiCounterType.MultilanguageNames != null) { var names = apiCounterType.MultilanguageNames.Where(l => l.LanguageIso639Name.ToUpper() == this.language.PrimaryTag); var regionalName = names.FirstOrDefault(l => l.LanguageCulture.ToUpper() == this.language.RegionTag); var standardName = names.FirstOrDefault(); if (regionalName != null) { counterType.Name = regionalName.Value; } else if (standardName != null) { counterType.Name = standardName.Value; } } if (apiCounterType.MultilanguageDescriptions != null) { var descriptions = apiCounterType.MultilanguageDescriptions.Where(l => l.LanguageIso639Name.ToUpper() == this.language.PrimaryTag); var regionalDescription = descriptions.FirstOrDefault(l => l.LanguageCulture.ToUpper() == this.language.RegionTag); var standardDescription = descriptions.FirstOrDefault(); if (regionalDescription != null) { counterType.Description = regionalDescription.Value; } else if (standardDescription != null) { counterType.Description = standardDescription.Value; } } counterType.UnitName = apiCounterType.UnitName; counterType.UnitValue = apiCounterType.UnitValue; counterType.RequireSubscription = apiCounterType.RequireSubscription; counterType.Ranges = new List<CounterRange>(); foreach (var apiCounterRange in apiCounterType.Ranges) { CounterRange counterRange = new CounterRange(); counterRange.Name = apiCounterRange.Name; if (apiCounterRange.MultilanguageNames != null) { var names = apiCounterRange.MultilanguageNames.Where(l => l.LanguageIso639Name.ToUpper() == this.language.PrimaryTag); var regionalName = names.FirstOrDefault(l => l.LanguageCulture.ToUpper() == this.language.RegionTag); var standardName = names.FirstOrDefault(); if (regionalName != null) { counterRange.Name = regionalName.Value; } else if (standardName != null) { counterRange.Name = standardName.Value; } } counterRange.LowerMargin = apiCounterRange.LowerMargin; counterRange.UpperMargin = apiCounterRange.UpperMargin; counterRange.Price = GetPrice(apiCounterRange.Prices, apiProduct.Taxes); counterType.Ranges.Add(counterRange); } counterPrice.CounterType = counterType; product.PricingVariants.Add(counterPrice); } } }
/// <summary> /// Construct an instance from a <see cref="Atomia.Store.Core.CounterRange"/> /// </summary> public CounterRangeModel(CounterRange counterRange, string unitName) { this.counterRange = counterRange; this.unitName = unitName; }