Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        /// <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);
        }