Пример #1
0
        /// <summary>
        /// Saves the roster configuration to the response cookie.
        /// </summary>
        /// <param name="rosterStatusFilter">The roster status filter.</param>
        public static void SaveRosterConfigurationToCookie(RosterStatusFilter rosterStatusFilter)
        {
            CheckinManagerConfiguration checkinManagerConfiguration = GetCheckinManagerConfigurationFromCookie();

            checkinManagerConfiguration.RosterStatusFilter = rosterStatusFilter;
            SaveCheckinManagerConfigurationToCookie(checkinManagerConfiguration);
        }
Пример #2
0
        /// <summary>
        /// Returns true if the rosterAttendeeStatus meets the rosterStatusFilter
        /// </summary>
        /// <param name="rosterAttendeeStatus">The roster attendee status.</param>
        /// <param name="rosterStatusFilter">The roster status filter.</param>
        /// <returns></returns>
        private static bool AppliesToRosterStatusFilter(RosterAttendeeStatus rosterAttendeeStatus, RosterStatusFilter rosterStatusFilter)
        {
            switch (rosterStatusFilter)
            {
            case RosterStatusFilter.CheckedIn:
                return(rosterAttendeeStatus == RosterAttendeeStatus.CheckedIn);

            case RosterStatusFilter.CheckedOut:
                return(rosterAttendeeStatus == RosterAttendeeStatus.CheckedOut);

            case RosterStatusFilter.Present:
                return(rosterAttendeeStatus == RosterAttendeeStatus.Present);

            case RosterStatusFilter.All:
                return(true);

            default:
                return(false);
            }
        }
Пример #3
0
 /// <summary>
 /// Returns true if any of this Attendee's current <see cref="Attendances"/> meets the specified RosterStatusFilter criteria
 /// </summary>
 /// <param name="rosterStatusFilter">The roster status filter.</param>
 /// <returns></returns>
 public bool MeetsRosterStatusFilter(RosterStatusFilter rosterStatusFilter)
 {
     return(this.Statuses.Any(x => AppliesToRosterStatusFilter(x, rosterStatusFilter)));
 }
Пример #4
0
        /// <summary>
        /// Determines if Attendance the meets roster status filter.
        /// </summary>
        /// <param name="attendance">The attendance.</param>
        /// <param name="rosterStatusFilter">The roster status filter.</param>
        /// <returns></returns>
        public static bool AttendanceMeetsRosterStatusFilter(RosterAttendeeAttendance attendance, RosterStatusFilter rosterStatusFilter)
        {
            RosterAttendeeStatus rosterAttendeeStatus = GetRosterAttendeeStatus(attendance.EndDateTime, attendance.PresentDateTime);

            return(AppliesToRosterStatusFilter(rosterAttendeeStatus, rosterStatusFilter));
        }
