Kurs-Übersicht: neue Karte "Fehlende Hausaufgaben" listet Schüler mit nicht gemachter Hausaufgabe aus der letzten Mitarbeitssitzung. Aufgabenverwaltung: WorkTask.Kind unterscheidet jetzt Arbeitsaufträge von reinen Erinnerungen ohne Zeitbezug (z.B. "morgen Ansage an die Klasse machen") - eigener Button "🔔 Erinnerung", eigenes Icon in Liste/Dashboard, läuft nicht in die Zeitauswertung ein. Drei Bugfixes aus Nutzer-Feedback: - Dashboard-Kalender zeigte eine Stunde doppelt, wenn sie über "Sitzung erzeugen" mit einer Mitarbeitssitzung verknüpft war. - Der Sitzplan-Tab legte beim bloßen Öffnen einer Gruppe (nicht erst bei echter Nutzung) eine leere "Sitzplan"-Sitzung für heute an. - Der "Meine Klasse"-Ring im Kalender erschien erst, sobald für den Tag eine Lesson existierte, statt schon laut Stundenplan. Außerdem: Drawer-Icons pinnen jetzt explizit auf die farbige Emoji-Schrift (Windows kann sonst je nach Font-Fallback auf eine einfarbige Variante ausweichen). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
122 lines
5.5 KiB
C#
122 lines
5.5 KiB
C#
namespace LehrerApp.Core.Models;
|
|
|
|
public class Documentation
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public Guid StudentId { get; set; }
|
|
public Guid? GroupId { get; set; }
|
|
/// <summary>Unterrichtssitzung, in der die Beobachtung entstanden ist.</summary>
|
|
public Guid? ParticipationSessionId { get; set; }
|
|
/// <summary>Optionaler Bezug auf die konkrete geplante Stunde.</summary>
|
|
public Guid? LessonId { get; set; }
|
|
public DocumentationType Type { get; set; }
|
|
public DateOnly Date { get; set; }
|
|
public string Title { get; set; } = "";
|
|
public string Content { get; set; } = "";
|
|
public List<string> Participants { get; set; } = [];
|
|
public AbsenceData? AbsenceData { get; set; }
|
|
public SupportData? SupportData { get; set; }
|
|
public ParentCallData? ParentCallData { get; set; }
|
|
public ParentLetterData? ParentLetterData { get; set; }
|
|
public List<DocumentAttachment> Attachments { get; set; } = [];
|
|
/// Freie Labels zur Nachverfolgung, z.B. "Kritisch", "Nacharbeiten" — siehe `DocumentationTagDisplay`.
|
|
public List<string> Tags { get; set; } = [];
|
|
/// <summary>Im Unterricht schnell erfasst und noch inhaltlich nachzuarbeiten.</summary>
|
|
public bool IsDraft { get; set; }
|
|
public bool IsConfidential { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
|
// Löschen entfernt den Eintrag nicht hart, sondern markiert ihn nur (Nachvollziehbarkeit, 5.1.4).
|
|
public bool IsDeleted { get; set; }
|
|
public DateTime? DeletedAt { get; set; }
|
|
}
|
|
public class AbsenceData
|
|
{
|
|
public int LessonCount { get; set; }
|
|
public bool Excused { get; set; }
|
|
public string? Reason { get; set; }
|
|
}
|
|
public class SupportData
|
|
{
|
|
public List<string> Measures { get; set; } = [];
|
|
public DateOnly? ReviewDate { get; set; }
|
|
public SupportStatus Status { get; set; } = SupportStatus.Active;
|
|
}
|
|
/// <summary>Geplante Gesprächspunkte eines Elternanrufs, abgehakt in <see cref="ParentCallData"/>.</summary>
|
|
public class ParentCallPoint
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public string Text { get; set; } = "";
|
|
public bool IsDone { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// Elternanruf: Gesprächspunkte werden vorab geplant, dann im begleitenden Dialog während des
|
|
/// Anrufs abgehakt und um Eindrücke/Ergänzungen zum Protokoll ergänzt.
|
|
/// </summary>
|
|
public class ParentCallData
|
|
{
|
|
public List<ParentCallPoint> Points { get; set; } = [];
|
|
public string Impressions { get; set; } = "";
|
|
public bool IsConducted { get; set; }
|
|
public DateOnly? ConductedDate { get; set; }
|
|
}
|
|
/// <summary>Elternbrief: Entwurf/Planung sowie Absende- und Rückmeldedaten.</summary>
|
|
public class ParentLetterData
|
|
{
|
|
public string DraftContent { get; set; } = "";
|
|
public DateOnly? SentDate { get; set; }
|
|
public bool ResponseReceived { get; set; }
|
|
public DateOnly? ResponseDate { get; set; }
|
|
public string ResponseNote { get; set; } = "";
|
|
}
|
|
/// <summary>Datei-Anhang eines Dokumentationseintrags, im LiteDB-Dateispeicher abgelegt.</summary>
|
|
public class DocumentAttachment
|
|
{
|
|
public string StorageId { get; set; } = "";
|
|
public string FileName { get; set; } = "";
|
|
public long SizeBytes { get; set; }
|
|
public DateTime UploadedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
// Hinten angefügt, damit die numerischen Werte bereits gespeicherter LiteDB-Einträge stabil bleiben.
|
|
public enum DocumentationType { Conversation, Incident, SupportPlan, Absence, ParentCall, ParentLetter }
|
|
public enum SupportStatus { Active, Completed, Paused }
|
|
|
|
public class WorkTask
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public string Title { get; set; } = "";
|
|
public TaskCategory Category { get; set; }
|
|
public Guid? GroupId { get; set; }
|
|
public DateOnly? DueDate { get; set; }
|
|
public int? EstimatedMinutes { get; set; }
|
|
public WorkTaskStatus Status { get; set; } = WorkTaskStatus.Open;
|
|
public string? Notes { get; set; }
|
|
// Beim Abschließen (6.1.3) wird bei Weekly/Monthly automatisch die nächste Aufgabe erzeugt (6.1.4).
|
|
public TaskRecurrence Recurrence { get; set; } = TaskRecurrence.None;
|
|
/// Nutzer-Feedback: "Aufgaben" wirkt wie reine Zeiterfassung, dabei braucht man auch schlichte
|
|
/// Erinnerungen ohne Zeitbezug (z.B. "morgen Ansage an die Klasse machen"). Reminder-Aufgaben
|
|
/// laufen über dieselbe Liste/dasselbe Dashboard-Widget, werden aber nie mit einem
|
|
/// TimeEntry verknüpft und fließen deshalb schon rein datenmodell-bedingt (WorkloadEvaluationViewModel
|
|
/// wertet nur TimeEntry aus, nicht WorkTask) nicht in die Zeitauswertung (6.3) ein.
|
|
public TaskKind Kind { get; set; } = TaskKind.WorkItem;
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
public class TimeEntry
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public Guid? TaskId { get; set; }
|
|
public string Category { get; set; } = "";
|
|
public Guid? GroupId { get; set; }
|
|
public DateOnly Date { get; set; }
|
|
public TimeOnly? StartTime { get; set; }
|
|
public TimeOnly? EndTime { get; set; }
|
|
public int DurationMinutes { get; set; }
|
|
public string? Description { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
public enum TaskCategory { Correction, Preparation, Admin, Meeting, Other, Teaching }
|
|
public enum WorkTaskStatus { Open, InProgress, Done }
|
|
public enum TaskRecurrence { None, Weekly, Monthly }
|
|
public enum TaskKind { WorkItem, Reminder }
|