schema(components: [ Forms\Components\Select::make('class_student_id') ->label('Siswa & Kelas') ->options(function () { $user = auth()->user(); $query = ClassStudent::with(['student', 'class']); if ($user->hasAnyRole(['admin'])) { return $query->get()->mapWithKeys(function ($cs) { return [ $cs->id => $cs->student->full_name . ' - ' . $cs->class->class_name . ' - ' . $cs->academicYear->name, ]; }); } else if ($user->hasAnyRole(['teacher'])) { $homeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->firstOrFail(); $query->whereHas('class', function ($query) use ($homeRoomTeacher) { $query->where('id', $homeRoomTeacher->class_room_id); }); return $query->get()->mapWithKeys(function ($cs) { return [ $cs->id => $cs->student->full_name . ' - ' . $cs->class->class_name . ' - ' . $cs->academicYear->name, ]; }); } else { return []; } }) ->searchable() ->preload(), Forms\Components\Select::make('extracurricular_id') ->relationship('extracurricular', 'name') ->label('Extracurricular') ->options(Extracurricular::all()->pluck('name', 'id')) ->searchable() ->required(), Forms\Components\Select::make('semester') ->options([ 'first' => 'Ganjil', 'second' => 'Genap', ]) ->required(), Forms\Components\Select::make('predicate') ->label('Predicate') ->options([ 'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E', ]) ->required(), Forms\Components\Textarea::make('description') ->label('Description') ->required(), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('classStudent.student.full_name') ->label('Student') ->searchable(), Tables\Columns\TextColumn::make('classStudent.class.class_name') ->label('Class') ->searchable(), Tables\Columns\TextColumn::make('classStudent.academicYear.name') ->label('Academic Year'), Tables\Columns\TextColumn::make('extracurricular.name') ->label('Extracurricular'), Tables\Columns\TextColumn::make('semester') ->formatStateUsing(function ($state) { return $state === 'first' ? 'Ganjil' : 'Genap'; }), Tables\Columns\TextColumn::make('predicate') ->label('Predicate') ->sortable(), Tables\Columns\TextColumn::make('description') ->label('Description'), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('deleted_at') // Add this column to show deleted timestamp ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\TrashedFilter::make()->label('Tampilkan Data yang Dihapus'), ]) ->actions([ Tables\Actions\EditAction::make()->visible(fn () => auth()->user()->hasRole('admin')), Tables\Actions\DeleteAction::make()->visible(fn () => auth()->user()->hasRole('admin')), Tables\Actions\RestoreAction::make()->visible(fn (ExtracurricularAssessment $record) => auth()->user()->hasRole('admin') && $record->trashed()), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make()->visible(fn () => auth()->user()->hasRole('admin')), ]), ]); } public static function getRelations(): array { return [ // ]; } public static function getPages(): array { return [ 'index' => Pages\ListExtracurricularAssessments::route('/'), 'create' => Pages\CreateExtracurricularAssessment::route('/create'), 'edit' => Pages\EditExtracurricularAssessment::route('/{record}/edit'), ]; } public static function canAccess(): bool { $user = auth()->user(); if ($user->hasRole('parent')) { return true; } $isHomeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->exists(); return $user->can('page_SchoolInformation') || $isHomeRoomTeacher; } public static function shouldRegisterNavigation(): bool { $user = auth()->user(); if ($user->hasRole('parent')) { return true; } // Untuk teacher (wali kelas) $isHomeRoomTeacher = HomeRoomTeacher::where('teacher_id', $user->id)->exists(); // Atau punya permission khusus return $user->can('page_SchoolInformation') || $isHomeRoomTeacher; } public static function getNavigationLabel(): string { return 'Penilaian Ektrakurikuler'; } public static function getBreadcrumb(): string { return 'Penilaian Ektrakurikuler'; } public static function getPluralModelLabel(): string { return 'Penilaian Ektrakurikuler'; } }