Implementiert TODO 1.1 (Klausur anlegen/verwalten) und die dazu passenden Teile von 1.2 (Aufgabenstruktur), da beides im selben Dialog verwaltet wird: - ExamDialog: Klausur anlegen/bearbeiten/duplizieren mit Aufgaben-Editor (Nr./Titel/Maximalpunkte/Gewichtung, sortierbar), Gesamtpunkte-Anzeige mit Warnung bei 0 Punkten, und Kompetenz-Zuordnung je Aufgabe. - Klausuren-Tab: Kontextmenü und Toolbar für Bearbeiten/Duplizieren/ Löschen (mit Rückfrage), farbcodierte Status-Spalte, SplitButton für Statuswechsel (Klick = nächster Status, Dropdown = manuelles Setzen). - ExamRepository.Delete löscht zugehörige ExamResults kaskadierend. - Gewichtung ist standardmäßig ausgeblendet (Checkbox zum Einblenden), NumericUpDown-Felder ohne Spinner-Buttons wegen eines Layout-Bugs im Avalonia-Standardtemplate, der das interne Textfeld auf wenige Pixel schrumpfen ließ. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
44 lines
1.5 KiB
C#
44 lines
1.5 KiB
C#
namespace LehrerApp.Core.Models;
|
|
|
|
public class Exam
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public Guid GroupId { get; set; }
|
|
public string Title { get; set; } = "";
|
|
public DateOnly Date { get; set; }
|
|
public string Subject { get; set; } = "";
|
|
public int? ExamNumber { get; set; }
|
|
public List<ExamTask> Tasks { get; set; } = [];
|
|
public List<GradingKeyEntry> GradingKey { get; set; } = [];
|
|
public ExamStatus Status { get; set; } = ExamStatus.Planned;
|
|
public string? Notes { get; set; }
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
public class ExamTask
|
|
{
|
|
public int Nr { get; set; }
|
|
public string? Title { get; set; }
|
|
public double MaxPoints { get; set; }
|
|
public double Weight { get; set; } = 1.0;
|
|
public List<string> CompetencyCodes { get; set; } = [];
|
|
}
|
|
public class GradingKeyEntry
|
|
{
|
|
public string Grade { get; set; } = "";
|
|
public double MinPercent { get; set; }
|
|
}
|
|
public class ExamResult
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public Guid ExamId { get; set; }
|
|
public Guid StudentId { get; set; }
|
|
public List<double> Points { get; set; } = [];
|
|
public double TotalPoints { get; set; }
|
|
public string? Grade { get; set; }
|
|
public bool Absent { get; set; }
|
|
public string? Comment { get; set; }
|
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
public enum ExamStatus { Planned, Conducted, Graded, Returned }
|