diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAssignmentDetailAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAssignmentDetailAction.php new file mode 100644 index 0000000..c420a8f --- /dev/null +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAssignmentDetailAction.php @@ -0,0 +1,53 @@ +modalHeading(fn (array $arguments) => Assignment::find($arguments['record'], ['*'])?->title ?? 'Detail Tugas') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Tutup') + ->modalWidth(Width::FourExtraLarge) + ->infolist(function (array $arguments) { + $record = Assignment::find($arguments['record'], ['*']); + if (! $record) { + return []; + } + + $entries = [ + TextEntry::make('description') + ->label('Deskripsi') + ->html() + ->columnSpanFull(), + TextEntry::make('due_date') + ->label('Batas Waktu') + ->dateTime('l, d F Y, H:i') + ->columnSpanFull(), + ]; + + $mediaEntries = $record->getMedia('assignments')->map(function ($item, $index) { + return PdfViewerEntry::make('pdf_'.$index) + ->label('Lampiran PDF') + ->fileUrl($item->getUrl()) + ->columnSpanFull(); + })->toArray(); + + return array_merge($entries, $mediaEntries); + }); + } +} diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAssignmentsAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAssignmentsAction.php index 8ba252b..0a70a14 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAssignmentsAction.php +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAssignmentsAction.php @@ -21,12 +21,20 @@ protected function setUp(): void ->color('info') ->icon('heroicon-o-clipboard-document-list') ->link() - ->modalHeading(fn (array $arguments) => 'Tugas Kuliah - Sesi Ke-'.ClassSession::find($arguments['session'], ['*'])->session_number) + ->modalHeading(fn (array $arguments) => 'Tugas Kuliah - Sesi Ke-'.(ClassSession::find($arguments['session'] ?? null, ['*'])?->session_number ?? '')) ->modalSubmitAction(false) ->modalCancelActionLabel('Tutup') ->modalWidth(Width::Large) ->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.assignments-modal', [ - 'assignments' => ClassSession::find($arguments['session'], ['*'])->assignments()->latest()->get(), + 'assignments' => ClassSession::find($arguments['session'] ?? null, ['*'])?->assignments() + ->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') ?? '-', + ]) ?? collect(), ])); } } diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAttendanceAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAttendanceAction.php index b507a6b..cc83c12 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAttendanceAction.php +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewAttendanceAction.php @@ -21,12 +21,12 @@ protected function setUp(): void ->color('success') ->icon('heroicon-o-check-circle') ->link() - ->modalHeading(fn (array $arguments) => 'Daftar Presensi - Sesi Ke-'.ClassSession::find($arguments['session'], ['*'])->session_number) + ->modalHeading(fn (array $arguments) => 'Daftar Presensi - Sesi Ke-'.ClassSession::find($arguments['session'] ?? null, ['*'])?->session_number) ->modalSubmitAction(false) ->modalCancelActionLabel('Tutup') ->modalWidth(Width::ExtraLarge) ->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.attendance-modal', [ - 'attendances' => ClassSession::find($arguments['session'], ['*'])->attendances()->with('student')->latest('attended_at')->get(), + 'attendances' => ClassSession::find($arguments['session'] ?? null, ['*'])?->attendances()->with('student')->latest('attended_at')->get() ?? collect(), ])); } } diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewMaterialDetailAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewMaterialDetailAction.php new file mode 100644 index 0000000..9042a98 --- /dev/null +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewMaterialDetailAction.php @@ -0,0 +1,29 @@ +record(fn (array $arguments) => Material::find($arguments['record'] ?? null, ['*'])) + ->modalHeading(fn (?Material $record) => $record?->title ?? 'Detail Materi') + ->modalSubmitAction(false) + ->modalCancelActionLabel('Tutup') + ->modalWidth(Width::FourExtraLarge) + ->modalContent(fn (?Material $record) => $record ? view('filament.resources.learning.class-sessions.material-detail-modal', [ + 'record' => $record, + ]) : null); + } +} diff --git a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewMaterialsAction.php b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewMaterialsAction.php index 7050b0f..ca87b0f 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Actions/ViewMaterialsAction.php +++ b/app/Filament/Resources/Learning/ClassSessions/Actions/ViewMaterialsAction.php @@ -21,12 +21,19 @@ protected function setUp(): void ->color('warning') ->icon('heroicon-o-book-open') ->link() - ->modalHeading(fn (array $arguments) => 'Materi Kuliah - Sesi Ke-'.ClassSession::find($arguments['session'], ['*'])->session_number) + ->modalHeading(fn (array $arguments) => 'Materi Kuliah - Sesi Ke-'.(ClassSession::find($arguments['session'] ?? null, ['*'])?->session_number ?? '')) ->modalSubmitAction(false) ->modalCancelActionLabel('Tutup') ->modalWidth(Width::Large) ->modalContent(fn (array $arguments) => view('filament.resources.learning.class-sessions.materials-modal', [ - 'materials' => ClassSession::find($arguments['session'], ['*'])->materials()->latest()->get(), + 'materials' => ClassSession::find($arguments['session'] ?? null, ['*'])?->materials() + ->latest() + ->get() + ->map(fn ($m) => (object) [ + 'id' => $m->id, + 'title' => $m->title, + 'created_at_formatted' => $m->created_at?->translatedFormat('d F Y') ?? '-', + ]) ?? collect(), ])); } } diff --git a/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php b/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php index 2b69e8f..9cfeaf7 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php +++ b/app/Filament/Resources/Learning/ClassSessions/Pages/ListCourseSessions.php @@ -7,8 +7,10 @@ use App\Filament\Resources\Learning\ClassSessions\Actions\DeleteSessionAction; use App\Filament\Resources\Learning\ClassSessions\Actions\EditSessionAction; use App\Filament\Resources\Learning\ClassSessions\Actions\GenerateSessionsAction; +use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAssignmentDetailAction; use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAssignmentsAction; use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAttendanceAction; +use App\Filament\Resources\Learning\ClassSessions\Actions\ViewMaterialDetailAction; use App\Filament\Resources\Learning\ClassSessions\Actions\ViewMaterialsAction; use App\Filament\Resources\Learning\ClassSessions\ClassSessionResource; use App\Models\Course; @@ -151,6 +153,19 @@ protected function getHeaderActions(): array ]; } + protected function getActions(): array + { + return [ + $this->viewAttendanceAction(), + $this->viewMaterialsAction(), + $this->viewAssignmentsAction(), + $this->editSessionAction(), + $this->deleteSessionAction(), + $this->viewMaterialDetailAction(), + $this->viewAssignmentDetailAction(), + ]; + } + public function viewAttendanceAction(): Action { return ViewAttendanceAction::make(); @@ -175,4 +190,14 @@ public function deleteSessionAction(): Action { return DeleteSessionAction::make(); } + + public function viewMaterialDetailAction(): Action + { + return ViewMaterialDetailAction::make(); + } + + public function viewAssignmentDetailAction(): Action + { + return ViewAssignmentDetailAction::make(); + } } diff --git a/app/Filament/Resources/Learning/ClassSessions/Pages/ManageClassSessions.php b/app/Filament/Resources/Learning/ClassSessions/Pages/ManageClassSessions.php index 6119ddb..108faf5 100644 --- a/app/Filament/Resources/Learning/ClassSessions/Pages/ManageClassSessions.php +++ b/app/Filament/Resources/Learning/ClassSessions/Pages/ManageClassSessions.php @@ -2,8 +2,10 @@ namespace App\Filament\Resources\Learning\ClassSessions\Pages; +use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAssignmentDetailAction; use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAssignmentsAction; use App\Filament\Resources\Learning\ClassSessions\Actions\ViewAttendanceAction; +use App\Filament\Resources\Learning\ClassSessions\Actions\ViewMaterialDetailAction; use App\Filament\Resources\Learning\ClassSessions\Actions\ViewMaterialsAction; use App\Filament\Resources\Learning\ClassSessions\ClassSessionResource; use App\Models\ClassSession; @@ -134,6 +136,17 @@ public function courses(): Collection }); } + protected function getActions(): array + { + return [ + $this->viewAttendanceAction(), + $this->viewMaterialsAction(), + $this->viewAssignmentsAction(), + $this->viewMaterialDetailAction(), + $this->viewAssignmentDetailAction(), + ]; + } + public function viewAttendanceAction(): Action { return ViewAttendanceAction::make(); @@ -148,4 +161,14 @@ public function viewAssignmentsAction(): Action { return ViewAssignmentsAction::make(); } + + public function viewMaterialDetailAction(): Action + { + return ViewMaterialDetailAction::make(); + } + + public function viewAssignmentDetailAction(): Action + { + return ViewAssignmentDetailAction::make(); + } } diff --git a/app/Filament/Resources/Learning/Materials/MaterialResource.php b/app/Filament/Resources/Learning/Materials/MaterialResource.php index a0c0db2..38b37ff 100644 --- a/app/Filament/Resources/Learning/Materials/MaterialResource.php +++ b/app/Filament/Resources/Learning/Materials/MaterialResource.php @@ -133,7 +133,8 @@ public static function table(Table $table): Table TextColumn::make('course.name') ->label('Mata Kuliah') ->searchable() - ->sortable(), + ->sortable() + ->description(fn (Material $record) => $record->classSession?->session_number ? "Sesi Ke-{$record->classSession->session_number}" : ''), TextColumn::make('title') ->label('Judul') @@ -145,13 +146,6 @@ public static function table(Table $table): Table ->date('l, d F Y') ->sortable(), - TextColumn::make('classSession.session_number') - ->label('Pertemuan') - ->formatStateUsing(fn ($state) => $state ? "Sesi Ke-$state" : '-') - ->sortable() - ->badge() - ->color('gray'), - ...TimestampColumns::make(), ]) ->filters([ 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 55f985c..246e303 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 @@ -7,19 +7,20 @@