dashboard done

This commit is contained in:
annajwasz 2025-03-23 02:01:02 +07:00
parent f0df7e3f2d
commit fae905acd6
11 changed files with 312 additions and 3 deletions

View File

@ -0,0 +1,8 @@
<?php
namespace App\Filament\Pages;
class Dashboard extends \Filament\Pages\Dashboard
{
protected static ?string $title = 'Beranda';
}

View File

@ -0,0 +1,70 @@
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\PengumumanResource\Pages;
use App\Models\Parameter;
use Filament\Forms\Form;
use Filament\Resources\Resource;
use Filament\Tables;
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\ViewColumn;
class PengumumanResource extends Resource
{
protected static ?string $model = Parameter::class;
protected static ?string $navigationIcon = 'heroicon-o-document-text';
protected static ?string $navigationGroup = 'Penilaian';
protected static ?string $navigationLabel = 'Pengumuman';
protected static ?int $navigationSort = 3;
protected static ?string $slug = 'pengumuman';
protected static ?string $modelLabel = 'Pengumuman';
protected static ?string $pluralModelLabel = 'Pengumuman';
protected static ?string $breadcrumb = 'Pengumuman';
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('mahasiswa.nama')
->label('Nama Mahasiswa')
->searchable()
->sortable(),
TextColumn::make('status')
->label('Status Berkas')
->badge()
->color(fn (string $state): string => match ($state) {
'valid' => 'success',
'tidak_valid' => 'danger',
'belum_validasi' => 'warning',
default => 'gray',
}),
TextColumn::make('hasil')
->label('Hasil Seleksi')
->badge()
->color(fn (string $state): string => match ($state) {
'Layak' => 'success',
'Dipertimbangkan' => 'warning',
'Tidak Layak' => 'danger',
default => 'gray',
}),
ViewColumn::make('keterangan')
->label('Keterangan')
->view('filament.tables.columns.keterangan-pengumuman'),
])
->defaultSort('total_nilai', 'desc');
}
public static function getPages(): array
{
return [
'index' => Pages\ListPengumuman::route('/'),
];
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace App\Filament\Resources\PengumumanResource\Pages;
use App\Filament\Resources\PengumumanResource;
use Filament\Resources\Pages\ListRecords;
class ListPengumuman extends ListRecords
{
protected static string $resource = PengumumanResource::class;
}

View File

@ -0,0 +1,10 @@
<?php
namespace App\Filament\Widgets;
use Filament\Widgets\AccountWidget as BaseWidget;
class CustomAccountWidget extends BaseWidget
{
protected int | string | array $columnSpan = 'full';
}

View File

@ -0,0 +1,56 @@
<?php
namespace App\Filament\Widgets;
use App\Filament\Resources\SubKriteriaResource;
use Filament\Tables;
use Filament\Tables\Table;
use Filament\Widgets\TableWidget as BaseWidget;
use Filament\Tables\Columns\TextColumn;
class DataMaster extends BaseWidget
{
protected static ?int $sort = 5;
protected static ?string $maxHeight = null;
protected int | string | array $columnSpan = 'full';
protected static bool $isLazy = false;
public function table(Table $table): Table
{
return $table
->query(SubKriteriaResource::getEloquentQuery())
->defaultPaginationPageOption(5)
->columns([
TextColumn::make('kriteria.nama')
->label('Kriteria')
->sortable()
->searchable(),
TextColumn::make('nama')
->label('Sub Kriteria')
->sortable()
->searchable(),
TextColumn::make('deskripsi')
->sortable()
->searchable(),
TextColumn::make('prioritas')
->label('Prioritas')
->sortable(),
TextColumn::make('bobot')
->label('Bobot')
->formatStateUsing(fn ($state) => number_format($state, 4))
->sortable(),
])
->contentGrid([
'md' => 2,
'lg' => 3,
'xl' => 4,
])
->striped();
}
public static function canView(): bool
{
return true;
}
}

View File

@ -0,0 +1,40 @@
<?php
namespace App\Filament\Widgets;
use App\Models\Kriteria;
use App\Models\Mahasiswa;
use App\Models\SubKriteria;
use App\Models\parameter;
use Filament\Widgets\StatsOverviewWidget as BaseWidget;
use Filament\Widgets\StatsOverviewWidget\Stat;
class TestWidget extends BaseWidget
{
protected function getStats(): array
{
return [
Stat::make('Kriteria', Kriteria::count()),
Stat::make('SubKriteria', Subkriteria::count()),
Stat::make('Jumlah Pendaftar', Mahasiswa::count())
->description('Total Mahasiswa yang telah mendaftar')
->color('info')
->chart(Mahasiswa::selectRaw('DATE(created_at) as date, COUNT(*) as total')
->groupBy('date')
->orderBy('date')
->pluck('total')
->toArray()),
Stat::make('Validasi Data', Parameter::whereIn('status', ['valid', 'tidak_valid'])->count() . '/' . Parameter::count())
->description('Total data yang telah divalidasi')
// ->descriptionIcon('heroicon-m-check-circle')
->color('info')
->chart(Parameter::selectRaw('DATE(created_at) as date, COUNT(*) as total')
->whereIn('status', ['valid', 'tidak_valid'])
->groupBy('date')
->orderBy('date')
->pluck('total')
->toArray()),
];
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Controllers;
use App\Models\Parameter;
use Illuminate\Http\Request;
class PengumumanController extends Controller
{
public function show()
{
$pengumuman = Parameter::where('mahasiswa_id', auth()->user()->mahasiswa->id)
->first();
return view('pengumuman', compact('pengumuman'));
}
}

View File

@ -18,6 +18,7 @@
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;
use App\Filament\Pages\WizardForm;
use App\Filament\Widgets\CustomAccountWidget;
class AdminPanelProvider extends PanelProvider
{
@ -34,13 +35,13 @@ public function panel(Panel $panel): Panel
->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
->pages([
Pages\Dashboard::class,
// Pages\Dashboard::class,
WizardForm::class,
])
->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
->widgets([
Widgets\AccountWidget::class,
Widgets\FilamentInfoWidget::class,
CustomAccountWidget::class,
// Widgets\FilamentInfoWidget::class,
])
->spa()
->middleware([

View File

@ -0,0 +1,31 @@
@php
$record = $getRecord();
@endphp
@if($record->status === 'tidak_valid')
<div class="text-danger-600">
Mohon maaf, berkas Anda dinyatakan tidak valid.
@if($record->alasan_tidak_valid)
<br>
<small>Alasan: {{ $record->alasan_tidak_valid }}</small>
@endif
</div>
@elseif($record->status === 'valid')
@if($record->hasil === 'Layak')
<div class="text-success-600">
Selamat! Anda dinyatakan LULUS seleksi dan berhak menerima KIP-K.
</div>
@elseif($record->hasil === 'Dipertimbangkan')
<div class="text-warning-600">
Anda masuk dalam daftar pertimbangan. Mohon tunggu pengumuman selanjutnya.
</div>
@else
<div class="text-danger-600">
Mohon maaf, Anda dinyatakan TIDAK LULUS seleksi KIP-K.
</div>
@endif
@else
<div class="text-gray-500">
Berkas Anda masih dalam proses validasi.
</div>
@endif

View File

@ -0,0 +1,60 @@
<x-app-layout>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-xl sm:rounded-lg p-6">
<h2 class="text-2xl font-bold mb-4">Hasil Pengumuman KIP-K</h2>
@if($pengumuman)
<div class="mb-4">
<h3 class="font-semibold">Status Berkas:</h3>
<div class="mt-2">
@if($pengumuman->status === 'valid')
<span class="px-2 py-1 bg-green-100 text-green-800 rounded">Valid</span>
@elseif($pengumuman->status === 'tidak_valid')
<span class="px-2 py-1 bg-red-100 text-red-800 rounded">Tidak Valid</span>
@else
<span class="px-2 py-1 bg-yellow-100 text-yellow-800 rounded">Dalam Proses Validasi</span>
@endif
</div>
</div>
@if($pengumuman->status === 'tidak_valid')
<div class="mt-4 p-4 bg-red-50 text-red-700 rounded">
<p class="font-semibold">Mohon maaf, berkas Anda dinyatakan tidak valid.</p>
@if($pengumuman->alasan_tidak_valid)
<p class="mt-2">Alasan: {{ $pengumuman->alasan_tidak_valid }}</p>
@endif
</div>
@elseif($pengumuman->status === 'valid')
<div class="mt-4">
<h3 class="font-semibold">Hasil Seleksi:</h3>
<div class="mt-4">
@if($pengumuman->hasil === 'Layak')
<div class="p-4 bg-green-50 text-green-700 rounded">
<p class="font-semibold">Selamat! Anda dinyatakan LULUS seleksi dan berhak menerima KIP-K.</p>
</div>
@elseif($pengumuman->hasil === 'Dipertimbangkan')
<div class="p-4 bg-yellow-50 text-yellow-700 rounded">
<p class="font-semibold">Anda masuk dalam daftar pertimbangan. Mohon tunggu pengumuman selanjutnya.</p>
</div>
@else
<div class="p-4 bg-red-50 text-red-700 rounded">
<p class="font-semibold">Mohon maaf, Anda dinyatakan TIDAK LULUS seleksi KIP-K.</p>
</div>
@endif
</div>
</div>
@else
<div class="mt-4 p-4 bg-gray-50 text-gray-700 rounded">
<p>Berkas Anda masih dalam proses validasi. Silakan cek kembali nanti.</p>
</div>
@endif
@else
<div class="p-4 bg-yellow-50 text-yellow-700 rounded">
<p>Anda belum mengajukan pendaftaran KIP-K.</p>
</div>
@endif
</div>
</div>
</div>
</x-app-layout>

View File

@ -3,6 +3,7 @@
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use App\Http\Controllers\PdfViewController;
use App\Http\Controllers\PengumumanController;
Route::get('/', function () {
return view('welcome');
@ -23,3 +24,7 @@
'Content-Disposition' => 'inline; filename="' . basename($path) . '"'
]);
})->where('path', '.*');
Route::middleware(['auth'])->group(function () {
Route::get('/pengumuman', [PengumumanController::class, 'show'])->name('pengumuman');
});