public async Task <RegisterTenantOutput> RegisterTenant(RegisterTenantInput input) { if (input.EditionId.HasValue) { await CheckEditionSubscriptionAsync(input.EditionId.Value, input.SubscriptionStartType); } else { await CheckRegistrationWithoutEdition(); } using (CurrentUnitOfWork.SetTenantId(null)) { CheckTenantRegistrationIsEnabled(); if (UseCaptchaOnRegistration()) { await _recaptchaValidator.ValidateAsync(input.CaptchaResponse); } //Getting host-specific settings var isActive = await IsNewRegisteredTenantActiveByDefault(input.SubscriptionStartType); var isEmailConfirmationRequired = await SettingManager.GetSettingValueForApplicationAsync <bool>( AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin ); DateTime?subscriptionEndDate = null; var isInTrialPeriod = false; if (input.EditionId.HasValue) { isInTrialPeriod = input.SubscriptionStartType == SubscriptionStartType.Trial; if (isInTrialPeriod) { var edition = (SubscribableEdition)await _editionManager.GetByIdAsync(input.EditionId.Value); subscriptionEndDate = Clock.Now.AddDays(edition.TrialDayCount ?? 0); } } var tenantId = await _tenantManager.CreateWithAdminUserAsync( input.TenancyName, input.Name, input.AdminPassword, input.AdminEmailAddress, null, isActive, input.EditionId, shouldChangePasswordOnNextLogin : false, sendActivationEmail : true, subscriptionEndDate, isInTrialPeriod, AppUrlService.CreateEmailActivationUrlFormat(input.TenancyName) ); var tenant = await TenantManager.GetByIdAsync(tenantId); await _appNotifier.NewTenantRegisteredAsync(tenant); return(new RegisterTenantOutput { TenantId = tenant.Id, TenancyName = input.TenancyName, Name = input.Name, UserName = AbpUserBase.AdminUserName, EmailAddress = input.AdminEmailAddress, IsActive = tenant.IsActive, IsEmailConfirmationRequired = isEmailConfirmationRequired, IsTenantActive = tenant.IsActive }); } }
public async Task <EditionsSelectOutput> GetEditionsForSelect() { var features = FeatureManager .GetAll() .Where(feature => (feature[FeatureMetadata.CustomFeatureKey] as FeatureMetadata)?.IsVisibleOnPricingTable ?? false); var flatFeatures = ObjectMapper .Map <List <FlatFeatureSelectDto> >(features) .OrderBy(f => f.DisplayName) .ToList(); var editions = (await _editionManager.GetAllAsync()) .Cast <SubscribableEdition>() .OrderBy(e => e.MonthlyPrice) .ToList(); var featureDictionary = features.ToDictionary(feature => feature.Name, f => f); var editionWithFeatures = new List <EditionWithFeaturesDto>(); foreach (var edition in editions) { editionWithFeatures.Add(await CreateEditionWithFeaturesDto(edition, featureDictionary)); } if (AbpSession.UserId.HasValue) { var currentEditionId = (await _tenantManager.GetByIdAsync(AbpSession.GetTenantId())) .EditionId; if (currentEditionId.HasValue) { editionWithFeatures = editionWithFeatures.Where(e => e.Edition.Id != currentEditionId).ToList(); var currentEdition = (SubscribableEdition)(await _editionManager.GetByIdAsync(currentEditionId.Value)); if (!currentEdition.IsFree) { var lastPayment = await _subscriptionPaymentRepository.GetLastCompletedPaymentOrDefaultAsync( AbpSession.GetTenantId(), null, null); if (lastPayment != null) { editionWithFeatures = editionWithFeatures .Where(e => e.Edition.GetPaymentAmount(lastPayment.PaymentPeriodType) > currentEdition.GetPaymentAmount(lastPayment.PaymentPeriodType) ) .ToList(); } } } } return(new EditionsSelectOutput { AllFeatures = flatFeatures, EditionsWithFeatures = editionWithFeatures, }); }