@extends('admin.layout.app')
@section('body')
@php
$n = fn($v) => is_null($v) ? 'N/A' : number_format($v);
$students = $stats['students'] ?? 0;
$teachers = $stats['teachers'] ?? 0;
$courses = $stats['courses'] ?? 0;
$enroll = $stats['enrollments'] ?? 0;
$user = auth()->user();
$canOpen = fn($permission) => $user?->hasRole('Super Admin') || $user?->can($permission);
$moduleVisible = fn($moduleKey) => collect((array) $moduleKey)->every(fn($key) => \App\Models\Finance\ModuleSetting::allows($key, $user));
$dashboardSectionVisible = fn($key) => \App\Support\VisibilitySettings::isDashboardSectionVisible($key);
$shortcutGroups = [
[
'label' => 'Add Student',
'icon' => 'fa-user-plus',
'route' => 'students.create',
'permission' => 'students.create',
'module' => 'student_management',
],
[
'label' => 'New Application',
'icon' => 'fa-file-circle-plus',
'route' => 'admin.admissions-lifecycle.index',
'permission' => 'admin.admissions-lifecycle.index',
'module' => 'admissions',
],
[
'label' => 'Academic Placement',
'icon' => 'fa-diagram-project',
'route' => 'admin.placement.index',
'permission' => 'admin.placement.index',
'module' => 'academic',
],
[
'label' => 'Take Attendance',
'icon' => 'fa-clipboard-check',
'route' => 'admin.attendance.index',
'permission' => 'admin.attendance.index',
'module' => 'academic',
],
[
'label' => 'Enter Results',
'icon' => 'fa-square-poll-vertical',
'route' => 'exam.index',
'permission' => 'exam.semesters.list',
'module' => 'exams',
],
[
'label' => 'Record Payment',
'icon' => 'fa-money-bill-wave',
'route' => 'admin.finance.module',
'params' => ['payments'],
'permission' => 'admin.finance.module',
'module' => ['finance', 'student_fees'],
],
[
'label' => 'Add Expense',
'icon' => 'fa-receipt',
'route' => 'admin.finance.module',
'params' => ['expenses'],
'permission' => 'admin.finance.module',
'module' => ['finance', 'expenses'],
],
[
'label' => 'Generate Report',
'icon' => 'fa-chart-line',
'route' => 'admin.report-center.index',
'permission' => 'admin.report-center.index',
'module' => 'report_center',
],
];
$shortcuts = collect($shortcutGroups)->filter(fn($item) => $canOpen($item['permission']) && $moduleVisible($item['module']));
@endphp
@if($dashboardSectionVisible('top_summary'))
{{ __('admin.lms_dashboard') }}
{{ now()->format('l, F j, Y') }}
@if($moduleVisible(['student_management', 'courses']))
{{ __('admin.today_enroll') }} {{ number_format($todayEnroll) }}
{{ __('admin.this_week') }} {{ number_format($weekEnroll) }}
@endif
@endif
@if($dashboardSectionVisible('quick_shortcuts') && $shortcuts->count())
Quick Shortcuts
Frequently used workflows shown according to your permissions.
{{ $shortcuts->count() }} available
@endif
@if($dashboardSectionVisible('kpi_cards'))
@if($moduleVisible('student_management'))
{{ __('admin.students') }}
{{ $n($students) }}
+2.5%
{{ __('admin.vs_last_month') }}
{{ __('admin.total_registered') }}
{{ __('admin.view_all') }}
@endif
@if($moduleVisible('teacher_management'))
{{ __('admin.teachers') }}
{{ $n($teachers) }}
+1.2%
{{ __('admin.vs_last_month') }}
{{ __('admin.active_instructors') }}
{{ __('admin.view_all') }}
@endif
@if($moduleVisible('courses'))
{{ __('admin.courses') }}
{{ $n($courses) }}
0.0%
{{ __('admin.vs_last_month') }}
{{ __('admin.active_programs') }}
@if($canOpen('courses.index') && $moduleVisible('courses'))
{{ __('admin.view_all') }}
@endif
@endif
@if($moduleVisible(['courses', 'student_management']))
{{ __('admin.enrollments') }}
{{ $n($enroll) }}
+5.3%
{{ __('admin.vs_last_month') }}
{{ __('admin.total_registrations') }}
@if($canOpen('course-enrollments.index') && $moduleVisible('courses'))
{{ __('admin.view_all') }}
@endif
@endif
@endif
@if($dashboardSectionVisible('performance_chart') || $dashboardSectionVisible('attendance_chart'))
@if($dashboardSectionVisible('performance_chart'))
{{ __('admin.performance_overview') }}
{{ __('admin.enrollments_payments_last_12_months') }}
{{ __('admin.12_month_window') }}
@endif
@if($dashboardSectionVisible('attendance_chart'))
{{ __('admin.attendance') }}
{{ __('admin.last_30_days') }}
{{ __('admin.live') }}
{{ __('admin.present') }}
{{ __('admin.absent') }}
{{ __('admin.late') }}
@endif
@endif
@if($dashboardSectionVisible('top_courses') && $moduleVisible('courses'))
{{ __('admin.top_courses') }}
{{ __('admin.by_enrollment_count') }}
@if($canOpen('courses.index') && $moduleVisible('courses'))
{{ __('admin.view_all_2') }}
@endif
@if($topCourses->count())
| {{ __('admin.course_title') }} | {{ __('admin.enrollments') }} | {{ __('admin.share') }} |
@foreach($topCourses as $c)
{{ $c->title }} |
{{ number_format($c->enrollments_count) }} |
{{ round(($c->enrollments_count / max($enroll,1)) * 100, 1) }}% |
@endforeach
@else
{{ __('admin.no_course_data_available') }}
@endif
@endif
@if($dashboardSectionVisible('recent_enrollments') && $moduleVisible(['courses', 'student_management']))
{{ __('admin.recent_enrollments') }}
{{ __('admin.latest_8_registrations') }}
@if($canOpen('course-enrollments.index') && $moduleVisible('courses'))
{{ __('admin.view_all_2') }}
@endif
@if($recentEnrollments->count())
| {{ __('admin.id') }} | {{ __('admin.course') }} | {{ __('admin.status') }} | {{ __('admin.date') }} |
@foreach($recentEnrollments as $e)
@php
$st = $e->status ?? 'active';
$badgeSoft = $st === 'active' ? 'bg-success bg-opacity-10 text-success' : ($st === 'dropped' ? 'bg-danger bg-opacity-10 text-danger' : 'bg-secondary bg-opacity-10 text-secondary');
@endphp
| #ENR-{{ $e->id }} |
{{ $e->course->title ?? 'Course #'.$e->course_id }} |
{{ ucfirst($st) }} |
{{ $e->created_at->format('M d, Y') }} |
@endforeach
@else
{{ __('admin.no_recent_enrollments') }}
@endif
@endif
@if($dashboardSectionVisible('update_note'))
Dashboard auto-refreshes every 5 minutes. Last update: {{ now()->format('h:i A') }}
@endif
@endsection
@section('script')
@endsection