in src/CustomerSite/Controllers/HomeController.cs [559:666]
public async Task<IActionResult> SubscriptionOperationAsync(SubscriptionResultExtension subscriptionResultExtension, Guid subscriptionId, string planId, string operation)
{
this.logger.Info(HttpUtility.HtmlEncode($"Home Controller / SubscriptionOperation subscriptionId:{subscriptionId} :: planId : {planId} :: operation:{operation}"));
if (this.User.Identity.IsAuthenticated)
{
try
{
var userDetails = this.userRepository.GetPartnerDetailFromEmail(this.CurrentUserEmailAddress);
if (subscriptionId != default)
{
this.logger.Info("GetPartnerSubscription");
var oldValue = this.subscriptionService.GetPartnerSubscription(this.CurrentUserEmailAddress, subscriptionId, true).FirstOrDefault();
if (oldValue == null)
{
this.logger.LogError($"Cannot find subscription or subscription associated to the current user");
return this.RedirectToAction(nameof(this.Index));
}
Plans planDetail = this.planRepository.GetById(oldValue.PlanId);
this.logger.Info("GetUserIdFromEmailAddress");
var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress);
if (operation == "Activate")
{
try
{
this.logger.Info(HttpUtility.HtmlEncode($"Save Subscription Parameters: {JsonSerializer.Serialize(subscriptionResultExtension.SubscriptionParameters)}" ));
if (subscriptionResultExtension.SubscriptionParameters != null && subscriptionResultExtension.SubscriptionParameters.Count() > 0)
{
var inputParms = subscriptionResultExtension.SubscriptionParameters.ToList().Where(s => s.Type.ToLower() == "input");
if (inputParms != null)
{
var inputParmsList = inputParms.ToList();
this.subscriptionService.AddSubscriptionParameters(inputParmsList, currentUserId);
}
}
if (Convert.ToBoolean(this.applicationConfigRepository.GetValueByName("IsAutomaticProvisioningSupported")))
{
this.logger.Info(HttpUtility.HtmlEncode($"UpdateStateOfSubscription PendingActivation: SubscriptionId: {subscriptionId} "));
if (oldValue.SubscriptionStatus.ToString() != SubscriptionStatusEnumExtension.PendingActivation.ToString())
{
this.subscriptionService.UpdateStateOfSubscription(subscriptionId, SubscriptionStatusEnumExtension.PendingActivation.ToString(), true);
if (oldValue != null)
{
SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs()
{
Attribute = Convert.ToString(SubscriptionLogAttributes.Status),
SubscriptionId = oldValue.SubscribeId,
NewValue = SubscriptionStatusEnumExtension.PendingActivation.ToString(),
OldValue = oldValue.SubscriptionStatus.ToString(),
CreateBy = currentUserId,
CreateDate = DateTime.Now,
};
this.subscriptionLogRepository.Save(auditLog);
}
}
this.pendingActivationStatusHandlers.Process(subscriptionId);
}
else
{
this.pendingFulfillmentStatusHandlers.Process(subscriptionId);
}
await _webNotificationService.PushExternalWebNotificationAsync(subscriptionId, subscriptionResultExtension.SubscriptionParameters);
}
catch (MarketplaceException fex)
{
this.logger.Error(fex.Message);
}
}
if (operation == "Deactivate")
{
this.subscriptionService.UpdateStateOfSubscription(subscriptionId, SubscriptionStatusEnumExtension.PendingUnsubscribe.ToString(), true);
if (oldValue != null)
{
SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs()
{
Attribute = Convert.ToString(SubscriptionLogAttributes.Status),
SubscriptionId = oldValue.SubscribeId,
NewValue = SubscriptionStatusEnumExtension.PendingUnsubscribe.ToString(),
OldValue = oldValue.SubscriptionStatus.ToString(),
CreateBy = currentUserId,
CreateDate = DateTime.Now,
};
this.subscriptionLogRepository.Save(auditLog);
}
this.unsubscribeStatusHandlers.Process(subscriptionId);
}
}
this.notificationStatusHandlers.Process(subscriptionId);
return this.RedirectToAction(nameof(this.ProcessMessage), new { action = operation, status = operation });
}
catch (Exception ex)
{
this.logger.LogError($"Message:{ex.Message} :: {ex.InnerException} ");
return this.View("Error", ex);
}
}
else
{
return this.RedirectToAction(nameof(this.Index));
}
}