Ejemplo n.º 1
0
 public IActionResult PostFromBody([FromBody] Schueler schueler)
 {
     db.Entry(schueler).State = Microsoft.EntityFrameworkCore.EntityState.Added;
     try
     {
         db.SaveChanges();
     }
     catch (Microsoft.EntityFrameworkCore.DbUpdateException)
     {
         return(StatusCode(StatusCodes.Status500InternalServerError));
     }
     return(Ok(new { schueler.S_Nr, schueler.S_Vorname, schueler.S_Zuname, schueler.S_Geschl, schueler.S_Klasse }));
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Erstellt einen neuen Benutzer in der Datenbank. Dafür wird ein Salt generiert und der
        /// Hash des Passwortes berechnet.
        /// Wird eine PupilId übergeben, so wird die Rolle "Pupil" zugewiesen, ansonsten "Teacher".
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public User CreateUser(ApplicationUser user)
        {
            string salt    = GenerateSalt();
            User   newUser = new User
            {
                U_Name = user.Username,
                U_Salt = salt,
                U_Hash = CalculateHash(user.Password, salt),
                U_Schueler_NrNavigation = db.Schueler.Find(user.PupilId)
            };

            // Zur Demonstrationszwecken weisen wir wenn keine Schülernummer zugewiesen wurde
            // die Rolle Teacher zu.
            newUser.U_Role          = user.PupilId == null ? "Teacher" : "Pupil";
            db.Entry(newUser).State = Microsoft.EntityFrameworkCore.EntityState.Added;
            db.SaveChanges();
            return(newUser);
        }
Ejemplo n.º 3
0
        public static void SeedDatabase(this SchuleContext db, SchulDb.Untis.Untisdata data, int schuljahr)
        {
            // Wir schreiben nur die Informatikklassen in die Datenbank, sonst ist das Ergebnis der
            // Abfragen unnötig groß.
            var echteKlassen = (from k in data.Klassen
                                where Regex.IsMatch(k.Nr ?? "", @"^[0-9][A-Z_]{2,}$", RegexOptions.IgnoreCase)
                                select k).ToList();

            if (!echteKlassen.Any())
            {
                throw new SchulDb.SchulDbException("Der Untis Export enthält keine Klassen.");
            }
            // Im Datenmodell darf ein Lehrer zu selben Zeit nur eine Klasse haben. Durch die
            // Gruppierung stellen wir das sicher.
            var echteStunden = (from s in data.Stundenplan
                                join k in echteKlassen on s.Klasse equals k.Nr
                                where Regex.IsMatch(s.Fach ?? "", @"^[^FR]", RegexOptions.IgnoreCase)
                                group s by new { s.Stunde, s.Tag, s.Lehrer, s.Klasse } into g
                                select g.FirstOrDefault()).ToList();

            if (!echteStunden.Any())
            {
                throw new SchulDb.SchulDbException("Der Untis Export enthält keine Stunden im Stundenplan.");
            }
            // Alle Fächer, die unterrichtet werden. Das schließt Kunstfächer wie Sprechstunde, ... aus.
            var echteFaecher = (from f in data.Faecher
                                join s in echteStunden on f.Nr equals s.Fach into sg
                                where sg.Any()
                                select f).ToList();

            if (!echteFaecher.Any())
            {
                throw new SchulDb.SchulDbException("Der Untis Export enthält keine Fächer im Stundenplan.");
            }

            Randomizer.Seed = new Random(987);
            DateTime current = new DateTime(schuljahr, 9, 1);
            Faker    fkr     = new Faker();

            // *********************************************************************************
            // STATISCHE DATEN
            // *********************************************************************************

            db.Geschlechters.Add(new Geschlecht {
                GesId = 1, GesMw = "m", GesMaennlichweiblich = "männlich", GesSchuelerschuelerin = "Schüler", GesLehrerlehrerin = "Lehrer"
            });
            db.Geschlechters.Add(new Geschlecht {
                GesId = 2, GesMw = "w", GesMaennlichweiblich = "weiblich", GesSchuelerschuelerin = "Schülerin", GesLehrerlehrerin = "Lehrerin"
            });
            db.SaveChanges();

            db.Religionens.Add(new Religion {
                RelId = 10, RelNr = "ob", RelName = "Ohne Bekenntnis", RelGesetzlichanerkannt = false, RelStaatlicheingetragen = false
            });
            db.Religionens.Add(new Religion {
                RelId = 11, RelNr = "evab", RelName = "evangelisch A.B.", RelGesetzlichanerkannt = true, RelStaatlicheingetragen = false
            });
            db.Religionens.Add(new Religion {
                RelId = 12, RelNr = "islam", RelName = "islamisch", RelGesetzlichanerkannt = true, RelStaatlicheingetragen = false
            });
            db.Religionens.Add(new Religion {
                RelId = 13, RelNr = "rk", RelName = "römisch - katholisch", RelGesetzlichanerkannt = true, RelStaatlicheingetragen = false
            });
            db.SaveChanges();

            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20180, SjaBezeichnung = "Schuljahr 2018/19", Wintersemester = true, Sommersemester = true, SjaDatumvon = new DateTime(2018, 9, 3), SjaDatumbis = new DateTime(2019, 6, 28)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20181, SjaBezeichnung = "Wintersemester 2018/19", Wintersemester = true, Sommersemester = false, SjaDatumvon = new DateTime(2018, 9, 3), SjaDatumbis = new DateTime(2019, 2, 10)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20182, SjaBezeichnung = "Sommersemester 2018/19", Wintersemester = false, Sommersemester = true, SjaDatumvon = new DateTime(2019, 2, 11), SjaDatumbis = new DateTime(2019, 6, 28)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20190, SjaBezeichnung = "Schuljahr 2019/20", Wintersemester = true, Sommersemester = true, SjaDatumvon = new DateTime(2019, 9, 2), SjaDatumbis = new DateTime(2020, 7, 3)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20191, SjaBezeichnung = "Wintersemester 2019/20", Wintersemester = true, Sommersemester = false, SjaDatumvon = new DateTime(2019, 9, 2), SjaDatumbis = new DateTime(2020, 2, 9)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20192, SjaBezeichnung = "Sommersemester 2019/20", Wintersemester = false, Sommersemester = true, SjaDatumvon = new DateTime(2020, 2, 10), SjaDatumbis = new DateTime(2020, 7, 3)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20200, SjaBezeichnung = "Schuljahr 2020/21", Wintersemester = true, Sommersemester = true, SjaDatumvon = new DateTime(2020, 9, 7), SjaDatumbis = new DateTime(2021, 7, 2)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20201, SjaBezeichnung = "Wintersemester 2020/21", Wintersemester = true, Sommersemester = false, SjaDatumvon = new DateTime(2020, 9, 7), SjaDatumbis = new DateTime(2021, 2, 7)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20202, SjaBezeichnung = "Sommersemester 2020/21", Wintersemester = false, Sommersemester = true, SjaDatumvon = new DateTime(2019, 2, 8), SjaDatumbis = new DateTime(2021, 7, 2)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20210, SjaBezeichnung = "Schuljahr 2021/22", Wintersemester = true, Sommersemester = true, SjaDatumvon = new DateTime(2021, 9, 6), SjaDatumbis = new DateTime(2022, 7, 1)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20211, SjaBezeichnung = "Wintersemester 2021/22", Wintersemester = true, Sommersemester = false, SjaDatumvon = new DateTime(2021, 9, 6), SjaDatumbis = new DateTime(2022, 2, 13)
            });
            db.Schuljahres.Add(new Schuljahr {
                SjaNr = 20212, SjaBezeichnung = "Sommersemester 2021/22", Wintersemester = false, Sommersemester = true, SjaDatumvon = new DateTime(2022, 2, 14), SjaDatumbis = new DateTime(2022, 7, 1)
            });
            db.SaveChanges();

            db.Staatens.Add(new Staat {
                StaNr = "A", StaName = "Österreich", StaStaatsb = "österreichisch", StaEuland = true
            });
            db.Staatens.Add(new Staat {
                StaNr = "TR", StaName = "Türkei", StaStaatsb = "türkisch", StaEuland = false
            });
            db.Staatens.Add(new Staat {
                StaNr = "SBM", StaName = "Serbien", StaStaatsb = "serbisch", StaEuland = false
            });
            db.Staatens.Add(new Staat {
                StaNr = "CRO", StaName = "Kroatien", StaStaatsb = "kroatisch", StaEuland = false
            });
            db.Staatens.Add(new Staat {
                StaNr = "D", StaName = "Deutschland", StaStaatsb = "Deutschland", StaEuland = true
            });
            db.Staatens.Add(new Staat {
                StaNr = "SQ", StaName = "Slowakei", StaStaatsb = "slowakisch", StaEuland = true
            });
            db.Staatens.Add(new Staat {
                StaNr = "SLO", StaName = "Slowenien", StaStaatsb = "slowenisch", StaEuland = true
            });
            db.SaveChanges();

            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 1, StrBeginn = new TimeSpan(8, 00, 0), StrEnde = new TimeSpan(8, 50, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 2, StrBeginn = new TimeSpan(8, 50, 0), StrEnde = new TimeSpan(9, 40, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 3, StrBeginn = new TimeSpan(9, 55, 0), StrEnde = new TimeSpan(10, 45, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 4, StrBeginn = new TimeSpan(10, 45, 0), StrEnde = new TimeSpan(11, 35, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 5, StrBeginn = new TimeSpan(11, 45, 0), StrEnde = new TimeSpan(12, 35, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 6, StrBeginn = new TimeSpan(12, 35, 0), StrEnde = new TimeSpan(13, 25, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 7, StrBeginn = new TimeSpan(13, 25, 0), StrEnde = new TimeSpan(14, 15, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 8, StrBeginn = new TimeSpan(14, 25, 0), StrEnde = new TimeSpan(15, 15, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 9, StrBeginn = new TimeSpan(15, 15, 0), StrEnde = new TimeSpan(16, 05, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 10, StrBeginn = new TimeSpan(16, 15, 0), StrEnde = new TimeSpan(17, 05, 0), StrIstAbend = false
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 11, StrBeginn = new TimeSpan(17, 10, 0), StrEnde = new TimeSpan(17, 55, 0), StrIstAbend = true
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 12, StrBeginn = new TimeSpan(17, 55, 0), StrEnde = new TimeSpan(18, 40, 0), StrIstAbend = true
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 13, StrBeginn = new TimeSpan(18, 50, 0), StrEnde = new TimeSpan(19, 35, 0), StrIstAbend = true
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 14, StrBeginn = new TimeSpan(19, 35, 0), StrEnde = new TimeSpan(20, 20, 0), StrIstAbend = true
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 15, StrBeginn = new TimeSpan(20, 30, 0), StrEnde = new TimeSpan(21, 15, 0), StrIstAbend = true
            });
            db.Stundenrasters.Add(new Stundenraster {
                StrNr = 16, StrBeginn = new TimeSpan(21, 15, 0), StrEnde = new TimeSpan(22, 00, 0), StrIstAbend = true
            });
            db.SaveChanges();

            // *********************************************************************************
            // DATEN AUS UNTIS
            // *********************************************************************************

            // Die Räume der Schule lesen und eintragen.
            db.Raeumes.AddRange(from r in data.Raeume
                                where
                                r.Nr[0] == 'A' || r.Nr[0] == 'B' ||
                                r.Nr[0] == 'C' || r.Nr[0] == 'D'
                                select new Raum
            {
                RId      = r.Nr,
                RPlaetze = r.Kapaz,
                // Stammklasse sorgt für Verwirrung, da auch der Stammraum
                // der Klasse gemeint sein kann.
                RArt = r.Art == "Stammklasse" ? "Klassenraum" : r.Art
            });
            db.SaveChanges();

            // Die Lehrer der Schule lesen und eintragen.
            db.Lehrers.AddRange(from l in data.Lehrer
                                join s in data.Stundenplan.Where(s => s.Klasse == "SPR") on l.Nr equals s.Lehrer into sg
                                let gebdat = fkr.Date.Between(
                                    current.AddYears(-65),
                                    current.AddYears(-25)).Date
                                             let eintrittsjahr = fkr.Random.Int(
                                    gebdat.Year + 24,
                                    current.Year)
                                                                 let spr = sg.FirstOrDefault()
                                                                           select new Lehrer
            {
                LNr      = l.Nr,
                LName    = l.Zuname,
                LVorname = l.Vorname,
                LGebdat  = gebdat.OrNull(fkr, 0.2f),
                LGehalt  = Math.Round(2000M +
                                      (current.Year - eintrittsjahr) * 100M +
                                      fkr.Random.GaussianDecimal(0, 100)).OrNull(fkr, 0.2f),
                LEintrittsjahr = eintrittsjahr.OrNull(fkr, 0.2f),
                LSprechstunde  = spr != null ? SchulDb.Untis.Untisdata.Wochentage[spr.Tag - 1] +
                                 spr.Stunde.ToString() : null
            });
            db.SaveChanges();

            // Die Abteilungen mit den oben eingetragenen Lehrern verknüpfen. Die ID ist die
            // 3. - 5. Stelle (3AFITM --> FIT)
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "O", AbtName = "Übergangsstufe"
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "FIT", AbtName = "Fachschule für Informationstechnik", AbtLeiterNavigation = db.Lehrers.Find("HEB")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "HBG", AbtName = "Höhere Lehranstalt für Biomedizin- und Gesundheitstechnik", AbtLeiterNavigation = db.Lehrers.Find("HEB")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "HIF", AbtName = "Höhere Lehranstalt für Informatik", AbtLeiterNavigation = db.Lehrers.Find("JEL")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "HMN", AbtName = "Höhere Lehranstalt für Medien", AbtLeiterNavigation = db.Lehrers.Find("PRW")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "HKU", AbtName = "Höhere Lehranstalt für Kunst", AbtLeiterNavigation = db.Lehrers.Find("PRW")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "HWI", AbtName = "Höhere Lehranstalt für Wirtschaftsingenieure", AbtLeiterNavigation = db.Lehrers.Find("ZLA")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "AIF", AbtName = "Aufbaulehrgang Tagesform", AbtLeiterNavigation = db.Lehrers.Find("STH")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "BIF", AbtName = "Aufbaulehrgang Abendform", AbtLeiterNavigation = db.Lehrers.Find("STH")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "CIF", AbtName = "Kolleg Abendform", AbtLeiterNavigation = db.Lehrers.Find("STH")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "KIF", AbtName = "Kolleg Tagesform", AbtLeiterNavigation = db.Lehrers.Find("STH")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "VIF", AbtName = "Vorbereitungslehrgang", AbtLeiterNavigation = db.Lehrers.Find("STH")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "KKU", AbtName = "Kolleg für Design", AbtLeiterNavigation = db.Lehrers.Find("PRW")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "CMN", AbtName = "Kolleg für Medien", AbtLeiterNavigation = db.Lehrers.Find("PRW")
            });
            db.Abteilungens.Add(new Abteilung {
                AbtNr = "BKU", AbtName = "Kolleg für Audivisuelles Mediendesign", AbtLeiterNavigation = db.Lehrers.Find("PRW")
            });
            db.SaveChanges();

            // Gegenstände, die in den Informatikklassen unterrichtet werden, eintragen.
            db.Gegenstaendes.AddRange(from f in echteFaecher
                                      select new Gegenstand
            {
                GNr  = f.Nr,
                GBez = f.Langname
            });
            db.SaveChanges();

            // Klassen aus den Informatikabteilungen eintragen.
            db.Klassens.AddRange(from k in echteKlassen
                                 let sjahr                     = db.Schuljahres.Find(current.Year * 10 + k.Jahresform)
                                                       let abt = k.Nr.Substring(2, Math.Min(3, k.Nr.Length - 2))
                                                                 select new Klasse
            {
                KNr = k.Nr,
                KSchuljahrNavigation = sjahr,
                KBez = k.Beschreibung,
                // Bei Jahresformen wird die Schulstufe (9, 10, ...) eingetragen.
                KSchulstufe          = k.Jahresform == 0 ? k.Schulstufe : null,
                KStammraumNavigation = db.Raeumes.Find(k.Stammraum),
                KVorstandNavigation  = db.Lehrers.Find(k.Kv),
                KAbteilungNavigation = db.Abteilungens.Find(abt) ?? throw new SchulDb.SchulDbException($"Abteilung {abt} nicht vorhanden!"),
                KDatumbis            = k.Abschlussklasse ? new DateTime(current.Year + 1, 5, 1) : (DateTime?)null
            });