/// <summary> /// Persönliche Termine abfragen am Tagen abfragen /// </summary> /// <param name="UserId"></param> /// <param name="from"></param> /// <param name="until"></param> /// <returns></returns> public IEnumerable <OwnDatesContract> GetPersonalDates(string UserId, DateTime from, DateTime until) { var days = new List <DateTime>(); var start = from; //Alle Tage in Liste erstellen while (start.Day != until.Day) { days.Add(start); start = start.AddDays(1); } //Alle Tage im Zeitraum var DateCoursesList = new List <OwnDatesContract>(); //Für jeden Tag die persönlichen Termine foreach (var day in days) { //neuer Tag für Liste erstellen var DateCourses = new OwnDatesContract(); DateCourses.StatedDate = day.Date.ToString("dd.MM.yyyy"); //Einzelnen Termine eines Tags var dates = new List <DateContract>(); //Zeitraum in dem der Termin sein kann var FromTime = day.Date; var UntilTime = day.Date.AddDays(1); //Kürzere Abfrage, d.h. es muss nur an diesen tag sein da Zeitspanne von 0-0 sehr groß ist für Performance //Gebuchten Termine die an diesem Tag anfangen und enden var activityofday = Db.Activities.Where(a => a.Occurrence.Subscriptions.Any(u => u.UserId.Equals(UserId)) && a.Dates.Any(d => (d.Begin >= FromTime && d.End <= UntilTime))).ToList(); // jede Activiy durchgehen und den nächsten Termine bestimmen foreach (var activity in activityofday) { dates.AddRange(GetDateContract(activity, day, UserId)); } // Alternative: die Dates abfragen // Die Veranstaltungen des Dozenten var lectureActivities = Db.Activities.Where(a => a.Dates.Any(d => d.Hosts.Any(l => !string.IsNullOrEmpty(l.UserId) && l.UserId.Equals(UserId)) && d.Begin >= FromTime && d.End <= UntilTime )).ToList(); foreach (var activity in lectureActivities) { dates.AddRange(GetDateContract(activity, day, UserId)); } //Termine zum Tag geordnet hinzufügen DateCourses.Dates = dates.OrderBy(d => d.StartTime).ToList(); //Defaultwert DateCourses.InfoString = null; //Falls an diesem Tag keine Termine gebucht if (DateCourses.Dates.FirstOrDefault() == null) { //Meldung, dass keine Termine gebucht wurden DateCourses.InfoString = "Derzeit keine Buchung!"; DateCourses.Dates = null; } //vor nächsten Tag, derzeitige Terminliste speichern DateCoursesList.Add(DateCourses); } //Order by statedDate return(DateCoursesList.OrderBy(d => DateTime.Parse(d.StatedDate))); }
//VorlesungsAPI /// <summary> /// Abfrage des persönlichen Stundenplans für eine Woche /// </summary> /// <param name="UserId">Die UserId des Accounts in der Datenbank</param> /// <returns>Liste nach Wochentagen mit den persönlichen/gebuchten Kursterminen</returns> public PersonalPlanResponse GetPersonalDates(string UserId) { //Da hier Abfrage der persönlichen Termine nur für kommende Woche, Festlegung der Variablen des Zeitraums //Alle eigenen Termine von jetzt bis zur nächsten Woche var from = DateTime.Now; var until = from.AddDays(7); var userService = new UserInfoService(); var user = userService.GetUser(UserId); if (user != null && user.UserName.Equals("*****@*****.**")) { // Demodaten var dateList = new List <OwnDatesContract>(); var courseList = new List <DateContract>(); var roomList = new List <DateRoomContract>(); var lecturerList = new List <DateLecturerContract>(); var demoRoom = new DateRoomContract { RoomId = Guid.NewGuid().ToString(), RoomNumber = "R 1.083" }; roomList.Add(demoRoom); var demoLecturer = new DateLecturerContract { LecturerId = Guid.NewGuid().ToString(), LecturerName = "Demo Dozent" }; lecturerList.Add(demoLecturer); var demoCourse = new DateContract { StartTime = "10:00", EndTime = "11:30", IsCanceled = false, Titel = "Demovorlesung", Rooms = roomList, Lecturers = lecturerList }; courseList.Add(demoCourse); var today = DateTime.Today; var demoDate = new OwnDatesContract { StatedDate = today.ToString("dd.MM.yyyy"), InfoString = null, Dates = courseList }; dateList.Add(demoDate); var date = today; var endOfWeek = today.AddDays(7); while (date <= endOfWeek) { demoDate = new OwnDatesContract { StatedDate = date.ToString("dd.MM.yyyy"), InfoString = null, Dates = new List <DateContract>() }; dateList.Add(demoDate); date = date.AddDays(1); } var demoResponse = new PersonalPlanResponse { Courses = dateList, }; //Rückgabe der Response return(demoResponse); } //Initialisierung des ActivityInfoService var activityService = new ActivityInfoService(); //Abfrage der persönlichen Termine mit Hilfe des ActivityInfoService und den Parametern var activityList = activityService.GetPersonalDates(UserId, from, until); //Erstellen des Response mit Hilfe der activityList var response = new PersonalPlanResponse { Courses = activityList, }; //Rückgabe der Response return(response); }