60 lines
2.0 KiB
PHP
60 lines
2.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\AbsensiSiswa;
|
|
use App\Models\Jurusan;
|
|
use App\Models\Kelas;
|
|
use App\Models\Devices;
|
|
use Illuminate\Http\Request; // Import Request
|
|
use Carbon\Carbon;
|
|
|
|
class AbsensiSiswaController extends Controller
|
|
{
|
|
/**
|
|
* Menampilkan halaman presensi siswa dengan filter dinamis.
|
|
*/
|
|
public function index(Request $request) // Tambahkan Request
|
|
{
|
|
// Mulai query builder
|
|
$query = AbsensiSiswa::with(['siswa.jurusan', 'siswa.kelas', 'devices']);
|
|
|
|
// 1. Filter berdasarkan Tanggal
|
|
if ($request->filled('tanggal')) {
|
|
$query->whereDate('waktu', $request->tanggal);
|
|
} else {
|
|
// Default jika tidak ada filter tanggal: hari ini
|
|
$query->whereDate('waktu', Carbon::today());
|
|
}
|
|
|
|
// 2. Filter berdasarkan Jurusan
|
|
// 'whereHas' digunakan untuk filter berdasarkan relasi
|
|
if ($request->filled('jurusan_id') && $request->jurusan_id != 'all') {
|
|
$query->whereHas('siswa', function ($q) use ($request) {
|
|
$q->where('id_jurusan', $request->jurusan_id);
|
|
});
|
|
}
|
|
|
|
// 3. Filter berdasarkan Kelas
|
|
if ($request->filled('kelas_id') && $request->kelas_id != 'all') {
|
|
$query->whereHas('siswa', function ($q) use ($request) {
|
|
$q->where('id_kelas', $request->kelas_id);
|
|
});
|
|
}
|
|
|
|
// 4. Filter berdasarkan Device
|
|
if ($request->filled('device_id') && $request->device_id != 'all') {
|
|
$query->where('id_devices', $request->device_id);
|
|
}
|
|
|
|
// Eksekusi query setelah semua filter diterapkan
|
|
$absensi = $query->latest('waktu')->get();
|
|
|
|
// Data untuk mengisi dropdown filter tetap sama
|
|
$jurusans = Jurusan::orderBy('nama_jurusan')->get();
|
|
$kelases = Kelas::orderBy('nama_kelas')->get();
|
|
$devices = Devices::orderBy('nama_device')->get();
|
|
|
|
return view('admin.presensi.siswa', compact('absensi', 'jurusans', 'kelases', 'devices'));
|
|
}
|
|
} |