Пример #5
0
        /// <summary>
        /// Gets the attendees.
        /// </summary>
        private IList <RosterAttendee> GetAttendees(RockContext rockContext)
        {
            var startDateTime = RockDateTime.Today;

            CampusCache campusCache = GetCampusFromContext();
            DateTime    currentDateTime;

            if (campusCache != null)
            {
                currentDateTime = campusCache.CurrentDateTime;
            }
            else
            {
                currentDateTime = RockDateTime.Now;
            }

            // Get all Attendance records for the current day and location
            var attendanceQuery = new AttendanceService(rockContext).Queryable().Where(a =>
                                                                                       a.StartDateTime >= startDateTime &&
                                                                                       a.DidAttend == true &&
                                                                                       a.StartDateTime <= currentDateTime &&
                                                                                       a.PersonAliasId.HasValue &&
                                                                                       a.Occurrence.GroupId.HasValue &&
                                                                                       a.Occurrence.ScheduleId.HasValue &&
                                                                                       a.Occurrence.LocationId.HasValue &&
                                                                                       a.Occurrence.ScheduleId.HasValue);

            if (campusCache != null)
            {
                // limit locations (rooms) to locations within the selected campus
                var campusLocationIds = new LocationService(rockContext).GetAllDescendentIds(campusCache.LocationId.Value).ToList();
                attendanceQuery = attendanceQuery.Where(a => campusLocationIds.Contains(a.Occurrence.LocationId.Value));
            }

            var selectedScheduleIds = lbSchedules.SelectedValues.AsIntegerList().Where(a => a > 0).ToList();
            var selectedGroupIds    = GetSelectedGroupIds();

            if (selectedScheduleIds.Any())
            {
                attendanceQuery = attendanceQuery.Where(a => selectedScheduleIds.Contains(a.Occurrence.ScheduleId.Value));
            }

            if (selectedGroupIds.Any())
            {
                if (cbIncludeChildGroups.Checked)
                {
                    var groupService = new GroupService(rockContext);
                    foreach (var groupId in selectedGroupIds.ToList())
                    {
                        var childGroupIds = groupService.GetAllDescendentGroupIds(groupId, false);
                        selectedGroupIds.AddRange(childGroupIds);
                    }
                }

                attendanceQuery = attendanceQuery.Where(a => selectedGroupIds.Contains(a.Occurrence.GroupId.Value));
            }
            else
            {
                var checkinAreaFilter = CheckinManagerHelper.GetCheckinAreaFilter(this);

                if (checkinAreaFilter != null)
                {
                    // if there is a checkin area filter, limit to groups within the selected check-in area
                    var checkinAreaGroupTypeIds = new GroupTypeService(rockContext).GetCheckinAreaDescendants(checkinAreaFilter.Id).Select(a => a.Id).ToList();
                    selectedGroupIds = new GroupService(rockContext).Queryable().Where(a => checkinAreaGroupTypeIds.Contains(a.GroupTypeId)).Select(a => a.Id).ToList();
                    attendanceQuery  = attendanceQuery.Where(a => selectedGroupIds.Contains(a.Occurrence.GroupId.Value));
                }
            }

            RosterStatusFilter rosterStatusFilter = this.GetAttributeValue(AttributeKey.FilterBy).ConvertToEnumOrNull <RosterStatusFilter>() ?? RosterStatusFilter.CheckedIn;

            attendanceQuery = CheckinManagerHelper.FilterByRosterStatusFilter(attendanceQuery, rosterStatusFilter);

            var attendanceList = RosterAttendeeAttendance.Select(attendanceQuery).ToList();

            attendanceList = CheckinManagerHelper.FilterByActiveCheckins(currentDateTime, attendanceList);

            attendanceList = attendanceList.Where(a => a.Person != null).ToList();

            if (tbSearch.Text.IsNotNullOrWhiteSpace())
            {
                // search by name
                var searchValue = tbSearch.Text;

                // ignore the result of reversed (LastName, FirstName vs FirstName LastName
                bool reversed;

                var personIds = new PersonService(rockContext)
                                .GetByFullName(searchValue, false, false, false, out reversed)
                                .AsNoTracking()
                                .Select(a => a.Id)
                                .ToList();

                attendanceList = attendanceList.Where(a => personIds.Contains(a.PersonId)).ToList();
            }

            var attendees = RosterAttendee.GetFromAttendanceList(attendanceList);

            return(attendees);
        }
Пример #6
0
        /// <summary>
        /// Filters an IQueryable of Attendance by the specified roster status filter.
        /// </summary>
        /// <param name="attendanceQuery">The attendance query.</param>
        /// <param name="rosterStatusFilter">The roster status filter.</param>
        /// <returns></returns>
        public static IQueryable <Attendance> FilterByRosterStatusFilter(IQueryable <Attendance> attendanceQuery, RosterStatusFilter rosterStatusFilter)
        {
            /*
             *  If StatusFilter == All, no further filtering is needed.
             *  If StatusFilter == Checked-in, only retrieve records that have neither a EndDateTime nor a PresentDateTime value.
             *  If StatusFilter == Present, only retrieve records that have a PresentDateTime value but don't have a EndDateTime value.
             *  If StatusFilter == Checked-out, only retrieve records that have an EndDateTime
             */
            switch (rosterStatusFilter)
            {
            case RosterStatusFilter.CheckedIn:
                attendanceQuery = attendanceQuery.Where(a => !a.PresentDateTime.HasValue && !a.EndDateTime.HasValue);
                break;

            case RosterStatusFilter.Present:
                attendanceQuery = attendanceQuery.Where(a => a.PresentDateTime.HasValue && !a.EndDateTime.HasValue);
                break;

            case RosterStatusFilter.CheckedOut:
                attendanceQuery = attendanceQuery.Where(a => a.EndDateTime.HasValue);
                break;

            default:
                break;
            }

            return(attendanceQuery);
        }