示例#1
0
        public void UpdateSubscriptionDateForPayment(PaymentPeriodType paymentPeriodType, EditionPaymentType editionPaymentType)
        {
            switch (editionPaymentType)
            {
            case EditionPaymentType.NewRegistration:
            case EditionPaymentType.BuyNow:
            {
                SubscriptionEndDateUtc = Clock.Now.ToUniversalTime().AddDays((int)paymentPeriodType);
                break;
            }

            case EditionPaymentType.Extend:
                ExtendSubscriptionDate(paymentPeriodType);
                break;

            case EditionPaymentType.Upgrade:
                if (HasUnlimitedTimeSubscription())
                {
                    SubscriptionEndDateUtc = Clock.Now.ToUniversalTime().AddDays((int)paymentPeriodType);
                }
                break;

            default:
                throw new ArgumentException();
            }
        }
        private async Task <decimal> CalculateAmountForPaymentAsync(SubscribableEdition 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 = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value);

            return(TenantManager.GetUpgradePrice(currentEdition, targetEdition, remainingDaysCount));
        }
示例#3
0
 public async Task <IActionResult> Extend(int upgradeEditionId, EditionPaymentType editionPaymentType)
 {
     return(await UpgradeOrExtend(upgradeEditionId, editionPaymentType));
 }
示例#4
0
        public async Task <Tenant> UpdateTenantAsync(int tenantId, bool isActive, bool?isInTrialPeriod, PaymentPeriodType?paymentPeriodType, int editionId, EditionPaymentType editionPaymentType)
        {
            var tenant = await FindByIdAsync(tenantId);

            tenant.IsActive = isActive;

            if (isInTrialPeriod.HasValue)
            {
                tenant.IsInTrialPeriod = isInTrialPeriod.Value;
            }

            tenant.EditionId = editionId;

            if (paymentPeriodType.HasValue)
            {
                tenant.UpdateSubscriptionDateForPayment(paymentPeriodType.Value, editionPaymentType);
            }

            return(tenant);
        }
        private async Task <decimal> CalculateAmountForPaymentAsync(SubscribableEdition 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 remainingHoursCount = tenant.CalculateRemainingHoursCount();

            if (remainingHoursCount <= 0)
            {
                return(targetEdition.GetPaymentAmount(periodType));
            }

            Debug.Assert(tenant.EditionId != null, "tenant.EditionId != null");

            var currentEdition = (SubscribableEdition)await _editionManager.GetByIdAsync(tenant.EditionId.Value);

            var lastPayment = await _subscriptionPaymentRepository.GetLastCompletedPaymentOrDefaultAsync(tenant.Id, null, null);

            if (lastPayment?.PaymentPeriodType == null)
            {
                throw new ApplicationException("There is no completed payment record !");
            }

            return(TenantManager.GetUpgradePrice(currentEdition, targetEdition, remainingHoursCount, lastPayment.PaymentPeriodType.Value));
        }