feat: Wochenendtage ohne Eintrag im Anwesenheitskalender dezent ausgrauen
CI / build-and-test (push) Canceled after 0s
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:
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;
|
||||
|
||||
Reference in new issue
Block a user