43 lines
1.3 KiB
PHP
43 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Member;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\View\View;
|
|
|
|
class AttendanceController extends Controller
|
|
{
|
|
/** Senarai kehadiran (hadir / belum hadir) dengan carian & penapis */
|
|
public function index(Request $request): View
|
|
{
|
|
$status = $request->query('status', 'hadir'); // hadir | belum | semua
|
|
$jabatan = $request->query('jabatan');
|
|
$q = $request->query('q');
|
|
|
|
$members = Member::query()
|
|
->with('attendance.recordedBy')
|
|
->when($status === 'hadir', fn ($query) => $query->hadir())
|
|
->when($status === 'belum', fn ($query) => $query->belumHadir())
|
|
->when($jabatan, fn ($query) => $query->where('jabatan', $jabatan))
|
|
->when($q, fn ($query) => $query->search($q))
|
|
->orderBy('nama')
|
|
->paginate(30)
|
|
->withQueryString();
|
|
|
|
$jabatanList = Member::query()
|
|
->whereNotNull('jabatan')
|
|
->distinct()
|
|
->orderBy('jabatan')
|
|
->pluck('jabatan');
|
|
|
|
$counts = [
|
|
'hadir' => Member::hadir()->count(),
|
|
'belum' => Member::belumHadir()->count(),
|
|
'semua' => Member::count(),
|
|
];
|
|
|
|
return view('attendance.index', compact('members', 'jabatanList', 'counts', 'status', 'jabatan', 'q'));
|
|
}
|
|
}
|