Пример #1
0
        /// <summary>
        /// Processes the NCOA History results.
        /// </summary>
        /// <param name="sparkDataConfig">The spark data configuration.</param>
        public void ProcessNcoaResults(SparkDataConfig sparkDataConfig = null)
        {
            if (sparkDataConfig == null)
            {
                sparkDataConfig = GetSettings();
            }

            if (sparkDataConfig.NcoaSettings.InactiveRecordReasonId == null)
            {
                throw new NullReferenceException("Inactive Record Reason value is empty.");
            }

            // Get the inactive reason
            var inactiveReason = DefinedValueCache.Get(sparkDataConfig.NcoaSettings.InactiveRecordReasonId.Value);

            // Get minimum move distance that is required to make the person as moved
            var minMoveDistance = SystemSettings.GetValue(SystemKey.SystemSetting.NCOA_MINIMUM_MOVE_DISTANCE_TO_INACTIVATE).AsDecimalOrNull();

            // Process the 'None' and 'NoMove' NCOA Types (these will always have an address state as 'invalid')
            var markInvalidAsPrevious = SystemSettings.GetValue(SystemKey.SystemSetting.NCOA_SET_INVALID_AS_PREVIOUS).AsBoolean();

            // Process the '48 Month Move' NCOA Types
            var mark48MonthAsPrevious = SystemSettings.GetValue(SystemKey.SystemSetting.NCOA_SET_48_MONTH_AS_PREVIOUS).AsBoolean();

            ProcessNcoaResults(inactiveReason, markInvalidAsPrevious, mark48MonthAsPrevious, minMoveDistance);
        }
        /// <summary>
        /// Handles the CheckedChanged event of the cbNcoaAckPrice control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void cbNcoaAckPrice_CheckedChanged(object sender, EventArgs e)
        {
            // Update Spark Data settings
            _sparkDataConfig = Ncoa.GetSettings();

            _sparkDataConfig.NcoaSettings.IsAckPrice = cbNcoaAckPrice.Checked;
            Rock.Web.SystemSettings.SetValue(SystemSetting.SPARK_DATA, _sparkDataConfig.ToJson());

            // Update if Run Manually button is enabled
            SetStartNcoaEnabled();
        }
Пример #3
0
        /// <summary>
        /// Resume a pending export: Checks if the export is complete. If the export is complete, then download the export, process the addresses and sent a notification.
        /// </summary>
        /// <param name="sparkDataConfig">The spark data configuration.</param>
        public void PendingExport(SparkDataConfig sparkDataConfig = null)
        {
            if (sparkDataConfig == null)
            {
                sparkDataConfig = GetSettings();
            }

            SparkDataApi.SparkDataApi sparkDataApi = new SparkDataApi.SparkDataApi();
            var credentials = sparkDataApi.NcoaGetCredentials(sparkDataConfig.SparkDataApiKey);

            var ncoaApi = new NcoaApi(credentials);

            if (!ncoaApi.IsReportExportCreated(sparkDataConfig.NcoaSettings.FileName))
            {
                return;
            }

            List <NcoaReturnRecord> ncoaReturnRecords;

            ncoaApi.DownloadExport(sparkDataConfig.NcoaSettings.CurrentReportExportKey, out ncoaReturnRecords);
            var ncoaHistoryList = ncoaReturnRecords.Select(r => r.ToNcoaHistory()).ToList();

            FilterDuplicateLocations(ncoaHistoryList);

            // Making sure that the database is empty to avoid adding duplicate data.
            using (var rockContext = new RockContext())
            {
                NcoaHistoryService ncoaHistoryService = new NcoaHistoryService(rockContext);
                ncoaHistoryService.DeleteRange(ncoaHistoryService.Queryable());
                rockContext.SaveChanges();
            }

            if (ncoaReturnRecords != null && ncoaReturnRecords.Count != 0)
            {
                using (var rockContext = new RockContext())
                {
                    var ncoaHistoryService = new NcoaHistoryService(rockContext);
                    ncoaHistoryService.AddRange(ncoaHistoryList);
                    rockContext.SaveChanges();
                }
            }

            ProcessNcoaResults(sparkDataConfig);

            sparkDataApi.NcoaCompleteReport(sparkDataConfig.SparkDataApiKey, sparkDataConfig.NcoaSettings.FileName, sparkDataConfig.NcoaSettings.CurrentReportExportKey);

            //Notify group
            SentNotification(sparkDataConfig, "finished");

            sparkDataConfig.NcoaSettings.LastRunDate         = RockDateTime.Now;
            sparkDataConfig.NcoaSettings.CurrentReportStatus = "Complete";
            sparkDataConfig.NcoaSettings.FileName            = null;
            SaveSettings(sparkDataConfig);
        }
        /// <summary>
        /// Handles the Click event of the btnSaveEdit control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        protected void btnSaveEdit_Click(object sender, EventArgs e)
        {
            // Get Spark Data
            _sparkDataConfig = Ncoa.GetSettings();

            _sparkDataConfig.GlobalNotificationApplicationGroupId = grpNotificationGroupEdit.GroupId;
            _sparkDataConfig.SparkDataApiKey = txtSparkDataApiKeyEdit.Text;

            Rock.Web.SystemSettings.SetValue(SystemSetting.SPARK_DATA, _sparkDataConfig.ToJson());

            GetSettings();
        }
