feat: Wochenendtage ohne Eintrag im Anwesenheitskalender dezent ausgrauen
CI / build-and-test (push) Canceled after 0s

Samstage/Sonntage sind normalerweise keine Schultage - "keine Fehlzeit" dort
ist keine Leistung und soll nicht optisch gleichwertig neben echten
Schultag-Einträgen stehen. Tageskacheln für Sa/So ohne Signal bekommen jetzt
einen helleren Rahmen/Hintergrund und blasseren Text; ein tatsächlicher
Eintrag an einem Wochenendtag bleibt unverändert farbig, da er echte
Information trägt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Sonnet 5 committed 2026-09-17 23:16:55 +02:00
1 parent f1cf01ff88
commit 4ffba35eff
2 files changed
+59 -3

No files matched your search

@@ -173,6 +173,56 @@ public sealed class ClassTeacherViewModelsTests
Assert.True(engeBox.ContentHeight <= 60 + 0.01f);
}
// Samstage/Sonntage ohne Eintrag sind normalerweise keine Schultage - "keine Fehlzeit" dort ist
// keine Leistung und soll dezent ausgegraut statt gleichwertig mit echten Schultagen erscheinen.
// Ein tatsächlicher Eintrag an einem Wochenendtag bleibt dagegen unverändert farbig.
[Fact]
public void ElternbriefKalender_GrautWochenendtageOhneEintragAus()
{
var month = new DateOnly(2026, 9, 1);
var drawing = StudentAttendanceCalendarDrawingBuilder.Build("Ada Müller", month, [], []);
var dayCells = drawing.Commands
.Zip(drawing.Commands.Skip(1), (first, second) => (first, second))
.Where(pair => pair.first is DrawRoundedRectangle && pair.second is DrawStringEx text
&& int.TryParse(text.Text, out _))
.Select(pair => ((DrawRoundedRectangle)pair.first, int.Parse(((DrawStringEx)pair.second).Text)))
.ToList();
Assert.NotEmpty(dayCells);
foreach (var (rectangle, day) in dayCells)
{
var isWeekend = new DateOnly(2026, 9, day).DayOfWeek is DayOfWeek.Saturday or DayOfWeek.Sunday;
Assert.Equal(isWeekend ? "#F3F4F6" : "#FFFFFF", rectangle.FillColor);
}
}
// Ein Eintrag (z.B. ein dokumentiertes Ereignis) an einem Wochenendtag trägt echte Information
// und darf deshalb nicht vom "ausgrauen" betroffen sein.
[Fact]
public void ElternbriefKalender_GrautWochenendtagMitEintragNichtAus()
{
var month = new DateOnly(2026, 9, 1);
var samstag = Enumerable.Range(1, 30)
.Select(day => new DateOnly(2026, 9, day))
.First(d => d.DayOfWeek == DayOfWeek.Saturday);
var absences = new[]
{
new ClassAbsenceDaySummaryRow(samstag, "Ada Müller", 1, 6, 270,
["Deu"], [1, 2, 3, 4, 5, 6], ["nicht entsch."], ["Absent"], null, null, true),
};
var drawing = StudentAttendanceCalendarDrawingBuilder.Build("Ada Müller", month, absences, []);
var samstagsZelle = drawing.Commands
.Zip(drawing.Commands.Skip(1), (first, second) => (first, second))
.Where(pair => pair.first is DrawRoundedRectangle && pair.second is DrawStringEx text
&& text.Text == "U")
.Select(pair => (DrawRoundedRectangle)pair.first)
.Single();
Assert.NotEqual("#F3F4F6", samstagsZelle.FillColor);
}
[Fact]
public void ElternbriefFehltage_ListetDatumUmfangUndEntschuldigungsstatus()
{
@@ -134,12 +134,18 @@ public static class StudentAttendanceCalendarDrawingBuilder
var row = index / 7;
var x = xOffset + column * cellWidth;
var cellY = monthY + row * cellHeight;
// Sa/So (Spalten 5/6, siehe weekdays-Array oben) ohne Eintrag dezent ausgrauen - das
// sind normalerweise keine Schultage, "keine Fehlzeit" dort ist keine Leistung und
// soll nicht optisch gleichwertig neben echten schulfreien-Tage-Einträgen stehen. Ein
// tatsächlicher Eintrag an einem Wochenendtag (day.HasSignal) bleibt unverändert
// farbig, da er echte Information trägt.
var isMutedWeekend = column is 5 or 6 && !day.HasSignal;
commands.Add(new DrawRoundedRectangle(x + cellInset, cellY, cellWidth - 2 * cellInset,
cellHeight - cellInset, cellCornerRadius, "#D1D5DB", .35f,
day.HasSignal ? day.SignalColorHex : "#FFFFFF"));
cellHeight - cellInset, cellCornerRadius, isMutedWeekend ? "#E5E7EB" : "#D1D5DB", .35f,
day.HasSignal ? day.SignalColorHex : isMutedWeekend ? "#F3F4F6" : "#FFFFFF"));
commands.Add(new DrawStringEx(x, cellY + k, cellHeight - 2 * k, cellWidth,
day.HasSignal ? day.SignalCode : day.DayNumber, DrawingTextAlignment.AlignCenter, 7 * finalScale,
Color: day.HasSignal ? "#FFFFFF" : "#374151", Bold: day.HasSignal));
Color: day.HasSignal ? "#FFFFFF" : isMutedWeekend ? "#B0B7C0" : "#374151", Bold: day.HasSignal));
}
}
y = gridStartY + 11 * k + 9 * k + maxWeeks * cellHeight + designTrailingGapY * k;