MIF_E31230892/sim-pkpps/resources/views/admin/kegiatan/riwayat/show.blade.php

365 lines
17 KiB
PHP

@extends('layouts.app')
@section('content')
<style>
.page-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 24px; }
.page-header h2 { margin: 0; color: var(--primary-dark); font-size: 1.5rem; display: flex; align-items: center; gap: 10px; }
.btn-back { padding: 8px 16px; background: #6B7280; color: #fff; border: none; border-radius: 8px; font-size: 0.85rem; text-decoration: none; display: inline-flex; align-items: center; gap: 6px; transition: background 0.2s; }
.btn-back:hover { background: #4B5563; color: #fff; }
.info-box { background: linear-gradient(135deg, var(--primary-color), #059669); color: #fff; padding: 24px; border-radius: 12px; margin-bottom: 20px; box-shadow: 0 4px 12px rgba(16,185,129,0.2); }
.info-box h3 { margin: 0 0 8px; font-size: 1.4rem; display: flex; align-items: center; gap: 10px; }
.info-box .meta { opacity: 0.9; font-size: 0.9rem; margin-top: 8px; }
.stats-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin-bottom: 20px; }
.stat-card { background: #fff; padding: 16px; border-radius: 10px; box-shadow: 0 2px 8px rgba(0,0,0,0.06); display: flex; align-items: center; gap: 14px; }
.stat-card .icon { font-size: 2rem; width: 50px; height: 50px; display: flex; align-items: center; justify-content: center; border-radius: 10px; }
.stat-card.success .icon { background: #D1FAE5; color: #065F46; }
.stat-card.warning .icon { background: #FEF3C7; color: #92400E; }
.stat-card.info .icon { background: #DBEAFE; color: #1E40AF; }
.stat-card.danger .icon { background: #FEE2E2; color: #991B1B; }
.stat-card .content { flex: 1; }
.stat-card .label { font-size: 0.82rem; color: var(--text-light); margin-bottom: 4px; }
.stat-card .value { font-size: 1.6rem; font-weight: 700; color: var(--primary-dark); }
.filter-box { background: #fff; padding: 20px; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.06); margin-bottom: 20px; }
.filter-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; }
.form-group { margin: 0; }
.form-group label { display: block; font-size: 0.85rem; margin-bottom: 5px; color: var(--text-light); font-weight: 500; }
.form-control { width: 100%; padding: 8px 12px; border: 1px solid #e2e8f0; border-radius: 8px; font-size: 0.85rem; }
.btn-filter { background: var(--primary-color); color: #fff; border: none; padding: 9px 16px; border-radius: 8px; cursor: pointer; font-size: 0.85rem; display: inline-flex; align-items: center; gap: 6px; transition: all 0.2s; }
.btn-filter:hover { background: #059669; }
.btn-reset { background: #6B7280; color: #fff; border: none; padding: 9px 12px; border-radius: 8px; font-size: 0.85rem; display: inline-flex; align-items: center; gap: 6px; }
.data-table { width: 100%; background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.data-table thead { background: linear-gradient(135deg, var(--primary-color), #059669); color: #fff; }
.data-table th { padding: 12px 14px; text-align: left; font-weight: 600; font-size: 0.85rem; }
.data-table td { padding: 10px 14px; border-bottom: 1px solid #f1f5f9; font-size: 0.85rem; }
.data-table tbody tr:hover { background: #f8fafc; }
.data-table tbody tr:last-child td { border-bottom: none; }
.empty-state { text-align: center; padding: 50px 20px; color: var(--text-light); background: #fff; border-radius: 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.06); }
.empty-state i { font-size: 3.5rem; margin-bottom: 14px; opacity: 0.3; }
.pagination { display: flex; justify-content: center; align-items: center; gap: 6px; margin-top: 20px; }
.pagination a, .pagination span { padding: 6px 12px; border: 1px solid #e2e8f0; border-radius: 6px; font-size: 0.82rem; text-decoration: none; color: var(--text-dark); transition: all 0.2s; }
.pagination a:hover { background: var(--primary-color); color: #fff; border-color: var(--primary-color); }
.pagination .active { background: var(--primary-color); color: #fff; border-color: var(--primary-color); font-weight: 600; }
.pagination .disabled { color: #cbd5e1; cursor: not-allowed; }
</style>
<div class="page-header">
<h2><i class="fas fa-file-alt"></i> Detail Riwayat: {{ $kegiatan->nama_kegiatan }}</h2>
<a href="{{ route('admin.riwayat-kegiatan.index') }}" class="btn-back">
<i class="fas fa-arrow-left"></i> Kembali
</a>
</div>
<div class="info-box">
<h3><i class="fas fa-clipboard-check"></i> {{ $kegiatan->nama_kegiatan }}</h3>
<div class="meta">
<span><i class="fas fa-tag"></i> {{ $kegiatan->kategori->nama_kategori }}</span> |
<span><i class="fas fa-clock"></i> {{ $kegiatan->waktu_mulai }} - {{ $kegiatan->waktu_selesai }}</span> |
<span><i class="fas fa-calendar-day"></i> {{ $kegiatan->hari }}</span>
@if($kegiatan->kelasKegiatan->count() > 0)
| <span><i class="fas fa-users"></i> {{ $kegiatan->kelasKegiatan->pluck('nama_kelas')->implode(', ') }}</span>
@else
| <span><i class="fas fa-globe"></i> Umum</span>
@endif
</div>
</div>
<div class="stats-row">
<div class="stat-card success">
<div class="icon"><i class="fas fa-check-circle"></i></div>
<div class="content">
<div class="label">Hadir</div>
<div class="value">{{ $stats['Hadir'] ?? 0 }}</div>
</div>
</div>
<div class="stat-card warning">
<div class="icon"><i class="fas fa-info-circle"></i></div>
<div class="content">
<div class="label">Izin</div>
<div class="value">{{ $stats['Izin'] ?? 0 }}</div>
</div>
</div>
<div class="stat-card info">
<div class="icon"><i class="fas fa-heartbeat"></i></div>
<div class="content">
<div class="label">Sakit</div>
<div class="value">{{ $stats['Sakit'] ?? 0 }}</div>
</div>
</div>
<div class="stat-card danger">
<div class="icon"><i class="fas fa-times-circle"></i></div>
<div class="content">
<div class="label">Alpa</div>
<div class="value">{{ $stats['Alpa'] ?? 0 }}</div>
</div>
</div>
</div>
<!-- Filter -->
<div class="filter-box">
<form method="GET">
<div class="filter-grid">
<div class="form-group">
<label for="id_santri">Santri</label>
<select name="id_santri" id="id_santri" class="form-control">
<option value="">-- Semua Santri --</option>
@foreach($santris as $s)
<option value="{{ $s->id_santri }}" {{ request('id_santri') == $s->id_santri ? 'selected' : '' }}>
{{ $s->nama_lengkap }}
</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="id_kelas">Kelas</label>
<select name="id_kelas" id="id_kelas" class="form-control">
<option value="">-- Semua Kelas --</option>
@foreach($kelasList->groupBy('kelompok.nama_kelompok') as $kelompokNama => $kelasList_group)
<optgroup label="{{ $kelompokNama }}">
@foreach($kelasList_group as $kelas)
<option value="{{ $kelas->id }}" {{ request('id_kelas') == $kelas->id ? 'selected' : '' }}>
{{ $kelas->nama_kelas }}
</option>
@endforeach
</optgroup>
@endforeach
</select>
</div>
<div class="form-group">
<label for="status">Status</label>
<select name="status" id="status" class="form-control">
<option value="">-- Semua Status --</option>
<option value="Hadir" {{ request('status') == 'Hadir' ? 'selected' : '' }}>Hadir</option>
<option value="Izin" {{ request('status') == 'Izin' ? 'selected' : '' }}>Izin</option>
<option value="Sakit" {{ request('status') == 'Sakit' ? 'selected' : '' }}>Sakit</option>
<option value="Alpa" {{ request('status') == 'Alpa' ? 'selected' : '' }}>Alpa</option>
</select>
</div>
<div class="form-group">
<label for="tanggal_dari">Tanggal Dari</label>
<input type="date" name="tanggal_dari" id="tanggal_dari" class="form-control" value="{{ request('tanggal_dari') }}">
</div>
<div class="form-group">
<label for="tanggal_sampai">Tanggal Sampai</label>
<input type="date" name="tanggal_sampai" id="tanggal_sampai" class="form-control" value="{{ request('tanggal_sampai') }}">
</div>
<div class="form-group">
<label for="bulan">Atau Pilih Bulan</label>
<input type="month" name="bulan" id="bulan" class="form-control" value="{{ request('bulan') }}">
</div>
<div style="display: flex; align-items: flex-end; gap: 10px;">
<button type="submit" class="btn-filter" style="flex: 1;">
<i class="fas fa-filter"></i> Filter
</button>
@if(request()->hasAny(['id_santri', 'id_kelas', 'status', 'tanggal_dari', 'tanggal_sampai', 'bulan']))
<a href="{{ route('admin.riwayat-kegiatan.show', $kegiatan->id) }}" class="btn-reset">
<i class="fas fa-times"></i>
</a>
@endif
</div>
</div>
</form>
</div>
<!-- Tabel Riwayat -->
@if($riwayats->count() > 0)
<table class="data-table">
<thead>
<tr>
<th style="width: 50px;">No</th>
<th style="width: 100px;">Tanggal</th>
<th style="width: 100px;">ID Santri</th>
<th>Nama Santri</th>
<th style="width: 150px;">Kelas</th>
<th style="width: 100px; text-align: center;">Status</th>
<th style="width: 100px; text-align: center;">Waktu</th>
<th style="width: 90px;">Metode</th>
</tr>
</thead>
<tbody>
@foreach($riwayats as $index => $riwayat)
<tr>
<td>{{ $riwayats->firstItem() + $index }}</td>
<td>{{ $riwayat->tanggal->format('d/m/Y') }}</td>
<td><strong>{{ $riwayat->id_santri }}</strong></td>
<td>
<a href="{{ route('admin.riwayat-kegiatan.detail-santri', $riwayat->id_santri) }}"
style="color: var(--primary-color); text-decoration: none; font-weight: 500;">
{{ $riwayat->santri->nama_lengkap }}
</a>
</td>
<td>
@if($riwayat->santri->kelasSantri->first())
{{ $riwayat->santri->kelasSantri->first()->kelas->nama_kelas }}
@else
<span style="color: #9CA3AF;">-</span>
@endif
</td>
<td style="text-align: center;">{!! $riwayat->status_badge !!}</td>
<td style="text-align: center;">
{{ $riwayat->waktu_absen ? \Carbon\Carbon::parse($riwayat->waktu_absen)->format('H:i') : '-' }}
</td>
<td>
@if($riwayat->metode_absen == 'RFID')
<span style="background: #DBEAFE; color: #1E40AF; padding: 3px 8px; border-radius: 10px; font-size: 0.75rem; font-weight: 600;">
<i class="fas fa-id-card"></i> RFID
</span>
@else
<span style="background: #E5E7EB; color: #374151; padding: 3px 8px; border-radius: 10px; font-size: 0.75rem; font-weight: 600;">
<i class="fas fa-hand-pointer"></i> Manual
</span>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="pagination">
{!! $riwayats->links('pagination::simple-bootstrap-4') !!}
</div>
@else
<div class="empty-state">
<i class="fas fa-inbox"></i>
<h3>Tidak Ada Riwayat</h3>
<p>Belum ada data riwayat absensi untuk kegiatan ini.</p>
</div>
@endif
@endsection
@section('content')
<div class="page-header">
<h2><i class="fas fa-file-alt"></i> Detail Riwayat Absensi</h2>
</div>
<div class="content-box">
<div class="detail-header">
<h3>Riwayat Absensi #{{ $riwayat->absensi_id }}</h3>
<div style="display: flex; gap: 10px;">
<a href="{{ route('admin.riwayat-kegiatan.edit', $riwayat->id) }}" class="btn btn-warning">
<i class="fas fa-edit"></i> Edit
</a>
<form action="{{ route('admin.riwayat-kegiatan.destroy', $riwayat->id) }}" method="POST" style="display: inline;" onsubmit="return confirm('Yakin ingin menghapus riwayat ini?')">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">
<i class="fas fa-trash"></i> Hapus
</button>
</form>
<a href="{{ route('admin.riwayat-kegiatan.index') }}" class="btn btn-secondary">
<i class="fas fa-arrow-left"></i> Kembali
</a>
</div>
</div>
<div class="detail-section">
<h4><i class="fas fa-user"></i> Informasi Santri</h4>
<table class="detail-table">
<tr>
<th>ID Santri</th>
<td><strong>{{ $riwayat->santri->id_santri }}</strong></td>
</tr>
<tr>
<th>Nama Lengkap</th>
<td>{{ $riwayat->santri->nama_lengkap }}</td>
</tr>
<tr>
<th>Kelas</th>
<td><span class="badge badge-secondary badge-lg">{{ $riwayat->santri->kelas }}</span></td>
</tr>
<tr>
<th>Status Santri</th>
<td><span class="badge badge-success badge-lg">{{ $riwayat->santri->status }}</span></td>
</tr>
</table>
</div>
<div class="detail-section">
<h4><i class="fas fa-calendar-alt"></i> Informasi Kegiatan</h4>
<table class="detail-table">
<tr>
<th>ID Kegiatan</th>
<td><strong>{{ $riwayat->kegiatan->kegiatan_id }}</strong></td>
</tr>
<tr>
<th>Nama Kegiatan</th>
<td>{{ $riwayat->kegiatan->nama_kegiatan }}</td>
</tr>
<tr>
<th>Kategori</th>
<td><span class="badge badge-primary badge-lg">{{ $riwayat->kegiatan->kategori->nama_kategori }}</span></td>
</tr>
<tr>
<th>Hari</th>
<td><span class="badge badge-info badge-lg">{{ $riwayat->kegiatan->hari }}</span></td>
</tr>
<tr>
<th>Waktu Pelaksanaan</th>
<td>
<i class="fas fa-clock" style="color: var(--primary-color);"></i>
{{ date('H:i', strtotime($riwayat->kegiatan->waktu_mulai)) }} -
{{ date('H:i', strtotime($riwayat->kegiatan->waktu_selesai)) }} WIB
</td>
</tr>
</table>
</div>
<div class="detail-section">
<h4><i class="fas fa-clipboard-check"></i> Detail Absensi</h4>
<table class="detail-table">
<tr>
<th>ID Absensi</th>
<td><strong>{{ $riwayat->absensi_id }}</strong></td>
</tr>
<tr>
<th>Tanggal Absensi</th>
<td>{{ $riwayat->tanggal->format('d F Y') }}</td>
</tr>
<tr>
<th>Status Kehadiran</th>
<td>{!! $riwayat->status_badge !!}</td>
</tr>
<tr>
<th>Metode Absensi</th>
<td>
@if($riwayat->metode_absen == 'RFID')
<span class="badge badge-primary badge-lg">
<i class="fas fa-id-card"></i> RFID
</span>
@else
<span class="badge badge-secondary badge-lg">
<i class="fas fa-hand-pointer"></i> Manual
</span>
@endif
</td>
</tr>
<tr>
<th>Waktu Absen</th>
<td>
@if($riwayat->waktu_absen)
<i class="fas fa-clock" style="color: var(--primary-color);"></i>
{{ date('H:i:s', strtotime($riwayat->waktu_absen)) }} WIB
@else
-
@endif
</td>
</tr>
<tr>
<th>Dicatat Pada</th>
<td>{{ $riwayat->created_at->format('d F Y, H:i:s') }} WIB</td>
</tr>
<tr>
<th>Terakhir Diubah</th>
<td>{{ $riwayat->updated_at->format('d F Y, H:i:s') }} WIB</td>
</tr>
</table>
</div>
</div>
@endsection