From f5b000cb7eb7dd3f30c3c2af7e65c61c7371c11d Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Mon, 30 Mar 2026 14:23:50 +0700 Subject: [PATCH] feat: filter available class sessions to exclude those already assigned to materials or assignments while preserving the current record selection --- .../Learning/Assignments/Schemas/AssignmentForm.php | 9 ++++++++- .../Resources/Learning/Materials/MaterialResource.php | 8 +++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/Filament/Resources/Learning/Assignments/Schemas/AssignmentForm.php b/app/Filament/Resources/Learning/Assignments/Schemas/AssignmentForm.php index 77bca0b..c9fd277 100644 --- a/app/Filament/Resources/Learning/Assignments/Schemas/AssignmentForm.php +++ b/app/Filament/Resources/Learning/Assignments/Schemas/AssignmentForm.php @@ -4,6 +4,7 @@ use App\Enums\AssignmentType; use App\Filament\Resources\Learning\Assignments\Actions\SelectAllStudentsAction; +use App\Models\Assignment; use App\Models\ClassSession; use App\Models\Course; use App\Models\Student; @@ -57,13 +58,19 @@ public static function configure(Schema $schema): Schema Select::make('class_session_id') ->label('Pertemuan Ke-') ->placeholder('Pilih Pertemuan (Opsional)') - ->options(function (Get $get) { + ->options(function (Get $get, ?Assignment $record) { $courseId = $get('course_id'); if (! $courseId) { return []; } return ClassSession::where('course_id', $courseId) + ->where(function ($query) use ($record) { + $query->doesntHave('assignments'); + if ($record && $record->class_session_id) { + $query->orWhere('id', $record->class_session_id); + } + }) ->orderBy('session_number') ->pluck('session_number', 'id') ->map(fn ($num) => "Sesi Ke-$num") diff --git a/app/Filament/Resources/Learning/Materials/MaterialResource.php b/app/Filament/Resources/Learning/Materials/MaterialResource.php index 7e54252..fe01bf1 100644 --- a/app/Filament/Resources/Learning/Materials/MaterialResource.php +++ b/app/Filament/Resources/Learning/Materials/MaterialResource.php @@ -73,13 +73,19 @@ public static function form(Schema $schema): Schema Select::make('class_session_id') ->label('Pertemuan Ke-') ->placeholder('Pilih Pertemuan (Opsional)') - ->options(function ($get) { + ->options(function ($get, ?Material $record) { $courseId = $get('course_id'); if (! $courseId) { return []; } return ClassSession::where('course_id', $courseId) + ->where(function ($query) use ($record) { + $query->doesntHave('materials'); + if ($record && $record->class_session_id) { + $query->orWhere('id', $record->class_session_id); + } + }) ->orderBy('session_number') ->pluck('session_number', 'id') ->map(fn ($num) => "Sesi Ke-$num")