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)); }
public async Task <IActionResult> Extend(int upgradeEditionId, EditionPaymentType editionPaymentType) { return(await UpgradeOrExtend(upgradeEditionId, editionPaymentType)); }
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)); }