sistem-akademik/app/Filament/Widgets/AdminRankingWidgets.php

45 lines
1.3 KiB
PHP

<?php
namespace App\Filament\Widgets;
use App\Models\Student;
use Filament\Tables;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as BaseWidget;
class AdminRankingWidgets extends BaseWidget
{
protected static ?int $sort = 2;
public static function canView(): bool
{
return false;
}
// protected int | string | array $columnSpan = 'full'; // Atur lebar widget jika perlu
protected function getHeading(): string
{
return 'Ranking';
}
public function table(Table $table): Table
{
return $table
->query(
Student::select('students.id', 'students.full_name')
->join('assessments', 'students.id', '=', 'assessments.student_id')
->selectRaw('AVG(assessments.score) as average_score')
->groupBy('students.id', 'students.full_name')
->orderByDesc('average_score')
)
->columns([
Tables\Columns\TextColumn::make('full_name')
->label('Nama Siswa'),
Tables\Columns\TextColumn::make('average_score')
->label('Rata-rata Nilai')
->sortable()
->formatStateUsing(fn ($state) => number_format($state, 2)),
]);
}
}