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 })); }
/// <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); }
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 });