private async Task <decimal> CalculateAmountForPaymentAsync(SubscribableEdition targetEdition, EPaymentPeriodType?periodType, EEditionPaymentType editionPaymentType, Tenant tenant) { if (editionPaymentType != EEditionPaymentType.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 = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value); return(TenantManager.GetUpgradePrice(currentEdition, targetEdition, remainingDaysCount)); }
public void UpdateSubscriptionDateForPayment(EPaymentPeriodType paymentPeriodType, EEditionPaymentType editionPaymentType) { switch (editionPaymentType) { case EEditionPaymentType.NewRegistration: case EEditionPaymentType.BuyNow: { SubscriptionEndDateUtc = Clock.Now.ToUniversalTime().AddDays((int)paymentPeriodType); break; } case EEditionPaymentType.Extend: ExtendSubscriptionDate(paymentPeriodType); break; case EEditionPaymentType.Upgrade: if (HasUnlimitedTimeSubscription()) { SubscriptionEndDateUtc = Clock.Now.ToUniversalTime().AddDays((int)paymentPeriodType); } break; default: throw new ArgumentException(); } }
public async Task <Tenant> UpdateTenantAsync(int tenantId, bool isActive, bool isInTrialPeriod, EPaymentPeriodType?paymentPeriodType, int editionId, EEditionPaymentType editionPaymentType) { var tenant = await FindByIdAsync(tenantId); tenant.IsActive = isActive; tenant.IsInTrialPeriod = isInTrialPeriod; tenant.EditionId = editionId; if (paymentPeriodType.HasValue) { tenant.UpdateSubscriptionDateForPayment(paymentPeriodType.Value, editionPaymentType); } return(tenant); }