where('status', 'assigned') ->where(function ($q) use ($dunId) { $q->where('dun_id', $dunId) ->orWhereHas('assignments.pusatMengundi', fn ($qq) => $qq->where('dun_id', $dunId)); }); } public function dun(): BelongsTo { return $this->belongsTo(Dun::class, 'dun_id'); } public function assignments(): HasMany { return $this->hasMany(PetugasAssignment::class, 'permohonan_id'); } /** * Penempatan utama petugas (urutan terendah). */ public function assignmentUtama(): ?PetugasAssignment { if ($this->relationLoaded('assignments')) { return $this->assignments->sortBy('urutan')->first(); } return $this->assignments() ->with(['pusatMengundi', 'saluran', 'jawatan']) ->orderBy('urutan') ->first(); } /** * Maklumat penempatan untuk paparan: pusat mengundi, saluran, jawatan. * Diambil daripada petugas_assignments; fallback kepada medan permohonan. */ public function butiranPenempatan(): array { $assignment = $this->assignmentUtama(); $pusatMengundi = $assignment?->pusatMengundi ?? ($this->pusat_mengundi_id ? PusatMengundi::find($this->pusat_mengundi_id) : null); $saluran = $assignment?->saluran ?? ($this->assigned_saluran_id ? Saluran::find($this->assigned_saluran_id) : null); $jawatan = $assignment?->jawatan ?? ($this->jawatan_id ? JawatanTetapan::find($this->jawatan_id) : null); return [ 'pusat_mengundi' => $pusatMengundi?->nama ?? '-', 'saluran' => $saluran ? 'Saluran ' . $saluran->nombor_saluran : '-', 'jawatan' => $jawatan?->nama ?? '-', ]; } }