Esempio n. 1
0
        private Course GetCourse(TimeTableDbContext db, Semester sem, ActivityOrganiser org, CieCourse course)
        {
            // alle Kurse im Semester des Organisers nach dem Namen durchsuchen


            return(null);
        }
Esempio n. 2
0
        public string ImportCourse(CieCourse scheduleCourse)
        {
            string msg;

            _Logger.DebugFormat("Importiere Fach: {0}", scheduleCourse.name);
            _report.AppendFormat("<h1>Erzeuge LV \"{0}\" - [{1}]</h1>", scheduleCourse.name,
                                 scheduleCourse.id);
            _report.AppendLine();

            var db = new TimeTableDbContext();

            var organiser = db.Organisers.SingleOrDefault(s => s.ShortName.Equals(scheduleCourse.department));
            var sem       = db.Semesters.SingleOrDefault(s => s.Id == _semId);

            var cieSemGroup = db.SemesterGroups.SingleOrDefault(x =>
                                                                x.Semester.Id == sem.Id &&
                                                                x.CapacityGroup.CurriculumGroup.Curriculum.ShortName.Equals("CIE") &&
                                                                x.CapacityGroup.CurriculumGroup.Curriculum.ShortName.Equals("CIE") &&
                                                                x.CapacityGroup.CurriculumGroup.Name.Equals("CIE"));

            long msStart = sw.ElapsedMilliseconds;
            // suche den Kurs im bisherigen Angebot auf Grundlage des Namens
            var course = GetCourse(db, sem, organiser, scheduleCourse);

            if (course == null)
            {
                course = new Course
                {
                    ExternalSource = "CIE",
                    ExternalId     = scheduleCourse.id,
                    Organiser      = organiser,
                    ShortName      = "",
                    Name           = scheduleCourse.name,
                    Description    = scheduleCourse.description,
                    Occurrence     = CreateDefaultOccurrence(scheduleCourse.availableSlots),
                    IsInternal     = true,
                };
                // Kurs sofort speichern, damit die ID gesichert ist
                db.Activities.Add(course);
                db.SaveChanges();
            }
            long msEnd = sw.ElapsedMilliseconds;

            _Logger.DebugFormat("Dauer: {0}ms", msEnd - msStart);
            msStart = msEnd;

            _report.AppendLine("<h2>Bezeichnungen</h2>");
            _report.AppendLine("<table>");
            _report.AppendFormat("<tr><td>Name</td><td>{0}</td></tr>", course.Name);
            _report.AppendFormat("<tr><td>Kurzname</td><td>{0}</td></tr>", course.ShortName);
            _report.AppendFormat("<tr><td>Beschreibung</td><td>{0}</td></tr>", course.Description);
            _report.AppendLine("</table>");


            // jetzt die Gruppen
            // Studiengänge ermitteln
            // Den Kurs gibt es nur einmal
            // Zuordnungen pro Studiengang
            // Modul => d.h. duplizieren von ECTS, SWS
            var curricula = GetCurricula(db, sem, scheduleCourse.department, scheduleCourse.level);

            // Semestergruppe => auch hier eine "intelligente" Zuordnung
            // nur machen, wenn Kurs keine Gruppen hat
            if (!course.SemesterGroups.Any())
            {
                foreach (var curriculum in curricula)
                {
                    // Annahme: ein CIE sind immer WPM
                    var wpmCurrciculumGroup = curriculum.CurriculumGroups.SingleOrDefault(x => x.Name.Equals("WPM"));

                    var wpmCapacityGroup = wpmCurrciculumGroup.CapacityGroups.FirstOrDefault();

                    var wpmSemesterGroup = db.SemesterGroups.FirstOrDefault(x =>
                                                                            x.CapacityGroup.Id == wpmCapacityGroup.Id && x.Semester.Id == sem.Id);

                    course.SemesterGroups.Add(wpmSemesterGroup);


                    // zu jeder Semestergruppe gibt es dann noch eine
                    // Gruppe für Platzverlosung
                    var occGroup =
                        course.Occurrence.Groups.SingleOrDefault(
                            gg => gg.SemesterGroups.Any(s => s.Id == wpmSemesterGroup.Id));

                    if (occGroup == null)
                    {
                        occGroup = new OccurrenceGroup
                        {
                            Capacity            = 0,
                            FitToCurriculumOnly = true,
                            Occurrence          = course.Occurrence
                        };
                        occGroup.SemesterGroups.Add(wpmSemesterGroup);
                        wpmSemesterGroup.OccurrenceGroups.Add(occGroup);
                        course.Occurrence.Groups.Add(occGroup);
                        db.OccurrenceGroups.Add(occGroup);
                    }
                }
            }

            // Die Semestergruppe FK 13 / CIE / CIE muss immer dran
            if (!course.SemesterGroups.Contains(cieSemGroup))
            {
                course.SemesterGroups.Add(cieSemGroup);
            }
            db.SaveChanges();

            if (!course.SemesterGroups.Any())
            {
                _Logger.ErrorFormat("Kurs {0} ohne Gruppe", scheduleCourse.id);
            }

            // jetzt die Module
            // wieder pro Studiengang

            /*
             * foreach (var curriculum in curricula)
             * {
             *  //var module = GetModule(db, curriculum, scheduleCourse);
             *
             *  var nexus = new CourseModuleNexus();
             *  //nexus.Requirement = module;
             *  nexus.Course = course;
             *  // nexus.ModuleCourse = // fehlt noch
             *
             *  course.Nexus.Add(nexus);
             *
             *  db.CourseNexus.Add(nexus);
             * }
             */
            db.SaveChanges();


            // Das Ampelsystem
            if (scheduleCourse.courseStatus.Equals("RED"))
            {
                course.Occurrence.IsCoterie   = true;
                course.Occurrence.HasHomeBias = true; // Bedeutungslos
            }
            else if (scheduleCourse.courseStatus.Equals("YELLOW"))
            {
                course.Occurrence.IsCoterie   = false;
                course.Occurrence.HasHomeBias = true;
            }
            else //(scheduleCourse.courseStatus.Equals("GREEN"))
            {
                course.Occurrence.IsCoterie   = false;
                course.Occurrence.HasHomeBias = false;
            }

            db.SaveChanges();

            // zum Schluss die Termine
            // Dummy Termin mit Dozent
            _report.AppendLine("<h2>Neue Termine</h2>");
            _report.AppendLine("<table>");

            // Der Dummy Termin ist Vorlesungsbeginn 08:00-10:00
            var occDate = sem.StartCourses.Date;

            var occ = new ActivityDate
            {
                Begin      = occDate.AddHours(8),
                End        = occDate.AddHours(10),
                Activity   = course,
                Occurrence = CreateDefaultOccurrence(),
            };

            _report.AppendLine("<tr>");
            _report.AppendFormat("<td>{0}</td><td>{1}</td><td>{2}</td>", occ.Begin.ToShortDateString(), occ.Begin.ToShortTimeString(), occ.End.ToShortTimeString());

            // Kein Raum
            _report.AppendFormat("<td>");
            _report.AppendFormat("</td>");

            // Dozent => der angegebene
            var lec = scheduleCourse.lecturer.Split(',');

            _report.AppendFormat("<td>");

            foreach (var s in lec)
            {
                var scheduleDateLecturer = s.Trim();
                _report.AppendFormat("<p>{0} ({1})", scheduleDateLecturer, scheduleDateLecturer);

                var lecturer = organiser.Members.SingleOrDefault(l => l.ShortName.Equals(scheduleDateLecturer) || l.Name.Equals(scheduleDateLecturer));
                if (lecturer == null)
                {
                    lecturer = new OrganiserMember
                    {
                        ShortName   = scheduleDateLecturer,
                        Name        = scheduleDateLecturer,
                        Role        = String.Empty,
                        Description = String.Empty
                    };
                    organiser.Members.Add(lecturer);
                    db.Members.Add(lecturer);
                    db.SaveChanges();
                    _report.AppendFormat(" !!!NEUER DOZENT!!!");
                }

                occ.Hosts.Add(lecturer);
                _report.AppendFormat("</p>");
            }
            _report.AppendFormat("</td>");

            db.ActivityDates.Add(occ);

            _report.AppendLine();
            _report.AppendLine("</tr>");

            _report.AppendLine("</table>");
            db.SaveChanges();

            msEnd = sw.ElapsedMilliseconds;
            _Logger.DebugFormat("Dauer {0}ms", msEnd - msStart);

            msg = $"Kurs {course.ShortName} mit Terminen importiert";

            return(msg);
        }
