MIF_E31230892/sim-pkpps/app/Http/Controllers/Santri/SantriKesehatanController.php

121 lines
4.0 KiB
PHP

<?php
namespace App\Http\Controllers\Santri;
use App\Http\Controllers\Controller;
use App\Models\KesehatanSantri;
use App\Models\Santri;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Carbon\Carbon;
class SantriKesehatanController extends Controller
{
/**
* Tampilkan riwayat kesehatan santri yang sedang login dengan filter tanggal
*/
public function index(Request $request)
{
$user = Auth::user();
// Ambil data santri
$santri = Santri::where('id_santri', $user->role_id)
->select('id_santri', 'nama_lengkap', 'kelas')
->firstOrFail();
// ✅ TENTUKAN RANGE TANGGAL
// Jika tidak ada filter, default bulan ini
$tanggalDari = $request->filled('tanggal_dari')
? Carbon::parse($request->tanggal_dari)
: Carbon::now()->startOfMonth();
$tanggalSampai = $request->filled('tanggal_sampai')
? Carbon::parse($request->tanggal_sampai)
: Carbon::now()->endOfMonth();
// Validasi: tanggal_sampai tidak boleh lebih kecil dari tanggal_dari
if ($tanggalSampai->lt($tanggalDari)) {
return back()->withErrors([
'tanggal_sampai' => 'Tanggal sampai harus lebih besar atau sama dengan tanggal dari.'
])->withInput();
}
// ✅ QUERY DASAR DENGAN FILTER TANGGAL
$baseQuery = KesehatanSantri::where('id_santri', $santri->id_santri)
->whereBetween('tanggal_masuk', [
$tanggalDari->format('Y-m-d'),
$tanggalSampai->format('Y-m-d')
]);
// ✅ HITUNG STATISTIK BERDASARKAN FILTER TANGGAL
$statistik = [
'total_kunjungan' => (clone $baseQuery)->count(),
'sedang_dirawat' => (clone $baseQuery)->where('status', 'dirawat')->count(),
'sembuh' => (clone $baseQuery)->where('status', 'sembuh')->count(),
'izin' => (clone $baseQuery)->where('status', 'izin')->count(),
];
// ✅ QUERY RIWAYAT KESEHATAN UNTUK TABEL
$query = KesehatanSantri::query()
->select([
'id',
'id_kesehatan',
'id_santri',
'tanggal_masuk',
'tanggal_keluar',
'keluhan',
'status',
'created_at'
])
->where('id_santri', $santri->id_santri)
->whereBetween('tanggal_masuk', [
$tanggalDari->format('Y-m-d'),
$tanggalSampai->format('Y-m-d')
]);
// Filter status jika ada
if ($request->filled('status')) {
$query->where('status', $request->status);
}
// Urutkan terbaru dan paginate
$riwayatKesehatan = $query->orderBy('tanggal_masuk', 'desc')
->paginate(10)
->appends($request->all()); // Append query string untuk pagination
// Data untuk filter
$statusOptions = [
'dirawat' => 'Sedang Dirawat',
'sembuh' => 'Sembuh',
'izin' => 'Izin Sakit'
];
return view('santri.kesehatan.index', compact(
'riwayatKesehatan',
'santri',
'statistik',
'statusOptions',
'tanggalDari',
'tanggalSampai'
));
}
/**
* Tampilkan detail riwayat kesehatan
*/
public function show($id)
{
$user = Auth::user();
$santri = Santri::where('id_santri', $user->role_id)
->select('id_santri', 'nama_lengkap', 'kelas')
->firstOrFail();
// Ambil data kesehatan dengan validasi kepemilikan
$kesehatanSantri = KesehatanSantri::where('id', $id)
->where('id_santri', $santri->id_santri)
->firstOrFail();
return view('santri.kesehatan.show', compact('kesehatanSantri', 'santri'));
}
}