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
+116 -35
View File
@@ -1,44 +1,109 @@
<x-master-page title="Detail Arsip Siswa Mutasi" description="Lihat ringkasan arsip siswa mutasi dan kelola surat pindah tanpa masuk ke modul siswa aktif.">
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4">
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/40 p-6 shadow-sm shadow-slate-200/50 ring-1 ring-white/70">
<div class="flex items-start justify-between gap-3">
<div>
<div class="text-sm font-medium text-slate-500">Status Arsip</div>
<div class="mt-3 text-lg font-bold text-slate-900">Siswa Mutasi</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-indigo-600 ring-1 ring-indigo-100 backdrop-blur-sm">
<i class="fa-solid fa-box-archive text-lg"></i>
</div>
</div>
</div>
<div class="rounded-3xl border border-sky-200 bg-gradient-to-br from-white via-sky-50/50 to-sky-100/60 p-6 shadow-sm shadow-sky-100/50 ring-1 ring-white/70">
<div class="flex items-start justify-between gap-3">
<div>
<div class="text-sm font-medium text-sky-700">Tanggal Pindah</div>
<div class="mt-3 text-lg font-bold text-sky-800">{{ $studentTransfer->transfer_date?->format('d M Y') ?: 'Belum diisi' }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-sky-600 ring-1 ring-sky-100 backdrop-blur-sm">
<i class="fa-solid fa-calendar-right text-lg"></i>
</div>
</div>
</div>
<div class="rounded-3xl border {{ $studentTransfer->transfer_letter_file_path ? 'border-emerald-200 bg-gradient-to-br from-white via-emerald-50/50 to-emerald-100/60' : 'border-amber-200 bg-gradient-to-br from-white via-amber-50/50 to-amber-100/60' }} p-6 shadow-sm {{ $studentTransfer->transfer_letter_file_path ? 'shadow-emerald-100/50' : 'shadow-amber-100/50' }} ring-1 ring-white/70">
<div class="flex items-start justify-between gap-3">
<div>
<div class="text-sm font-medium {{ $studentTransfer->transfer_letter_file_path ? 'text-emerald-700' : 'text-amber-700' }}">Surat Pindah</div>
<div class="mt-3 text-lg font-bold {{ $studentTransfer->transfer_letter_file_path ? 'text-emerald-800' : 'text-amber-800' }}">{{ $studentTransfer->transfer_letter_file_path ? 'Sudah tersedia' : 'Belum diupload' }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 {{ $studentTransfer->transfer_letter_file_path ? 'text-emerald-600 ring-1 ring-emerald-100' : 'text-amber-600 ring-1 ring-amber-100' }} backdrop-blur-sm">
<i class="fa-solid {{ $studentTransfer->transfer_letter_file_path ? 'fa-file-circle-check' : 'fa-file-circle-xmark' }} text-lg"></i>
</div>
</div>
</div>
<div class="rounded-3xl border border-fuchsia-200 bg-gradient-to-br from-white via-fuchsia-50/50 to-fuchsia-100/60 p-6 shadow-sm shadow-fuchsia-100/50 ring-1 ring-white/70">
<div class="flex items-start justify-between gap-3">
<div>
<div class="text-sm font-medium text-fuchsia-700">Kelas Terakhir</div>
<div class="mt-3 text-lg font-bold text-fuchsia-800">{{ $studentTransfer->classRoom?->name ?: '-' }}</div>
</div>
<div class="rounded-2xl bg-white/80 p-3 text-fuchsia-600 ring-1 ring-fuchsia-100 backdrop-blur-sm">
<i class="fa-solid fa-school text-lg"></i>
</div>
</div>
</div>
</div>
<div class="grid grid-cols-1 gap-6 xl:grid-cols-3">
<div class="xl:col-span-2 space-y-6">
<x-master-card title="Identitas Siswa" subtitle="Snapshot data terakhir saat siswa dipindahkan ke arsip mutasi.">
<div class="grid grid-cols-1 gap-5 md:grid-cols-2">
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Nama Lengkap</div>
<div class="mt-1 text-sm font-semibold text-slate-900">{{ $studentTransfer->full_name }}</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">Status Arsip</div>
<div class="mt-1"><span class="inline-flex rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700">Siswa Mutasi</span></div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Snapshot Identitas</div>
<div class="mt-1 text-sm font-semibold text-slate-800">Identitas dasar siswa saat masuk arsip mutasi</div>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">NIS</div>
<div class="mt-1 text-sm text-slate-700">{{ $studentTransfer->student_number ?: '-' }}</div>
</div>
<div class="grid grid-cols-1 gap-4 md:grid-cols-2">
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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-user"></i><span>Nama Lengkap</span></div>
<div class="mt-2 text-sm font-semibold text-slate-900">{{ $studentTransfer->full_name }}</div>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">NISN</div>
<div class="mt-1 text-sm text-slate-700">{{ $studentTransfer->nisn ?: '-' }}</div>
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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-badge-check"></i><span>Status Arsip</span></div>
<div class="mt-2"><span class="inline-flex items-center gap-2 rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700"><i class="fa-solid fa-right-left"></i><span>Siswa Mutasi</span></span></div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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-hashtag"></i><span>NIS</span></div>
<div class="mt-2 text-sm text-slate-700">{{ $studentTransfer->student_number ?: '-' }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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-fingerprint"></i><span>NISN</span></div>
<div class="mt-2 text-sm text-slate-700">{{ $studentTransfer->nisn ?: '-' }}</div>
</div>
</div>
</x-master-card>
<x-master-card title="Akademik Terakhir" subtitle="Data akademik terakhir sebelum status siswa menjadi mutasi.">
<div class="grid grid-cols-1 gap-5 md:grid-cols-2 xl:grid-cols-4">
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Tahun Angkatan</div>
<div class="mt-1 text-sm text-slate-700">{{ $studentTransfer->academicYear?->name ?: '-' }}</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">Program Keahlian</div>
<div class="mt-1 text-sm text-slate-700">{{ $studentTransfer->department?->name ?: '-' }}</div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Posisi Akademik Terakhir</div>
<div class="mt-1 text-sm font-semibold text-slate-800">Rombel dan relasi akademik sebelum siswa pindah sekolah</div>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Kelas Terakhir</div>
<div class="mt-1 text-sm text-slate-700">{{ $studentTransfer->classRoom?->name ?: '-' }}</div>
</div>
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4">
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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>Tahun Angkatan</span></div>
<div class="mt-2 text-sm text-slate-700">{{ $studentTransfer->academicYear?->name ?: '-' }}</div>
</div>
<div>
<div class="text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Tanggal Masuk</div>
<div class="mt-1 text-sm text-slate-700">{{ $studentTransfer->entry_date?->format('d-m-Y') ?: '-' }}</div>
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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-sitemap"></i><span>Program Keahlian</span></div>
<div class="mt-2 text-sm text-slate-700">{{ $studentTransfer->department?->name ?: '-' }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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-school"></i><span>Kelas Terakhir</span></div>
<div class="mt-2 text-sm text-slate-700">{{ $studentTransfer->classRoom?->name ?: '-' }}</div>
</div>
<div class="rounded-2xl border border-slate-200 bg-white px-4 py-4 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-door-open"></i><span>Tanggal Masuk</span></div>
<div class="mt-2 text-sm text-slate-700">{{ $studentTransfer->entry_date?->format('d-m-Y') ?: '-' }}</div>
</div>
</div>
</x-master-card>
@@ -48,20 +113,33 @@
<x-master-card title="Dokumen Surat Pindah" subtitle="Upload atau ganti surat pindah langsung dari modul arsip.">
<div class="space-y-4">
@if ($studentTransfer->transfer_letter_file_path)
<div class="rounded-2xl border border-emerald-200 bg-emerald-50 px-4 py-4">
<div class="text-sm font-semibold text-emerald-700">Surat pindah sudah tersedia</div>
<div class="mt-1 text-xs text-emerald-600">{{ $studentTransfer->transfer_letter_file_name }}</div>
<div class="mt-3">
<a href="{{ route('student-transfers.preview-letter', $studentTransfer) }}" class="inline-flex items-center rounded-xl border border-sky-200 px-3 py-2 text-xs font-semibold text-sky-700 transition hover:bg-sky-50">Preview Surat</a>
<div class="rounded-2xl border border-emerald-200 bg-gradient-to-r from-emerald-50 to-white px-4 py-4 shadow-sm shadow-emerald-100/40">
<div class="flex items-start gap-3">
<div class="flex h-10 w-10 items-center justify-center rounded-2xl bg-white text-emerald-600 shadow-sm ring-1 ring-emerald-100">
<i class="fa-solid fa-file-circle-check"></i>
</div>
<div>
<div class="text-sm font-semibold text-emerald-700">Surat pindah sudah tersedia</div>
<div class="mt-1 text-xs text-emerald-600">{{ $studentTransfer->transfer_letter_file_name }}</div>
<div class="mt-3">
<a href="{{ route('student-transfers.preview-letter', $studentTransfer) }}" class="inline-flex items-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-eye"></i>
<span>Preview Surat</span>
</a>
</div>
</div>
</div>
</div>
@else
<div class="rounded-2xl border border-amber-200 bg-amber-50 px-4 py-4 text-sm font-medium text-amber-700">
Surat pindah belum diupload.
<div class="rounded-2xl border border-amber-200 bg-gradient-to-r from-amber-50 to-white px-4 py-4 text-sm font-medium text-amber-700 shadow-sm shadow-amber-100/40">
<div class="flex items-center gap-3">
<i class="fa-solid fa-triangle-exclamation"></i>
<span>Surat pindah belum diupload.</span>
</div>
</div>
@endif
<form method="POST" action="{{ route('student-transfers.update', $studentTransfer) }}" enctype="multipart/form-data" class="space-y-4">
<form method="POST" action="{{ route('student-transfers.update', $studentTransfer) }}" enctype="multipart/form-data" class="space-y-4 rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/25 p-4 shadow-sm ring-1 ring-white/70">
@csrf
@method('PATCH')
@@ -70,13 +148,16 @@
<div>
<label for="transfer_letter" class="mb-2 block text-sm font-medium text-slate-700">Upload / Ganti Surat Pindah</label>
<input id="transfer_letter" name="transfer_letter" type="file" accept=".pdf,.jpg,.jpeg,.png" class="block w-full rounded-2xl border border-slate-200 bg-white px-4 py-3 text-sm text-slate-700 file:mr-4 file:rounded-xl file:border-0 file:bg-slate-100 file:px-4 file:py-2 file:text-sm file:font-semibold file:text-slate-700 hover:file:bg-slate-200">
<div class="flex min-h-[3rem] items-center rounded-2xl border border-slate-200 bg-white px-3 py-2 transition focus-within:border-indigo-300 focus-within:ring-4 focus-within:ring-indigo-100">
<input id="transfer_letter" name="transfer_letter" type="file" accept=".pdf,.jpg,.jpeg,.png" class="block w-full text-sm text-slate-700 file:mr-3 file:rounded-xl file:border-0 file:bg-slate-100 file:px-4 file:py-2.5 file:text-sm file:font-semibold file:text-slate-700 hover:file:bg-slate-200">
</div>
<p class="mt-2 text-xs text-slate-500">Format: PDF, JPG, JPEG, PNG. Maksimal 2 MB.</p>
<x-input-error :messages="$errors->get('transfer_letter')" class="mt-2" />
</div>
<button type="submit" class="inline-flex items-center rounded-2xl bg-indigo-600 px-5 py-3 text-sm font-semibold text-white shadow-lg shadow-indigo-200 transition hover:bg-indigo-700">
Simpan Arsip Mutasi
<button type="submit" class="inline-flex items-center gap-2 rounded-2xl bg-indigo-600 px-5 py-3 text-sm font-semibold text-white shadow-lg shadow-indigo-200 transition hover:bg-indigo-700">
<i class="fa-solid fa-floppy-disk"></i>
<span>Simpan Arsip Mutasi</span>
</button>
</form>
</div>