Esempio n. 3
0
        public string UpdateCourse(Course c, CieCourse scheduleCourse)
        {
            string msg;

            _Logger.DebugFormat("Aktualisiere Fach: {0}", scheduleCourse.name);

            _report.AppendFormat("<h1>Aktualisiere LV \"{0} ({1})\" - [{2}]</h1>", scheduleCourse.name, scheduleCourse.name,
                                 scheduleCourse.id);
            _report.AppendLine();

            /*
             * var db = new TimeTableDbContext();
             *
             * var organiser = db.Organisers.SingleOrDefault(s => s.Id == _orgId);
             * var sem = db.Semesters.SingleOrDefault(s => s.Id == _semId);
             * long msStart = sw.ElapsedMilliseconds;
             *
             * var course = db.Activities.OfType<Course>().SingleOrDefault(x => x.Id == c.Id);
             *
             * // Ober sticht Unter => zuerst alle termine raus!
             * _report.AppendLine("<h2>Gelöschte Termine</h2>");
             * _report.AppendLine("<table>");
             * foreach (var date in course.Dates.ToList())
             * {
             *  _report.AppendLine("<tr>");
             *  _report.AppendFormat("<td>{0}</td><td>{1}</td><td>{2}</td>", date.Begin.ToShortDateString(), date.Begin.ToShortTimeString(), date.End.ToShortTimeString());
             *
             *  _report.AppendLine("<td>");
             *  foreach (var room in date.Rooms)
             *  {
             *      _report.AppendFormat("<p>{0}</p>", room.Number);
             *  }
             *  _report.AppendLine("</td>");
             *
             *  _report.AppendLine("<td>");
             *  foreach (var host in date.Hosts)
             *  {
             *      _report.AppendFormat("<p>{0} ({1})</p>", host.Name, host.ShortName);
             *  }
             *  _report.AppendLine("</td>");
             *
             *  _report.AppendFormat("<td>{0}</td>", date.Title);
             *  _report.AppendFormat("<td>{0}</td>", date.Description);
             *  _report.AppendFormat("<td>{0}</td>", date.Occurrence.Information);
             *
             *  _report.AppendLine();
             *  _report.AppendLine("</tr>");
             *
             *
             *  db.Occurrences.Remove(date.Occurrence);
             *
             *  foreach (var change in date.Changes.ToList())
             *  {
             *      foreach (var notificationState in change.NotificationStates.ToList())
             *      {
             *          db.NotificationStates.Remove(notificationState);
             *          change.NotificationStates.Remove(notificationState);
             *      }
             *      date.Changes.Remove(change);
             *      db.DateChanges.Remove(change);
             *  }
             *
             *  course.Dates.Remove(date);
             *
             *  db.ActivityDates.Remove(date);
             * }
             * db.SaveChanges();
             *
             * _report.AppendLine("</table>");
             *
             *
             * // Die Bezeichnung
             * _report.AppendLine("<h2>Bezeichnungen</h2>");
             * _report.AppendLine("<h3>Alt</h3>");
             * _report.AppendLine("<table>");
             * _report.AppendFormat("<tr><td>Name</td><td>{0}</td></tr>", course.Name);
             * _report.AppendFormat("<tr><td>Kurzname</td><td>{0}</td></tr>", course.ShortName);
             * _report.AppendFormat("<tr><td>Beschreibung</td><td>{0}</td></tr>", course.Description);
             * _report.AppendLine("</table>");
             *
             * course.Name = scheduleCourse.Name;
             * course.ShortName = scheduleCourse.ShortName;
             * course.Description = scheduleCourse.Description;
             *
             * _report.AppendLine("<h3>Neu</h3>");
             * _report.AppendLine("<table>");
             * _report.AppendFormat("<tr><td>Name</td><td>{0}</td></tr>", course.Name);
             * _report.AppendFormat("<tr><td>Kurzname</td><td>{0}</td></tr>", course.ShortName);
             * _report.AppendFormat("<tr><td>Beschreibung</td><td>{0}</td></tr>", course.Description);
             * _report.AppendLine("</table>");
             *
             * // Platzkontingent
             * course.Occurrence.Capacity = scheduleCourse.SeatRestriction;
             *
             * // Termine einfügen
             * // zum Schluss die Termine
             * _report.AppendLine("<h2>Neue Termine</h2>");
             * _report.AppendLine("<table>");
             *
             * foreach (var scheduleDate in scheduleCourse.Dates)
             * {
             *  // Der Tag
             *  var occDate = scheduleDate.Begin.Date;
             *
             *  bool isVorlesung = true;
             *  foreach (var sd in _semester.Dates)
             *  {
             *      // Wenn der Termin in eine vorlesungsfreie Zeit fällt, dann nicht importieren
             *      if (sd.From.Date <= occDate.Date &&
             *          occDate.Date <= sd.To.Date &&
             *          sd.HasCourses == false)
             *      {
             *          isVorlesung = false;
             *      }
             *  }
             *
             *  // Es muss Vorlesung sein und das Datum darf nicht existieren
             *  if (isVorlesung)
             *  {
             *      var occ = new ActivityDate
             *      {
             *          Begin = scheduleDate.Begin,
             *          End = scheduleDate.End,
             *          Activity = course,
             *          Occurrence = CreateDefaultOccurrence(),
             *      };
             *
             *      _report.AppendLine("<tr>");
             *      _report.AppendFormat("<td>{0}</td><td>{1}</td><td>{2}</td>", occ.Begin.ToShortDateString(), occ.Begin.ToShortTimeString(), occ.End.ToShortTimeString());
             *
             *      _report.AppendFormat("<td>");
             *      foreach (var scheduleDateRoom in scheduleDate.Rooms)
             *      {
             *          _report.AppendFormat("<p>{0}", scheduleDateRoom.RoomNumber);
             *          if (!string.IsNullOrEmpty(scheduleDateRoom.RoomNumber))
             *          {
             *              var room = db.Rooms.SingleOrDefault(r => r.Number.Equals(scheduleDateRoom.RoomNumber));
             *              if (room == null)
             *              {
             *                  room = new Room
             *                  {
             *                      Number = scheduleDateRoom.RoomNumber,
             *                      Capacity = 0,
             *                      Description = string.Empty,
             *                      Owner = string.Empty,
             *                  };
             *                  db.Rooms.Add(room);
             *                  db.SaveChanges();
             *
             *                  _numRooms++;
             *
             *                  _report.AppendFormat(" !!!NEUER RAUM!!!");
             *              }
             *
             *
             *              var assignment = db.RoomAssignments.SingleOrDefault(x =>
             *                  x.Room.Id == room.Id &&
             *                  x.Organiser.Id == organiser.Id);
             *              if (assignment == null)
             *              {
             *                  assignment = new RoomAssignment
             *                  {
             *                      Organiser = organiser,
             *                      InternalNeedConfirmation = false, // offen für interne
             *                      ExternalNeedConfirmation = true // geschlossen für externe
             *                  };
             *
             *                  room.Assignments.Add(assignment);
             *                  db.RoomAssignments.Add(assignment);
             *                  db.SaveChanges();
             *              }
             *
             *              occ.Rooms.Add(room);
             *
             *              _report.AppendFormat("</p>");
             *          }
             *      }
             *      _report.AppendFormat("</td>");
             *
             *      _report.AppendFormat("<td>");
             *      foreach (var scheduleDateLecturer in scheduleDate.Lecturers)
             *      {
             *          _report.AppendFormat("<p>{0} ({1})", scheduleDateLecturer.Name, scheduleDateLecturer.ShortName);
             *          var lecturer = organiser.Members.SingleOrDefault(l => l.ShortName.Equals(scheduleDateLecturer.ShortName));
             *          if (lecturer == null)
             *          {
             *              lecturer = new OrganiserMember
             *              {
             *                  ShortName = scheduleDateLecturer.ShortName,
             *                  Name = scheduleDateLecturer.Name,
             *                  Role = String.Empty,
             *                  Description = String.Empty
             *              };
             *              organiser.Members.Add(lecturer);
             *              db.Members.Add(lecturer);
             *              db.SaveChanges();
             *              _numLecturers++;
             *
             *              _report.AppendFormat(" !!!NEUER DOZENT!!!");
             *          }
             *
             *          occ.Hosts.Add(lecturer);
             *
             *          _report.AppendFormat("</p>");
             *
             *      }
             *      _report.AppendFormat("</td>");
             *
             *
             *      db.ActivityDates.Add(occ);
             *
             *      _report.AppendLine();
             *      _report.AppendLine("</tr>");
             *
             *  }
             * }
             * _report.AppendLine("</table>");
             *
             * db.SaveChanges();
             *
             * long msEnd = sw.ElapsedMilliseconds;
             * _Logger.DebugFormat("Dauer {0}ms", msEnd - msStart);
             */

            msg = $"Kurs {scheduleCourse.name} mit Terminen aktualisiert";

            return(msg);
        }
