//Checks if the attendee has been marked as 'absent' three times in the current month and creates a new penalty entry in database. public void CheckPenalty(DateTime startDate, int eventId, int attendeeId, int roomId) { var pastEvents = eventRepository.GetPastEventsByUser(startDate, attendeeId, roomId); var eventsCount = pastEvents.Count(); if (eventsCount == 3) { penaltyRepository.AddPenalty(new Penalty() { AttendeeId = attendeeId, EventId = eventId, Date = startDate, RoomId = roomId }); // Mark these 3 events as being part of a penalty to prevent future counting: foreach (Event pastEvent in pastEvents) { pastEvent.EventStatus = (int)EventStatusEnum.absentChecked; } // Edit attendee's events for next 15 days for this room (Cancelled): var futureEvents = eventRepository.GetFutureEvents(startDate, attendeeId, roomId); if (futureEvents.Count() > 0) { foreach (Event xEvent in futureEvents) { xEvent.EventStatus = (int)EventStatusEnum.cancelled; } } dbOperation.Commit(); } }