51 lines
2.7 KiB
C#
51 lines
2.7 KiB
C#
using LehrerApp.Core.Models;
|
|
using LehrerApp.Core.Services;
|
|
using LehrerApp.Templating;
|
|
|
|
namespace LehrerApp.Desktop.Services;
|
|
|
|
public static class GradeReportDrawingBuilder
|
|
{
|
|
public static DrawingValue Interim(InterimGrade grade, LoadedTemplate template) =>
|
|
Text(template, ReportTextDrawing.InterimGrades, "Vorläufiger Notenzwischenstand",
|
|
[
|
|
$"Stichtag: {grade.Date:dd.MM.yyyy} · {grade.Occasion}",
|
|
$"Mündlich: {Value(grade.OralValue)}",
|
|
$"Schriftlich: {Value(grade.WrittenValue)}",
|
|
$"Vorläufige Zeugnisnote: {Value(grade.OverallValue)}",
|
|
"Dieser Zwischenstand ist keine festgeschriebene Zeugnisnote.",
|
|
]);
|
|
|
|
public static DrawingValue Repeat(Exam exam, Exam? original, ExamResult? originalResult,
|
|
LoadedTemplate template)
|
|
{
|
|
if (exam.RepeatOfExamId is null) return new DrawingValue([], 0);
|
|
if (original is null || original.Id != exam.RepeatOfExamId || original.GroupId != exam.GroupId)
|
|
throw new InvalidDataException("Die verknüpfte erste Arbeit ist nicht verfügbar.");
|
|
var rule = exam.IsMakeUp ? "Die Nachschreibarbeit ersetzt die versäumte erste Arbeit. Liegen beide Noten vor, zählt die erste Arbeit."
|
|
: exam.RepeatGradeRule switch
|
|
{
|
|
RepeatGradeRule.Repeat => "Für die Bewertung zählt die Note der Wiederholungsarbeit.",
|
|
RepeatGradeRule.Original => "Für die Bewertung zählt die Note der ersten Arbeit.",
|
|
_ => "Für die Bewertung zählt die bessere Note aus beiden Arbeiten.",
|
|
};
|
|
var grade = originalResult?.Grade;
|
|
if (string.IsNullOrWhiteSpace(grade) && ExamCoverSheetService.IsCorrected(originalResult))
|
|
grade = new GradingService().CalculateGrade(originalResult!.TotalPoints,
|
|
ExamScoringService.Maximum(original.Tasks, originalResult.Variant), original.GradingKey);
|
|
var firstGrade = originalResult is { Absent: true } ? "abwesend" : Value(grade);
|
|
return Text(template, ReportTextDrawing.RepeatInfo,
|
|
exam.IsMakeUp ? "Nachschreibarbeit" : "Wiederholungsarbeit",
|
|
[$"Erste Arbeit: {original.Title} vom {original.Date:dd.MM.yyyy}",
|
|
$"Note der ersten Arbeit: {firstGrade}", rule]);
|
|
}
|
|
|
|
public static DrawingValue Text(LoadedTemplate template, string name, string title, IEnumerable<string> paragraphs)
|
|
{
|
|
if (DrawingBoxLocator.Find(template, name) is not { } box) return new DrawingValue([], 0);
|
|
return ReportTextDrawing.Build(title, paragraphs, box.Width, box.MillimeterScale, box.Height, box.IsFixed);
|
|
}
|
|
|
|
private static string Value(string? value) => string.IsNullOrWhiteSpace(value) ? "nicht erfasst" : value;
|
|
}
|