/// <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); }
/// <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); } }
/// <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))); }
/// <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)); }
/// <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); }
/// <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); }