No-shows on the desktop member page, coach event screens, "+" popup polish

- management member_detail.html's Attendance card now shows the same
  No-shows count as the mobile player sheet, and the card's content (sparkline
  + tiles) fills the card's height/width instead of sitting in the top-left
  corner -- same flex-1/justify-center + stretched-tiles fix used there.
- Coach mode's Attendance and Line-up screens (opening an event) now
  highlight the Schedule tab instead of Today -- that's the calendar-icon
  tab, and where a coach reaches either from CoachScheduleView's own rows.
- The tab bar's "+" button: rotates 45° into an "×" while its popup is open
  (icon reused via CSS transform, no icon swap needed), the popup sits a
  little higher above the button (mb-3 -> mb-5), and a dark backdrop now
  covers the content behind it so the popup stands out.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-23 14:16:05 +02:00
parent 4af598500b
commit fbaf5a8799
8 changed files with 71 additions and 11 deletions

View File

@@ -418,6 +418,21 @@ class MemberAttendanceSparklineTests(ManagementTestBase):
self.assertEqual(response.context["attendance_counts"]["no_reply"], 1)
def test_a_present_rsvp_checked_in_as_absent_counts_as_a_no_show(self):
self.make_attendance(status=Attendance.AttendanceStatus.PRESENT, start=timezone.now() - datetime.timedelta(days=2), showed_up=False)
response = self.club_get("member_detail", self.player.pk)
self.assertEqual(response.context["attendance_counts"]["no_shows"], 1)
self.assertContains(response, "No-shows")
def test_an_unchecked_present_rsvp_is_not_a_no_show(self):
self.make_attendance(status=Attendance.AttendanceStatus.PRESENT, start=timezone.now() - datetime.timedelta(days=2))
response = self.club_get("member_detail", self.player.pk)
self.assertEqual(response.context["attendance_counts"]["no_shows"], 0)
def test_the_sparkline_is_capped_at_twelve_bars_oldest_first(self):
for day in range(15, 0, -1):
self.make_attendance(status=Attendance.AttendanceStatus.PRESENT, start=timezone.now() - datetime.timedelta(days=day))