Ejemplo n.º 1
0
        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"));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 4
0
        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
            });
        }
Ejemplo n.º 6
0
        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
            });
        }
Ejemplo n.º 7
0
        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
            });
        }