Commit 794b0906 authored by Mahmoud Aglan's avatar Mahmoud Aglan

Fix empty attendance list: auto-generate records when session is opened

When a trainer opens a session for attendance, if no attendance_records
exist (e.g. sessions created before enrollments were activated), the
system now auto-generates 'expected' records from active enrollments.
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent 3d2c2052
......@@ -4,6 +4,7 @@
use App\Domain\Attendance\Enums\AttendanceStatus;
use App\Domain\Attendance\Models\AttendanceRecord;
use App\Domain\Attendance\Services\AttendanceGenerationService;
use App\Domain\Attendance\Services\AttendanceMarkingService;
use App\Domain\Scheduling\Models\Assignment;
use App\Domain\Shared\Traits\UsesBranchScope;
......@@ -32,10 +33,22 @@ public function mount(): void
$this->authorize('attendance.mark');
}
public function selectSession(int $sessionId): void
public function selectSession(int $sessionId, AttendanceGenerationService $generationService): void
{
$this->selectedSessionId = $sessionId;
$this->saved = false;
$hasRecords = AttendanceRecord::where('training_session_id', $sessionId)
->where('subject_type', \App\Domain\Participant\Models\Participant::class)
->exists();
if (!$hasRecords) {
$session = TrainingSession::find($sessionId);
if ($session) {
$generationService->generateForSession($session);
}
}
$this->loadMarks();
}
......
......@@ -4,6 +4,7 @@
use App\Domain\Attendance\Enums\AttendanceStatus;
use App\Domain\Attendance\Models\AttendanceRecord;
use App\Domain\Attendance\Services\AttendanceGenerationService;
use App\Domain\Attendance\Services\AttendanceMarkingService;
use App\Domain\Training\Models\TrainingSession;
use Livewire\Attributes\Layout;
......@@ -21,11 +22,16 @@ class TakeAttendance extends Component
/** @var array<int, string> Per-record notes keyed by record id */
public array $recordNotes = [];
public function mount(TrainingSession $session): void
public function mount(TrainingSession $session, AttendanceGenerationService $generationService): void
{
$this->authorize('attendance.mark');
$this->session = $session->load(['group']);
$this->sessionNotes = $this->session->notes ?? '';
$hasRecords = AttendanceRecord::where('training_session_id', $this->session->id)->exists();
if (!$hasRecords) {
$generationService->generateForSession($this->session);
}
}
public function saveNotes(): void
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment