Add student achievements module and improve student admin workflows

This commit is contained in:
2026-04-13 06:50:37 +00:00
parent b29c591285
commit fb904f9389
21 changed files with 1111 additions and 180 deletions
@@ -209,6 +209,41 @@ class SchoolClassController extends Controller
return redirect()->route('classes.index')->with('success', 'Kelas berhasil dihapus.');
}
public function bulkDestroy(Request $request): RedirectResponse
{
$validated = $request->validate([
'class_ids' => ['required', 'array', 'min:1'],
'class_ids.*' => ['integer', 'exists:classes,id'],
], [
'class_ids.required' => 'Pilih minimal satu kelas untuk dihapus.',
]);
$classes = SchoolClass::withCount(['students', 'academicHistories'])
->whereIn('id', $validated['class_ids'])
->get();
$blocked = $classes->filter(fn (SchoolClass $class) => $class->students_count > 0 || $class->academic_histories_count > 0);
if ($blocked->isNotEmpty()) {
Alert::error('Tidak bisa dihapus', 'Sebagian kelas masih dipakai oleh siswa aktif atau histori akademik.');
return redirect()->route('classes.index')->withErrors([
'delete' => 'Beberapa kelas tidak bisa dihapus karena masih dipakai oleh data siswa atau histori akademik.',
]);
}
$deletedCount = 0;
foreach ($classes as $class) {
$class->delete();
$deletedCount++;
}
Alert::success('Berhasil', $deletedCount . ' kelas berhasil dihapus.');
return redirect()->route('classes.index')->with('success', $deletedCount . ' kelas berhasil dihapus.');
}
protected function nextLevel(?string $level): ?string
{
return match (strtoupper((string) $level)) {