public async Task <InvokeResult> AddSubscriptionAsync(Subscription subscription, EntityHeader org, EntityHeader user) { await AuthorizeAsync(user, org, "addSubscription", subscription); if (String.IsNullOrEmpty(subscription.PaymentToken)) { subscription.PaymentTokenStatus = Subscription.PaymentTokenStatus_Empty; subscription.Status = Subscription.Status_NoPaymentDetails; } else { var result = await _paymentCustomers.CreateCustomerAsync(subscription.Id.ToString(), subscription.PaymentToken); if (!result.Successful) { return(result.ToInvokeResult()); } subscription.CustomerId = result.Result; subscription.PaymentTokenStatus = Subscription.PaymentTokenStatus_OK; subscription.Status = Subscription.Status_OK; subscription.PaymentTokenDate = DateTime.UtcNow; } await _subscriptionRepo.AddSubscriptionAsync(subscription); return(new InvokeResult()); }
public async Task <InvokeResult> AddSubscriptionAsync(Subscription subscription, EntityHeader org, EntityHeader user) { if (subscription.Key == Subscription.SubscriptionKey_Trial) { var subscriptions = await GetSubscriptionsForOrgAsync(org.Id, user); if (subscriptions.Where(sub => sub.Key == Subscription.SubscriptionKey_Trial).Any()) { throw new ValidationException("Invalid Data", new List <ErrorMessage>() { new ErrorMessage("Organization already has one trial subscription.") }); } else { subscription.Status = Subscription.Status_OK; subscription.PaymentTokenStatus = Subscription.PaymentTokenStatus_Waived; } } else { if (String.IsNullOrEmpty(subscription.PaymentToken)) { subscription.PaymentTokenStatus = Subscription.PaymentTokenStatus_Empty; subscription.Status = Subscription.Status_NoPaymentDetails; } else { var result = await _paymentCustomers.CreateCustomerAsync(subscription.Id.ToString(), subscription.PaymentToken); if (!result.Successful) { return(result.ToInvokeResult()); } subscription.CustomerId = result.Result; subscription.PaymentTokenStatus = Subscription.PaymentTokenStatus_OK; subscription.Status = Subscription.Status_OK; subscription.PaymentTokenDate = DateTime.UtcNow; } } await _subscriptionRepo.AddSubscriptionAsync(subscription); return(new InvokeResult()); }