Example #1
0
        /// <summary>
        /// Raises the <see cref="E:System.Web.UI.Control.Load" /> event.
        /// </summary>
        /// <param name="e">The <see cref="T:System.EventArgs" /> object that contains the event data.</param>
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);


            if (!Page.IsPostBack)
            {
                var categoryGuids = GetAttributeValue(AttributeKeys.Categories)
                                    .SplitDelimitedValues()
                                    .Select(i => i.AsGuid())
                                    .ToList();

                RockContext rockContext = new RockContext();


                CategoryService categoryService = new CategoryService(rockContext);
                var             categoryIds     = categoryService.Queryable()
                                                  .Where(c => categoryGuids.Contains(c.Guid))
                                                  .Select(c => c.Id)
                                                  .ToList();

                CourseRequirementStatusService courseRequirementStatusService = new CourseRequirementStatusService(rockContext);
                var statusQry = courseRequirementStatusService.Queryable()
                                .Where(s => s.PersonAlias.PersonId == CurrentPersonId);

                CourseRecordService courseRecordService = new CourseRecordService(rockContext);
                var recordQueryable = courseRecordService.Queryable()
                                      .GroupJoin(statusQry,
                                                 r => r.CourseId,
                                                 s => s.CourseRequirement.CourseId,
                                                 (r, s) => new { Record = r, Statuses = s }
                                                 )
                                      .Where(r => r.Record.PersonAlias.PersonId == CurrentPersonId)
                                      .OrderByDescending(r => r.Record.CompletionDateTime);

                CourseService courseService = new CourseService(rockContext);

                var courses = courseService.Queryable()
                              .Where(c => c.IsActive)
                              .Where(c => categoryIds.Contains(c.CategoryId ?? 0))
                              .GroupJoin(recordQueryable,
                                         c => c.Id,
                                         r => r.Record.CourseId,
                                         (c, r) => new
                {
                    Course   = c,
                    Records  = r,
                    Category = c.Category
                })
                              .ToList();

                var courseItems = new List <PersonCourseInfo>();

                foreach (var course in courses)
                {
                    if (!course.Course.PersonCanView(CurrentPerson))
                    {
                        continue;
                    }

                    var courseItem = new PersonCourseInfo()
                    {
                        Course     = course.Course,
                        Category   = course.Category,
                        IsComplete = false
                    };

                    var completedRecords = course.Records.Where(r => r.Record.Passed).ToList();
                    if (completedRecords.Any())
                    {
                        var completedCourse = completedRecords.First();
                        courseItem.IsComplete        = true;
                        courseItem.CompletedDateTime = completedCourse.Record.CompletionDateTime;
                        var expired = completedCourse.Statuses
                                      .Where(s => s.State == CourseRequirementState.Expired).Any();
                        if (expired)
                        {
                            courseItem.IsExpired = true;
                        }
                    }
                    courseItems.Add(courseItem);
                }


                var mergeFields = LavaHelper.GetCommonMergeFields(RockPage, CurrentPerson);
                mergeFields.Add("CourseItems", courseItems);
                ltOutput.Text = GetAttributeValue(AttributeKeys.LavaTemplate).ResolveMergeFields(mergeFields);
            }
        }
Example #2
0
        private static List <PersonCourseInfo> PersonCourseInfo(DotLiquid.Context context, Person person, List <int> categoryIds)
        {
            var currentPerson = GetCurrentPerson(context);

            RockContext         rockContext         = new RockContext();
            CourseService       courseService       = new CourseService(rockContext);
            CourseRecordService courseRecordService = new CourseRecordService(rockContext);
            var courseRecordQry = courseRecordService.Queryable().Where(r => r.PersonAlias.PersonId == person.Id);

            var courseItems = new List <PersonCourseInfo>();

            CourseRequirementStatusService courseRequirementStatusService = new CourseRequirementStatusService(rockContext);
            var statusQry = courseRequirementStatusService.Queryable()
                            .Where(s => s.PersonAlias.PersonId == person.Id);

            var recordQueryable = courseRecordService.Queryable()
                                  .GroupJoin(statusQry,
                                             r => r.CourseId,
                                             s => s.CourseRequirement.CourseId,
                                             (r, s) => new { Record = r, Statuses = s }
                                             )
                                  .Where(r => r.Record.PersonAlias.PersonId == person.Id)
                                  .OrderByDescending(r => r.Record.CompletionDateTime);

            var courses = courseService.Queryable()
                          .Where(c => c.IsActive)
                          .Where(c => categoryIds.Contains(c.CategoryId ?? 0))
                          .GroupJoin(recordQueryable,
                                     c => c.Id,
                                     r => r.Record.CourseId,
                                     (c, r) => new
            {
                Course   = c,
                Records  = r,
                Category = c.Category
            })
                          .ToList();

            foreach (var course in courses)
            {
                if (course.Course.IsAuthorized(Rock.Security.Authorization.VIEW, currentPerson))
                {
                    var courseItem = new PersonCourseInfo()
                    {
                        Course     = course.Course,
                        Category   = course.Category,
                        IsComplete = false
                    };

                    var completedRecords = course.Records.Where(r => r.Record.Passed).ToList();
                    if (completedRecords.Any())
                    {
                        var completedCourse = completedRecords.First();
                        courseItem.IsComplete        = true;
                        courseItem.CompletedDateTime = completedCourse.Record.CompletionDateTime;
                        var expired = completedCourse.Statuses
                                      .Where(s => s.State == CourseRequirementState.Expired).Any();
                        if (expired)
                        {
                            courseItem.IsExpired = true;
                        }
                    }
                    courseItems.Add(courseItem);
                }
            }


            return(courseItems);
        }