private Kurs CreateCourse(Unterricht u, List <Raum> rooms, Dozent lecturer) { var fach = ctx.Faecher.SingleOrDefault(f => f.FachID.Equals(u.FachID)); if (fach != null) { fach.IsTouched = true; } var course = new Kurs { Id = u.UnterrichtID.ToString(), Fach = fach, }; course.Unterricht.Add(u); var group = ctx.Gruppen.SingleOrDefault(s => s.GruppenID.Equals(u.GruppeID)); if (group != null) { group.IsTouched = true; course.Gruppen.Add(group); } // Die LV var ce = new Termin() { VonStunde = u.Stunde, BisStunde = u.Stunde, Tag = u.Tag, }; foreach (var room in rooms) { ce.Raeume.Add(room); room.IsTouched = true; } if (lecturer != null) { ce.Dozenten.Add(lecturer); lecturer.IsTouched = true; } course.Termine.Add(ce); ctx.Kurse.Add(course); return(course); }
private void UpdateCourse(Kurs course, Unterricht u) { //var lecturer = ctx.Dozenten.SingleOrDefault(l => l.DozentID.Equals(u.DozentID)); var group = ctx.Gruppen.SingleOrDefault(s => s.GruppenID.Equals(u.GruppeID)); if (group != null && !course.Gruppen.Contains(group)) { group.IsTouched = true; course.Gruppen.Add(group); } if (!course.Unterricht.Contains(u)) { course.Unterricht.Add(u); } }
private void ReadGPU001(string fileName) { var lines = GetFileContent(fileName); // Grundannahme: Die Datei ist nach UnterrichtID sortiert var lastUnterrichtID = 0; foreach (var line in lines) { // Unterricht einlesen var words = line.Split(seperator); // Unterrichts-objekt anlegen und befüllen var u = new Unterricht { UnterrichtID = int.Parse(words[0]), GruppeID = words[1].Replace("\"", ""), DozentID = words[2].Replace("\"", ""), FachID = words[3].Replace("\"", ""), RaumID = words[4].Replace("\"", ""), Tag = int.Parse(words[5]), Stunde = int.Parse(words[6]) }; // Kurs hinzufügen, d.h. wir haben jetzt einen passenden Kurs mit mindestens // einem CourseEvent // Entscheidung an Hand von UnterrichtsID und FachID var course = GetCourse(u); if (lastUnterrichtID == u.UnterrichtID) { // Den Course Event ermitteln lassen // 1. Tag // 2. Zeitraum // 3. Raum CreateCourseEvent(course, u); // ggf. Noch Dozent und Gruppe des Kurses aktualisieren UpdateCourse(course, u); } lastUnterrichtID = u.UnterrichtID; } }
private Kurs GetCourse(Unterricht u) { // Vorbedingungen prüfen // es können auch mehrere Räume sein var rooms = new List <Raum>(); if (u.RaumID.StartsWith("~")) { // das sind nun mehrere Räume var roomIds = u.RaumID.Trim().Split('~'); foreach (var roomId in roomIds) { if (!string.IsNullOrEmpty(roomId)) { var room = ctx.Raeume.SingleOrDefault(r => r.RaumID.Equals(roomId)); if (room != null) { rooms.Add(room); } } } } else { var room = ctx.Raeume.SingleOrDefault(r => r.RaumID.Equals(u.RaumID)); if (room != null) { rooms.Add(room); } } var lecturer = ctx.Dozenten.SingleOrDefault(l => l.DozentID.Equals(u.DozentID)); Kurs c; if (!unterrichtsMap.ContainsKey(u.UnterrichtID)) { c = CreateCourse(u, rooms, lecturer); if (c != null) { unterrichtsMap[u.UnterrichtID] = new List <Kurs> { c }; } } else { if (string.IsNullOrEmpty(u.FachID)) { c = unterrichtsMap[u.UnterrichtID].SingleOrDefault(co => co.Fach == null); } else { c = unterrichtsMap[u.UnterrichtID].SingleOrDefault(co => co.Fach != null && co.Fach.FachID.Equals(u.FachID)); } if (c == null) { c = CreateCourse(u, rooms, lecturer); if (c != null) { unterrichtsMap[u.UnterrichtID].Add(c); } } } return(c); }
/// <summary> /// Anlegen eines neuen Kurstermins /// </summary> /// <param name="course"></param> /// <param name="u"></param> private void CreateCourseEvent(Kurs course, Unterricht u) { // die u.RaumID kann auch mehrere Räume enthalten // Trennzeichen mit "~" Raum room = null; if (u.RaumID.StartsWith("~")) { // das sind nun mehrere Räume var roomIds = u.RaumID.Trim().Split('~'); foreach (var roomId in roomIds) { if (!string.IsNullOrEmpty(roomId)) { room = ctx.Raeume.SingleOrDefault(r => r.RaumID.Equals(roomId)); // es reicht, wenn ein Raum dabei ist if (room != null) { break; } } } } else { room = ctx.Raeume.SingleOrDefault(r => r.RaumID.Equals(u.RaumID)); } var lecturer = ctx.Dozenten.SingleOrDefault(l => l.DozentID.Equals(u.DozentID)); if (lecturer == null) { //ctx.ErrorMessages.Add(string.Format("Kein Dozent angegeben {0}", u)); // weitermachen macht keinen Sinn => es wird eh nichts importiert return; } Termin termin; if (room != null) { // gleicher Tag und am hinteren Ende bisherigen Zeitraums und gleicher Raum und gleicher Dozent termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.BisStunde + 1 == u.Stunde && e.Raeume.Any(r => r.RaumID.Equals(room.RaumID)) && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.BisStunde++; return; } // gleicher Tag und am vorderen Ende bisherigen Zeitraums und gleicher Raum termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.VonStunde - 1 == u.Stunde && e.Raeume.Any(r => r.RaumID.Equals(room.RaumID)) && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.VonStunde--; return; } // gleicher Tag und innerhalb des bisherigen Zeitraums und gleicher Raum und Dozent schon angegeben // das können wohl auch mehr werden! termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && (e.VonStunde <= u.Stunde && u.Stunde <= e.BisStunde) && e.Raeume.Any(r => r.RaumID.Equals(room.RaumID)) && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { return; } // gleicher Zeitraum termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && (e.VonStunde <= u.Stunde && u.Stunde <= e.BisStunde)); if (termin != null) { // wenn es ein neuer Raum ist, dann einen neuen Termin machen var kursRaum = termin.Raeume.SingleOrDefault(r => r.RaumID.Equals(room.RaumID)); if (kursRaum != null) { // wenn der Raum bekannt ist var kursDozent = termin.Dozenten.SingleOrDefault(d => d.DozentID.Equals(lecturer.DozentID)); if (kursDozent != null) { // wenn Dozent schon drin => nix machen } else { // wenn neuer Dozent für diesen Termin => an Termin anhängen termin.Dozenten.Add(lecturer); return; } } } } else { // es wurde kein Raum angegeben // gleicher Tag und am hinteren Ende bisherigen Zeitraums und gleicher Raum und gleicher Dozent termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.BisStunde + 1 == u.Stunde && !e.Raeume.Any() && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.BisStunde++; return; } // gleicher Tag und am vorderen Ende bisherigen Zeitraums und gleicher Raum termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.VonStunde - 1 == u.Stunde && !e.Raeume.Any() && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.VonStunde--; return; } // gleicher Tag und innerhalb des bisherigen Zeitraums und gleicher Raum // das können wohl auch mehr werden! termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && (e.VonStunde <= u.Stunde && u.Stunde <= e.BisStunde) && !e.Raeume.Any() && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { return; } } // Ein neuer Termin muss her termin = new Termin() { VonStunde = u.Stunde, BisStunde = u.Stunde, Tag = u.Tag, }; if (room != null) { termin.Raeume.Add(room); } termin.Dozenten.Add(lecturer); course.Termine.Add(termin); }
/// <summary> /// Anlegen eines neuen Kurstermins /// </summary> /// <param name="course"></param> /// <param name="u"></param> private void CreateCourseEvent(Kurs course, Unterricht u) { var room = ctx.Raeume.SingleOrDefault(r => r.RaumID.Equals(u.RaumID)); var lecturer = ctx.Dozenten.SingleOrDefault(l => l.DozentID.Equals(u.DozentID)); if (lecturer == null) { //ctx.ErrorMessages.Add(string.Format("Kein Dozent angegeben {0}", u)); // weitermachen macht keinen Sinn => es wird eh nichts importiert return; } Termin termin; if (room != null) { // gleicher Tag und am hinteren Ende bisherigen Zeitraums und gleicher Raum und gleicher Dozent termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.BisStunde + 1 == u.Stunde && e.Raeume.Any(r => r.RaumID.Equals(u.RaumID)) && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.BisStunde++; return; } // gleicher Tag und am vorderen Ende bisherigen Zeitraums und gleicher Raum termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.VonStunde - 1 == u.Stunde && e.Raeume.Any(r => r.RaumID.Equals(u.RaumID)) && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.VonStunde--; return; } // gleicher Tag und innerhalb des bisherigen Zeitraums und gleicher Raum // das können wohl auch mehr werden! termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && (e.VonStunde <= u.Stunde && u.Stunde <= e.BisStunde) && e.Raeume.Any(r => r.RaumID.Equals(u.RaumID)) && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { return; } } else { // es wurde kein Raum angegeben // gleicher Tag und am hinteren Ende bisherigen Zeitraums und gleicher Raum und gleicher Dozent termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.BisStunde + 1 == u.Stunde && !e.Raeume.Any() && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.BisStunde++; return; } // gleicher Tag und am vorderen Ende bisherigen Zeitraums und gleicher Raum termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && e.VonStunde - 1 == u.Stunde && !e.Raeume.Any() && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { termin.VonStunde--; return; } // gleicher Tag und innerhalb des bisherigen Zeitraums und gleicher Raum // das können wohl auch mehr werden! termin = course.Termine.SingleOrDefault(e => e.Tag == u.Tag && (e.VonStunde <= u.Stunde && u.Stunde <= e.BisStunde) && !e.Raeume.Any() && e.Dozenten.Any(d => d.DozentID.Equals(u.DozentID))); if (termin != null) { return; } } // Ein neuer Termin muss her termin = new Termin() { VonStunde = u.Stunde, BisStunde = u.Stunde, Tag = u.Tag, }; if (room != null) { termin.Raeume.Add(room); } termin.Dozenten.Add(lecturer); course.Termine.Add(termin); }