Example #1
0
        /// <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)));
        }
Example #2
0
        //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);
        }