/// <summary> /// Processes attempts for the specified streak type achievement type identifier. This adds new attempts and updates existing attempts. /// </summary> /// <param name="streakTypeAchievementTypeId">The streak type achievement type identifier.</param> public static void Process(int streakTypeAchievementTypeId) { var achievementTypeCache = StreakTypeAchievementTypeCache.Get(streakTypeAchievementTypeId); if (achievementTypeCache == null) { throw new ArgumentException($"The StreakTypeAchievementTypeCache did not resolve for record id {streakTypeAchievementTypeId}"); } var achievementComponent = achievementTypeCache.AchievementComponent; if (achievementComponent == null) { throw new ArgumentException($"The AchievementComponent did not resolve for record id {streakTypeAchievementTypeId}"); } var streakTypeId = achievementTypeCache.StreakTypeId; var streakService = new StreakService(new RockContext()); var streaks = streakService.Queryable().AsNoTracking() .Where(s => s.StreakTypeId == streakTypeId); foreach (var streak in streaks) { // Process each streak in it's own data context to avoid the data context changes getting too big and slow var rockContext = new RockContext(); achievementComponent.Process(rockContext, achievementTypeCache, streak); rockContext.SaveChanges(); } }
/// <summary> /// Gets the unmet prerequisites. /// </summary> /// <param name="achievementTypeId">The achievement type identifier.</param> /// <param name="personId">The person identifier.</param> /// <returns></returns> public List <ProgressStatement> GetUnmetPrerequisites(int achievementTypeId, int personId) { var achievementType = StreakTypeAchievementTypeCache.Get(achievementTypeId); if (achievementType == null || !achievementType.Prerequisites.Any()) { return(new List <ProgressStatement>()); } return(achievementType.Prerequisites .Select(stat => GetFlatProgressStatement(stat.PrerequisiteStreakTypeAchievementType, personId)) .Where(ps => ps.SuccessCount == 0) .ToList()); }
/// <summary> /// Executes this instance. /// </summary> /// <exception cref="System.NotImplementedException"></exception> public void Execute() { var achievementTypeCache = StreakTypeAchievementTypeCache.Get(StreakTypeAchievementTypeId); if (achievementTypeCache == null || !achievementTypeCache.IsActive) { return; } if (IsNowStarting && achievementTypeCache.AchievementStartWorkflowTypeId.HasValue) { LaunchWorkflow(achievementTypeCache.AchievementStartWorkflowTypeId.Value); } if (IsNowEnding && achievementTypeCache.AchievementFailureWorkflowTypeId.HasValue) { LaunchWorkflow(achievementTypeCache.AchievementFailureWorkflowTypeId.Value); } if (IsNowSuccessful && achievementTypeCache.AchievementSuccessWorkflowTypeId.HasValue) { LaunchWorkflow(achievementTypeCache.AchievementSuccessWorkflowTypeId.Value); } if (IsNowSuccessful && achievementTypeCache.AchievementStepStatusId.HasValue && achievementTypeCache.AchievementStepTypeId.HasValue) { var rockContext = new RockContext(); var streakService = new StreakService(rockContext); var personAliasId = streakService.Queryable().AsNoTracking() .Where(s => s.Id == StreakId) .Select(s => s.PersonAliasId) .FirstOrDefault(); if (personAliasId != default) { AddStep(achievementTypeCache.AchievementStepTypeId.Value, achievementTypeCache.AchievementStepStatusId.Value, personAliasId); } } }
/// <summary> /// Gets the type of the achievement. /// </summary> /// <returns></returns> private StreakTypeAchievementTypeCache GetAchievementTypeCache() { if (_streakTypeAchievementTypeCache != null) { return(_streakTypeAchievementTypeCache); } var attempt = GetAttempt(); var achievementTypeId = PageParameter(PageParameterKey.StreakTypeAchievementTypeId).AsIntegerOrNull(); if (attempt != null) { achievementTypeId = attempt.StreakTypeAchievementTypeId; } if (achievementTypeId.HasValue && achievementTypeId.Value > 0) { _streakTypeAchievementTypeCache = StreakTypeAchievementTypeCache.Get(achievementTypeId.Value); } return(_streakTypeAchievementTypeCache); }
/// <summary> /// Rs the filter_ display filter value. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The e.</param> protected void rFilter_DisplayFilterValue(object sender, GridFilter.DisplayFilterValueArgs e) { switch (e.Key) { case FilterKey.AchievementType: var achievementTypeCache = StreakTypeAchievementTypeCache.Get(e.Value.AsInteger()); e.Value = achievementTypeCache != null ? achievementTypeCache.Name : string.Empty; break; case FilterKey.Status: case FilterKey.FirstName: case FilterKey.LastName: break; case FilterKey.AttemptStartDateRange: e.Value = DateRangePicker.FormatDelimitedValues(e.Value); break; default: e.Value = string.Empty; break; } }
/// <summary> /// Gets the cache object associated with this Entity /// </summary> /// <returns></returns> public IEntityCache GetCacheObject() { return(StreakTypeAchievementTypeCache.Get(this.Id)); }
/// <summary> /// Gets the achievement type cache. /// </summary> /// <returns></returns> private StreakTypeAchievementTypeCache GetAchievementTypeCache() { return(StreakTypeAchievementTypeCache.Get(PageParameter(PageParameterKey.StreakTypeAchievementTypeId).AsInteger())); }