/// <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());
        }
Ejemplo n.º 3
0
        /// <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);
                }
            }
        }
Ejemplo n.º 4
0
        /// <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);
        }
Ejemplo n.º 5
0
        /// <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;
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Gets the cache object associated with this Entity
 /// </summary>
 /// <returns></returns>
 public IEntityCache GetCacheObject()
 {
     return(StreakTypeAchievementTypeCache.Get(this.Id));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Gets the achievement type cache.
 /// </summary>
 /// <returns></returns>
 private StreakTypeAchievementTypeCache GetAchievementTypeCache()
 {
     return(StreakTypeAchievementTypeCache.Get(PageParameter(PageParameterKey.StreakTypeAchievementTypeId).AsInteger()));
 }