public ActionResult Contact(ContactUsViewModel viewModel) { if (!ModelState.IsValid) { return(RedirectWithViewModel(viewModel, "contact")); } var emailInfo = new NonTemplatedEmailInfo { To = _configuration.AdministratorsEmail, Subject = "Errordite: Contact Us", Body = @"Message from: '{0}'<br /> <!--Contact Reason: '{1}'<br />--> Email Address: '{2}'<br /><br /> Message: {3}" .FormatWith(viewModel.Name, viewModel.Reason, viewModel.Email, viewModel.Message) }; Core.Session.AddCommitAction(new SendMessageCommitAction(emailInfo, _configuration.GetNotificationsQueueAddress())); Core.Session.AddCommitAction(new SendMessageCommitAction(new ContactUsEmailInfo { To = viewModel.Email, }, _configuration.GetNotificationsQueueAddress())); ConfirmationNotification(Resources.Home.MessageReceived); return(RedirectToAction("contact")); }
private void MaybeSendIndividualEmailNotification(SendNotificationRequest request) { if (request.EmailInfo == null || request.EmailInfo.To.IsNullOrEmpty()) { return; } Session.AddCommitAction(new SendMessageCommitAction( request.EmailInfo, _configuration.GetNotificationsQueueAddress(request.Organisation == null ? "1" : request.Organisation.RavenInstance.FriendlyId))); }
public DeleteOrganisationResponse Invoke(DeleteOrganisationRequest request) { var organisation = Session.MasterRaven .Load <Organisation>(request.OrganisationId); if (organisation == null) { return(new DeleteOrganisationResponse(request.OrganisationId, true)); } Session.MasterRavenDatabaseCommands.DeleteByIndex( CoreConstants.IndexNames.UserOrganisationMappings, new IndexQuery { Query = "Organisations:{0}".FormatWith(Organisation.GetId(request.OrganisationId)) }, true); Session.MasterRavenDatabaseCommands.DeleteByIndex( CoreConstants.IndexNames.Organisations, new IndexQuery { Query = "Id:{0}".FormatWith(Organisation.GetId(request.OrganisationId)) }, true); bool queueDeleted = true; try { _amazonSQS.DeleteQueue(new DeleteQueueRequest { QueueUrl = _configuration.GetReceiveQueueAddress(organisation.FriendlyId) }); } catch (Exception) { queueDeleted = false; } var emailInfo = new NonTemplatedEmailInfo { To = _configuration.AdministratorsEmail, Subject = "Errordite: Organisation Deleted", Body = "OrganisationId:{0}, QueueDeleted:={1}".FormatWith(organisation.Id, queueDeleted) }; Session.AddCommitAction(new SendMessageCommitAction(emailInfo, _configuration.GetNotificationsQueueAddress())); Session.AddCommitAction(new FlushOrganisationCacheCommitAction(_configuration, organisation)); Session.SynchroniseIndexes <UserOrganisationMappings, Indexing.Organisations>(); return(new DeleteOrganisationResponse(request.OrganisationId)); }
public CancelSubscriptionResponse Invoke(CancelSubscriptionRequest request) { Trace("Starting..."); var organisation = Session.MasterRaven.Load <Organisation>(request.CurrentUser.ActiveOrganisation.Id); if (organisation == null) { return(new CancelSubscriptionResponse(ignoreCache: true) { Status = CancelSubscriptionStatus.OrganisationNotFound }); } if (!organisation.Subscription.ChargifyId.HasValue) { return(new CancelSubscriptionResponse(ignoreCache: true) { Status = CancelSubscriptionStatus.SubscriptionNotFound }); } var connection = new ChargifyConnect(_configuration.ChargifyUrl, _configuration.ChargifyApiKey, _configuration.ChargifyPassword); var subscription = connection.LoadSubscription(organisation.Subscription.ChargifyId.Value); if (subscription == null) { return(new CancelSubscriptionResponse(ignoreCache: true) { Status = CancelSubscriptionStatus.SubscriptionNotFound }); } var cancelled = connection.DeleteSubscription(organisation.Subscription.ChargifyId.Value, request.CancellationReason); if (!cancelled) { return(new CancelSubscriptionResponse(ignoreCache: true) { Status = CancelSubscriptionStatus.CancellationFailed }); } organisation.Subscription.ChargifyId = subscription.SubscriptionID; organisation.Subscription.Status = SubscriptionStatus.Cancelled; organisation.Subscription.CancellationDate = DateTime.UtcNow.ToDateTimeOffset(organisation.TimezoneId); organisation.Subscription.CancellationReason = request.CancellationReason; organisation.Subscription.LastModified = organisation.Subscription.CancellationDate.Value; Session.SynchroniseIndexes <Indexing.Organisations, Indexing.Users>(); Session.AddCommitAction(new SendMessageCommitAction( new SubscriptionCancelledEmailInfo { OrganisationName = organisation.Name, UserName = request.CurrentUser.FirstName, AccountDisabledOn = organisation.Subscription.CurrentPeriodEndDate.ToLocalFormatted() }, _configuration.GetNotificationsQueueAddress(organisation.RavenInstanceId))); return(new CancelSubscriptionResponse(organisation.Id, request.CurrentUser.Email) { Status = CancelSubscriptionStatus.Ok, AccountExpirationDate = organisation.Subscription.CurrentPeriodEndDate }); }
public SuspendOrganisationResponse Invoke(SuspendOrganisationRequest request) { var organisation = Session.MasterRaven .Include <Organisation>(o => o.RavenInstanceId) .Load <Organisation>(request.OrganisationId); if (organisation == null) { return(new SuspendOrganisationResponse(request.OrganisationId, true)); } organisation.RavenInstance = MasterLoad <RavenInstance>(organisation.RavenInstanceId); if (organisation.Status == OrganisationStatus.Suspended) { return(new SuspendOrganisationResponse(organisation.Id, true) { Status = SuspendOrganisationStatus.AccountAlreadySuspended }); } using (Session.SwitchOrg(organisation)) { organisation.Status = OrganisationStatus.Suspended; organisation.SuspendedReason = request.Reason; organisation.SuspendedMessage = request.Message; organisation.SuspendedOnUtc = DateTime.UtcNow; var applications = _getApplicationsQuery.Invoke(new GetApplicationsRequest { OrganisationId = organisation.Id, Paging = new PageRequestWithSort(1, _configuration.MaxPageSize) }).Applications; foreach (var application in applications.Items) { application.IsActive = false; Session.AddCommitAction(new FlushApplicationCacheCommitAction(_configuration, organisation, application.Id)); } Session.AddCommitAction(new FlushOrganisationCacheCommitAction(_configuration, organisation)); var primaryUser = Session.Raven.Load <User>(organisation.PrimaryUserId); if (primaryUser != null) { Session.AddCommitAction(new SendMessageCommitAction( new AccountSuspendedEmailInfo { OrganisationName = organisation.Name, UserName = primaryUser.FirstName, SuspendedReason = request.Reason.GetDescription() }, _configuration.GetNotificationsQueueAddress(organisation.RavenInstanceId))); } } return(new SuspendOrganisationResponse(organisation.Id) { Status = SuspendOrganisationStatus.Ok }); }
public ChangeSubscriptionResponse Invoke(ChangeSubscriptionRequest request) { Trace("Starting..."); var organisation = Session.MasterRaven.Load <Organisation>(request.CurrentUser.ActiveOrganisation.Id); if (organisation == null) { return(new ChangeSubscriptionResponse(ignoreCache: true) { Status = ChangeSubscriptionStatus.OrganisationNotFound }); } if (!organisation.Subscription.ChargifyId.HasValue) { return(new ChangeSubscriptionResponse(ignoreCache: true) { Status = ChangeSubscriptionStatus.SubscriptionNotFound }); } var plans = _getAvailablePaymentPlansQuery.Invoke(new GetAvailablePaymentPlansRequest()).Plans; var stats = _getOrganisationStatisticsQuery.Invoke(new GetOrganisationStatisticsRequest()).Statistics; //if we are downgrading check the organisations stats to make sure they can if (request.Downgrading) { var plan = plans.FirstOrDefault(p => p.Id == PaymentPlan.GetId(request.NewPlanId)); if (plan != null) { var quotas = PlanQuotas.FromStats(stats, plan); if (quotas.IssuesExceededBy > 0) { return(new ChangeSubscriptionResponse(ignoreCache: true) { Status = ChangeSubscriptionStatus.QuotasExceeded, Quotas = quotas }); } } } var chargifyConnect = new ChargifyConnect(_configuration.ChargifyUrl, _configuration.ChargifyApiKey, _configuration.ChargifyPassword); var subscription = chargifyConnect.LoadSubscription(organisation.Subscription.ChargifyId.Value); if (subscription == null) { return(new ChangeSubscriptionResponse(ignoreCache: true) { Status = ChangeSubscriptionStatus.SubscriptionNotFound }); } var newPlan = plans.First(p => p.Id == PaymentPlan.GetId(request.NewPlanId)); if (newPlan.IsFreeTier) { chargifyConnect.DeleteSubscription(organisation.Subscription.ChargifyId.Value, "Downgrade"); organisation.Subscription.ChargifyId = null; organisation.Subscription.Status = SubscriptionStatus.Trial; } else { subscription = chargifyConnect.EditSubscriptionProduct(organisation.Subscription.ChargifyId.Value, request.NewPlanName.ToLowerInvariant()); organisation.Subscription.ChargifyId = subscription.SubscriptionID; organisation.Subscription.Status = SubscriptionStatus.Active; } organisation.PaymentPlanId = PaymentPlan.GetId(request.NewPlanId); organisation.PaymentPlan = newPlan; organisation.Subscription.LastModified = DateTime.UtcNow.ToDateTimeOffset(organisation.TimezoneId); //if status is quotas exceeded, check again and update if necessary if (organisation.Status == OrganisationStatus.PlanQuotaExceeded) { var quotas = PlanQuotas.FromStats(stats, newPlan); if (quotas.IssuesExceededBy <= 0) { organisation.Status = OrganisationStatus.Active; } } Session.SynchroniseIndexes <Indexing.Organisations, Indexing.Users>(); Session.AddCommitAction(new SendMessageCommitAction( new SubsciptionChangedEmailInfo { OrganisationName = organisation.Name, SubscriptionId = subscription.SubscriptionID.ToString(), UserName = request.CurrentUser.FirstName, BillingAmount = string.Format(CultureInfo.GetCultureInfo(1033), "{0:C}", newPlan.Price), BillingPeriodEndDate = organisation.Subscription.CurrentPeriodEndDate.ToLocalFormatted(), OldPlanName = request.OldPlanName, NewPlanName = newPlan.Name }, _configuration.GetNotificationsQueueAddress(organisation.RavenInstanceId))); return(new ChangeSubscriptionResponse(organisation.Id, request.CurrentUser.Email) { Status = ChangeSubscriptionStatus.Ok }); }
public CompleteSignUpResponse Invoke(CompleteSignUpRequest request) { Trace("Starting..."); //verify var connection = new ChargifyConnect(_configuration.ChargifyUrl, _configuration.ChargifyApiKey, _configuration.ChargifyPassword); var subscription = connection.LoadSubscription(request.SubscriptionId); if (subscription == null) { return(new CompleteSignUpResponse(ignoreCache: true) { Status = CompleteSignUpStatus.SubscriptionNotFound }); } var token = _encryptor.Decrypt(HttpUtility.UrlDecode(request.Reference).Base64Decode()).Split('|'); if (token[0] != request.CurrentUser.ActiveOrganisation.FriendlyId) { return(new CompleteSignUpResponse(ignoreCache: true) { Status = CompleteSignUpStatus.InvalidOrganisation }); } var organisation = Session.MasterRaven .Include <Organisation>(o => o.PaymentPlanId) .Load <Organisation>(request.CurrentUser.ActiveOrganisation.Id); if (organisation == null) { return(new CompleteSignUpResponse(ignoreCache: true) { Status = CompleteSignUpStatus.OrganisationNotFound }); } organisation.PaymentPlan = MasterLoad <PaymentPlan>(organisation.PaymentPlanId); organisation.PaymentPlanId = "PaymentPlans/{0}".FormatWith(token[1]); organisation.Subscription.ChargifyId = subscription.SubscriptionID; organisation.Subscription.Status = SubscriptionStatus.Active; organisation.Subscription.StartDate = DateTime.UtcNow.ToDateTimeOffset(organisation.TimezoneId); organisation.Subscription.CurrentPeriodEndDate = subscription.CurrentPeriodEndsAt.ToUniversalTime().ToDateTimeOffset(organisation.TimezoneId); organisation.Subscription.CancellationDate = organisation.Subscription.StartDate; Session.SynchroniseIndexes <Indexing.Organisations, Indexing.Users>(); Session.AddCommitAction(new SendMessageCommitAction( new SignUpCompleteEmailInfo { OrganisationName = organisation.Name, SubscriptionId = request.SubscriptionId.ToString(), UserName = request.CurrentUser.FirstName, BillingAmount = string.Format(CultureInfo.GetCultureInfo(1033), "{0:C}", organisation.PaymentPlan.Price), PlanName = organisation.PaymentPlan.Name }, _configuration.GetNotificationsQueueAddress(organisation.RavenInstanceId))); return(new CompleteSignUpResponse(organisation.Id, request.CurrentUser.Email) { Status = CompleteSignUpStatus.Ok }); }