From e994adf5dc8b6c63002e81c7d3f2179fd162e7cd Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Wed, 1 Apr 2026 13:43:22 +0700 Subject: [PATCH] feat: display student assignment submissions in the session modal and add submission factory --- .../Pages/ListCourseSessions.php | 9 +- .../factories/AssignmentSubmissionFactory.php | 28 ++++++ .../assignments-modal.blade.php | 89 ++++++++++++++----- tests/Feature/ClassSessionTest.php | 25 ++++++ 4 files changed, 126 insertions(+), 25 deletions(-) create mode 100644 database/factories/AssignmentSubmissionFactory.php diff --git a/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php b/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php index 6ede154..9e203a5 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php +++ b/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php @@ -212,13 +212,20 @@ public function viewAssignmentsAction(): Action ->modalWidth(Width::TwoExtraLarge) ->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.assignments-modal', [ 'assignments' => ClassSession::find($arguments['session'] ?? null, ['*'])?->assignments() + ->with(['assignmentSubmissions.student']) ->latest() ->get() ->map(fn ($a) => (object) [ 'id' => $a->id, 'title' => $a->title, 'type_label' => $a->type?->getLabel() ?? 'Tugas', - 'due_date_formatted' => $a->due_date?->translatedFormat('d F Y, H:i') ?? '-', + 'due_date_formatted' => $a->due_date?->translatedFormat('d F Y H:i') ?? '-', + 'submissions' => $a->assignmentSubmissions->map(fn ($s) => (object) [ + 'student_name' => $s->student->full_name, + 'student_number' => $s->student->student_number, + 'submitted_at_formatted' => $s->submitted_at?->translatedFormat('d F Y H:i') ?? '-', + 'id' => $s->id, + ]), ]) ?? collect(), ])); } diff --git a/database/factories/AssignmentSubmissionFactory.php b/database/factories/AssignmentSubmissionFactory.php new file mode 100644 index 0000000..83c3148 --- /dev/null +++ b/database/factories/AssignmentSubmissionFactory.php @@ -0,0 +1,28 @@ + + */ +class AssignmentSubmissionFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'assignment_id' => Assignment::factory(), + 'student_id' => Student::factory(), + 'submitted_at' => now(), + ]; + } +} diff --git a/resources/views/filament/resources/learning/class-sessions/assignments-modal.blade.php b/resources/views/filament/resources/learning/class-sessions/assignments-modal.blade.php index b759c5b..b52f03f 100644 --- a/resources/views/filament/resources/learning/class-sessions/assignments-modal.blade.php +++ b/resources/views/filament/resources/learning/class-sessions/assignments-modal.blade.php @@ -1,32 +1,72 @@ -
+
@forelse($assignments as $assignment) -
-
-
- -
-
- - {{ $assignment->type_label }} - - {{ $assignment->title }} -
- - - Deadline: {{ $assignment->due_date_formatted }} +
+
+
+
+ +
+
+ + {{ $assignment->type_label }} + {{ $assignment->title }} +
+ + + Deadline: {{ $assignment->due_date_formatted }} + +
-
- - - -
+ + @if ($assignment->submissions->count() > 0) +
+ + + + + + + + + @foreach ($assignment->submissions as $submission) + + + + + @endforeach + +
MahasiswaWaktu Unggah
+
+ {{ $submission->student_name }} + + NIM: {{ $submission->student_number }} + +
+
+ + {{ $submission->submitted_at_formatted }} + +
+
+
+

+ Total Pengumpulan: {{ $assignment->submissions->count() }} + Mahasiswa +

+
+ @else +
+ +

Belum ada pengumpulan untuk tugas ini.

+
+ @endif
@empty