Пример #5
0
 /// <summary>
 /// Current state is complete. Check if recurring is enabled and recurring interval have been reached,
 /// and if so set the state back to Start.
 /// </summary>
 /// <param name="sparkDataConfig">The spark data configuration.</param>
 private void StatusComplete(SparkDataConfig sparkDataConfig)
 {
     if (sparkDataConfig.NcoaSettings.IsEnabled &&
         !sparkDataConfig.NcoaSettings.LastRunDate.HasValue ||
         (sparkDataConfig.NcoaSettings.RecurringEnabled &&
          sparkDataConfig.NcoaSettings.LastRunDate.Value.AddDays(sparkDataConfig.NcoaSettings.RecurrenceInterval) < RockDateTime.Now))
     {
         sparkDataConfig.NcoaSettings.CurrentReportStatus = "Start";
         sparkDataConfig.NcoaSettings.PersonFullName      = null;
         Ncoa.SaveSettings(sparkDataConfig);
         StatusStart(sparkDataConfig);
     }
 }
Пример #6
0
        /// <summary>
        /// Gets the settings.
        /// </summary>
        /// <returns>The spark data configuration.</returns>
        public static SparkDataConfig GetSettings(SparkDataConfig sparkDataConfig = null)
        {
            // Get Spark Data settings
            if (sparkDataConfig == null)
            {
                sparkDataConfig = Rock.Web.SystemSettings.GetValue(SystemSetting.SPARK_DATA).FromJsonOrNull <SparkDataConfig>() ?? new SparkDataConfig();
            }

            if (sparkDataConfig.NcoaSettings == null)
            {
                sparkDataConfig.NcoaSettings = new NcoaSettings();
            }

            if (sparkDataConfig.Messages == null)
            {
                sparkDataConfig.Messages = new Extension.FixedSizeList <string>(30);
            }

            return(sparkDataConfig);
        }
        /// <summary>
        /// Sets the Run Manually start NCOA button enabled state.
        /// </summary>
        private void SetStartNcoaEnabled()
        {
            if (_sparkDataConfig == null)
            {
                _sparkDataConfig = Ncoa.GetSettings();
            }

            if (_sparkDataConfig.NcoaSettings.CurrentReportStatus.Contains("Pending"))
            {
                lbStartNcoa.Enabled = false;
            }
            else
            {
                lbStartNcoa.Enabled = cbNcoaAcceptTerms.Checked &&
                                      cbNcoaAckPrice.Checked &&
                                      cbNcoaConfiguration.Checked &&
                                      !bbtnNcoaSaveConfig.Enabled &&
                                      _sparkDataConfig.NcoaSettings.IsValid();
            }
        }
        /// <summary>
        /// Handles the CheckedChanged event when enabling/disabling the NCOA option.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
        protected void cbNcoaConfiguration_CheckedChanged(object sender, EventArgs e)
        {
            _sparkDataConfig = Ncoa.GetSettings();

            _sparkDataConfig.NcoaSettings.IsEnabled = cbNcoaConfiguration.Checked;

            Rock.Web.SystemSettings.SetValue(SystemSetting.SPARK_DATA, _sparkDataConfig.ToJson());

            // Save job active status
            using (var rockContext = new RockContext())
            {
                var ncoaJob = new ServiceJobService(rockContext).Get(Rock.SystemGuid.ServiceJob.GET_NCOA.AsGuid());
                if (ncoaJob != null)
                {
                    ncoaJob.IsActive = cbNcoaConfiguration.Checked;
                    rockContext.SaveChanges();
                }
            }

            SetPanels();
        }
