/// <summary> /// /// </summary> /// <param name="id"></param> /// <returns></returns> public NextEventContract GetNextEvent(Guid id) { var db = new TimeTableDbContext(); var currentEvent = db.Activities.OfType <Event>().SingleOrDefault(ev => ev.Id == id); var now = DateTime.Now.AddMinutes(-1); // Gib mir von dem Event das Ende des nächsten Termins in der Zukunft var currentDate = currentEvent.Dates.Where(d => d.End >= now).OrderBy(d => d.End).FirstOrDefault(); // Gib mir jetzt das Event, mit dem zeitlich am nächst gelegenen Beginn zum aktuellen Datum var eventList = db.Activities.OfType <Event>() .Where(ev => ev.Published == true && ev.Id != id && ev.Dates.Any(d => d.End >= currentDate.Begin)).ToList(); ActivityDate nextDate = null; foreach (var @event in eventList) { var testDate = @event.Dates.Where(d => d.End >= now).OrderBy(d => d.Begin).FirstOrDefault(); if (nextDate == null) { nextDate = testDate; } else { if (testDate.Begin < nextDate.Begin) { nextDate = testDate; } } } if (nextDate == null) { return(GetNextEvent()); } var nextEvent = new NextEventContract { EventId = nextDate.Activity.Id, Title = nextDate.Activity.Name, Description = nextDate.Activity.Description, From = nextDate.Begin, Location = nextDate.Rooms.Any() ? nextDate.Rooms.First().Number : string.Empty, }; return(nextEvent); }
/// <summary> /// /// </summary> /// <returns></returns> public NextEventContract GetNextEvent() { var db = new TimeTableDbContext(); var now = DateTime.Now; var eventList = db.Activities.OfType <Event>() .Where(ev => ev.Published == true && ev.Dates.Any(d => d.End >= now)).ToList(); ActivityDate nextDate = null; foreach (var @event in eventList) { var testDate = @event.Dates.Where(d => d.End >= now).OrderBy(d => d.Begin).FirstOrDefault(); if (nextDate == null) { nextDate = testDate; } else { if (testDate.Begin < nextDate.Begin) { nextDate = testDate; } } } if (nextDate != null) { var nextEvent = new NextEventContract { EventId = nextDate.Activity.Id, Title = nextDate.Activity.Name, Description = nextDate.Activity.Description, From = nextDate.Begin, Location = nextDate.Rooms.Any() ? nextDate.Rooms.First().Number : string.Empty, }; return(nextEvent); } else { return(new NextEventContract { Title = "Derzeit keine Veranstaltung", }); } }