/// <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(); }
/// <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(); }
/// <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); } }
/// <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(); }
/// <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."); } } }
/// <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(); }
/// <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); }
/// <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(); } }
/// <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); }
/// <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(); } } }
/// <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()); }
/// <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); }
/// <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); } } }
/// <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); }
/// <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); }