Пример #9
0
 /// <summary>
 /// Current state is start. Start NCOA
 /// </summary>
 /// <param name="sparkDataConfig">The spark data configuration.</param>
 private void StatusStart(SparkDataConfig sparkDataConfig)
 {
     if (sparkDataConfig.NcoaSettings.IsAckPrice && sparkDataConfig.NcoaSettings.IsAcceptedTerms)
     {
         var ncoa = new Ncoa();
         ncoa.Start(sparkDataConfig);
     }
     else
     {
         if (!sparkDataConfig.NcoaSettings.IsAckPrice && !sparkDataConfig.NcoaSettings.IsAcceptedTerms)
         {
             throw new Exception("The NCOA terms of service have not been accepted.");
         }
         else if (!sparkDataConfig.NcoaSettings.IsAcceptedTerms)
         {
             throw new Exception("The NCOA terms of service have not been accepted.");
         }
         else
         {
             throw new Exception("The price of the NCOA service has not been acknowledged.");
         }
     }
 }
Пример #10
0
        /// <summary>
        /// Saves the settings.
        /// </summary>
        private void SaveSettings()
        {
            // NCOA Configuration
            Rock.Web.SystemSettings.SetValue(SystemSetting.NCOA_MINIMUM_MOVE_DISTANCE_TO_INACTIVATE, nbNcoaMinMoveDistance.Text);
            Rock.Web.SystemSettings.SetValue(SystemSetting.NCOA_SET_48_MONTH_AS_PREVIOUS, cbNcoa48MonAsPrevious.Checked.ToString());
            Rock.Web.SystemSettings.SetValue(SystemSetting.NCOA_SET_INVALID_AS_PREVIOUS, cbNcoaInvalidAddressAsPrevious.Checked.ToString());

            // Get Spark Data
            _sparkDataConfig = Ncoa.GetSettings();

            _sparkDataConfig.NcoaSettings.PersonDataViewId       = dvpNcoaPersonDataView.SelectedValue.AsIntegerOrNull();
            _sparkDataConfig.NcoaSettings.RecurringEnabled       = cbNcoaRecurringEnabled.Checked;
            _sparkDataConfig.NcoaSettings.RecurrenceInterval     = nbNcoaRecurrenceInterval.Text.AsInteger();
            _sparkDataConfig.NcoaSettings.IsEnabled              = cbNcoaConfiguration.Checked;
            _sparkDataConfig.NcoaSettings.IsAckPrice             = cbNcoaAckPrice.Checked;
            _sparkDataConfig.NcoaSettings.IsAcceptedTerms        = cbNcoaAcceptTerms.Checked;
            _sparkDataConfig.NcoaSettings.InactiveRecordReasonId = dvpNcoaInactiveRecordReason.SelectedValueAsId();

            Rock.Web.SystemSettings.SetValue(SystemSetting.SPARK_DATA, _sparkDataConfig.ToJson());

            bbtnNcoaSaveConfig.Enabled = false;
            SetStartNcoaEnabled();
        }
