namespace LehrerApp.Core.Models; public class LearningGroup { public Guid Id { get; set; } = Guid.NewGuid(); public string Name { get; set; } = ""; public GroupType Type { get; set; } public Guid? SubjectId { get; set; } public string SchoolYear { get; set; } = ""; public int GradeLevel { get; set; } public GradingSystem GradingSystem { get; set; } public int? HoursPerWeek { get; set; } public bool IsActive { get; set; } = true; public bool IsOwnClass { get; set; } public bool IsDifferentiated { get; set; } /// /// Ich bin Klassenlehrer/-in dieser Klasse. Anders als (rein /// kalenderfarbliche Markierung, mehrfach setzbar für Klasse + zugehörige Kurse) schaltet /// dieses Flag Zugriff auf Daten anderer Lehrkräfte zu dieser Klasse frei (Klassenlehrer-Tab) /// und sollte deshalb nur an genau einer Klasse-Gruppe gesetzt werden. /// public bool IsClassTeacher { get; set; } /// /// Default true (alte Datensätze ohne dieses Feld verhalten sich damit unverändert wie bisher /// - LiteDB liefert den C#-Default für fehlende Felder). Für Gruppen wie Klassenrat oder /// Willkommenskreis, die keinen inhaltlichen Verlaufsplan brauchen, in den Stammdaten /// deaktivierbar - blendet die Erinnerung "Ungeplante Stunden" im Dashboard für diese Gruppe aus. /// public bool RequiresLessonPlanning { get; set; } = true; /// /// WebUntis-interne Unterrichtsnummer (lsid) dieser Lerngruppe, Grundlage für den Abruf des /// "Fehlzeiten pro Unterricht"-Berichts. Wird von WebUntis pro Schuljahr neu vergeben und muss /// deshalb händisch je Lerngruppe/Schuljahr gepflegt werden - keine JSON-RPC-Methode liefert sie. /// public int? WebUntisLessonId { get; set; } public DateTime CreatedAt { get; set; } = DateTime.UtcNow; public DateTime UpdatedAt { get; set; } = DateTime.UtcNow; } /// /// Mitgliedschaft eines Schülers in einer Lerngruppe. Das Schuljahr gehört zur /// Lerngruppe und wird deshalb hier nicht ein zweites Mal gespeichert. /// public class GroupMembership { public Guid Id { get; set; } = Guid.NewGuid(); public Guid StudentId { get; set; } public Guid GroupId { get; set; } /// Tag, an dem die Zuordnung in der App angelegt wurde. public DateOnly AddedOn { get; set; } = DateOnly.FromDateTime(DateTime.Today); public MembershipPeriod Period { get; set; } = MembershipPeriod.FullYear; public DateOnly? JoinedAt { get; set; } public DateOnly? LeftAt { get; set; } public Niveau? Niveau { get; set; } } public enum MembershipPeriod { FullYear, H1Only, H2Only, Custom } public enum GroupType { Class, Course } public enum GradingSystem { Grades1To6, Points0To15 } public enum Niveau { E, G, Foerder }