takeone/resources/views/admin/club/analytics.blade.php
2026-01-27 16:34:46 +03:00

208 lines
8.3 KiB
PHP

@extends('layouts.admin-club')
@section('club-admin-content')
<div>
<div class="d-flex justify-content-between align-items-center mb-4">
<div>
<h2 class="h3 fw-bold mb-1">Analytics</h2>
<p class="text-muted mb-0">Track your club's performance</p>
</div>
<div class="d-flex gap-2">
<select class="form-select" style="width: auto;">
<option value="7">Last 7 days</option>
<option value="30" selected>Last 30 days</option>
<option value="90">Last 90 days</option>
<option value="365">Last year</option>
</select>
<button class="btn btn-outline-primary">
<i class="bi bi-download me-2"></i>Export
</button>
</div>
</div>
<!-- Key Metrics -->
<div class="row g-3 mb-4">
<div class="col-6 col-lg-3">
<div class="card border-0 shadow-sm">
<div class="card-body">
<p class="text-muted small mb-1">New Members</p>
<div class="d-flex align-items-center gap-2">
<h4 class="fw-bold mb-0">{{ $analytics['new_members'] ?? 0 }}</h4>
<span class="badge bg-success-subtle text-success">
<i class="bi bi-arrow-up"></i> {{ $analytics['new_members_change'] ?? 0 }}%
</span>
</div>
</div>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="card border-0 shadow-sm">
<div class="card-body">
<p class="text-muted small mb-1">Retention Rate</p>
<div class="d-flex align-items-center gap-2">
<h4 class="fw-bold mb-0">{{ $analytics['retention_rate'] ?? 0 }}%</h4>
<span class="badge bg-success-subtle text-success">
<i class="bi bi-arrow-up"></i> {{ $analytics['retention_change'] ?? 0 }}%
</span>
</div>
</div>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="card border-0 shadow-sm">
<div class="card-body">
<p class="text-muted small mb-1">Avg. Revenue/Member</p>
<div class="d-flex align-items-center gap-2">
<h4 class="fw-bold mb-0">{{ $club->currency ?? 'BHD' }} {{ number_format($analytics['avg_revenue'] ?? 0, 2) }}</h4>
</div>
</div>
</div>
</div>
<div class="col-6 col-lg-3">
<div class="card border-0 shadow-sm">
<div class="card-body">
<p class="text-muted small mb-1">Check-ins</p>
<div class="d-flex align-items-center gap-2">
<h4 class="fw-bold mb-0">{{ $analytics['total_checkins'] ?? 0 }}</h4>
<span class="badge bg-info-subtle text-info">
<i class="bi bi-arrow-up"></i> {{ $analytics['checkins_change'] ?? 0 }}%
</span>
</div>
</div>
</div>
</div>
</div>
<div class="row g-4">
<!-- Membership Growth Chart -->
<div class="col-lg-8">
<div class="card border-0 shadow-sm h-100">
<div class="card-header bg-white border-0">
<h5 class="fw-semibold mb-0">Membership Growth</h5>
</div>
<div class="card-body">
<canvas id="membershipChart" height="250"></canvas>
</div>
</div>
</div>
<!-- Popular Packages -->
<div class="col-lg-4">
<div class="card border-0 shadow-sm h-100">
<div class="card-header bg-white border-0">
<h5 class="fw-semibold mb-0">Popular Packages</h5>
</div>
<div class="card-body">
@if(isset($popularPackages) && count($popularPackages) > 0)
@foreach($popularPackages as $package)
<div class="d-flex justify-content-between align-items-center mb-3">
<div>
<p class="fw-semibold mb-0">{{ $package->name }}</p>
<p class="text-muted small mb-0">{{ $package->subscriptions_count }} subscriptions</p>
</div>
<div class="text-end">
<p class="fw-bold text-primary mb-0">{{ $package->percentage ?? 0 }}%</p>
</div>
</div>
<div class="progress mb-3" style="height: 6px;">
<div class="progress-bar bg-primary" style="width: {{ $package->percentage ?? 0 }}%"></div>
</div>
@endforeach
@else
<div class="text-center py-4">
<p class="text-muted mb-0">No package data available</p>
</div>
@endif
</div>
</div>
</div>
<!-- Activity Breakdown -->
<div class="col-lg-6">
<div class="card border-0 shadow-sm">
<div class="card-header bg-white border-0">
<h5 class="fw-semibold mb-0">Activity Breakdown</h5>
</div>
<div class="card-body">
<canvas id="activityChart" height="200"></canvas>
</div>
</div>
</div>
<!-- Peak Hours -->
<div class="col-lg-6">
<div class="card border-0 shadow-sm">
<div class="card-header bg-white border-0">
<h5 class="fw-semibold mb-0">Peak Hours</h5>
</div>
<div class="card-body">
<canvas id="peakHoursChart" height="200"></canvas>
</div>
</div>
</div>
</div>
</div>
@push('scripts')
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Membership Growth Chart
new Chart(document.getElementById('membershipChart'), {
type: 'line',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
datasets: [{
label: 'Members',
data: @json($analytics['monthly_members'] ?? [0,0,0,0,0,0,0,0,0,0,0,0]),
borderColor: 'hsl(355, 84%, 44%)',
backgroundColor: 'hsla(355, 84%, 44%, 0.1)',
fill: true,
tension: 0.3
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: { legend: { display: false } }
}
});
// Activity Chart
new Chart(document.getElementById('activityChart'), {
type: 'doughnut',
data: {
labels: @json($analytics['activity_labels'] ?? ['No data']),
datasets: [{
data: @json($analytics['activity_data'] ?? [100]),
backgroundColor: ['#CE1126', '#3b82f6', '#22c55e', '#f59e0b', '#8b5cf6']
}]
},
options: {
responsive: true,
maintainAspectRatio: false
}
});
// Peak Hours Chart
new Chart(document.getElementById('peakHoursChart'), {
type: 'bar',
data: {
labels: ['6am', '8am', '10am', '12pm', '2pm', '4pm', '6pm', '8pm', '10pm'],
datasets: [{
label: 'Check-ins',
data: @json($analytics['hourly_checkins'] ?? [0,0,0,0,0,0,0,0,0]),
backgroundColor: 'hsl(355, 84%, 44%)'
}]
},
options: {
responsive: true,
maintainAspectRatio: false,
plugins: { legend: { display: false } }
}
});
});
</script>
@endpush
@endsection