Пример #11
0
        /// <summary>
        /// Resume a pending report: Checks if the report is complete. If the report is complete, then sent a create report command to NCOA.
        /// </summary>
        /// <param name="sparkDataConfig">The spark data configuration.</param>
        public void PendingReport(SparkDataConfig sparkDataConfig = null)
        {
            if (sparkDataConfig == null)
            {
                sparkDataConfig = GetSettings();
            }

            SparkDataApi.SparkDataApi sparkDataApi = new SparkDataApi.SparkDataApi();
            var credentials = sparkDataApi.NcoaGetCredentials(sparkDataConfig.SparkDataApiKey);
            var ncoaApi     = new NcoaApi(credentials);

            if (!ncoaApi.IsReportCreated(sparkDataConfig.NcoaSettings.CurrentReportKey))
            {
                return;
            }

            string exportFileId;

            ncoaApi.CreateReportExport(sparkDataConfig.NcoaSettings.CurrentReportKey, out exportFileId);

            sparkDataConfig.NcoaSettings.CurrentReportExportKey = exportFileId;
            sparkDataConfig.NcoaSettings.CurrentReportStatus    = "Pending: Export";
            SaveSettings(sparkDataConfig);
        }
Пример #12
0
        /// <summary>
        /// Sends a notification that NCOA finished or failed
        /// </summary>
        /// <param name="sparkDataConfig">The spark data configuration.</param>
        /// <param name="status">The status to put in the notification.</param>
        public void SentNotification(SparkDataConfig sparkDataConfig, string status)
        {
            if (!sparkDataConfig.GlobalNotificationApplicationGroupId.HasValue || sparkDataConfig.GlobalNotificationApplicationGroupId.Value == 0)
            {
                return;
            }

            var recipients = new List <RecipientData>();

            using (RockContext rockContext = new RockContext())
            {
                Group group = new GroupService(rockContext).GetNoTracking(sparkDataConfig.GlobalNotificationApplicationGroupId.Value);

                foreach (var groupMember in group.Members)
                {
                    if (groupMember.GroupMemberStatus == GroupMemberStatus.Active)
                    {
                        var mergeFields = Rock.Lava.LavaHelper.GetCommonMergeFields(null);
                        mergeFields.Add("Person", groupMember.Person);
                        mergeFields.Add("GroupMember", groupMember);
                        mergeFields.Add("Group", groupMember.Group);
                        mergeFields.Add("SparkDataService", "National Change of Address (NCOA)");
                        mergeFields.Add("SparkDataConfig", sparkDataConfig);
                        mergeFields.Add("Status", status);
                        recipients.Add(new RecipientData(groupMember.Person.Email, mergeFields));
                    }
                }

                SystemEmailService emailService = new SystemEmailService(rockContext);
                SystemEmail        systemEmail  = emailService.GetNoTracking(SystemGuid.SystemEmail.SPARK_DATA_NOTIFICATION.AsGuid());

                var emailMessage = new RockEmailMessage(systemEmail.Guid);
                emailMessage.SetRecipients(recipients);
                emailMessage.Send();
            }
        }
