private void ReadGPU016(string fileName) { var lines = GetFileContent(fileName); if (!lines.Any()) { return; } foreach (var line in lines) { // Unterricht einlesen var words = line.Split(seperator); var r = new Restriktion { Typ = words[0].Replace("\"", ""), ElementID = words[1].Replace("\"", ""), Tag = int.Parse(words[2]), Stunde = int.Parse(words[3]), Level = int.Parse(words[4]) }; if (r.Typ.Equals("R") && r.Level == -3) { Context.Restriktionen.Add(r); } } // Alle Resriktionen durchgehen var orderedRestrictions = Context.Restriktionen.OrderBy(x => x.ElementID).ThenBy(x => x.Tag) .ThenBy(x => x.Stunde).ToList(); foreach (var restriction in orderedRestrictions) { var room = ctx.Raeume.SingleOrDefault(r => r.RaumID.Equals(restriction.ElementID)); if (room != null) { // gleicher Tag und am hinteren Ende bisherigen Zeitraums und gleicher Raum und gleicher Dozent var blockade = Context.Blockaden.SingleOrDefault(e => e.Tag == restriction.Tag && e.BisStunde + 1 == restriction.Stunde && e.Raum.RaumID.Equals(restriction.ElementID)); if (blockade != null) { blockade.BisStunde++; } else { // nicht vorhanden, dann anderer Tag oder Lücke oder anderer Raum blockade = new RaumBlockade { Raum = room, Tag = restriction.Tag, VonStunde = restriction.Stunde, BisStunde = restriction.Stunde }; Context.Blockaden.Add(blockade); } } } }
public string ImportReservation(RaumBlockade b) { string msg; var db = new TimeTableDbContext(); var org = db.Organisers.SingleOrDefault(o => o.Id == _orgId); var semester = db.Semesters.SingleOrDefault(s => s.Id == _semId); var name = $"Restriktionen Stundenplanung {semester.Name}"; var reservation = db.Activities.OfType <Reservation>().FirstOrDefault(r => r.Organiser.Id == org.Id && r.Name.Equals(name)); if (reservation == null) { reservation = new Reservation { Name = name, ShortName = $"SP {semester.Name}", Description = "Importierte Restrektionen aus Stundenplanug", UserId = "", Organiser = org }; db.Activities.Add(reservation); } // Datum anlegen für jeden Raum // Die Zeiten werden jetzt aus dem Kontext gelesen if (!_import.Stunden.ContainsKey(b.VonStunde)) { _import.AddErrorMessage("Import", string.Format("Stunde {0} nicht definiert", b.VonStunde), false); } if (!_import.Stunden.ContainsKey(b.BisStunde)) { _import.AddErrorMessage("Import", string.Format("Stunde {0} nicht definiert", b.BisStunde), false); } // Termin liegt an einem Tag, der nicht importiert werden soll if (!_import.Tage.ContainsKey(b.Tag)) { _import.AddErrorMessage("Import", string.Format("Tag {0} nicht definiert", b.Tag), false); } if (!_import.Tage[b.Tag]) { _import.AddErrorMessage("Import", string.Format("Tag {0} soll nicht importiert werden", b.Tag), false); } var occBegin = _import.Stunden[b.VonStunde].Start; var occEnd = _import.Stunden[b.BisStunde].Ende; // den wahren zeitraum bestimmen // Hypothese: immer Vorlesungszeitraum des Semesters var semesterAnfang = semester.StartCourses; var semesterEnde = semester.EndCourses; // abweichende Angaben? dann diese nehmen if (_firstDate.HasValue) { semesterAnfang = _firstDate.Value; } if (_lastDate.HasValue) { semesterEnde = _lastDate.Value; } // Tag der ersten Veranstaltung nach Vorlesungsbeginn ermitteln var semesterStartTag = (int)semesterAnfang.DayOfWeek; var day = b.Tag; int nDays = day - semesterStartTag; if (nDays < 0) { nDays += 7; } DateTime occDate = semesterAnfang.AddDays(nDays); //Solange neue Termine anlegen bis das Enddatum des Semesters erreicht ist int numOcc = 0; while (occDate <= semesterEnde) { 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; } } if (isVorlesung) { var ocStart = new DateTime(occDate.Year, occDate.Month, occDate.Day, occBegin.Hour, occBegin.Minute, occBegin.Second); var ocEnd = new DateTime(occDate.Year, occDate.Month, occDate.Day, occEnd.Hour, occEnd.Minute, occEnd.Second); var occ = new ActivityDate { Begin = ocStart, End = ocEnd, Activity = reservation, Occurrence = null, }; var room = InitRoom(db, b.Raum, org); if (room != null) { occ.Rooms.Add(room); } db.ActivityDates.Add(occ); numOcc++; } occDate = occDate.AddDays(7); } db.SaveChanges(); msg = string.Format("Reservierung für Raum {0} mit Terminen importiert", b.Raum.Nummer); return(msg); }