Example #1
0
        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));
        }
Example #2
0
        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();
            }
        }
Example #3
0
        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);
        }