Пример #13
0
        /// <summary>
        /// Starts the NCOA request: Check if there is a valid credit card on the Spark Data server. If there is a valid credit card, then get the addresses, initialize a report on NCOA, upload the addresses to NCOA and delete the previous NcoaHistory data.
        /// </summary>
        /// <param name="sparkDataConfig">The spark data configuration.</param>
        public void Start(SparkDataConfig sparkDataConfig)
        {
            if (sparkDataConfig == null)
            {
                sparkDataConfig = GetSettings();
            }

            SparkDataApi.SparkDataApi sparkDataApi = new SparkDataApi.SparkDataApi();
            var accountStatus = sparkDataApi.CheckAccount(sparkDataConfig.SparkDataApiKey);

            switch (accountStatus)
            {
            case SparkDataApi.SparkDataApi.AccountStatus.AccountNoName:
                throw new UnauthorizedAccessException("Account does not have a name.");

            case SparkDataApi.SparkDataApi.AccountStatus.AccountNotFound:
                throw new UnauthorizedAccessException("Account not found.");

            case SparkDataApi.SparkDataApi.AccountStatus.Disabled:
                throw new UnauthorizedAccessException("Account is disabled.");

            case SparkDataApi.SparkDataApi.AccountStatus.EnabledCardExpired:
                throw new UnauthorizedAccessException("Credit card on Spark server expired.");

            case SparkDataApi.SparkDataApi.AccountStatus.EnabledNoCard:
                throw new UnauthorizedAccessException("No credit card found on Spark server.");

            case SparkDataApi.SparkDataApi.AccountStatus.InvalidSparkDataKey:
                throw new UnauthorizedAccessException("Invalid Spark Data Key.");
            }

            var addresses = GetAddresses(sparkDataConfig.NcoaSettings.PersonDataViewId);

            if (addresses.Count == 0)
            {
                sparkDataConfig.NcoaSettings.LastRunDate         = RockDateTime.Now;
                sparkDataConfig.NcoaSettings.CurrentReportStatus = "Complete";
                SaveSettings(sparkDataConfig);
                return;
            }

            GroupNameTransactionKey groupNameTransactionKey = null;

            if (sparkDataConfig.NcoaSettings.FileName.IsNotNullOrWhiteSpace())
            {
                groupNameTransactionKey = sparkDataApi.NcoaRetryReport(sparkDataConfig.SparkDataApiKey, sparkDataConfig.NcoaSettings.FileName);
            }

            if (groupNameTransactionKey == null)
            {
                groupNameTransactionKey = sparkDataApi.NcoaInitiateReport(sparkDataConfig.SparkDataApiKey, addresses.Count, sparkDataConfig.NcoaSettings.PersonFullName);
            }

            if (groupNameTransactionKey == null)
            {
                if (sparkDataConfig.NcoaSettings.CurrentReportStatus == "Failed")
                {
                    // To avoid trying to charging customer over and over again...
                    sparkDataConfig.NcoaSettings.IsEnabled = false;
                }

                throw new Exception("Init NCOA: Failed to initialize request.");
            }

            sparkDataConfig.NcoaSettings.FileName = groupNameTransactionKey.TransactionKey;

            var credentials = sparkDataApi.NcoaGetCredentials(sparkDataConfig.SparkDataApiKey);
            var ncoaApi     = new NcoaApi(credentials);

            string id;

            ncoaApi.CreateFile(sparkDataConfig.NcoaSettings.FileName, groupNameTransactionKey.GroupName, out id);
            sparkDataConfig.NcoaSettings.CurrentReportKey = id;

            ncoaApi.UploadAddresses(addresses, sparkDataConfig.NcoaSettings.CurrentReportKey);

            sparkDataConfig.NcoaSettings.CurrentUploadCount = addresses.Count;
            ncoaApi.CreateReport(sparkDataConfig.NcoaSettings.CurrentReportKey);

            // Delete previous NcoaHistory entries. This prevent an user thinking the previous run's data is the current run's data.
            using (RockContext rockContext = new RockContext())
            {
                NcoaHistoryService ncoaHistoryService = new NcoaHistoryService(rockContext);
                ncoaHistoryService.DeleteRange(ncoaHistoryService.Queryable());
                rockContext.SaveChanges();
            }

            sparkDataConfig.NcoaSettings.CurrentReportStatus = "Pending: Report";
            SaveSettings(sparkDataConfig);
        }
