private static int UpdateSendGridAliasHistory(IEnumerable <PersonAlias> personAliases) { var personAliasesEnumerated = personAliases as IList <PersonAlias> ?? personAliases.ToList(); if (!personAliasesEnumerated.Any()) { return(0); } var now = RockDateTime.Now; var rockContext = new RockContext(); var personAliasHistoryService = new PersonAliasHistoryService(rockContext); int updated = 0; foreach (var personalias in personAliasesEnumerated) { var personAliasHistory = personAliasHistoryService.GetByPersonAliasId(personalias.Id); if (personAliasHistory != null) { personAliasHistory.LastUpdated = now; } else { personAliasHistory = new PersonAliasHistory { PersonAliasId = personalias.Id, LastUpdated = now }; personAliasHistoryService.Add(personAliasHistory); } updated++; } rockContext.SaveChanges(); return(updated); }
public static IQueryable <PersonAlias> FindResyncCandidates(RockContext rockContext, DateTime historicSyncMarker) { historicSyncMarker = historicSyncMarker.AddSeconds(60); var syncedPersonAliases = new PersonAliasHistoryService(rockContext) .Queryable() .Where(a => a.LastUpdated <= historicSyncMarker && a.PersonAlias.Person.EmailPreference == EmailPreference.EmailAllowed && a.PersonAlias.Person.Email != null && a.PersonAlias.Person.Email != "") .Select(a => a.PersonAlias); return(syncedPersonAliases); }
private static int AddToSendGridAliasHistory(IEnumerable <PersonAlias> personAliases) { var now = RockDateTime.Now; var rockContext = new RockContext(); var personAliasHistoryService = new PersonAliasHistoryService(rockContext); int synced = 0; foreach (var aliasId in personAliases) { var personAliasHistory = new PersonAliasHistory { PersonAliasId = aliasId.Id, LastUpdated = now }; personAliasHistoryService.Add(personAliasHistory); synced++; } rockContext.SaveChanges(); return(synced); }
public void Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; string apiKey = dataMap.GetString("APIKey"); int dayInterval = dataMap.GetIntValue("dayInterval"); //Check API Key exists if (string.IsNullOrWhiteSpace(apiKey)) { return; } //Check all the custom fields have been created for the SendGrid marketing campaign. bool fieldsExist = SyncHelper.CheckCustomFields(apiKey); if (!fieldsExist) { return; } var rockContext = new RockContext(); var previouslySyncedPersonAliasIds = new PersonAliasHistoryService(rockContext).Queryable().AsNoTracking().Select(a => a.PersonAliasId); var notYetSynced = SyncHelper.FindNotYetSyncedPersonAlises(rockContext, previouslySyncedPersonAliasIds); var historicSyncMarker = RockDateTime.Now.AddDays(-dayInterval); var needReSyncPersonAliases = SyncHelper.FindResyncCandidates(rockContext, historicSyncMarker); int synCount = SyncHelper.SyncContacts(notYetSynced, apiKey); int reSyncCount = 0; if (needReSyncPersonAliases.Any()) { reSyncCount = SyncHelper.SyncContacts(needReSyncPersonAliases, apiKey, true); } context.Result = string.Format("{0} people synced for the first time, {1} people updated", synCount, reSyncCount); }
public void Execute(IJobExecutionContext context) { var dataMap = context.JobDetail.JobDataMap; string apiKey = dataMap.GetString("APIKey"); string listName = dataMap.GetString("ListName"); string campusGuid = dataMap.GetString("campus"); int timeout = dataMap.GetIntFromString("Timeout"); var campus = campusGuid.AsGuidOrNull(); //Check API Key exists and group guid is not null if (string.IsNullOrWhiteSpace(apiKey) || !campus.HasValue || string.IsNullOrWhiteSpace(listName)) { return; } //Check all the custom fields have been created for the SendGrid marketing campaign. bool fieldsExist = SyncHelper.CheckCustomFields(apiKey); if (!fieldsExist) { return; } var listId = SyncHelper.EnsureListExists(apiKey, listName); if (!listId.HasValue) { throw new Exception("Unable to identify list identifier"); } var familyGuid = Rock.SystemGuid.GroupType.GROUPTYPE_FAMILY.AsGuid(); int activeRecordStatusValueId = DefinedValueCache.Read(Rock.SystemGuid.DefinedValue.PERSON_RECORD_STATUS_ACTIVE).Id; var rockContext = new RockContext(); rockContext.Database.CommandTimeout = timeout; var campusAttendeesPersonAlias = new GroupService(rockContext) .Queryable() .AsNoTracking() .Where(g => g.GroupType.Guid == familyGuid && g.Campus.Guid == campus.Value) .SelectMany(g => g.Members) .Select(gm => gm.Person) .Where(p => !p.IsDeceased && p.RecordStatusValueId == activeRecordStatusValueId && p.IsEmailActive && p.Email != null && p.Email != string.Empty && p.EmailPreference == EmailPreference.EmailAllowed) .Select(p => p.Aliases.FirstOrDefault()); var campusAttendeesPersonAliasIds = campusAttendeesPersonAlias.Select(a => a.Id); var previouslySyncedPersonAliasIds = new PersonAliasHistoryService(rockContext).GetPreviouslySyncedPersonAliasIds(campusAttendeesPersonAliasIds); var notYetSynced = SyncHelper.FindNotYetSyncedPersonAlises(rockContext, campusAttendeesPersonAliasIds, previouslySyncedPersonAliasIds); if (notYetSynced.Any()) { SyncHelper.SyncContacts(notYetSynced, apiKey); } if (campusAttendeesPersonAlias.Any()) { SyncHelper.EnsureValidPeopleOnly(campusAttendeesPersonAliasIds, listId.Value, apiKey); SyncHelper.AddPeopleToList(campusAttendeesPersonAlias, listId.Value, apiKey); } context.Result = "Campus synced successfully"; }