213 lines
16 KiB
PHP
213 lines
16 KiB
PHP
<x-master-page title="Data Siswa Mutasi" description="Data siswa yang dipindahkan ke tabel arsip siswa mutasi saat statusnya diubah menjadi Pindah ke sekolah lain.">
|
|
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-5">
|
|
<div class="group 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 transition hover:-translate-y-0.5 hover:shadow-lg hover:shadow-slate-200/70">
|
|
<div class="flex items-start justify-between gap-3">
|
|
<div>
|
|
<div class="text-sm font-medium text-slate-500">Total Arsip Mutasi</div>
|
|
<div class="mt-3 text-3xl font-bold text-slate-900">{{ $summary['total'] }}</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-right-left text-lg"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="group rounded-3xl border border-emerald-200 bg-gradient-to-br from-white via-emerald-50/50 to-emerald-100/60 p-6 shadow-sm shadow-emerald-100/50 ring-1 ring-white/70 transition hover:-translate-y-0.5 hover:shadow-lg hover:shadow-emerald-200/60">
|
|
<div class="flex items-start justify-between gap-3">
|
|
<div>
|
|
<div class="text-sm font-medium text-emerald-700">Sudah Ada Surat</div>
|
|
<div class="mt-3 text-3xl font-bold text-emerald-800">{{ $summary['with_letter'] }}</div>
|
|
</div>
|
|
<div class="rounded-2xl bg-white/80 p-3 text-emerald-600 ring-1 ring-emerald-100 backdrop-blur-sm">
|
|
<i class="fa-solid fa-file-circle-check text-lg"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="group rounded-3xl border {{ $summary['without_letter'] > 0 ? 'border-amber-200 bg-gradient-to-br from-white via-amber-50/50 to-amber-100/60' : 'border-sky-200 bg-gradient-to-br from-white via-sky-50/50 to-sky-100/60' }} p-6 shadow-sm {{ $summary['without_letter'] > 0 ? 'shadow-amber-100/50' : 'shadow-sky-100/50' }} ring-1 ring-white/70 transition hover:-translate-y-0.5 hover:shadow-lg {{ $summary['without_letter'] > 0 ? 'hover:shadow-amber-200/60' : 'hover:shadow-sky-200/60' }}">
|
|
<div class="flex items-start justify-between gap-3">
|
|
<div>
|
|
<div class="text-sm font-medium {{ $summary['without_letter'] > 0 ? 'text-amber-700' : 'text-sky-700' }}">Belum Ada Surat</div>
|
|
<div class="mt-3 text-3xl font-bold {{ $summary['without_letter'] > 0 ? 'text-amber-800' : 'text-sky-800' }}">{{ $summary['without_letter'] }}</div>
|
|
</div>
|
|
<div class="rounded-2xl bg-white/80 p-3 {{ $summary['without_letter'] > 0 ? 'text-amber-600 ring-1 ring-amber-100' : 'text-sky-600 ring-1 ring-sky-100' }} backdrop-blur-sm">
|
|
<i class="fa-solid {{ $summary['without_letter'] > 0 ? 'fa-file-circle-xmark' : 'fa-folder-open' }} text-lg"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="group 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 transition hover:-translate-y-0.5 hover:shadow-lg hover:shadow-fuchsia-200/60">
|
|
<div class="flex items-start justify-between gap-3">
|
|
<div>
|
|
<div class="text-sm font-medium text-fuchsia-700">Mutasi Tahun Ini</div>
|
|
<div class="mt-3 text-3xl font-bold text-fuchsia-800">{{ $summary['this_year'] }}</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-calendar-check text-lg"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="group rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-slate-100/70 p-6 shadow-sm shadow-slate-200/50 ring-1 ring-white/70 transition hover:-translate-y-0.5 hover:shadow-lg hover:shadow-slate-200/70">
|
|
<div class="flex items-start justify-between gap-3">
|
|
<div>
|
|
<div class="text-sm font-medium text-slate-500">Hasil Filter</div>
|
|
<div class="mt-3 text-3xl font-bold text-slate-900">{{ $summary['filtered'] }}</div>
|
|
<div class="mt-2 text-xs text-slate-500">{{ $summary['latest_transfer_date'] ? 'Update terakhir ' . \Illuminate\Support\Carbon::parse($summary['latest_transfer_date'])->format('d M Y') : 'Belum ada tanggal mutasi' }}</div>
|
|
</div>
|
|
<div class="rounded-2xl bg-white/80 p-3 text-slate-600 ring-1 ring-slate-200 backdrop-blur-sm">
|
|
<i class="fa-solid fa-filter text-lg"></i>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="grid grid-cols-1 gap-6 xl:grid-cols-[1.15fr_0.85fr]">
|
|
<x-master-card title="Filter Data Siswa Mutasi" subtitle="Cari data siswa mutasi berdasarkan identitas dan akademik terakhir.">
|
|
<div class="rounded-3xl border border-slate-200 bg-gradient-to-br from-white via-slate-50 to-indigo-50/30 p-4 shadow-sm ring-1 ring-white/70">
|
|
<form method="GET" action="{{ route('student-transfers.index') }}" class="grid grid-cols-1 gap-4 md:grid-cols-2 xl:grid-cols-4">
|
|
<x-form-input name="search" label="Pencarian" :value="$search" placeholder="Nama / NIS / NISN" />
|
|
<x-form-select name="academic_year_id" label="Tahun Angkatan" :options="$academicYears->all()" :value="$filters['academic_year_id']" />
|
|
<x-form-select name="department_id" label="Program Keahlian" :options="$departments->all()" :value="$filters['department_id']" />
|
|
<x-form-select name="class_id" label="Kelas Terakhir" :options="$classes->all()" :value="$filters['class_id']" />
|
|
|
|
<div class="flex flex-wrap items-end gap-3 md:col-span-2 xl:col-span-4">
|
|
<button type="submit" class="inline-flex items-center gap-2 rounded-2xl bg-slate-900 px-5 py-3 text-sm font-semibold text-white transition hover:bg-slate-800">
|
|
<i class="fa-solid fa-magnifying-glass"></i>
|
|
<span>Cari</span>
|
|
</button>
|
|
<a href="{{ route('student-transfers.index') }}" class="inline-flex items-center gap-2 rounded-2xl border border-slate-200 bg-white px-5 py-3 text-sm font-semibold text-slate-700 transition hover:bg-slate-50">
|
|
<i class="fa-solid fa-rotate-left"></i>
|
|
<span>Reset</span>
|
|
</a>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</x-master-card>
|
|
|
|
<x-master-card title="Aktivitas Terbaru" subtitle="Tiga arsip mutasi terbaru yang masuk ke sistem.">
|
|
@if ($recentTransfers->isEmpty())
|
|
<div class="rounded-2xl border border-dashed border-slate-200 bg-slate-50 px-4 py-6 text-sm text-slate-500">
|
|
Belum ada arsip mutasi terbaru untuk ditampilkan.
|
|
</div>
|
|
@else
|
|
<div class="space-y-3">
|
|
@foreach ($recentTransfers as $recentTransfer)
|
|
<div class="rounded-2xl border border-slate-200 bg-slate-50/80 px-4 py-4 shadow-sm ring-1 ring-white/70">
|
|
<div class="flex items-start justify-between gap-3">
|
|
<div>
|
|
<div class="text-sm font-semibold text-slate-800">{{ $recentTransfer->full_name }}</div>
|
|
<div class="mt-1 text-xs text-slate-500">{{ $recentTransfer->department?->name ?: '-' }} · {{ $recentTransfer->classRoom?->name ?: '-' }}</div>
|
|
</div>
|
|
<span class="rounded-full bg-white px-3 py-1 text-[11px] font-semibold text-slate-600 ring-1 ring-slate-200">
|
|
{{ $recentTransfer->transfer_date?->format('d M Y') ?: 'Tanggal belum diisi' }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
@endforeach
|
|
</div>
|
|
@endif
|
|
</x-master-card>
|
|
</div>
|
|
|
|
<div class="overflow-hidden rounded-3xl border border-slate-200 bg-white shadow-sm shadow-slate-200/50 ring-1 ring-white/70">
|
|
<div class="border-b border-slate-200 bg-gradient-to-r from-white via-slate-50 to-indigo-50/30 px-6 py-5">
|
|
<div class="flex flex-col gap-2 lg:flex-row lg:items-center lg:justify-between">
|
|
<div>
|
|
<div class="text-lg font-semibold text-slate-800">Daftar Siswa Mutasi</div>
|
|
<div class="mt-1 text-sm text-slate-500">Arsip ini terisi otomatis saat status siswa diubah menjadi pindah sekolah.</div>
|
|
</div>
|
|
<div class="inline-flex items-center gap-2 rounded-full bg-slate-900 px-3 py-1.5 text-[11px] font-semibold uppercase tracking-[0.16em] text-white shadow-sm">
|
|
<i class="fa-solid fa-box-archive"></i>
|
|
{{ $studentTransfers->total() }} data terfilter
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="overflow-x-auto">
|
|
<table class="min-w-full divide-y divide-slate-200">
|
|
<thead class="bg-slate-50">
|
|
<tr>
|
|
<th class="px-6 py-4 text-left text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Siswa</th>
|
|
<th class="px-6 py-4 text-left text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Akademik Terakhir</th>
|
|
<th class="px-6 py-4 text-left text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Tanggal Pindah</th>
|
|
<th class="px-6 py-4 text-left text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Surat Pindah Sekolah</th>
|
|
<th class="px-6 py-4 text-left text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Catatan</th>
|
|
<th class="px-6 py-4 text-left text-xs font-semibold uppercase tracking-[0.16em] text-slate-500">Aksi</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody class="divide-y divide-slate-100 bg-white">
|
|
@forelse ($studentTransfers as $studentTransfer)
|
|
<tr class="transition hover:bg-slate-50/80">
|
|
<td class="px-6 py-4 text-sm text-slate-700">
|
|
<div class="flex items-start gap-3">
|
|
<div class="flex h-11 w-11 shrink-0 items-center justify-center rounded-2xl bg-indigo-100 text-sm font-bold text-indigo-700">
|
|
{{ strtoupper(mb_substr($studentTransfer->full_name, 0, 1)) }}
|
|
</div>
|
|
<div>
|
|
<div class="font-semibold text-slate-800">{{ $studentTransfer->full_name }}</div>
|
|
<div class="mt-1 text-xs text-slate-500">NIS: {{ $studentTransfer->student_number ?: '-' }} · NISN: {{ $studentTransfer->nisn ?: '-' }}</div>
|
|
</div>
|
|
</div>
|
|
</td>
|
|
<td class="px-6 py-4 text-sm text-slate-600">
|
|
<div class="font-medium text-slate-700">{{ $studentTransfer->academicYear?->name ?: '-' }}</div>
|
|
<div>{{ $studentTransfer->department?->name ?: '-' }}</div>
|
|
<div class="text-xs text-slate-500">{{ $studentTransfer->classRoom?->name ?: '-' }}</div>
|
|
</td>
|
|
<td class="px-6 py-4 text-sm text-slate-600">
|
|
<div class="inline-flex items-center gap-2 rounded-2xl border border-slate-200 bg-slate-50 px-3 py-2">
|
|
<i class="fa-solid fa-calendar-days text-xs text-slate-400"></i>
|
|
<span>{{ $studentTransfer->transfer_date?->format('d-m-Y') ?: '-' }}</span>
|
|
</div>
|
|
</td>
|
|
<td class="px-6 py-4 text-sm text-slate-600">
|
|
@if ($studentTransfer->transfer_letter_file_path)
|
|
<span class="inline-flex items-center gap-2 rounded-full bg-emerald-100 px-3 py-1 text-xs font-semibold text-emerald-700">
|
|
<i class="fa-solid fa-circle-check"></i>
|
|
<span>Sudah diupload</span>
|
|
</span>
|
|
<div class="mt-2 text-xs text-slate-500">{{ $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>
|
|
@else
|
|
<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-triangle-exclamation"></i>
|
|
<span>Belum upload surat</span>
|
|
</span>
|
|
@endif
|
|
</td>
|
|
<td class="px-6 py-4 text-sm text-slate-600">
|
|
<div class="line-clamp-3">{{ $studentTransfer->transfer_reason ?: '-' }}</div>
|
|
</td>
|
|
<td class="px-6 py-4 text-sm">
|
|
<a href="{{ route('student-transfers.show', $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-arrow-up-right-from-square"></i>
|
|
<span>Detail Arsip</span>
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
@empty
|
|
<tr>
|
|
<td colspan="6" class="px-6 py-12 text-center text-sm text-slate-500">
|
|
<div class="mx-auto max-w-md">
|
|
<div class="text-base font-semibold text-slate-700">Belum ada data siswa mutasi.</div>
|
|
<div class="mt-2 text-sm text-slate-500">Arsip mutasi akan muncul otomatis saat status siswa diubah menjadi pindah sekolah.</div>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
@endforelse
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="mt-6 flex justify-end">
|
|
{{ $studentTransfers->onEachSide(1)->links() }}
|
|
</div>
|
|
</x-master-page>
|