Пример #14
0
        /// <summary>
        /// Gets the settings.
        /// </summary>
        private void GetSettings()
        {
            // Get Spark Data settings
            _sparkDataConfig = Ncoa.GetSettings();
            if (_sparkDataConfig.SparkDataApiKey.IsNullOrWhiteSpace())
            {
                pnlSparkDataEdit.Visible    = false;
                pnlSignIn.Visible           = true;
                pnlAccountStatus.Visible    = false;
                pwNcoaConfiguration.Visible = false;
                bbtnNcoaSaveConfig.Visible  = false;

                txtSparkDataApiKeyLogin.Text      = _sparkDataConfig.SparkDataApiKey;
                grpNotificationGroupLogin.GroupId = _sparkDataConfig.GlobalNotificationApplicationGroupId;
            }
            else
            {
                pnlSparkDataEdit.Visible    = false;
                pnlSignIn.Visible           = false;
                pnlAccountStatus.Visible    = true;
                pwNcoaConfiguration.Visible = true;
                bbtnNcoaSaveConfig.Visible  = true;

                // Get NCOA configuration settings
                nbNcoaMinMoveDistance.Text             = Rock.Web.SystemSettings.GetValue(SystemSetting.NCOA_MINIMUM_MOVE_DISTANCE_TO_INACTIVATE);
                cbNcoa48MonAsPrevious.Checked          = Rock.Web.SystemSettings.GetValue(SystemSetting.NCOA_SET_48_MONTH_AS_PREVIOUS).AsBoolean();
                cbNcoaInvalidAddressAsPrevious.Checked = Rock.Web.SystemSettings.GetValue(SystemSetting.NCOA_SET_INVALID_AS_PREVIOUS).AsBoolean();

                txtSparkDataApiKeyEdit.Text      = _sparkDataConfig.SparkDataApiKey;
                grpNotificationGroupEdit.GroupId = _sparkDataConfig.GlobalNotificationApplicationGroupId;

                // Get NCOA settings
                if (_sparkDataConfig.NcoaSettings == null)
                {
                    _sparkDataConfig.NcoaSettings = new NcoaSettings();
                }

                dvpNcoaPersonDataView.SetValue(_sparkDataConfig.NcoaSettings.PersonDataViewId);
                cbNcoaRecurringEnabled.Checked   = _sparkDataConfig.NcoaSettings.RecurringEnabled;
                nbNcoaRecurrenceInterval.Enabled = _sparkDataConfig.NcoaSettings.RecurringEnabled;
                nbNcoaRecurrenceInterval.Text    = _sparkDataConfig.NcoaSettings.RecurrenceInterval.ToStringSafe();
                cbNcoaAcceptTerms.Checked        = _sparkDataConfig.NcoaSettings.IsAcceptedTerms;
                cbNcoaAckPrice.Checked           = _sparkDataConfig.NcoaSettings.IsAckPrice;
                if (_sparkDataConfig.NcoaSettings.InactiveRecordReasonId.HasValue)
                {
                    dvpNcoaInactiveRecordReason.SetValue(_sparkDataConfig.NcoaSettings.InactiveRecordReasonId.Value);
                }

                nbNcoaCreditCard.Visible = false;

                if (_sparkDataConfig.NcoaSettings.CurrentReportStatus == null)
                {
                    _sparkDataConfig.NcoaSettings.CurrentReportStatus = string.Empty;
                }

                if (_sparkDataConfig.SparkDataApiKey.IsNullOrWhiteSpace())
                {
                    pnlSignIn.Visible        = true;
                    pnlSparkDataEdit.Visible = false;
                }
                else
                {
                    pnlSignIn.Visible = false;
                    bool accountValid = false;

                    SparkDataApi sparkDataApi = new SparkDataApi();
                    try
                    {
                        var accountStatus = sparkDataApi.CheckAccount(_sparkDataConfig.SparkDataApiKey);
                        switch (accountStatus)
                        {
                        case SparkDataApi.AccountStatus.AccountNoName:
                            hlAccountStatus.LabelType = LabelType.Warning;
                            hlAccountStatus.Text      = "Account does not have a name";
                            break;

                        case SparkDataApi.AccountStatus.AccountNotFound:
                            hlAccountStatus.LabelType = LabelType.Warning;
                            hlAccountStatus.Text      = "Account not found";
                            break;

                        case SparkDataApi.AccountStatus.Disabled:
                            hlAccountStatus.LabelType = LabelType.Warning;
                            hlAccountStatus.Text      = "Disabled";
                            break;

                        case SparkDataApi.AccountStatus.EnabledCardExpired:
                            hlAccountStatus.LabelType = LabelType.Danger;
                            hlAccountStatus.Text      = "Enabled - Card expired";
                            break;

                        case SparkDataApi.AccountStatus.EnabledNoCard:
                            hlAccountStatus.LabelType = LabelType.Warning;
                            hlAccountStatus.Text      = "Enabled - No card on file";
                            nbNcoaCreditCard.Visible  = true;
                            break;

                        case SparkDataApi.AccountStatus.EnabledCard:
                            hlAccountStatus.LabelType = LabelType.Success;
                            hlAccountStatus.Text      = "Enabled - Card on file";
                            accountValid = true;
                            break;

                        case SparkDataApi.AccountStatus.InvalidSparkDataKey:
                            hlAccountStatus.LabelType = LabelType.Warning;
                            hlAccountStatus.Text      = "Invalid Spark Data Key";
                            break;

                        case SparkDataApi.AccountStatus.EnabledCardNoExpirationDate:
                            hlAccountStatus.LabelType = LabelType.Warning;
                            hlAccountStatus.Text      = "Enabled - Card expiration date not on file";
                            break;
                        }

                        string cost = sparkDataApi.GetPrice("CF20766E-80F9-E282-432F-6A9E19F0BFF1");
                        cbNcoaAckPrice.Text = cbNcoaAckPrice.Text.Replace("$xx", "$" + cost);
                    }
                    catch
                    {
                        hlAccountStatus.LabelType = LabelType.Danger;
                        hlAccountStatus.Text      = "Error connecting to Spark server";
                    }

                    cbNcoaConfiguration.Checked = _sparkDataConfig.NcoaSettings.IsEnabled && accountValid;
                    cbNcoaConfiguration.Enabled = accountValid;
                    SetStartNcoaEnabled();
                    SetPanels();
                }
            }
        }
