private async Task <decimal> CalculateAmountForPaymentAsync(SubscribableEditionCacheItem targetEdition, PaymentPeriodType?periodType, EditionPaymentType editionPaymentType, Tenant tenant) { if (editionPaymentType != EditionPaymentType.Upgrade) { return(targetEdition.GetPaymentAmount(periodType)); } if (tenant.EditionId == null) { throw new UserFriendlyException(L("CanNotUpgradeSubscriptionSinceTenantHasNoEditionAssigned")); } var remainingDaysCount = tenant.CalculateRemainingDayCount(); if (remainingDaysCount <= 0) { return(targetEdition.GetPaymentAmount(periodType)); } Debug.Assert(tenant.EditionId != null, "tenant.EditionId != null"); var currentEdition = await _editionCache.GetAsync(tenant.EditionId.Value); return(_subscriptionPaymentManager.GetUpgradePrice(currentEdition, targetEdition, remainingDaysCount)); }
private async Task <EditionWithFeaturesDto> CreateEditionWithFeaturesDto(SubscribableEditionCacheItem edition, Dictionary <string, Feature> featureDictionary) { return(new EditionWithFeaturesDto { Edition = ObjectMapper.Map <EditionSelectDto>(edition), FeatureValues = (await _editionManager.GetFeatureValuesAsync(edition.Id)) .Where(featureValue => featureDictionary.ContainsKey(featureValue.Name)) .Select(fv => new NameValueDto( fv.Name, featureDictionary[fv.Name].GetValueText(fv.Value, _localizationContext)) ) .ToList() }); }
private string GetPaymentDescription(CreatePaymentDto input, SubscribableEditionCacheItem targetEdition) { switch (input.EditionPaymentType) { case EditionPaymentType.NewRegistration: case EditionPaymentType.BuyNow: return(L("Edition.Purchase")); case EditionPaymentType.Upgrade: return(L("Edition.UpgradedTo", targetEdition.DisplayName)); case EditionPaymentType.Extend: return(L("Edition.Extended", targetEdition.DisplayName)); default: throw new ArgumentException(nameof(input.EditionPaymentType)); } }