feat: update student import and graduation workflows
This commit is contained in:
@@ -18,8 +18,10 @@ class StudentAchievementController extends Controller
|
||||
$search = trim((string) $request->get('search'));
|
||||
$academicYearId = $request->get('academic_year_id');
|
||||
$classId = $request->get('class_id');
|
||||
$level = trim((string) $request->get('level'));
|
||||
$category = trim((string) $request->get('category'));
|
||||
|
||||
$achievements = StudentAchievement::query()
|
||||
$achievementsQuery = StudentAchievement::query()
|
||||
->with(['student.academicYear', 'student.department', 'student.classRoom'])
|
||||
->when($search !== '', function ($query) use ($search) {
|
||||
$query->where(function ($subQuery) use ($search) {
|
||||
@@ -35,25 +37,67 @@ class StudentAchievementController extends Controller
|
||||
})
|
||||
->when($academicYearId, fn ($query) => $query->whereHas('student', fn ($studentQuery) => $studentQuery->where('academic_year_id', $academicYearId)))
|
||||
->when($classId, fn ($query) => $query->whereHas('student', fn ($studentQuery) => $studentQuery->where('class_id', $classId)))
|
||||
->when($level !== '', fn ($query) => $query->where('level', $level))
|
||||
->when($category !== '', fn ($query) => $query->where('category', $category));
|
||||
|
||||
$achievements = (clone $achievementsQuery)
|
||||
->latest('achievement_year')
|
||||
->latest('achievement_date')
|
||||
->latest('id')
|
||||
->paginate(15)
|
||||
->withQueryString();
|
||||
|
||||
$levelCounts = StudentAchievement::query()
|
||||
->selectRaw('COALESCE(level, ?) as level_label, COUNT(*) as total', ['Tanpa tingkat'])
|
||||
->groupBy('level')
|
||||
->orderByDesc('total')
|
||||
->pluck('total', 'level_label');
|
||||
|
||||
$withCertificateCount = StudentAchievement::query()->whereNotNull('certificate_file')->count();
|
||||
$withPhotoCount = StudentAchievement::query()->whereNotNull('activity_photo')->count();
|
||||
$thisYearCount = StudentAchievement::query()->where('achievement_year', now()->year)->count();
|
||||
|
||||
$recentAchievements = StudentAchievement::query()
|
||||
->with(['student:id,full_name'])
|
||||
->latest('achievement_date')
|
||||
->latest('achievement_year')
|
||||
->latest('id')
|
||||
->limit(3)
|
||||
->get();
|
||||
|
||||
$categoryOptions = StudentAchievement::query()
|
||||
->whereNotNull('category')
|
||||
->where('category', '!=', '')
|
||||
->distinct()
|
||||
->orderBy('category')
|
||||
->pluck('category', 'category');
|
||||
|
||||
return view('student-achievements.index', [
|
||||
'achievements' => $achievements,
|
||||
'search' => $search,
|
||||
'filters' => [
|
||||
'academic_year_id' => $academicYearId,
|
||||
'class_id' => $classId,
|
||||
'level' => $level,
|
||||
'category' => $category,
|
||||
],
|
||||
'academicYears' => AcademicYear::orderBy('name')->pluck('name', 'id'),
|
||||
'classes' => SchoolClass::orderBy('name')->pluck('name', 'id'),
|
||||
'categoryOptions' => $categoryOptions,
|
||||
'levelOptions' => $this->levelOptions(),
|
||||
'summary' => [
|
||||
'total' => StudentAchievement::count(),
|
||||
'filtered' => $achievements->total(),
|
||||
'students' => StudentAchievement::distinct('student_id')->count('student_id'),
|
||||
'latest_year' => StudentAchievement::max('achievement_year'),
|
||||
'top_level' => $levelCounts->keys()->first(),
|
||||
'top_level_total' => $levelCounts->first(),
|
||||
'with_certificate' => $withCertificateCount,
|
||||
'without_certificate' => max(StudentAchievement::count() - $withCertificateCount, 0),
|
||||
'with_photo' => $withPhotoCount,
|
||||
'this_year' => $thisYearCount,
|
||||
],
|
||||
'recentAchievements' => $recentAchievements,
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user