Пример #15
0
 /// <summary>
 /// Saves the settings.
 /// </summary>
 /// <param name="sparkDataConfig">The spark data configuration.</param>
 public static void SaveSettings(SparkDataConfig sparkDataConfig)
 {
     Rock.Web.SystemSettings.SetValue(SystemSetting.SPARK_DATA, sparkDataConfig.ToJson());
 }
Пример #16
0
 /// <summary>
 /// Current State is Failed. If recurring is enabled, retry.
 /// </summary>
 /// <param name="sparkDataConfig">The spark data configuration.</param>
 private void StatusFailed(SparkDataConfig sparkDataConfig)
 {
     StatusStart(sparkDataConfig);
 }
Пример #17
0
        /// <summary>
        /// Job to get a National Change of Address (NCOA) report for all active people's addresses.
        ///
        /// Called by the <see cref="IScheduler" /> when a
        /// <see cref="ITrigger" /> fires that is associated with
        /// the <see cref="IJob" />.
        /// </summary>
        public virtual void Execute(IJobExecutionContext context)
        {
            Exception exception = null;
            // Get the job setting(s)
            JobDataMap      dataMap         = context.JobDetail.JobDataMap;
            SparkDataConfig sparkDataConfig = Ncoa.GetSettings();

            if (!sparkDataConfig.NcoaSettings.IsEnabled || !sparkDataConfig.NcoaSettings.IsValid())
            {
                return;
            }

            try
            {
                Guid?sparkDataApiKeyGuid = sparkDataConfig.SparkDataApiKey.AsGuidOrNull();
                if (sparkDataApiKeyGuid == null)
                {
                    exception = new Exception($"Spark Data Api Key '{sparkDataConfig.SparkDataApiKey.ToStringSafe()}' is empty or invalid. The Spark Data Api Key can be configured in System Settings > Spark Data Settings.");
                    return;
                }

                switch (sparkDataConfig.NcoaSettings.CurrentReportStatus)
                {
                case "":
                case null:
                    if (sparkDataConfig.NcoaSettings.RecurringEnabled)
                    {
                        StatusStart(sparkDataConfig);
                    }

                    break;

                case "Start":
                    StatusStart(sparkDataConfig);
                    break;

                case "Failed":
                    StatusFailed(sparkDataConfig);
                    break;

                case "Pending: Report":
                    StatusPendingReport(sparkDataConfig);
                    break;

                case "Pending: Export":
                    StatusPendingExport(sparkDataConfig);
                    break;

                case "Complete":
                    StatusComplete(sparkDataConfig);
                    break;
                }
            }
            catch (Exception ex)
            {
                exception = ex;
            }
            finally
            {
                if (exception != null)
                {
                    context.Result = $"NCOA Job failed: {exception.Message}";

                    sparkDataConfig.NcoaSettings.CurrentReportStatus = "Failed";
                    sparkDataConfig.Messages.Add($"NOCA job failed: {RockDateTime.Now.ToString()} - {exception.Message}");
                    Ncoa.SaveSettings(sparkDataConfig);

                    try
                    {
                        var ncoa = new Ncoa();
                        ncoa.SentNotification(sparkDataConfig, "failed");
                    }
                    catch
                    {
                    }


                    if (sparkDataConfig.SparkDataApiKey.IsNotNullOrWhiteSpace() && sparkDataConfig.NcoaSettings.FileName.IsNotNullOrWhiteSpace())
                    {
                        SparkDataApi sparkDataApi = new SparkDataApi();
                    }

                    Exception   ex       = new AggregateException("NCOA job failed.", exception);
                    HttpContext context2 = HttpContext.Current;
                    ExceptionLogService.LogException(ex, context2);
                    throw ex;
                }
                else
                {
                    string msg;
                    if (sparkDataConfig.NcoaSettings.CurrentReportStatus == "Complete")
                    {
                        using (RockContext rockContext = new RockContext())
                        {
                            NcoaHistoryService ncoaHistoryService = new NcoaHistoryService(rockContext);
                            msg = $"NCOA request processed, {ncoaHistoryService.Count()} {(ncoaHistoryService.Count() == 1 ? "address" : "addresses")} processed, {ncoaHistoryService.MovedCount()} {(ncoaHistoryService.MovedCount() > 1 ? "were" : "was")} marked as 'moved'";
                        }
                    }
                    else
                    {
                        msg = $"Job complete. NCOA status: {sparkDataConfig.NcoaSettings.CurrentReportStatus}";
                    }

                    context.Result = msg;
                    sparkDataConfig.Messages.Add($"{msg}: {RockDateTime.Now.ToString()}");
                    Ncoa.SaveSettings(sparkDataConfig);
                }
            }
        }
Пример #18
0
        /// <summary>
        /// Current state is pending export report. Try to resume a pending export report.
        /// </summary>
        /// <param name="sparkDataConfig">The spark data configuration.</param>
        private void StatusPendingExport(SparkDataConfig sparkDataConfig)
        {
            var ncoa = new Ncoa();

            ncoa.PendingExport(sparkDataConfig);
        }
Пример #19
0
        /// <summary>
        /// Current State is Failed. If recurring is enabled, retry.
        /// </summary>
        /// <param name="sparkDataConfig">The spark data configuration.</param>
        private void StatusFailed(SparkDataConfig sparkDataConfig)
        {
            var ncoa = new Ncoa();

            ncoa.Start(sparkDataConfig);
        }