public static void CloneAttendance(Attendance attendance, bool isSubroom, Location location, AttendanceService attendanceService, Request req) { Attendance newAttendance = ( Attendance )attendance.Clone(); newAttendance.Id = 0; newAttendance.Guid = new Guid(); newAttendance.StartDateTime = Rock.RockDateTime.Now; newAttendance.EndDateTime = null; newAttendance.DidAttend = true; newAttendance.Device = null; newAttendance.SearchTypeValue = null; newAttendance.LocationId = req.LocationId; newAttendance.AttendanceCode = null; newAttendance.AttendanceCodeId = attendance.AttendanceCodeId; if (isSubroom) { newAttendance.ForeignId = location.Id; } else { newAttendance.ForeignId = null; } attendanceService.Add(newAttendance); var stayedFifteenMinutes = (Rock.RockDateTime.Now - attendance.StartDateTime) > new TimeSpan(0, 15, 0); attendance.DidAttend = stayedFifteenMinutes; attendance.EndDateTime = Rock.RockDateTime.Now; InMemoryPersonStatus.RemoveFromWorship(attendance.PersonAlias.PersonId); InMemoryPersonStatus.RemoveFromWithParent(attendance.PersonAlias.PersonId); CheckInCountCache.AddAttendance(newAttendance); CheckInCountCache.RemoveAttendance(attendance); }
public static void CloseActiveAttendances(RockContext rockContext, Attendance attendeeAttendance, Location location, bool isSubroom) { var activeAttendances = ValidationHelper.GetActiveAttendances(rockContext, attendeeAttendance, location); bool didRemove = false; foreach (var activeAttendance in activeAttendances) { didRemove = true; var stayedFifteenMinutes = (Rock.RockDateTime.Now - activeAttendance.StartDateTime) > new TimeSpan(0, 15, 0); activeAttendance.DidAttend = stayedFifteenMinutes; activeAttendance.EndDateTime = Rock.RockDateTime.Now; AddExitHistory(rockContext, attendeeAttendance.Location, attendeeAttendance, isSubroom); CheckInCountCache.RemoveAttendance(activeAttendance); } if (didRemove) { var personId = attendeeAttendance.PersonAlias.PersonId; InMemoryPersonStatus.RemoveFromWorship(personId); InMemoryPersonStatus.RemoveFromWithParent(personId); } }
public static void CloneAttendance(Attendance attendance, bool isSubroom, Location location, AttendanceService attendanceService, Request req) { Attendance newAttendance = null; if (!isSubroom) { newAttendance = attendanceService.AddOrUpdate(attendance.PersonAliasId, attendance.StartDateTime.Date, attendance.Occurrence.GroupId, location.Id, attendance.Occurrence.ScheduleId, location.CampusId, null, null, null, null, null, null); } else { newAttendance = attendanceService.AddOrUpdate(attendance.PersonAliasId, attendance.StartDateTime.Date, attendance.Occurrence.GroupId, location.ParentLocationId, attendance.Occurrence.ScheduleId, location.CampusId, null, null, null, null, null, null); } newAttendance.StartDateTime = Rock.RockDateTime.Now; newAttendance.EndDateTime = null; newAttendance.DidAttend = true; newAttendance.AttendanceCodeId = attendance.AttendanceCodeId; if (isSubroom) { newAttendance.ForeignId = location.Id; } else { newAttendance.ForeignId = null; } attendanceService.Add(newAttendance); var stayedFifteenMinutes = (Rock.RockDateTime.Now - attendance.StartDateTime) > new TimeSpan(0, 15, 0); attendance.DidAttend = stayedFifteenMinutes; attendance.EndDateTime = Rock.RockDateTime.Now; InMemoryPersonStatus.RemoveFromWorship(attendance.PersonAlias.PersonId); InMemoryPersonStatus.RemoveFromWithParent(attendance.PersonAlias.PersonId); CheckInCountCache.AddAttendance(newAttendance); CheckInCountCache.RemoveAttendance(attendance); }
public Response Exit([FromBody] Request req) { try { RockContext rockContext = new RockContext(); Attendance attendeeAttendance = ValidationHelper.GetAttendeeAttendance(req, rockContext); if (attendeeAttendance == null) { return(new Response(false, "Attendance record not found.", false)); } if (Rock.RockDateTime.Today != attendeeAttendance.StartDateTime.Date) { return(new Response(false, "Attendance record not from today.", false)); } var person = attendeeAttendance.PersonAlias.Person; var location = new LocationService(rockContext).Get(req.LocationId); bool isSubroom = ValidationHelper.IsSubRoom(location); if (isSubroom) { req.LocationId = location.ParentLocationId ?? 0; } var attendances = ValidationHelper.GetAttendancesForAttendee(rockContext, attendeeAttendance); attendances = attendances.Where(a => a.LocationId == req.LocationId); //If person is a volunteer, children are checked in, and would result in less than 2 volunteers //Then don't allow for check-out if ((attendances.Where(a => VolunteerGroupIds.Contains(a.GroupId ?? 0)).Any() || attendances.Where(a => a.GroupId == 0 || a.GroupId == null).Any()) && AreChildrenCheckedIn(req.LocationId) && NumberOfVolunteersCheckedIn(req.LocationId) <= 2) { return(new Response(false, "Cannot checkout volunteer with children still in class. Two volunteers are required at all times.", false)); } foreach (var attendance in attendances) { var stayedFifteenMinutes = (Rock.RockDateTime.Now - attendance.StartDateTime) > new TimeSpan(0, 15, 0); attendance.DidAttend = stayedFifteenMinutes; attendance.EndDateTime = Rock.RockDateTime.Now; CheckInCountCache.RemoveAttendance(attendance); var personId = attendeeAttendance.PersonAlias.PersonId; InMemoryPersonStatus.RemoveFromWorship(personId); InMemoryPersonStatus.RemoveFromWithParent(personId); } //Add history of exit DataHelper.AddExitHistory(rockContext, location, attendeeAttendance, isSubroom); rockContext.SaveChanges(); var message = string.Format("{0} has been checked-out of {1}.", person.FullName, location.Name); return(new Response(true, message, false, personId: person.Id)); } catch (Exception e) { ExceptionLogService.LogException(e, System.Web.HttpContext.Current); return(new Response(false, "An error occured", false)); } }