Esempio n. 4
0
        private CurriculumRequirement GetModule(TimeTableDbContext db, TimeTable.Data.Curriculum curriculum, CieCourse scheduleCourse)
        {
            var pck = curriculum.Packages.FirstOrDefault();

            if (curriculum.ShortName.Equals("WI") && pck != null)
            {
                pck = curriculum.Packages.SingleOrDefault(x => x.Name.Equals("Wahlpflicht"));
            }

            if (pck == null)
            {
                pck      = new CurriculumPackage();
                pck.Name = "Studium";
                curriculum.Packages.Add(pck);
                db.CurriculumPackages.Add(pck);
            }

            var option = pck.Options.FirstOrDefault();

            if (option == null)
            {
                option         = new PackageOption();
                option.Name    = "Gesamt";
                option.Package = pck;
                db.PackageOptions.Add(option);
            }

            var module =
                option.Requirements.FirstOrDefault(x => x.Name.ToLower().Equals(scheduleCourse.name.ToLower()));

            if (module == null)
            {
                module           = new CurriculumRequirement();
                module.Name      = scheduleCourse.name;
                module.ECTS      = scheduleCourse.ects;
                module.USCredits = scheduleCourse.usCredits;
                module.SWS       = scheduleCourse.semesterWeekHours;

                option.Requirements.Add(module);
            }

            db.SaveChanges();

            return(module);
        }