internal EventsIndexVM[] GetAllEventFromDB()
        {
            Events[]        events = eventsRepository.GetAllEvents();
            EventsIndexVM[] ie     = new EventsIndexVM[events.Length];

            for (int i = 0; i < ie.Length; i++)
            {
                ie[i] = new EventsIndexVM
                {
                    Date      = events[i].Date,
                    EventType = ConvertEventTypeToString(events[i].EventType),
                    Id        = events[i].Id,
                };

                if (events[i].Customer != null)
                {
                    ie[i].CustomerFirstName = events[i].Customer.FirstName;
                    ie[i].CustomerLastName  = events[i].Customer.LastName;
                    ie[i].CustomerId        = events[i].CustomerId;
                }
                ;

                if (events[i].Car != null)
                {
                    ie[i].CarRegNr = events[i].Car.Registrationnumber;
                    ie[i].CarId    = events[i].CarId;
                }
            }

            return(ie);
        }
        // GET: Events
        // Loaded as main screen for best user experience
        // Creates three lists of events, those requiring more staff, those requiring a first aider
        //and those with enough staff
        public async Task <IActionResult> Index(string message)
        {
            var menus = await getMenus();

            List <EventVM> eventsOk           = new List <EventVM>();
            List <EventVM> eventsNeedStaff    = new List <EventVM>();
            List <EventVM> eventsNeedFirstAid = new List <EventVM>();
            var            events             = await _context.Events.Where(e => e.IsActive == true).OrderBy(e => e.Title).ToListAsync();

            foreach (Event e in events)
            {
                var bookings = await _context.Guests.Include(g => g.Event).Where(g => g.EventId == e.Id).ToListAsync();

                var staffing = await _context.Staffing.Include(g => g.Event).Where(g => g.EventId == e.Id).ToListAsync();

                var firstAidStaff = await _context.Staff.Where(s => s.IsActive == true).Where(t => staffing.Any(b => b.StaffId.Equals(t.Id))).Where(s => s.FirstAider == true).ToListAsync();

                EventVM eventVM = new EventVM(e);
                eventVM.NumGuests = bookings.Count();
                eventVM.NumStaff  = staffing.Count();
                if (eventVM.MenuId != 0)
                {
                    MenuDto menu = menus.Where(m => m.MenuId == eventVM.MenuId).FirstOrDefault();
                    eventVM.MenuName = menu.Name;
                }
                // view model getter methods used to easily determine if staff and/or first aiders are needed
                if (!eventVM.NeedStaff && firstAidStaff != null && firstAidStaff.Count > 0)
                {
                    eventsOk.Add(eventVM);
                }
                if (eventVM.NeedStaff)
                {
                    eventsNeedStaff.Add(eventVM);
                }
                if (firstAidStaff == null || firstAidStaff.Count == 0)
                {
                    eventsNeedFirstAid.Add(eventVM);
                }
            }
            // custom view models used where appropritate display information as required in brief
            EventsIndexVM eventLists = new EventsIndexVM(eventsOk, eventsNeedStaff, eventsNeedFirstAid);

            return(View(eventLists));
        }