/// <summary> /// Unsubscribed the asynchronous. /// </summary> /// <param name="payload">The payload.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public async Task UnsubscribedAsync(WebhookPayload payload) { var oldValue = this.subscriptionService.GetSubscriptionsBySubscriptionId(payload.SubscriptionId); this.subscriptionService.UpdateStateOfSubscription(payload.SubscriptionId, SubscriptionStatusEnumExtension.Unsubscribed.ToString(), false); this.applicationLogService.AddApplicationLog("Offer Successfully UnSubscribed."); if (oldValue != null) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue.SubscribeId, NewValue = Convert.ToString(SubscriptionStatusEnum.Unsubscribed), OldValue = Convert.ToString(oldValue.SaasSubscriptionStatus), CreateBy = null, CreateDate = DateTime.Now, }; this.subscriptionsLogRepository.Save(auditLog); } this.notificationStatusHandlers.Process(payload.SubscriptionId); await Task.CompletedTask; }
public IActionResult FetchAllSubscriptions() { var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress); try { this.subscriptionService = new SubscriptionService(this.subscriptionRepository, this.planRepository, currentUserId); //get all subscirptions from api var subscriptions = this.fulfillApiService.GetAllSubscriptionAsync().GetAwaiter().GetResult(); foreach (SubscriptionResult subscription in subscriptions) { if (this.subscriptionRepo.GetById(subscription.Id) == null) { //room for improvement to use AddRange rather making mulitple db trips Offers offers = new Offers() { OfferId = subscription.OfferId, OfferName = subscription.OfferId, UserId = currentUserId, CreateDate = DateTime.Now, OfferGuid = Guid.NewGuid(), }; Guid newOfferId = this.offersRepository.Add(offers); // add offer var subscriptionPlanDetail = this.fulfillApiService.GetAllPlansForSubscriptionAsync(subscription.Id).ConfigureAwait(false).GetAwaiter().GetResult(); subscriptionPlanDetail.ForEach(x => { x.OfferId = newOfferId; x.PlanGUID = Guid.NewGuid(); }); this.subscriptionService.AddPlanDetailsForSubscription(subscriptionPlanDetail); // add plans //var subscriptionData = this.fulfillApiService.GetSubscriptionByIdAsync(subscription.Id).ConfigureAwait(false).GetAwaiter().GetResult(); var subscribeId = this.subscriptionService.AddOrUpdatePartnerSubscriptions(subscription); // add subscription if (subscribeId > 0 && subscription.SaasSubscriptionStatus == SubscriptionStatusEnum.PendingFulfillmentStart) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = subscribeId, NewValue = SubscriptionStatusEnum.PendingFulfillmentStart.ToString(), OldValue = "None", CreateBy = currentUserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); // add audit log } } } } catch (Exception ex) { this.logger.LogError("Message:{0} :: {1} ", ex.Message, ex.InnerException); return(this.View("Error", ex)); } return(this.RedirectToAction(nameof(this.Subscriptions))); }
/// <summary> /// Processes the specified subscription identifier. /// </summary> /// <param name="subscriptionID">The subscription identifier.</param> public override void Process(Guid subscriptionID) { this.logger?.LogInformation("PendingActivationStatusHandler {0}", subscriptionID); var subscription = this.GetSubscriptionById(subscriptionID); this.logger?.LogInformation("Result subscription : {0}", JsonSerializer.Serialize(subscription.AmpplanId)); this.logger?.LogInformation("Get User"); var userdeatils = this.GetUserById(subscription.UserId); string oldstatus = subscription.SubscriptionStatus; if (subscription.SubscriptionStatus == SubscriptionStatusEnumExtension.PendingActivation.ToString()) { try { this.logger?.LogInformation("Get attributelsit"); var subscriptionData = this.fulfillmentApiClient.ActivateSubscriptionAsync(subscriptionID, subscription.AmpplanId).ConfigureAwait(false).GetAwaiter().GetResult(); this.logger?.LogInformation("UpdateWebJobSubscriptionStatus"); this.subscriptionsRepository.UpdateStatusForSubscription(subscriptionID, SubscriptionStatusEnumExtension.Subscribed.ToString(), true); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = SubscriptionLogAttributes.Status.ToString(), SubscriptionId = subscription.Id, NewValue = SubscriptionStatusEnumExtension.Subscribed.ToString(), OldValue = oldstatus, CreateBy = userdeatils.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); this.subscriptionLogRepository.LogStatusDuringProvisioning(subscriptionID, "Activated", SubscriptionStatusEnumExtension.Subscribed.ToString()); } catch (Exception ex) { string errorDescriptin = string.Format("Exception: {0} :: Innser Exception:{1}", ex.Message, ex.InnerException); this.subscriptionLogRepository.LogStatusDuringProvisioning(subscriptionID, errorDescriptin, SubscriptionStatusEnumExtension.ActivationFailed.ToString()); this.logger?.LogInformation(errorDescriptin); this.subscriptionsRepository.UpdateStatusForSubscription(subscriptionID, SubscriptionStatusEnumExtension.ActivationFailed.ToString(), false); // Set the status as ActivationFailed. SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = SubscriptionLogAttributes.Status.ToString(), SubscriptionId = subscription.Id, NewValue = SubscriptionStatusEnumExtension.ActivationFailed.ToString(), OldValue = subscription.SubscriptionStatus, CreateBy = userdeatils.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); } } }
/// <summary> /// Subscriptions the operation. /// </summary> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="planId">The plan identifier.</param> /// <param name="operation">The operation.</param> /// <param name="numberofProviders">The numberof providers.</param> /// <returns> The <see cref="IActionResult" />.</returns> public IActionResult SubscriptionOperation(Guid subscriptionId, string planId, string operation, int numberofProviders) { this.logger.LogInformation("Home Controller / SubscriptionOperation subscriptionId:{0} :: planId : {1} :: operation:{2} :: NumberofProviders : {3}", JsonSerializer.Serialize(subscriptionId), JsonSerializer.Serialize(planId), JsonSerializer.Serialize(operation), JsonSerializer.Serialize(numberofProviders)); try { var userDetails = this.userRepository.GetPartnerDetailFromEmail(this.CurrentUserEmailAddress); var oldValue = this.subscriptionService.GetSubscriptionsBySubscriptionId(subscriptionId); SubscriptionProcessQueueModel queueObject = new SubscriptionProcessQueueModel(); if (operation == "Activate") { if (oldValue.SubscriptionStatus.ToString() != SubscriptionStatusEnumExtension.PendingActivation.ToString()) { this.subscriptionRepository.UpdateStatusForSubscription(subscriptionId, SubscriptionStatusEnumExtension.PendingActivation.ToString(), true); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue.SubscribeId, NewValue = SubscriptionStatusEnumExtension.PendingActivation.ToString(), OldValue = oldValue.SubscriptionStatus.ToString(), CreateBy = userDetails.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); } this.pendingActivationStatusHandlers.Process(subscriptionId); } if (operation == "Deactivate") { this.subscriptionRepository.UpdateStatusForSubscription(subscriptionId, SubscriptionStatusEnumExtension.PendingUnsubscribe.ToString(), true); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue.SubscribeId, NewValue = SubscriptionStatusEnumExtension.PendingUnsubscribe.ToString(), OldValue = oldValue.SubscriptionStatus.ToString(), CreateBy = userDetails.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); this.unsubscribeStatusHandlers.Process(subscriptionId); } this.notificationStatusHandlers.Process(subscriptionId); return(this.RedirectToAction(nameof(this.ActivatedMessage))); } catch (Exception ex) { this.logger.LogInformation("Message:{0} :: {1}", ex.Message, ex.InnerException); return(this.View("Error")); } }
/// <summary> /// Adds the specified subscription logs. /// </summary> /// <param name="subscriptionLogs">The subscription logs.</param> /// <returns></returns> public int Add(SubscriptionAuditLogs subscriptionLogs) { try { Context.SubscriptionAuditLogs.Add(subscriptionLogs); Context.SaveChanges(); return(subscriptionLogs.Id); } catch (Exception) {} return(0); }
/// <summary> /// Processes the specified subscription identifier. /// </summary> /// <param name="subscriptionID">The subscription identifier.</param> public override void Process(Guid subscriptionID) { this.logger?.LogInformation("PendingActivationStatusHandler {0}", subscriptionID); var subscription = this.GetSubscriptionById(subscriptionID); this.logger?.LogInformation("Result subscription : {0}", JsonSerializer.Serialize(subscription.AmpplanId)); this.logger?.LogInformation("Get User"); var userdetails = this.GetUserById(subscription.UserId); if (subscription.SubscriptionStatus == SubscriptionStatusEnumExtension.PendingFulfillmentStart.ToString()) { try { this.subscriptionsRepository.UpdateStatusForSubscription(subscriptionID, SubscriptionStatusEnumExtension.PendingActivation.ToString(), true); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = SubscriptionLogAttributes.Status.ToString(), SubscriptionId = subscription.Id, NewValue = SubscriptionStatusEnumExtension.PendingActivation.ToString(), OldValue = SubscriptionStatusEnumExtension.PendingFulfillmentStart.ToString(), CreateBy = userdetails.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); } catch (Exception ex) { string errorDescription = string.Format("Exception: {0} :: Innser Exception:{1}", ex.Message, ex.InnerException); this.logger?.LogInformation(errorDescription); this.subscriptionsRepository.UpdateStatusForSubscription(subscriptionID, SubscriptionStatusEnumExtension.PendingActivation.ToString(), true); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = SubscriptionLogAttributes.Status.ToString(), SubscriptionId = subscription.Id, NewValue = SubscriptionStatusEnumExtension.PendingActivation.ToString(), OldValue = subscription.SubscriptionStatus, CreateBy = userdetails.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); } } }
/// <summary> /// Unsubscribed the asynchronous. /// </summary> /// <param name="payload">The payload.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public async Task UnsubscribedAsync(WebhookPayload payload) { var oldValue = this.subscriptionService.GetSubscriptionsBySubscriptionId(payload.SubscriptionId); this.subscriptionService.UpdateStateOfSubscription(payload.SubscriptionId, SubscriptionStatusEnumExtension.Unsubscribed.ToString(), false); this.applicationLogService.AddApplicationLog("Offer Successfully UnSubscribed."); if (oldValue != null) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue.SubscribeId, NewValue = Convert.ToString(SubscriptionStatusEnum.Unsubscribed), OldValue = Convert.ToString(oldValue.SaasSubscriptionStatus), CreateBy = null, CreateDate = DateTime.Now, }; this.subscriptionsLogRepository.Save(auditLog); } SubscriptionProcessQueueModel queueObject = new SubscriptionProcessQueueModel(); queueObject.SubscriptionID = payload.SubscriptionId; queueObject.TriggerEvent = "Unsubscribe"; queueObject.UserId = 0; queueObject.PortalName = "Admin"; await Task.CompletedTask; string queueMessage = JsonSerializer.Serialize(queueObject); string storageConnectionString = this.cloudConfigs.AzureWebJobsStorage ?? this.azureWebJobsStorage; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString); //// Create the queue client. CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); CloudQueue queue = queueClient.GetQueueReference("saas-provisioning-queue"); ////Create the queue if it doesn't already exist queue.CreateIfNotExistsAsync().ConfigureAwait(false).GetAwaiter().GetResult(); //// Create a message and add it to the queue. CloudQueueMessage message = new CloudQueueMessage(queueMessage); queue.AddMessageAsync(message).ConfigureAwait(false).GetAwaiter().GetResult(); }
/// <summary> /// Reinstated is followed by Suspend. /// This is called when customer fixed their billing issues and partner can choose to reinstate the suspened subscription to subscribed. /// And resume the software access to the customer. /// </summary> /// <param name="payload">The payload.</param> /// <returns> Exception.</returns> /// <exception cref="NotImplementedException"> Not Implemented Exception. </exception> public async Task ReinstatedAsync(WebhookPayload payload) { var oldValue = this.subscriptionService.GetSubscriptionsBySubscriptionId(payload.SubscriptionId); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue?.SubscribeId, OldValue = Convert.ToString(oldValue?.SubscriptionStatus), CreateBy = null, CreateDate = DateTime.Now, }; //gets the user setting from appconfig, if key doesnt exist, add to control the behavior. //_acceptSubscriptionUpdates should be true and subscription should be in db to accept subscription updates var _acceptSubscriptionUpdates = Convert.ToBoolean(this.applicationConfigRepository.GetValueByName(AcceptSubscriptionUpdates)); if (_acceptSubscriptionUpdates && oldValue != null) { this.subscriptionService.UpdateStateOfSubscription(payload.SubscriptionId, SubscriptionStatusEnumExtension.Subscribed.ToString(), false); await this.applicationLogService.AddApplicationLog("Reinstated Successfully.").ConfigureAwait(false); auditLog.NewValue = Convert.ToString(SubscriptionStatusEnum.Subscribed); } else { var patchOperation = await fulfillApiService.PatchOperationStatusResultAsync(payload.SubscriptionId, payload.OperationId, SaaS.Models.UpdateOperationStatusEnum.Failure); if (patchOperation != null && patchOperation.Status != 200) { await this.applicationLogService.AddApplicationLog($"Reinstate operation PATCH failed with status statuscode {patchOperation.Status} {patchOperation.ReasonPhrase}.").ConfigureAwait(false); //partner trying to fail update operation from customer but PATCH on operation didnt succeced, hence throwing an error throw new Exception(patchOperation.ReasonPhrase); } await this.applicationLogService.AddApplicationLog("Reinstate Change Request Rejected Successfully.").ConfigureAwait(false); auditLog.NewValue = Convert.ToString(oldValue?.SubscriptionStatus); } this.subscriptionsLogRepository.Save(auditLog); await Task.CompletedTask; }
/// <summary> /// Unsubscribed the asynchronous. /// </summary> /// <param name="payload">The payload.</param> public async Task UnsubscribedAsync(WebhookPayload payload) { var oldValue = subscriptionService.GetSubscriptionsForSubscriptionId(payload.SubscriptionId); subscriptionService.UpdateStateOfSubscription(payload.SubscriptionId, SubscriptionStatusEnum.Unsubscribed, false); applicationLogService.AddApplicationLog("Offer Successfully UnSubscribed."); if (oldValue != null) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue.SubscribeId, NewValue = Convert.ToString(SubscriptionStatusEnum.Unsubscribed), OldValue = Convert.ToString(oldValue.SaasSubscriptionStatus), CreateBy = null, CreateDate = DateTime.Now }; SubscriptionsLogRepository.Add(auditLog); } await Task.CompletedTask; }
/// <summary> /// Changes the plan asynchronous. /// </summary> /// <param name="payload">The payload.</param> public async Task ChangePlanAsync(WebhookPayload payload) { var oldValue = subscriptionService.GetSubscriptionsForSubscriptionId(payload.SubscriptionId); subscriptionService.UpdateSubscriptionPlan(payload.SubscriptionId, payload.PlanId); applicationLogService.AddApplicationLog("Plan Successfully Changed."); if (oldValue != null) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Plan), SubscriptionId = oldValue.SubscribeId, NewValue = payload.PlanId, OldValue = oldValue.PlanId, CreateBy = null, CreateDate = DateTime.Now }; SubscriptionsLogRepository.Add(auditLog); } await Task.CompletedTask; }
public IActionResult SubscriptionOperation(Guid subscriptionId, string planId, string operation, int NumberofProviders) { this.logger.LogInformation("Home Controller / SubscriptionOperation subscriptionId:{0} :: planId : {1} :: operation:{2} :: NumberofProviders : {3}", JsonConvert.SerializeObject(subscriptionId), JsonConvert.SerializeObject(planId), JsonConvert.SerializeObject(operation), JsonConvert.SerializeObject(NumberofProviders)); try { bool isSuccess = false; if (subscriptionId != default) { SubscriptionResult subscriptionDetail = new SubscriptionResult(); this.logger.LogInformation("GetPartnerSubscription"); var oldValue = this.webSubscriptionService.GetSubscriptionsByScheduleId(subscriptionId); this.logger.LogInformation("GetUserIdFromEmailAddress"); var currentUserId = userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress); if (operation == "Activate") { var response = this.fulfillApiClient.ActivateSubscriptionAsync(subscriptionId, planId).ConfigureAwait(false).GetAwaiter().GetResult(); this.webSubscriptionService.UpdateStateOfSubscription(subscriptionId, SubscriptionStatusEnum.Subscribed, true); isSuccess = true; this.logger.LogInformation("GetPartnerSubscription"); this.logger.LogInformation("GetAllSubscriptionPlans"); subscriptionDetail = this.webSubscriptionService.GetSubscriptionsByScheduleId(subscriptionId); subscriptionDetail.PlanList = this.webSubscriptionService.GetAllSubscriptionPlans(); var subscriptionData = this.fulfillApiClient.GetSubscriptionByIdAsync(subscriptionId).ConfigureAwait(false).GetAwaiter().GetResult(); bool checkIsActive = emailTemplateRepository.GetIsActive(subscriptionDetail.SaasSubscriptionStatus.ToString()).HasValue ? emailTemplateRepository.GetIsActive(subscriptionDetail.SaasSubscriptionStatus.ToString()).Value : false; this.logger.LogInformation("sendEmail"); if (Convert.ToBoolean(applicationConfigRepository.GetValuefromApplicationConfig(EmailTriggerConfigurationConstants.ISEMAILENABLEDFORSUBSCRIPTIONACTIVATION)) == true) { EmailHelper.SendEmail(subscriptionDetail, applicationConfigRepository, emailTemplateRepository); } } if (operation == "Deactivate") { try { this.logger.LogInformation("operation == Deactivate"); this.logger.LogInformation("DeleteSubscriptionAsync"); var response = this.fulfillApiClient.DeleteSubscriptionAsync(subscriptionId, planId).ConfigureAwait(false).GetAwaiter().GetResult(); this.logger.LogInformation("UpdateStateOfSubscription"); this.webSubscriptionService.UpdateStateOfSubscription(subscriptionId, SubscriptionStatusEnum.Unsubscribed, false); subscriptionDetail = this.webSubscriptionService.GetSubscriptionsByScheduleId(subscriptionId, true); subscriptionDetail.SaasSubscriptionStatus = SubscriptionStatusEnum.Unsubscribed; isSuccess = true; this.logger.LogInformation("GetIsActive"); bool checkIsActive = emailTemplateRepository.GetIsActive(subscriptionDetail.SaasSubscriptionStatus.ToString()).HasValue ? emailTemplateRepository.GetIsActive(subscriptionDetail.SaasSubscriptionStatus.ToString()).Value : false; if (Convert.ToBoolean(applicationConfigRepository.GetValuefromApplicationConfig(EmailTriggerConfigurationConstants.ISEMAILENABLEDFORUNSUBSCRIPTION)) == true) { this.logger.LogInformation("SendEmail to {0} :: Template{1} ", JsonConvert.SerializeObject(applicationConfigRepository), JsonConvert.SerializeObject(emailTemplateRepository)); EmailHelper.SendEmail(subscriptionDetail, applicationConfigRepository, emailTemplateRepository); } } catch (FulfillmentException fex) { this.logger.LogError($"Deactive Subscription plan Error - {fex.Message} with StackTrace- {fex.StackTrace}."); this.TempData["ErrorMsg"] = fex.Message; } } var newValue = this.webSubscriptionService.GetSubscriptionsByScheduleId(subscriptionId, true); if (isSuccess) { if (oldValue != null && newValue != null) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = newValue.SubscribeId, NewValue = Convert.ToString(newValue.SaasSubscriptionStatus), OldValue = Convert.ToString(oldValue.SaasSubscriptionStatus), CreateBy = currentUserId, CreateDate = DateTime.Now }; this.subscriptionLogRepository.Add(auditLog); //auditLog = new SubscriptionAuditLogs() //{ // Attribute = Convert.ToString(SubscriptionLogAttributes.ProviderCount), // SubscriptionId = newValue.SubscribeId, // NewValue = Convert.ToString(newValue.NumberofProviders), // OldValue = Convert.ToString(oldValue.NumberofProviders), // CreateBy = currentUserId, // CreateDate = DateTime.Now //}; //this.subscriptionLogRepository.Add(auditLog); } } } return(this.RedirectToAction(nameof(this.ActivatedMessage))); } catch (Exception ex) { this.logger.LogInformation("Message:{0} :: {1}", ex.Message, ex.InnerException); return(View("Error")); } }
/// <summary> /// Removes the specified entity. /// </summary> /// <param name="entity">The entity.</param> public void Remove(SubscriptionAuditLogs entity) { this.context.SubscriptionAuditLogs.Remove(entity); this.context.SaveChanges(); }
/// <summary> /// Adds the specified entity. /// </summary> /// <param name="entity">The entity.</param> /// <returns> entity id.</returns> public int Save(SubscriptionAuditLogs entity) { this.context.SubscriptionAuditLogs.Add(entity); this.context.SaveChanges(); return(entity.Id); }
/// <summary> /// Get All Subscription List for Current Logged in User. /// </summary> /// <param name="token">The MS Token<see cref="string" />..</param> /// <returns> /// The <see cref="IActionResult" />. /// </returns> public IActionResult Index(string token = null) { try { this.logger.LogInformation($"Landing page with token {token}"); SubscriptionResult subscriptionDetail = new SaasKitModels.SubscriptionResult(); SubscriptionResultExtension subscriptionExtension = new SubscriptionResultExtension(); if (this.User.Identity.IsAuthenticated) { var userId = this.userService.AddUser(this.GetCurrentUserDetail()); var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress); this.subscriptionService = new SubscriptionService(this.subscriptionRepository, this.planRepository, userId); this.logger.LogInformation("User authenticated successfully"); if (!string.IsNullOrEmpty(token)) { this.TempData["ShowWelcomeScreen"] = null; token = token.Replace(' ', '+'); var newSubscription = this.apiClient.ResolveAsync(token).ConfigureAwait(false).GetAwaiter().GetResult(); if (newSubscription != null && newSubscription.SubscriptionId != default) { var subscriptionPlanDetail = this.apiClient.GetAllPlansForSubscriptionAsync(newSubscription.SubscriptionId).ConfigureAwait(false).GetAwaiter().GetResult(); Offers offers = new Offers() { OfferId = newSubscription.OfferId, OfferName = newSubscription.OfferId, UserId = currentUserId, CreateDate = DateTime.Now, OfferGuid = Guid.NewGuid(), }; Guid newOfferId = this.offersRepository.Add(offers); List <PlanDetailResultExtension> planList = new List <PlanDetailResultExtension>(); var serializedPlans = JsonSerializer.Serialize(subscriptionPlanDetail); planList = JsonSerializer.Deserialize <List <PlanDetailResultExtension> >(serializedPlans); planList.ForEach(x => { x.OfferId = newOfferId; x.PlanGUID = Guid.NewGuid(); }); this.subscriptionService.AddPlanDetailsForSubscription(planList); var currentPlan = this.planRepository.GetById(newSubscription.PlanId); var subscriptionData = this.apiClient.GetSubscriptionByIdAsync(newSubscription.SubscriptionId).ConfigureAwait(false).GetAwaiter().GetResult(); var subscribeId = this.subscriptionService.AddOrUpdatePartnerSubscriptions(subscriptionData); if (subscribeId > 0 && subscriptionData.SaasSubscriptionStatus == SubscriptionStatusEnum.PendingFulfillmentStart) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = subscribeId, NewValue = SubscriptionStatusEnum.PendingFulfillmentStart.ToString(), OldValue = "None", CreateBy = currentUserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); } subscriptionExtension = this.subscriptionService.GetSubscriptionsBySubscriptionId(newSubscription.SubscriptionId, true); subscriptionExtension.ShowWelcomeScreen = false; subscriptionExtension.CustomerEmailAddress = this.CurrentUserEmailAddress; subscriptionExtension.CustomerName = this.CurrentUserName; subscriptionExtension.SubscriptionParameters = this.subscriptionService.GetSubscriptionsParametersById(newSubscription.SubscriptionId, currentPlan.PlanGuid); } } else { this.TempData["ShowWelcomeScreen"] = "True"; subscriptionExtension.ShowWelcomeScreen = true; return(this.View(subscriptionExtension)); } } else { if (!string.IsNullOrEmpty(token)) { return(this.Challenge( new AuthenticationProperties { RedirectUri = "/?token=" + token, }, OpenIdConnectDefaults.AuthenticationScheme)); } else { this.TempData["ShowWelcomeScreen"] = "True"; subscriptionExtension.ShowWelcomeScreen = true; return(this.View(subscriptionExtension)); } } return(this.View(subscriptionExtension)); } catch (Exception ex) { this.logger.LogError("Message:{0} :: {1} ", ex.Message, ex.InnerException); return(this.View("Error", ex)); } }
/// <summary> /// Adds the specified entity. /// </summary> /// <param name="entity">The entity.</param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public int Add(SubscriptionAuditLogs entity) { context.SubscriptionAuditLogs.Add(entity); context.SaveChanges(); return(entity.Id); }
public async Task <IActionResult> ChangeSubscriptionQuantity(SubscriptionResult subscriptionDetail) { this.logger.LogInformation("Home Controller / ChangeSubscriptionPlan subscriptionDetail:{0}", JsonSerializer.Serialize(subscriptionDetail)); if (this.User.Identity.IsAuthenticated) { try { if (subscriptionDetail != null && subscriptionDetail.Id != default && subscriptionDetail.Quantity > 0) { try { var subscriptionId = subscriptionDetail.Id; var quantity = subscriptionDetail.Quantity; var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress); var jsonResult = await this.fulfillApiClient.ChangeQuantityForSubscriptionAsync(subscriptionId, quantity).ConfigureAwait(false); var changeQuantityOperationStatus = OperationStatusEnum.InProgress; if (jsonResult != null && jsonResult.OperationId != default) { while (OperationStatusEnum.InProgress.Equals(changeQuantityOperationStatus) || OperationStatusEnum.NotStarted.Equals(changeQuantityOperationStatus)) { var changeQuantityOperationResult = await this.fulfillApiClient.GetOperationStatusResultAsync(subscriptionId, jsonResult.OperationId).ConfigureAwait(false); changeQuantityOperationStatus = changeQuantityOperationResult.Status; this.logger.LogInformation("changeQuantity Operation Status : " + changeQuantityOperationStatus + " For SubscriptionId " + subscriptionId + "Model SubscriptionID): {0} :: quantity:{1}", JsonSerializer.Serialize(subscriptionId), JsonSerializer.Serialize(quantity)); this.applicationLogService.AddApplicationLog("Operation Status : " + changeQuantityOperationStatus + " For SubscriptionId " + subscriptionId); } var oldValue = this.subscriptionService.GetSubscriptionsBySubscriptionId(subscriptionId, true); this.subscriptionService.UpdateSubscriptionQuantity(subscriptionId, quantity); this.logger.LogInformation("Quantity Successfully Changed."); this.applicationLogService.AddApplicationLog("Quantity Successfully Changed."); if (oldValue != null) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Quantity), SubscriptionId = oldValue.SubscribeId, NewValue = quantity.ToString(), OldValue = oldValue.Quantity.ToString(), CreateBy = currentUserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); } } } catch (FulfillmentException fex) { this.TempData["ErrorMsg"] = fex.Message; this.logger.LogError("Message:{0} :: {1} ", fex.Message, fex.InnerException); } } return(this.RedirectToAction(nameof(this.Subscriptions))); } catch (Exception ex) { this.logger.LogError("Message:{0} :: {1} ", ex.Message, ex.InnerException); return(this.View("Error", ex)); } } else { return(this.RedirectToAction(nameof(this.Index))); } }
/// <summary> /// Adds the specified subscription logs. /// </summary> /// <param name="subscriptionLogs">The subscription logs.</param> /// <returns> log Id.</returns> public int Save(SubscriptionAuditLogs subscriptionLogs) { this.context.SubscriptionAuditLogs.Add(subscriptionLogs); this.context.SaveChanges(); return(subscriptionLogs.Id); }
public async Task <IActionResult> ChangeSubscriptionPlan(SubscriptionResult subscriptionDetail) { this.logger.LogInformation("Home Controller / ChangeSubscriptionPlan subscriptionDetail:{0}", JsonConvert.SerializeObject(subscriptionDetail)); try { var subscriptionId = new Guid(); var planId = string.Empty; if (Convert.ToBoolean(applicationConfigRepository.GetValuefromApplicationConfig(MainMenuStatusEnum.IsLicenseManagementEnabled.ToString())) == true) { this.TempData["ShowLicensesMenu"] = true; } if (subscriptionDetail != null) { subscriptionId = subscriptionDetail.Id; planId = subscriptionDetail.PlanId; } if (subscriptionId != default && !string.IsNullOrEmpty(planId)) { try { var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress); var jsonResult = await this.fulfillApiClient.ChangePlanForSubscriptionAsync(subscriptionId, planId).ConfigureAwait(false); var changePlanOperationStatus = OperationStatusEnum.InProgress; if (jsonResult != null && jsonResult.OperationId != default) { while (OperationStatusEnum.InProgress.Equals(changePlanOperationStatus) || OperationStatusEnum.NotStarted.Equals(changePlanOperationStatus)) { var changePlanOperationResult = await this.fulfillApiClient.GetOperationStatusResultAsync(subscriptionId, jsonResult.OperationId).ConfigureAwait(false); changePlanOperationStatus = changePlanOperationResult.Status; this.logger.LogInformation("Operation Status : " + changePlanOperationStatus + " For SubscriptionId " + subscriptionId + "Model SubscriptionID): {0} :: planID:{1}", JsonConvert.SerializeObject(subscriptionId), JsonConvert.SerializeObject(planId)); this.applicationLogService.AddApplicationLog("Operation Status : " + changePlanOperationStatus + " For SubscriptionId " + subscriptionId); } var oldValue = this.subscriptionService.GetSubscriptionsForSubscriptionId(subscriptionId); this.subscriptionService.UpdateSubscriptionPlan(subscriptionId, planId); this.logger.LogInformation("Plan Successfully Changed."); this.applicationLogService.AddApplicationLog("Plan Successfully Changed."); if (oldValue != null) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Plan), SubscriptionId = oldValue.SubscribeId, NewValue = planId, OldValue = oldValue.PlanId, CreateBy = currentUserId, CreateDate = DateTime.Now }; this.subscriptionLogRepository.Add(auditLog); } } } catch (FulfillmentException fex) { this.TempData["ErrorMsg"] = fex.Message; } } return(this.RedirectToAction(nameof(this.Subscriptions))); } catch (Exception ex) { this.logger.LogError("Message:{0} :: {1} ", ex.Message, ex.InnerException); return(View("Error")); } }
/// <summary> /// Get All Subscription List for Current Logged in User /// </summary> /// <param name="token">The MS Token<see cref="string" /></param> /// <returns> /// The <see cref="IActionResult" /> /// </returns> public IActionResult Index(string token = null) { this.log.Info("Initializing Index Page"); SubscriptionResult subscriptionDetail = new SaasKitModels.SubscriptionResult(); if (User.Identity.IsAuthenticated) { var userId = this.userService.AddPartnerDetail(GetCurrentUserDetail()); var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress); this.subscriptionService = new SubscriptionService(this.subscriptionRepository, this.planRepository, userId); this.log.Info("User authenticate successfully"); if (!string.IsNullOrEmpty(token)) { this.TempData["ShowWelcomeScreen"] = null; token = token.Replace(' ', '+'); var newSubscription = this.apiClient.ResolveAsync(token).ConfigureAwait(false).GetAwaiter().GetResult(); if (newSubscription != null && newSubscription.SubscriptionId != default) { var subscriptionPlanDetail = this.apiClient.GetAllPlansForSubscriptionAsync(newSubscription.SubscriptionId).ConfigureAwait(false).GetAwaiter().GetResult(); this.subscriptionService.AddPlanDetailsForSubscription(subscriptionPlanDetail); // GetSubscriptionBy SubscriptionId var subscriptionData = this.apiClient.GetSubscriptionByIdAsync(newSubscription.SubscriptionId).ConfigureAwait(false).GetAwaiter().GetResult(); var subscribeId = this.subscriptionService.AddUpdatePartnerSubscriptions(subscriptionData); if (subscribeId > 0 && subscriptionData.SaasSubscriptionStatus == SubscriptionStatusEnum.PendingFulfillmentStart) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = subscribeId, NewValue = "Pending Activation", OldValue = "None", CreateBy = currentUserId, CreateDate = DateTime.Now }; this.subscriptionLogRepository.Add(auditLog); } subscriptionDetail = subscriptionData; subscriptionDetail.ShowWelcomeScreen = false; subscriptionDetail.CustomerEmailAddress = this.CurrentUserEmailAddress; subscriptionDetail.CustomerName = this.CurrentUserName; } } else { this.TempData["ShowWelcomeScreen"] = "True"; subscriptionDetail.ShowWelcomeScreen = true; return(this.View(subscriptionDetail)); } } else { if (!string.IsNullOrEmpty(token)) { return(this.Challenge(new AuthenticationProperties { RedirectUri = "/?token=" + token }, OpenIdConnectDefaults.AuthenticationScheme)); } else { this.TempData["ShowWelcomeScreen"] = "True"; subscriptionDetail.ShowWelcomeScreen = true; return(this.View(subscriptionDetail)); } } return(this.View(subscriptionDetail)); }
/// <summary> /// Subscriptions the operation. /// </summary> /// <param name="subscriptionId">The subscription identifier.</param> /// <param name="planId">The plan identifier.</param> /// <param name="operation">The operation.</param> /// <param name="numberofProviders">The numberof providers.</param> /// <returns> The <see cref="IActionResult" />.</returns> public IActionResult SubscriptionOperation(Guid subscriptionId, string planId, string operation, int numberofProviders) { this.logger.LogInformation("Home Controller / SubscriptionOperation subscriptionId:{0} :: planId : {1} :: operation:{2} :: NumberofProviders : {3}", JsonSerializer.Serialize(subscriptionId), JsonSerializer.Serialize(planId), JsonSerializer.Serialize(operation), JsonSerializer.Serialize(numberofProviders)); try { var userDetails = this.userRepository.GetPartnerDetailFromEmail(this.CurrentUserEmailAddress); var oldValue = this.subscriptionService.GetSubscriptionsBySubscriptionId(subscriptionId); SubscriptionProcessQueueModel queueObject = new SubscriptionProcessQueueModel(); if (operation == "Activate") { if (oldValue.SubscriptionStatus.ToString() != SubscriptionStatusEnumExtension.PendingActivation.ToString()) { this.subscriptionRepository.UpdateStatusForSubscription(subscriptionId, SubscriptionStatusEnumExtension.PendingActivation.ToString(), true); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue.SubscribeId, NewValue = SubscriptionStatusEnumExtension.PendingActivation.ToString(), OldValue = oldValue.SubscriptionStatus.ToString(), CreateBy = userDetails.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); } queueObject.SubscriptionID = subscriptionId; queueObject.TriggerEvent = "Activate"; queueObject.UserId = userDetails.UserId; queueObject.PortalName = "Admin"; } if (operation == "Deactivate") { this.subscriptionRepository.UpdateStatusForSubscription(subscriptionId, SubscriptionStatusEnumExtension.PendingUnsubscribe.ToString(), true); SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = oldValue.SubscribeId, NewValue = SubscriptionStatusEnumExtension.PendingUnsubscribe.ToString(), OldValue = oldValue.SubscriptionStatus.ToString(), CreateBy = userDetails.UserId, CreateDate = DateTime.Now, }; this.subscriptionLogRepository.Save(auditLog); queueObject.SubscriptionID = subscriptionId; queueObject.TriggerEvent = "Unsubscribe"; queueObject.UserId = userDetails.UserId; queueObject.PortalName = "Admin"; } string queueMessage = JsonSerializer.Serialize(queueObject); string storageConnectionString = this.cloudConfigs.AzureWebJobsStorage ?? this.azureWebJobsStorage; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString); //// Create the queue client. CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); CloudQueue queue = queueClient.GetQueueReference("saas-provisioning-queue"); ////Create the queue if it doesn't already exist queue.CreateIfNotExistsAsync(); //// Create a message and add it to the queue. CloudQueueMessage message = new CloudQueueMessage(queueMessage); queue.AddMessageAsync(message); return(this.RedirectToAction(nameof(this.ActivatedMessage))); } catch (Exception ex) { this.logger.LogInformation("Message:{0} :: {1}", ex.Message, ex.InnerException); return(this.View("Error")); } }
/// <summary> /// Get All Subscription List for Current Logged in User /// </summary> /// <param name="token">The MS Token<see cref="string" /></param> /// <returns> /// The <see cref="IActionResult" /> /// </returns> public IActionResult Index(string token = null) { try { this.logger.LogInformation($"Landing page with token {token}"); SubscriptionResultExtension subscriptionDetail = new SubscriptionResultExtension(); if (User.Identity.IsAuthenticated) { if (Convert.ToBoolean(applicationConfigRepository.GetValuefromApplicationConfig(MainMenuStatusEnum.IsLicenseManagementEnabled.ToString())) == true) { this.TempData["ShowLicensesMenu"] = true; } var userId = this.userService.AddPartnerDetail(GetCurrentUserDetail()); var currentUserId = this.userService.GetUserIdFromEmailAddress(this.CurrentUserEmailAddress); this.subscriptionService = new SubscriptionService(this.subscriptionRepository, this.planRepository, userId); this.logger.LogInformation("User authenticated successfully"); if (!string.IsNullOrEmpty(token)) { this.TempData["ShowWelcomeScreen"] = null; token = token.Replace(' ', '+'); var newSubscription = this.apiClient.ResolveAsync(token).ConfigureAwait(false).GetAwaiter().GetResult(); if (newSubscription != null && newSubscription.SubscriptionId != default) { var subscriptionPlanDetail = this.apiClient.GetAllPlansForSubscriptionAsync(newSubscription.SubscriptionId).ConfigureAwait(false).GetAwaiter().GetResult(); this.subscriptionService.AddPlanDetailsForSubscription(subscriptionPlanDetail); // GetSubscriptionBy SubscriptionId var subscriptionData = this.apiClient.GetSubscriptionByIdAsync(newSubscription.SubscriptionId).ConfigureAwait(false).GetAwaiter().GetResult(); subscriptionData.Quantity = 0; var subscribeId = this.subscriptionService.AddUpdatePartnerSubscriptions(subscriptionData); if (subscribeId > 0 && subscriptionData.SaasSubscriptionStatus == SubscriptionStatusEnum.PendingFulfillmentStart) { SubscriptionAuditLogs auditLog = new SubscriptionAuditLogs() { Attribute = Convert.ToString(SubscriptionLogAttributes.Status), SubscriptionId = subscribeId, NewValue = SubscriptionStatusEnum.PendingFulfillmentStart.ToString(), OldValue = "None", CreateBy = currentUserId, CreateDate = DateTime.Now }; this.subscriptionLogRepository.Add(auditLog); } var serializedParent = JsonConvert.SerializeObject(subscriptionData); subscriptionDetail = JsonConvert.DeserializeObject <SubscriptionResultExtension>(serializedParent); subscriptionDetail.ShowWelcomeScreen = false; subscriptionDetail.CustomerEmailAddress = this.CurrentUserEmailAddress; subscriptionDetail.CustomerName = this.CurrentUserName; } } else { this.TempData["ShowWelcomeScreen"] = "True"; subscriptionDetail.ShowWelcomeScreen = true; return(this.View(subscriptionDetail)); } } else { if (!string.IsNullOrEmpty(token)) { return(this.Challenge(new AuthenticationProperties { RedirectUri = "/?token=" + token }, OpenIdConnectDefaults.AuthenticationScheme)); } else { this.TempData["ShowWelcomeScreen"] = "True"; subscriptionDetail.ShowWelcomeScreen = true; return(this.View(subscriptionDetail)); } } return(this.View(subscriptionDetail)); } catch (Exception ex) { logger.LogInformation("Message:{0} :: {1} ", ex.Message, ex.InnerException); return(View("Error")); } }