@extends('layouts.admin') @section('header') Dashboard @endsection @section('content')
@if(auth()->user()->role === 'club_manager')

Welcome back, {{ auth()->user()->name }}!

You are managing the
{{ auth()->user()->club?->name ?? 'your club' }}

Active Members

{{ $activeMembersCount }}

Recent Attendance

@if($latestAttendance)

{{ $latestAttendance['count'] }}

@else

0

@endif
@if($latestAttendance)

{{ $latestAttendance['date']->format('l, jS M Y') }} View details

@else

No attendance recorded yet

@endif

Quick Actions

Flagged Members

Attention Required
JD
Jane Doe
#MEM-8492
Unpaid Fees
JS
John Smith
#MEM-3091
Missing Waiver
AH
Alex Hunter
#MEM-1102
Expired Medical Form
Demo Data - Feature Coming Soon
id ?? $venues->first()?->id }}', loading: false, currentRequest: 0, init() { this.loadData(); }, loadData() { this.loading = true; const requestId = ++this.currentRequest; fetch(`{{ route('dashboard.attendance-stats') }}?days=${this.days}&venue_id=${this.venueId}`) .then(res => res.json()) .then(data => { if (requestId === this.currentRequest) { this.updateChart(data); this.loading = false; } }); }, updateChart(data) { const canvas = document.getElementById('attendanceChart'); const chart = canvas._chart; if (chart) { chart.data.labels = data.labels; chart.data.datasets[0].data = data.data; if (chart.data.datasets[1]) { chart.data.datasets[1].data = data.trend_data; } chart.update(); } else { const ctx = canvas.getContext('2d'); canvas._chart = new Chart(ctx, { type: 'bar', data: { labels: data.labels, datasets: [ { label: 'Attendance', data: data.data, backgroundColor: '#6366f1', borderRadius: 6, borderSkipped: false, barPercentage: 0.6, categoryPercentage: 0.8, order: 2 }, { label: 'Trend', data: data.trend_data, type: 'line', borderColor: 'rgba(156, 163, 175, 0.8)', // gray-400 backgroundColor: 'transparent', borderWidth: 2, borderDash: [5, 5], pointRadius: 0, pointHoverRadius: 0, tension: 0, order: 1 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { backgroundColor: '#1e293b', titleFont: { size: 11, weight: 'bold', family: 'Inter' }, bodyFont: { size: 11, family: 'Inter' }, padding: 10, cornerRadius: 8, displayColors: false, callbacks: { title: (items) => `Date: ${items[0].label}`, label: (item) => { if (item.datasetIndex === 1) { return `Trend: ${item.formattedValue}`; } return `Students: ${item.formattedValue}`; } } } }, scales: { x: { grid: { display: false }, ticks: { font: { size: 9, weight: 'bold', family: 'Inter' }, color: '#94a3b8', maxRotation: 0, autoSkip: true, maxTicksLimit: 10 } }, y: { beginAtZero: true, grid: { color: '#f1f5f9', drawBorder: false }, ticks: { stepSize: 5, font: { size: 9, family: 'Inter' }, color: '#cbd5e1', padding: 10 }, border: { display: false } } }, layout: { padding: 0 } } }); } } }" class="flex flex-col h-full">

Recent attendance

@if($venues->count() > 1) @endif

Upcoming Renewals

View all →
@if(isset($upcomingRenewals) && $upcomingRenewals->count() > 0)
@foreach($upcomingRenewals as $member) @endforeach
@if($member->photo_url_thumbnail) @else @endif
{{ $member->name }}
{{ $member->reference_number ?? '#' . $member->id }}
{{ $member->renewal_date->format('d/m/Y') }}
@php $renewalDate = $member->renewal_date->copy()->startOfDay(); $today = now()->startOfDay(); $daysDiff = abs((int) $renewalDate->diffInDays($today)); // abs diff explicit // Determine status $isToday = $renewalDate->equalTo($today); $isOverdue = $renewalDate->lessThan($today); @endphp @if($isToday) Due Today @elseif($isOverdue) Overdue - by {{ $daysDiff }} {{ Str::plural('day', $daysDiff) }} @else {{-- Future dates --}} Due Soon - in {{ $daysDiff }} {{ Str::plural('day', $daysDiff) }} @endif
@else

All memberships up to date!

No renewals needed in the next 3 months.

@endif

New/Incomplete Member Profiles

@if(isset($incompleteMembers) && $incompleteMembers->count() > 0)
@foreach($incompleteMembers as $member) @endforeach
@if($member->photo_url_thumbnail) @else @endif
{{ $member->name }}
@if(!$member->reference_number && !$member->renewal_date) Missing reference number & renewal date @elseif(!$member->reference_number) Missing reference number @elseif(!$member->renewal_date) Missing renewal date @endif
Complete
@else

All profiles complete!

Every member has a reference & renewal date.

@endif

Active Members

@if(isset($genderSplit) && $genderSplit->count() > 0 && $genderSplit->sum('count') > 0)
@foreach($genderSplit as $gender) @if($gender['count'] > 0)
@if($gender['percentage'] >= 10) {{ strtoupper($gender['name']) }} / {{ $gender['percentage'] }}% @endif
@endif @endforeach
@else
No gender data available
@endif

Active Members' Current Ranks

@if(isset($rankCounts) && $rankCounts->count() > 0) @php $maxCount = $rankCounts->max('users_count'); @endphp
@foreach($rankCounts as $rank)
{{ $rank->users_count }}
{{ $rank->name }}
@endforeach
@else
No rank data available
@endif
@else

Welcome, {{ auth()->user()->name }}!

You are logged in as a {{ ucfirst(str_replace('_', ' ', auth()->user()->role)) }}.

@endif
@endsection