feat: update student import and graduation workflows

This commit is contained in:
2026-04-30 00:04:52 +07:00
parent 189b076ab0
commit ac22f8b7c8
51 changed files with 4547 additions and 1287 deletions
+392 -89
View File
@@ -60,40 +60,77 @@
<div class="grid grid-cols-1 gap-6 xl:grid-cols-3">
<x-master-card title="Identitas Utama" subtitle="Informasi inti siswa.">
<div class="space-y-4 text-sm text-slate-600">
<div><span class="font-semibold text-slate-800">Nama:</span> {{ $student->full_name }}</div>
<div><span class="font-semibold text-slate-800">NIS:</span> {{ $student->student_number ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">NISN:</span> {{ $student->nisn ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Jenis Kelamin:</span> {{ $student->gender === 'L' ? 'Laki-laki' : 'Perempuan' }}</div>
<div><span class="font-semibold text-slate-800">TTL:</span> {{ $student->place_of_birth ?: '-' }}, {{ $student->date_of_birth?->format('d-m-Y') ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Agama:</span> {{ $student->religion ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Kewarganegaraan:</span> {{ $student->nationality ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Status:</span> {{ ucfirst($student->status) }}</div>
<div class="mb-4 flex items-center gap-3 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-indigo-100 text-indigo-600">
<i class="fa-solid fa-id-card text-lg"></i>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Kartu Identitas Siswa</div>
<div class="mt-1 text-sm font-semibold text-slate-800">Data dasar yang paling sering dipakai admin</div>
</div>
</div>
<div class="space-y-3 text-sm text-slate-600">
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-user mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Nama:</span> {{ $student->full_name }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-hashtag mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">NIS:</span> {{ $student->student_number ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-fingerprint mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">NISN:</span> {{ $student->nisn ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-id-card-clip mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">NIK:</span> {{ $student->nik ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-venus-mars mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Jenis Kelamin:</span> {{ $student->gender === 'L' ? 'Laki-laki' : 'Perempuan' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-cake-candles mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">TTL:</span> {{ $student->place_of_birth ?: '-' }}, {{ $student->date_of_birth?->format('d-m-Y') ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-mosque mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Agama:</span> {{ $student->religion ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-flag mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Kewarganegaraan:</span> {{ $student->nationality ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-badge-check mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Status:</span> {{ ucfirst($student->status) }}</div></div>
</div>
</x-master-card>
<x-master-card title="Akademik" subtitle="Relasi akademik siswa.">
<div class="space-y-4 text-sm text-slate-600">
<div><span class="font-semibold text-slate-800">Tahun Angkatan:</span> {{ $student->academicYear?->name ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Program Keahlian:</span> {{ $student->department?->name ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Kelas:</span> {{ $student->classRoom?->name ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Tanggal Masuk:</span> {{ $student->entry_date?->format('d-m-Y') ?: '-' }}</div>
<div class="mb-4 flex items-center gap-3 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-amber-100 text-amber-600">
<i class="fa-solid fa-graduation-cap text-lg"></i>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Snapshot Akademik</div>
<div class="mt-1 text-sm font-semibold text-slate-800">Posisi siswa pada struktur akademik saat ini</div>
</div>
</div>
<div class="space-y-3 text-sm text-slate-600">
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-calendar-days mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Tahun Angkatan:</span> {{ $student->academicYear?->name ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-sitemap mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Program Keahlian:</span> {{ $student->department?->name ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-school mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Kelas:</span> {{ $student->classRoom?->name ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-door-open mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Tanggal Masuk:</span> {{ $student->entry_date?->format('d-m-Y') ?: '-' }}</div></div>
</div>
</x-master-card>
<x-master-card title="Kontak & Alamat" subtitle="Informasi komunikasi siswa.">
<div class="space-y-4 text-sm text-slate-600">
<div><span class="font-semibold text-slate-800">No. HP:</span> {{ $student->phone_number ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Email:</span> {{ $student->email ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Alamat:</span> {{ $student->address ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Wilayah:</span> {{ collect([$student->village, $student->district, $student->city, $student->province])->filter()->join(', ') ?: '-' }}</div>
<div><span class="font-semibold text-slate-800">Kode Pos:</span> {{ $student->postal_code ?: '-' }}</div>
<div class="mb-4 flex items-center gap-3 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-emerald-100 text-emerald-600">
<i class="fa-solid fa-address-book text-lg"></i>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Kontak dan Domisili</div>
<div class="mt-1 text-sm font-semibold text-slate-800">Saluran komunikasi dan alamat tempat tinggal siswa</div>
</div>
</div>
<div class="space-y-3 text-sm text-slate-600">
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-phone mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">No. HP:</span> {{ $student->phone_number ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-envelope mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Email:</span> {{ $student->email ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-location-dot mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Alamat:</span> {{ $student->address ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-map-location-dot mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Wilayah:</span> {{ collect([$student->village, $student->district, $student->city, $student->province])->filter()->join(', ') ?: '-' }}</div></div>
<div class="flex items-start gap-3 rounded-2xl border border-slate-200 bg-white px-4 py-3 shadow-sm ring-1 ring-white/70"><i class="fa-solid fa-mailbox mt-0.5 text-slate-400"></i><div><span class="font-semibold text-slate-800">Kode Pos:</span> {{ $student->postal_code ?: '-' }}</div></div>
</div>
</x-master-card>
</div>
<div class="mt-6 grid grid-cols-1 gap-6 xl:grid-cols-2">
<x-master-card title="Histori Akademik Siswa" subtitle="Riwayat penempatan siswa per tahun angkatan, jurusan, dan kelas.">
<div class="mb-4 flex items-center gap-3 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-sky-100 text-sky-600">
<i class="fa-solid fa-timeline text-lg"></i>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Timeline Akademik</div>
<div class="mt-1 text-sm font-semibold text-slate-800">Riwayat perpindahan dan status akademik siswa dari waktu ke waktu</div>
</div>
</div>
@if ($student->academicHistories->isEmpty())
<div class="text-sm text-slate-500">Belum ada histori akademik untuk siswa ini.</div>
@else
@@ -131,46 +168,167 @@
</x-master-card>
<x-master-card title="Riwayat Prestasi Siswa" subtitle="Catatan prestasi akademik maupun non-akademik siswa.">
<div class="mb-4">
<a href="{{ route('student-achievements.create', ['student_id' => $student->id]) }}" class="inline-flex items-center rounded-2xl bg-amber-500 px-4 py-2.5 text-sm font-semibold text-white shadow-lg shadow-amber-200 transition hover:bg-amber-600">
Tambah Prestasi
</a>
<div class="mb-5 grid grid-cols-1 gap-4 xl:grid-cols-[1.2fr_0.8fr]">
<div class="grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4">
<div class="rounded-2xl border border-amber-200 bg-gradient-to-br from-white via-amber-50 to-amber-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-amber-600">Total Prestasi</div>
<div class="mt-2 text-2xl font-bold text-amber-800">{{ $student->achievements->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-amber-600 ring-1 ring-amber-100">
<i class="fa-solid fa-trophy"></i>
</div>
</div>
</div>
<div class="rounded-2xl border border-indigo-200 bg-gradient-to-br from-white via-indigo-50 to-indigo-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-indigo-600">Prestasi Terakhir</div>
<div class="mt-2 text-sm font-bold text-indigo-800">{{ $student->achievements->first()?->achievement_year ?: 'Belum ada' }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-indigo-600 ring-1 ring-indigo-100">
<i class="fa-solid fa-award"></i>
</div>
</div>
</div>
<div class="rounded-2xl border border-emerald-200 bg-gradient-to-br from-white via-emerald-50 to-emerald-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-emerald-600">Tingkat Tertinggi</div>
<div class="mt-2 text-sm font-bold text-emerald-800">{{ $student->achievements->pluck('level')->filter()->first() ?: 'Belum diisi' }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-emerald-600 ring-1 ring-emerald-100">
<i class="fa-solid fa-medal"></i>
</div>
</div>
</div>
<div class="rounded-2xl border border-sky-200 bg-gradient-to-br from-white via-sky-50 to-sky-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-sky-600">Ada Piagam</div>
<div class="mt-2 text-2xl font-bold text-sky-800">{{ $student->achievements->whereNotNull('certificate_file')->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-sky-600 ring-1 ring-sky-100">
<i class="fa-solid fa-file-circle-check"></i>
</div>
</div>
</div>
</div>
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/25 p-5 shadow-sm ring-1 ring-white/70">
<div class="flex items-start gap-3">
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-indigo-100 text-indigo-600">
<i class="fa-solid fa-chart-column"></i>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Ringkasan Prestasi</div>
<div class="mt-1 text-sm text-slate-600">Pantau cepat performa siswa, kelengkapan piagam, dan arah prestasi tanpa pindah ke modul utama.</div>
</div>
</div>
<div class="mt-4 flex flex-wrap gap-2 text-xs font-semibold">
<span class="rounded-full bg-amber-50 px-3 py-1.5 text-amber-700">{{ $student->achievements->whereNotNull('activity_photo')->count() }} prestasi ada foto</span>
<span class="rounded-full bg-indigo-50 px-3 py-1.5 text-indigo-700">{{ $student->achievements->pluck('category')->filter()->unique()->count() }} kategori tercatat</span>
</div>
<div class="mt-4">
<a href="{{ route('student-achievements.create', ['student_id' => $student->id]) }}" class="inline-flex items-center justify-center gap-2 rounded-2xl bg-amber-500 px-4 py-2.5 text-sm font-semibold text-white shadow-lg shadow-amber-200 transition hover:bg-amber-600">
<i class="fa-solid fa-plus"></i>
<span>Tambah Prestasi</span>
</a>
</div>
</div>
</div>
@if ($student->achievements->isEmpty())
<div class="text-sm text-slate-500">Belum ada data prestasi untuk siswa ini.</div>
<div class="rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-5 py-6 text-sm text-slate-500">
Belum ada data prestasi untuk siswa ini.
</div>
@else
<div class="space-y-4">
@foreach ($student->achievements as $achievement)
<div class="rounded-3xl border border-slate-200 bg-slate-50 p-5 text-sm text-slate-600 shadow-sm shadow-slate-200/40">
<div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
<div>
@php
$certificateUrl = $achievement->certificate_file ? asset('storage/' . $achievement->certificate_file) : null;
$certificateExtension = $achievement->certificate_file ? strtolower(pathinfo($achievement->certificate_file, PATHINFO_EXTENSION)) : null;
$certificateIsImage = $certificateExtension && in_array($certificateExtension, ['jpg', 'jpeg', 'png', 'webp']);
@endphp
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-amber-50/20 p-5 text-sm text-slate-600 shadow-sm shadow-slate-200/40 ring-1 ring-white/70 transition hover:-translate-y-0.5 hover:shadow-lg hover:shadow-slate-200/60">
<div class="flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between">
<div class="flex-1">
<div class="flex flex-wrap items-center gap-2">
<div class="font-semibold text-slate-800">{{ $achievement->achievement_name }}</div>
<div class="text-base font-semibold text-slate-800">{{ $achievement->achievement_name }}</div>
@if ($achievement->level)
<span class="rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700">{{ $achievement->level }}</span>
<span class="rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700">
<i class="fa-solid fa-layer-group mr-1"></i>{{ $achievement->level }}
</span>
@endif
@if ($achievement->rank)
<span class="rounded-full bg-indigo-100 px-3 py-1 text-xs font-semibold text-indigo-700">{{ $achievement->rank }}</span>
<span class="rounded-full bg-indigo-100 px-3 py-1 text-xs font-semibold text-indigo-700">
<i class="fa-solid fa-ranking-star mr-1"></i>{{ $achievement->rank }}
</span>
@endif
</div>
<div class="mt-2">Kategori: {{ $achievement->category ?: '-' }}</div>
<div>Penyelenggara: {{ $achievement->organizer ?: '-' }}</div>
<div>Tahun/Tanggal: {{ $achievement->achievement_year ?: '-' }} · {{ $achievement->achievement_date?->format('d-m-Y') ?: '-' }}</div>
<div class="mt-4 grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-3">
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500">
<i class="fa-solid fa-tag"></i>
<span>Kategori</span>
</div>
<div class="mt-2 font-semibold text-slate-800">{{ $achievement->category ?: '-' }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500">
<i class="fa-solid fa-building-columns"></i>
<span>Penyelenggara</span>
</div>
<div class="mt-2 font-semibold text-slate-800">{{ $achievement->organizer ?: '-' }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500">
<i class="fa-solid fa-calendar-days"></i>
<span>Waktu Prestasi</span>
</div>
<div class="mt-2 font-semibold text-slate-800">{{ $achievement->achievement_year ?: '-' }} · {{ $achievement->achievement_date?->format('d-m-Y') ?: '-' }}</div>
</div>
</div>
@if ($achievement->description)
<div class="mt-2 rounded-xl bg-white px-3 py-2 text-xs text-slate-500">
<div class="mt-4 rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 text-xs leading-6 text-slate-500 shadow-sm ring-1 ring-white/70">
<div class="mb-1 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500">
<i class="fa-solid fa-align-left"></i>
<span>Keterangan</span>
</div>
{{ $achievement->description }}
</div>
@endif
</div>
<div class="flex flex-wrap gap-2">
<div class="flex w-full flex-col gap-2 lg:w-auto lg:min-w-[220px]">
@if ($achievement->certificate_file)
<a href="{{ asset('storage/' . $achievement->certificate_file) }}" target="_blank" class="rounded-xl border border-indigo-200 px-3 py-2 text-xs font-semibold text-indigo-700 transition hover:bg-indigo-50">Piagam</a>
@if ($certificateIsImage)
<button type="button" data-lightbox-trigger data-lightbox-src="{{ $certificateUrl }}" data-lightbox-title="Piagam — {{ $achievement->achievement_name }}" class="inline-flex items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-3 py-2 text-xs font-semibold text-indigo-700 transition hover:bg-indigo-100">
<i class="fa-solid fa-file-image"></i>
<span>Lihat Piagam</span>
</button>
@else
<a href="{{ $certificateUrl }}" target="_blank" class="inline-flex items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-3 py-2 text-xs font-semibold text-indigo-700 transition hover:bg-indigo-100">
<i class="fa-solid fa-file-pdf"></i>
<span>Buka Piagam</span>
</a>
@endif
@endif
@if ($achievement->activity_photo)
<button type="button" data-lightbox-trigger data-lightbox-src="{{ asset('storage/' . $achievement->activity_photo) }}" data-lightbox-title="Foto Kegiatan — {{ $achievement->achievement_name }}" class="rounded-xl border border-emerald-200 px-3 py-2 text-xs font-semibold text-emerald-700 transition hover:bg-emerald-50">Foto</button>
<button type="button" data-lightbox-trigger data-lightbox-src="{{ asset('storage/' . $achievement->activity_photo) }}" data-lightbox-title="Foto Kegiatan — {{ $achievement->achievement_name }}" class="inline-flex items-center justify-center gap-2 rounded-xl border border-emerald-200 bg-emerald-50 px-3 py-2 text-xs font-semibold text-emerald-700 transition hover:bg-emerald-100">
<i class="fa-solid fa-camera"></i>
<span>Lihat Foto</span>
</button>
@endif
<a href="{{ route('student-achievements.edit', $achievement) }}" class="rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-100">Edit</a>
<a href="{{ route('student-achievements.edit', $achievement) }}" class="inline-flex items-center justify-center gap-2 rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-100">
<i class="fa-solid fa-pen"></i>
<span>Edit Prestasi</span>
</a>
</div>
</div>
</div>
@@ -182,32 +340,105 @@
<div class="mt-6 grid grid-cols-1 gap-6 xl:grid-cols-2">
<x-master-card title="Data Orang Tua / Wali" subtitle="Kelola data ayah, ibu, atau wali siswa.">
<div class="mb-4">
<a href="{{ route('students.parents.create', $student) }}" class="inline-flex items-center rounded-2xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white shadow-lg shadow-indigo-200 transition hover:bg-indigo-700">
Tambah Orang Tua / Wali
</a>
<div class="mb-5 grid grid-cols-1 gap-4 xl:grid-cols-[1.15fr_0.85fr]">
<div class="grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-3">
<div class="rounded-2xl border border-indigo-200 bg-gradient-to-br from-white via-indigo-50 to-indigo-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-indigo-600">Total Data</div>
<div class="mt-2 text-2xl font-bold text-indigo-800">{{ $student->parents->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-indigo-600 ring-1 ring-indigo-100">
<i class="fa-solid fa-people-roof"></i>
</div>
</div>
</div>
<div class="rounded-2xl border border-amber-200 bg-gradient-to-br from-white via-amber-50 to-amber-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-amber-600">Ayah / Ibu</div>
<div class="mt-2 text-2xl font-bold text-amber-800">{{ $student->parents->whereIn('relation_type', ['father', 'mother'])->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-amber-600 ring-1 ring-amber-100">
<i class="fa-solid fa-people-group"></i>
</div>
</div>
</div>
<div class="rounded-2xl border border-emerald-200 bg-gradient-to-br from-white via-emerald-50 to-emerald-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-emerald-600">No. HP Tersedia</div>
<div class="mt-2 text-2xl font-bold text-emerald-800">{{ $student->parents->filter(fn ($parent) => filled($parent->phone_number))->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-emerald-600 ring-1 ring-emerald-100">
<i class="fa-solid fa-phone-volume"></i>
</div>
</div>
</div>
</div>
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/25 p-5 shadow-sm ring-1 ring-white/70">
<div class="flex items-start gap-3">
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-indigo-100 text-indigo-600">
<i class="fa-solid fa-id-card-clip"></i>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Ringkasan Kontak Keluarga</div>
<div class="mt-1 text-sm text-slate-600">Pastikan relasi keluarga inti dan kontak penting siswa sudah tersimpan lengkap.</div>
</div>
</div>
<div class="mt-4 flex flex-wrap gap-2 text-xs font-semibold">
<span class="rounded-full bg-amber-50 px-3 py-1.5 text-amber-700">{{ $student->parents->where('relation_type', 'guardian')->count() }} data wali</span>
<span class="rounded-full bg-sky-50 px-3 py-1.5 text-sky-700">{{ $student->parents->filter(fn ($parent) => filled($parent->occupation))->count() }} pekerjaan terisi</span>
</div>
<div class="mt-4">
<a href="{{ route('students.parents.create', $student) }}" class="inline-flex items-center gap-2 rounded-2xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white shadow-lg shadow-indigo-200 transition hover:bg-indigo-700">
<i class="fa-solid fa-plus"></i>
<span>Tambah Orang Tua / Wali</span>
</a>
</div>
</div>
</div>
@if ($student->parents->isEmpty())
<div class="text-sm text-slate-500">Belum ada data orang tua/wali untuk siswa ini.</div>
<div class="rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-5 py-6 text-sm text-slate-500">Belum ada data orang tua/wali untuk siswa ini.</div>
@else
<div class="space-y-4">
@foreach ($student->parents as $parent)
<div class="rounded-2xl border border-slate-200 bg-slate-50 p-4 text-sm text-slate-600">
<div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
<div>
<div class="font-semibold text-slate-800">{{ ucfirst($parent->relation_type === 'father' ? 'Ayah' : ($parent->relation_type === 'mother' ? 'Ibu' : 'Wali')) }} - {{ $parent->name }}</div>
<div class="mt-1">Pekerjaan: {{ $parent->occupation ?: '-' }}</div>
<div>No. HP: {{ $parent->phone_number ?: '-' }}</div>
<div>Pendidikan: {{ $parent->education ?: '-' }}</div>
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/20 p-5 text-sm text-slate-600 shadow-sm shadow-slate-200/40 ring-1 ring-white/70 transition hover:-translate-y-0.5 hover:shadow-lg hover:shadow-slate-200/60">
<div class="flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between">
<div class="flex-1">
<div class="flex flex-wrap items-center gap-2">
<div class="text-base font-semibold text-slate-800">{{ ucfirst($parent->relation_type === 'father' ? 'Ayah' : ($parent->relation_type === 'mother' ? 'Ibu' : 'Wali')) }} - {{ $parent->name }}</div>
<span class="rounded-full bg-indigo-100 px-3 py-1 text-xs font-semibold text-indigo-700">
<i class="fa-solid fa-user-tag mr-1"></i>{{ ucfirst($parent->relation_type === 'father' ? 'Ayah' : ($parent->relation_type === 'mother' ? 'Ibu' : 'Wali')) }}
</span>
</div>
<div class="mt-4 grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-3">
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-briefcase"></i><span>Pekerjaan</span></div>
<div class="mt-2 font-semibold text-slate-800">{{ $parent->occupation ?: '-' }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-phone"></i><span>No. HP</span></div>
<div class="mt-2 font-semibold text-slate-800">{{ $parent->phone_number ?: '-' }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-graduation-cap"></i><span>Pendidikan</span></div>
<div class="mt-2 font-semibold text-slate-800">{{ $parent->education ?: '-' }}</div>
</div>
</div>
</div>
<div class="flex flex-wrap gap-2">
<a href="{{ route('students.parents.edit', [$student, $parent]) }}" class="rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-100">Edit</a>
<div class="flex w-full flex-col gap-2 lg:w-auto lg:min-w-[220px]">
<a href="{{ route('students.parents.edit', [$student, $parent]) }}" class="inline-flex items-center justify-center gap-2 rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-100"><i class="fa-solid fa-pen"></i><span>Edit</span></a>
@if ($isAdmin)
<form action="{{ route('students.parents.destroy', [$student, $parent]) }}" method="POST" class="delete-form" data-entity="data {{ $parent->name }}">
@csrf
@method('DELETE')
<button type="submit" class="rounded-xl border border-rose-200 px-3 py-2 text-xs font-semibold text-rose-600 transition hover:bg-rose-50">Hapus</button>
<button type="submit" class="inline-flex w-full items-center justify-center gap-2 rounded-xl border border-rose-200 px-3 py-2 text-xs font-semibold text-rose-600 transition hover:bg-rose-50"><i class="fa-solid fa-trash"></i><span>Hapus</span></button>
</form>
@endif
</div>
@@ -219,14 +450,73 @@
</x-master-card>
<x-master-card title="Dokumen Siswa" subtitle="Kelola file dan status verifikasi dokumen siswa.">
<div class="mb-4">
<a href="{{ route('students.documents.create', $student) }}" class="inline-flex items-center rounded-2xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white shadow-lg shadow-indigo-200 transition hover:bg-indigo-700">
Tambah Dokumen
</a>
<div class="mb-5 grid grid-cols-1 gap-4 xl:grid-cols-[1.15fr_0.85fr]">
<div class="grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4">
<div class="rounded-2xl border border-indigo-200 bg-gradient-to-br from-white via-indigo-50 to-indigo-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-indigo-600">Total Dokumen</div>
<div class="mt-2 text-2xl font-bold text-indigo-800">{{ $student->documents->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-indigo-600 ring-1 ring-indigo-100"><i class="fa-solid fa-folder-open"></i></div>
</div>
</div>
<div class="rounded-2xl border border-emerald-200 bg-gradient-to-br from-white via-emerald-50 to-emerald-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-emerald-600">Valid</div>
<div class="mt-2 text-2xl font-bold text-emerald-800">{{ $student->documents->where('verification_status', 'valid')->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-emerald-600 ring-1 ring-emerald-100"><i class="fa-solid fa-circle-check"></i></div>
</div>
</div>
<div class="rounded-2xl border border-amber-200 bg-gradient-to-br from-white via-amber-50 to-amber-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-amber-600">Perlu Revisi</div>
<div class="mt-2 text-2xl font-bold text-amber-800">{{ $student->documents->where('verification_status', 'revision')->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-amber-600 ring-1 ring-amber-100"><i class="fa-solid fa-rotate-left"></i></div>
</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-slate-100/70 px-4 py-4 shadow-sm ring-1 ring-white/70">
<div class="flex items-center justify-between gap-3">
<div>
<div class="text-[11px] font-semibold uppercase tracking-[0.16em] text-slate-500">Pending</div>
<div class="mt-2 text-2xl font-bold text-slate-800">{{ $student->documents->where('verification_status', 'pending')->count() }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-slate-600 ring-1 ring-slate-200"><i class="fa-solid fa-hourglass-half"></i></div>
</div>
</div>
</div>
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/25 p-5 shadow-sm ring-1 ring-white/70">
<div class="flex items-start gap-3">
<div class="flex h-11 w-11 items-center justify-center rounded-2xl bg-indigo-100 text-indigo-600">
<i class="fa-solid fa-file-shield"></i>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Ringkasan Verifikasi</div>
<div class="mt-1 text-sm text-slate-600">Pantau kualitas dokumen siswa dan percepat tindakan verifikasi dari satu tempat.</div>
</div>
</div>
<div class="mt-4 flex flex-wrap gap-2 text-xs font-semibold">
<span class="rounded-full bg-rose-50 px-3 py-1.5 text-rose-700">{{ $student->documents->where('verification_status', 'invalid')->count() }} invalid</span>
<span class="rounded-full bg-sky-50 px-3 py-1.5 text-sky-700">{{ $student->documents->filter(fn ($document) => filled($document->verified_by))->count() }} sudah diverifikasi</span>
</div>
<div class="mt-4">
<a href="{{ route('students.documents.create', $student) }}" class="inline-flex items-center gap-2 rounded-2xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white shadow-lg shadow-indigo-200 transition hover:bg-indigo-700">
<i class="fa-solid fa-plus"></i>
<span>Tambah Dokumen</span>
</a>
</div>
</div>
</div>
@if ($student->documents->isEmpty())
<div class="text-sm text-slate-500">Belum ada dokumen siswa yang diunggah.</div>
<div class="rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-5 py-6 text-sm text-slate-500">Belum ada dokumen siswa yang diunggah.</div>
@else
<div class="space-y-4">
@foreach ($student->documents as $document)
@@ -238,63 +528,76 @@
'revision' => 'bg-amber-100 text-amber-700',
];
@endphp
<div class="rounded-3xl border border-slate-200 bg-slate-50 p-5 text-sm text-slate-600 shadow-sm shadow-slate-200/40">
<div class="flex flex-col gap-3 md:flex-row md:items-start md:justify-between">
<div>
<div class="font-semibold text-slate-800">{{ $document->documentType?->name ?: '-' }}</div>
<div class="mt-1">File: {{ $document->file_name }}</div>
<div>Format: {{ strtoupper($document->file_extension ?: '-') }}</div>
<div>Ukuran: {{ $document->file_size ? number_format($document->file_size / 1024, 1) . ' KB' : '-' }}</div>
@if ($document->verifiedBy)
<div>Diverifikasi oleh: {{ $document->verifiedBy->name }}</div>
@endif
<div class="mt-2 flex flex-wrap gap-2">
<span class="rounded-full px-3 py-1 text-xs font-semibold {{ $verificationMap[$document->verification_status] ?? 'bg-slate-100 text-slate-600' }}">
{{ ucfirst($document->verification_status) }}
</span>
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/20 p-5 text-sm text-slate-600 shadow-sm shadow-slate-200/40 ring-1 ring-white/70 transition hover:-translate-y-0.5 hover:shadow-lg hover:shadow-slate-200/60">
<div class="flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between">
<div class="flex-1">
<div class="flex flex-wrap items-center gap-2">
<div class="text-base font-semibold text-slate-800">{{ $document->documentType?->name ?: '-' }}</div>
<span class="rounded-full px-3 py-1 text-xs font-semibold {{ $verificationMap[$document->verification_status] ?? 'bg-slate-100 text-slate-600' }}">{{ ucfirst($document->verification_status) }}</span>
@if ($document->verified_at)
<span class="rounded-full bg-slate-100 px-3 py-1 text-xs font-semibold text-slate-600">
Diverifikasi {{ $document->verified_at->format('d-m-Y H:i') }}
</span>
<span class="rounded-full bg-slate-100 px-3 py-1 text-xs font-semibold text-slate-600">Diverifikasi {{ $document->verified_at->format('d-m-Y H:i') }}</span>
@endif
</div>
<div class="mt-4 grid grid-cols-1 gap-3 md:grid-cols-2 xl:grid-cols-3">
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-file-signature"></i><span>Nama File</span></div>
<div class="mt-2 break-words font-semibold text-slate-800">{{ $document->file_name }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-file-code"></i><span>Format</span></div>
<div class="mt-2 font-semibold text-slate-800">{{ strtoupper($document->file_extension ?: '-') }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-weight-scale"></i><span>Ukuran</span></div>
<div class="mt-2 font-semibold text-slate-800">{{ $document->file_size ? number_format($document->file_size / 1024, 1) . ' KB' : '-' }}</div>
</div>
@if ($document->verifiedBy)
<div class="rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 shadow-sm ring-1 ring-white/70 md:col-span-2 xl:col-span-3">
<div class="flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-user-check"></i><span>Diverifikasi Oleh</span></div>
<div class="mt-2 font-semibold text-slate-800">{{ $document->verifiedBy->name }}</div>
</div>
@endif
</div>
@if ($document->verification_note)
<div class="mt-2 rounded-xl bg-white px-3 py-2 text-xs text-slate-500">
Catatan: {{ $document->verification_note }}
<div class="mt-4 rounded-2xl border border-slate-200 bg-white/80 px-4 py-3 text-xs leading-6 text-slate-500 shadow-sm ring-1 ring-white/70">
<div class="mb-1 flex items-center gap-2 text-[11px] font-semibold uppercase tracking-[0.14em] text-slate-500"><i class="fa-solid fa-align-left"></i><span>Catatan Verifikasi</span></div>
{{ $document->verification_note }}
</div>
@endif
</div>
<div class="flex flex-wrap gap-2">
<a href="{{ route('students.documents.preview', $document) }}" class="rounded-xl border border-indigo-200 px-3 py-2 text-xs font-semibold text-indigo-700 transition hover:bg-indigo-50">Lihat</a>
<a href="{{ route('students.documents.download', $document) }}" class="rounded-xl border border-sky-200 px-3 py-2 text-xs font-semibold text-sky-700 transition hover:bg-sky-50">Download</a>
<a href="{{ route('students.documents.edit', [$student, $document]) }}" class="rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-100">Edit</a>
<div class="flex w-full flex-col gap-2 lg:w-auto lg:min-w-[220px]">
<a href="{{ route('students.documents.preview', $document) }}" class="inline-flex items-center justify-center gap-2 rounded-xl border border-indigo-200 bg-indigo-50 px-3 py-2 text-xs font-semibold text-indigo-700 transition hover:bg-indigo-100"><i class="fa-solid fa-eye"></i><span>Lihat</span></a>
<a href="{{ route('students.documents.download', $document) }}" class="inline-flex items-center justify-center gap-2 rounded-xl border border-sky-200 bg-sky-50 px-3 py-2 text-xs font-semibold text-sky-700 transition hover:bg-sky-100"><i class="fa-solid fa-download"></i><span>Download</span></a>
<a href="{{ route('students.documents.edit', [$student, $document]) }}" class="inline-flex items-center justify-center gap-2 rounded-xl border border-slate-200 px-3 py-2 text-xs font-semibold text-slate-700 transition hover:bg-slate-100"><i class="fa-solid fa-pen"></i><span>Edit</span></a>
@if ($isAdmin)
<form action="{{ route('students.documents.quick-verify', [$student, $document]) }}" method="POST" class="inline-flex gap-2">
<form action="{{ route('students.documents.quick-verify', [$student, $document]) }}" method="POST">
@csrf
<input type="hidden" name="verification_status" value="valid">
<input type="hidden" name="verification_note" value="Dokumen dinyatakan valid.">
<button type="submit" @disabled($document->verification_status === 'valid') class="rounded-xl border border-emerald-200 px-3 py-2 text-xs font-semibold text-emerald-700 transition hover:bg-emerald-50 disabled:cursor-not-allowed disabled:bg-emerald-100 disabled:text-emerald-500">Valid</button>
<button type="submit" @disabled($document->verification_status === 'valid') class="inline-flex w-full items-center justify-center gap-2 rounded-xl border border-emerald-200 px-3 py-2 text-xs font-semibold text-emerald-700 transition hover:bg-emerald-50 disabled:cursor-not-allowed disabled:bg-emerald-100 disabled:text-emerald-500"><i class="fa-solid fa-circle-check"></i><span>Valid</span></button>
</form>
<form action="{{ route('students.documents.quick-verify', [$student, $document]) }}" method="POST" class="inline-flex gap-2">
<form action="{{ route('students.documents.quick-verify', [$student, $document]) }}" method="POST">
@csrf
<input type="hidden" name="verification_status" value="revision">
<input type="hidden" name="verification_note" value="Dokumen perlu revisi.">
<button type="submit" @disabled($document->verification_status === 'revision') class="rounded-xl border border-amber-200 px-3 py-2 text-xs font-semibold text-amber-700 transition hover:bg-amber-50 disabled:cursor-not-allowed disabled:bg-amber-100 disabled:text-amber-500">Revisi</button>
<button type="submit" @disabled($document->verification_status === 'revision') class="inline-flex w-full items-center justify-center gap-2 rounded-xl border border-amber-200 px-3 py-2 text-xs font-semibold text-amber-700 transition hover:bg-amber-50 disabled:cursor-not-allowed disabled:bg-amber-100 disabled:text-amber-500"><i class="fa-solid fa-rotate-left"></i><span>Revisi</span></button>
</form>
<form action="{{ route('students.documents.quick-verify', [$student, $document]) }}" method="POST" class="inline-flex gap-2">
<form action="{{ route('students.documents.quick-verify', [$student, $document]) }}" method="POST">
@csrf
<input type="hidden" name="verification_status" value="invalid">
<input type="hidden" name="verification_note" value="Dokumen dinyatakan tidak valid.">
<button type="submit" @disabled($document->verification_status === 'invalid') class="rounded-xl border border-rose-200 px-3 py-2 text-xs font-semibold text-rose-700 transition hover:bg-rose-50 disabled:cursor-not-allowed disabled:bg-rose-100 disabled:text-rose-500">Invalid</button>
<button type="submit" @disabled($document->verification_status === 'invalid') class="inline-flex w-full items-center justify-center gap-2 rounded-xl border border-rose-200 px-3 py-2 text-xs font-semibold text-rose-700 transition hover:bg-rose-50 disabled:cursor-not-allowed disabled:bg-rose-100 disabled:text-rose-500"><i class="fa-solid fa-circle-xmark"></i><span>Invalid</span></button>
</form>
<form action="{{ route('students.documents.destroy', [$student, $document]) }}" method="POST" class="delete-form" data-entity="dokumen {{ $document->file_name }}">
@csrf
@method('DELETE')
<button type="submit" class="rounded-xl border border-rose-200 px-3 py-2 text-xs font-semibold text-rose-600 transition hover:bg-rose-50">Hapus</button>
<button type="submit" class="inline-flex w-full items-center justify-center gap-2 rounded-xl border border-rose-200 px-3 py-2 text-xs font-semibold text-rose-600 transition hover:bg-rose-50"><i class="fa-solid fa-trash"></i><span>Hapus</span></button>
</form>
@endif
</div>