taklimat ulangan+profil

This commit is contained in:
Saufi
2026-07-04 14:45:16 +08:00
parent e803f55b80
commit 0c134b9038
24 changed files with 2375 additions and 34 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Models\KehadiranTaklimat;
use App\Models\SesiTaklimat;
use App\Models\Sppm\PetugasPermohonan;
use Illuminate\Http\Request;
@@ -9,13 +10,15 @@ use Illuminate\Http\Request;
class PengurusController extends Controller
{
/**
* Senarai petugas hadir dan tidak/belum hadir bagi satu sesi taklimat.
* Senarai petugas bagi satu sesi taklimat, dipecahkan kepada 3 kumpulan:
* hadir (sesi ini), pernah hadir (sesi taklimat lain), dan
* tidak/belum hadir langsung (tidak pernah hadir mana-mana sesi).
*/
public function senarai(Request $request, SesiTaklimat $sesi)
{
$user = $request->user();
if ($user->isPengurus() && (int) $sesi->dun_id !== (int) $user->dun_id) {
if (! $user->isAdmin() && (int) $sesi->dun_id !== (int) $user->dun_id) {
abort(403, 'Sesi ini bukan untuk DUN anda.');
}
@@ -29,15 +32,28 @@ class PengurusController extends Controller
$kehadiran = $sesi->kehadiran()->get()->keyBy('permohonan_id');
[$hadir, $tidakHadir] = $semuaPetugas->partition(
fn (PetugasPermohonan $p) => $kehadiran->has($p->id)
$belumHadirSesiIni = $semuaPetugas->reject(fn (PetugasPermohonan $p) => $kehadiran->has($p->id));
// Antara yang belum hadir sesi ini, semak siapa pernah hadir di sesi LAIN.
$kehadiranSesiLain = KehadiranTaklimat::whereIn('permohonan_id', $belumHadirSesiIni->pluck('id'))
->where('sesi_taklimat_id', '!=', $sesi->id)
->with('sesi.dun')
->orderBy('hadir_at')
->get()
->unique('permohonan_id')
->keyBy('permohonan_id');
[$hadirSesiLain, $tidakHadir] = $belumHadirSesiIni->partition(
fn (PetugasPermohonan $p) => $kehadiranSesiLain->has($p->id)
);
return view('pengurus.senarai', [
'sesi' => $sesi,
'hadir' => $hadir->values(),
'hadir' => $semuaPetugas->filter(fn (PetugasPermohonan $p) => $kehadiran->has($p->id))->values(),
'hadirSesiLain' => $hadirSesiLain->values(),
'tidakHadir' => $tidakHadir->values(),
'kehadiran' => $kehadiran,
'kehadiranSesiLain' => $kehadiranSesiLain,
]);
}
}