Beispiel #1
0
        /// <summary>
        /// Handles the ItemDataBound event of the rptCheckinResultsAchievementsScoreboard control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="RepeaterItemEventArgs"/> instance containing the event data.</param>
        protected void rptCheckinResultsAchievementsScoreboard_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            var lCheckinResultsAchievementScoreboardHtml = e.Item.FindControl("lCheckinResultsAchievementScoreboardHtml") as Literal;
            PersonAchievementType personAchievementType  = e.Item.DataItem as PersonAchievementType;

            if (personAchievementType == null)
            {
                return;
            }

            var achievementType = personAchievementType.AchievementType;

            if (achievementType == null)
            {
                return;
            }

            var customSummaryLavaTemplate = achievementType.CustomSummaryLavaTemplate;
            var mergeFields = GetAchievementMergeFields(personAchievementType);

            if (customSummaryLavaTemplate.IsNullOrWhiteSpace())
            {
                customSummaryLavaTemplate = achievementType.DefaultSummaryLavaTemplate;
            }

            lCheckinResultsAchievementScoreboardHtml.Text = customSummaryLavaTemplate?.ResolveMergeFields(mergeFields);
        }
Beispiel #2
0
        /// <summary>
        /// Gets the achievement merge fields.
        /// </summary>
        /// <param name="achievementAttempt">The achievement attempt.</param>
        /// <param name="person">The person.</param>
        /// <returns></returns>
        private Dictionary <string, object> GetAchievementMergeFields(PersonAchievementType personAchievementType)
        {
            var person = personAchievementType.Person;

            AchievementTypeCache achievementTypeCache = personAchievementType.AchievementType;
            var mergeFields = new Dictionary <string, object>();

            mergeFields.Add(MergeFieldKey.Person, person);

            AchievementAttempt currentAchievementAttempt;

            if (personAchievementType.JustCompletedAchievementAttempt != null)
            {
                currentAchievementAttempt = personAchievementType.JustCompletedAchievementAttempt;
            }
            else
            {
                currentAchievementAttempt = personAchievementType.AchievementAttempts.Where(a => !a.IsSuccessful && !a.IsClosed).FirstOrDefault();
            }

            // there should be either 1 or 0 achievementAttempts in progress
            int inProgressCount;

            if (personAchievementType.AchievementAttempts.Where(a => !a.IsSuccessful && !a.IsClosed).Any())
            {
                inProgressCount = 1;
            }
            else
            {
                inProgressCount = 0;
            }

            int successfulAchievementCount = personAchievementType.AchievementAttempts.Where(a => a.IsSuccessful).Count();

            mergeFields.Add(MergeFieldKey.CurrentAchievementAttempt, currentAchievementAttempt);
            mergeFields.Add(MergeFieldKey.AchievementAttempts, personAchievementType.AchievementAttempts);
            mergeFields.Add(MergeFieldKey.InProgressCount, inProgressCount);
            mergeFields.Add(MergeFieldKey.SuccessfulAchievementCount, successfulAchievementCount);
            mergeFields.Add(MergeFieldKey.JustCompleted, personAchievementType.JustCompleted);
            mergeFields.Add(MergeFieldKey.AchievementType, achievementTypeCache);

            var achievementTypeEventEntityType = EntityTypeCache.Get(achievementTypeCache.ComponentEntityTypeId);

            mergeFields.Add(MergeFieldKey.AchievementTypeEvent, new RockDynamic(achievementTypeEventEntityType));
            mergeFields.Add(MergeFieldKey.NumberToAchieve, achievementTypeCache.NumberToAchieve);
            mergeFields.Add(MergeFieldKey.NumberToAccumulate, achievementTypeCache.NumberToAccumulate);
            mergeFields.Add(MergeFieldKey.ProgressCount, achievementTypeCache.GetProgressCount(currentAchievementAttempt));
            mergeFields.Add(MergeFieldKey.ProgressPercent, currentAchievementAttempt?.Progress * 100);
            mergeFields.Add(MergeFieldKey.StreakType, achievementTypeCache.StreakType);
            mergeFields.Add(MergeFieldKey.FrequencyText, achievementTypeCache.StreakType?.OccurrenceFrequency.ConvertToString());
            return(mergeFields);
        }