60 lines
2.1 KiB
PHP
60 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\KehadiranTaklimat;
|
|
use App\Models\SesiTaklimat;
|
|
use App\Models\Sppm\PetugasPermohonan;
|
|
use Illuminate\Http\Request;
|
|
|
|
class PengurusController extends Controller
|
|
{
|
|
/**
|
|
* 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->isAdmin() && (int) $sesi->dun_id !== (int) $user->dun_id) {
|
|
abort(403, 'Sesi ini bukan untuk DUN anda.');
|
|
}
|
|
|
|
$sesi->load('dun');
|
|
|
|
// Semua petugas 'assigned' untuk DUN sesi ini
|
|
$semuaPetugas = PetugasPermohonan::assignedUntukDun($sesi->dun_id)
|
|
->with(['assignments' => fn ($q) => $q->orderBy('urutan')->with(['pusatMengundi', 'saluran', 'jawatan'])])
|
|
->orderBy('nama_ic')
|
|
->get();
|
|
|
|
$kehadiran = $sesi->kehadiran()->get()->keyBy('permohonan_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' => $semuaPetugas->filter(fn (PetugasPermohonan $p) => $kehadiran->has($p->id))->values(),
|
|
'hadirSesiLain' => $hadirSesiLain->values(),
|
|
'tidakHadir' => $tidakHadir->values(),
|
|
'kehadiran' => $kehadiran,
|
|
'kehadiranSesiLain' => $kehadiranSesiLain,
|
|
]);
|
|
}
|
|
}
|