Notenübersicht der Gruppe (Matrix, Gesamt-Spalte, Sortierung, Halbjahresfilter), Einzelnoten-Pflege samt Sammelerfassung, Gewichtungsschema mit Voreinstellung je Gruppentyp, Zeugnisnoten-Berechnung mit Übersteuern/Festschreiben/Export und Notenentwicklung im Schülerdetail. Dazu Anwesenheits-/Hausaufgaben-Tracking je Mitarbeit-Sitzung, ein neuer Mitarbeits-Assistent (Zeitleiste mit Abschnitten, automatischer Notenvorschlag, Zusammenzug zur Halbjahresnote) und eine Dashboard-Kachel für offene Entschuldigungen. Außerdem: verbliebene englische Begriffe in Auswahlfeldern und Buttons auf Deutsch umgestellt.
87 lines
3.3 KiB
C#
87 lines
3.3 KiB
C#
namespace LehrerApp.Core.Models;
|
||
|
||
public class ParticipationSession
|
||
{
|
||
public Guid Id { get; set; } = Guid.NewGuid();
|
||
public Guid GroupId { get; set; }
|
||
public DateOnly Date { get; set; } = DateOnly.FromDateTime(DateTime.Today);
|
||
public Guid? LessonId { get; set; }
|
||
public string? Comment { get; set; }
|
||
public List<string> CompetencyCodes { get; set; } = [];
|
||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||
}
|
||
|
||
public class ParticipationEntry
|
||
{
|
||
public Guid Id { get; set; } = Guid.NewGuid();
|
||
public Guid SessionId { get; set; }
|
||
public Guid StudentId { get; set; }
|
||
public List<AspectRating> Ratings { get; set; } = [];
|
||
public List<CompetencyRating> CompetencyRatings { get; set; } = [];
|
||
public string? Note { get; set; }
|
||
public bool HomeworkMissing { get; set; }
|
||
public AttendanceStatus? Attendance { get; set; }
|
||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||
}
|
||
|
||
/// <summary>
|
||
/// Anwesenheitsstatus einer Sitzung; null (Standard) bedeutet anwesend.
|
||
/// <see cref="ExcusePending"/> ist ein bewusster Zwischenzustand, da die Entschuldigung meist
|
||
/// erst später eintrifft — er wird beim Erfassen des Fehltags gesetzt und danach manuell auf
|
||
/// <see cref="Excused"/> oder <see cref="Unexcused"/> nachgetragen.
|
||
/// </summary>
|
||
public enum AttendanceStatus { ExcusePending, Excused, Unexcused }
|
||
|
||
/// <summary>
|
||
/// Ein Bewertungsabschnitt einer Lerngruppe (z.B. alle 4–7 Wochen), an dessen Ende eine
|
||
/// Abschnittsnote Mitarbeit vergeben wird. Nur abgeschlossene Abschnitte werden gespeichert;
|
||
/// der aktuell laufende Zeitraum ergibt sich aus dem Ende des letzten Abschnitts bis heute.
|
||
/// </summary>
|
||
public class ParticipationSection
|
||
{
|
||
public Guid Id { get; set; } = Guid.NewGuid();
|
||
public Guid GroupId { get; set; }
|
||
public string Label { get; set; } = "";
|
||
public DateOnly StartDate { get; set; }
|
||
public DateOnly EndDate { get; set; }
|
||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||
}
|
||
|
||
public class CompetencyRating
|
||
{
|
||
public string Code { get; set; } = "";
|
||
public int Value { get; set; }
|
||
}
|
||
|
||
public class AspectRating
|
||
{
|
||
public string Key { get; set; } = "";
|
||
public int Value { get; set; }
|
||
}
|
||
|
||
public class ParticipationAspect
|
||
{
|
||
public Guid Id { get; set; } = Guid.NewGuid();
|
||
public Guid? GroupId { get; set; }
|
||
public string Key { get; set; } = "";
|
||
public string Label { get; set; } = "";
|
||
public AspectValueType ValueType { get; set; } = AspectValueType.Scale5;
|
||
public double Weight { get; set; } = 1.0;
|
||
public bool IsActive { get; set; } = true;
|
||
public int SortOrder { get; set; }
|
||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||
}
|
||
|
||
public enum AspectValueType { Scale5, Scale3, Binary, Points }
|
||
|
||
public static class DefaultParticipationAspects
|
||
{
|
||
public static readonly IReadOnlyList<ParticipationAspect> All =
|
||
[
|
||
new() { Key = "quality", Label = "Qualität", ValueType = AspectValueType.Scale5, SortOrder = 0 },
|
||
new() { Key = "quantity", Label = "Quantität", ValueType = AspectValueType.Scale5, SortOrder = 1 },
|
||
new() { Key = "workphase", Label = "Arbeitsphase", ValueType = AspectValueType.Scale5, SortOrder = 2 },
|
||
];
|
||
}
|