schema([ // Forms\Components\Select::make('teacher_subject_id') // ->label('Teacher Subject') // ->required() // ->relationship('teacherSubject', 'id') // ->getOptionLabelFromRecordUsing(fn (TeacherSubject $record) => // $record->teacher->name . ' - ' . $record->subject->name . ' - ' . $record->class->class_name . ' - ' . $record->academicYear->name) // ->searchable() // ->preload() // ->afterStateUpdated(function (callable $set, $state) { // if ($state) { // $teacherSubject = TeacherSubject::find($state); // if ($teacherSubject) { // $set('student_id', null); // } // } // }) // ->required(), Select::make('teacher_subject_id') ->label('Teacher Subject') ->required() ->options(function () { $user = auth()->user(); $query = TeacherSubject::with(['teacher', 'subject', 'class', 'academicYear']); if ($user->hasRole('teacher')) { // Ambil ID kelas dimana user menjadi wali kelas $homeRoomClassIds = HomeRoomTeacher::where('teacher_id', $user->id) ->pluck('class_room_id') ->toArray(); $query->where(function($q) use ($user, $homeRoomClassIds) { // Mata pelajaran yang diajarkan oleh guru ini $q->where('teacher_id', $user->id) // ATAU kelas dimana dia menjadi wali kelas ->orWhereIn('class_id', $homeRoomClassIds); }); } return $query->get()->mapWithKeys(fn ($item) => [ $item->id => sprintf('%s - %s - %s - %s', $item->teacher->name, $item->subject->name, $item->class->class_name, $item->academicYear->name ) ]); }) ->searchable() ->live() ->afterStateUpdated(function (callable $set, $state) { if ($state) { $teacherSubject = TeacherSubject::find($state); if ($teacherSubject) { $set('student_id', null); } } }), Forms\Components\Select::make('student_id') ->label('Student') ->required() ->searchable() ->options(function ($get) { $teacherSubjectId = $get('teacher_subject_id'); if ($teacherSubjectId) { $teacherSubject = TeacherSubject::find($teacherSubjectId); $students = ClassStudent::where('class_room_id', $teacherSubject->class_id) ->where('academic_year_id', $teacherSubject->academic_year_id) ->with('student') ->get() ->pluck('student.full_name', 'id') ->toArray(); return $students; } return []; }) ->getOptionLabelUsing(function ($value) { $student = Student::find($value); return $student ? $student->full_name . ' (' . $student->nis . ')' : null; }), Forms\Components\Select::make('semester') ->label('Semester') ->required() ->options([ 'first' => 'First Semester', 'second' => 'Second Semester' ]), Forms\Components\TextInput::make('score') ->label('Score') ->numeric() ->required() ->minValue(0) ->maxValue(100), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('student.full_name') ->label('Student') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('teacherSubject.class.class_name') ->label('Class') ->searchable(), Tables\Columns\TextColumn::make('teacherSubject.subject.name') ->label('Subject') ->searchable(), Tables\Columns\TextColumn::make('teacherSubject.teacher.name') ->label('Teacher') ->searchable(), Tables\Columns\TextColumn::make('score') ->numeric() ->sortable(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), Tables\Columns\TextColumn::make('updated_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\SelectFilter::make('semester') ->label('Semester') ->options([ 'first' => 'Ganjil', 'second' => 'Genap' ]), Tables\Filters\SelectFilter::make('teacher_subject_id') ->label('Guru per-Mapel') ->relationship('teacherSubject', 'id') ->searchable() ->getOptionLabelFromRecordUsing(fn (TeacherSubject $record) => $record->teacher->name . ' - ' . $record->subject->name) ->preload(), 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), ]) ->recordUrl(null) ->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 (Assessment $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\ListAssessments::route('/'), 'create' => Pages\CreateAssessment::route('/create'), 'edit' => Pages\EditAssessment::route('/{record}/edit'), 'multiple' => Pages\MultipleAssessments::route('/multiple'), ]; } public static function getNavigationLabel(): string { return 'Penilaian'; } public static function getBreadcrumb(): string { return 'Penilaian'; } public static function getPluralModelLabel(): string { return 'Penilaian'; } }