diff --git a/app/Filament/Pages/Dashboard.php b/app/Filament/Pages/Dashboard.php
index b41e1495..b6cb76b4 100644
--- a/app/Filament/Pages/Dashboard.php
+++ b/app/Filament/Pages/Dashboard.php
@@ -13,7 +13,7 @@ public function getWidgets(): array
{
/** @var User $user */
$user = Auth::user();
- if ($user->hasRole('Mahasiswa')) { {
+ if ($user->hasRole('mahasiswa')) { {
return [
\App\Filament\Widgets\CustomAccountWidget::class,
];
diff --git a/app/Filament/Pages/ProgresDataPage.php b/app/Filament/Pages/ProgresDataPage.php
new file mode 100644
index 00000000..caf6f1f2
--- /dev/null
+++ b/app/Filament/Pages/ProgresDataPage.php
@@ -0,0 +1,88 @@
+user();
+ $data = Parameter::where('mahasiswa_id', $user->id)->first();
+
+ return $infolist
+ ->schema([
+ Section::make('Status Berkas')
+ ->schema([
+ Grid::make(2)
+ ->schema([
+ TextEntry::make('status')
+ ->label('Status Berkas')
+ ->badge()
+ ->color(fn (string $state): string => match ($state) {
+ 'valid' => 'success',
+ 'tidak_valid' => 'danger',
+ 'belum_validasi' => 'warning',
+ default => 'gray',
+ }),
+ TextEntry::make('hasil')
+ ->label('Hasil Seleksi')
+ ->badge()
+ ->color(fn (string $state): string => match ($state) {
+ 'Layak' => 'success',
+ 'Dipertimbangkan' => 'warning',
+ 'Tidak Layak' => 'danger',
+ default => 'gray',
+ }),
+ ]),
+ ]),
+ Section::make('Keterangan')
+ ->schema([
+ TextEntry::make('keterangan')
+ ->label('Informasi Progres')
+ ->markdown()
+ ->columnSpanFull(),
+ ]),
+ ])
+ ->state([
+ 'status' => $data?->status ?? 'belum_validasi',
+ 'hasil' => $data?->hasil ?? 'Belum Ada Hasil',
+ 'keterangan' => $data?->keterangan ?? 'Data Anda sedang dalam proses validasi',
+ ]);
+ }
+
+ public static function shouldRegisterNavigation(): bool
+ {
+ return false;
+ }
+
+ public static function getNavigationItems(): array
+ {
+ return [
+ NavigationItem::make('Info')
+ ->url(fn (): string => static::getUrl())
+ ->icon('heroicon-o-document-text')
+ ->isActiveWhen(fn (): bool => request()->routeIs(static::getRouteName()))
+ ->visible(fn (): bool => auth()->check() && auth()->user()->roles[0]->name == 'Mahasiswa'),
+ ];
+ }
+}
\ No newline at end of file
diff --git a/app/Filament/Pages/WizardForm.php b/app/Filament/Pages/WizardForm.php
index 74eaae52..25388f8d 100644
--- a/app/Filament/Pages/WizardForm.php
+++ b/app/Filament/Pages/WizardForm.php
@@ -32,6 +32,18 @@ class WizardForm extends Page
public function mount(): void
{
+ // Cek apakah mahasiswa sudah pernah mengisi form
+ $mahasiswa = Mahasiswa::where('user_id', auth()->id())->first();
+ if ($mahasiswa && $mahasiswa->parameter) {
+ Notification::make()
+ ->warning()
+ ->title('Peringatan')
+ ->body('Anda sudah pernah mengisi form pendaftaran KIP-K')
+ ->send();
+
+ $this->redirect('/admin/');
+ }
+
$this->form->fill();
}
@@ -216,6 +228,7 @@ public function submit()
try {
// Simpan data mahasiswa
$mahasiswa = Mahasiswa::create([
+ 'user_id' => auth()->id(),
'noreg_kipk' => $data['noreg_kipk'],
'nama' => $data['nama'],
'nim' => $data['nim'],
@@ -254,7 +267,7 @@ public function submit()
->body('Data berhasil disimpan')
->send();
- $this->redirect('/admin/parameters');
+ $this->redirect('/admin/');
} catch (\Exception $e) {
DB::rollBack();
diff --git a/app/Filament/Resources/FormulirResource.php b/app/Filament/Resources/FormulirResource.php
index 2384ae39..2322027e 100644
--- a/app/Filament/Resources/FormulirResource.php
+++ b/app/Filament/Resources/FormulirResource.php
@@ -17,15 +17,22 @@
use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Actions\Action;
+use Illuminate\Support\Facades\Auth;
class FormulirResource extends Resource
{
protected static ?string $model = Formulir::class;
protected static ?string $navigationIcon = 'heroicon-o-clipboard-document';
- protected static ?string $navigationGroup = 'Data Master';
- protected static ?string $slug = 'daftar-formulir';
protected static ?int $navigationSort = 5;
+ protected static ?string $slug = 'daftar-formulir';
+
+ public static function getNavigationGroup(): ?string
+ {
+ return auth()->user()->roles[0]->name === 'mahasiswa'
+ ? null
+ : 'Data Master';
+ }
public static function form(Form $form): Form
{
@@ -74,6 +81,13 @@ public static function table(Table $table): Table
->url(fn (Formulir $record): string => '/admin/wizard-form')
->openUrlInNewTab(false)
->visible(fn (Formulir $record): bool => $record->status === 'dibuka'),
+ Action::make('info')
+ ->label('Info')
+ ->icon('heroicon-o-information-circle')
+ ->color('warning')
+ ->url(fn (): string => '/admin/progres-data-page')
+ ->openUrlInNewTab(false)
+ ->visible(fn (): bool => Auth::user()->hasRole('mahasiswa')),
Action::make('toggleStatus')
->label(fn (Formulir $record): string => $record->status === 'dibuka' ? 'Tutup' : 'Buka')
->icon(fn (Formulir $record): string => $record->status === 'dibuka' ? 'heroicon-o-x-circle' : 'heroicon-o-check-circle')
@@ -82,7 +96,8 @@ public static function table(Table $table): Table
$record->update([
'status' => $record->status === 'dibuka' ? 'ditutup' : 'dibuka'
]);
- }),
+ })
+ ->visible(fn (): bool => Auth::user()->hasRole('super_admin')),
Tables\Actions\EditAction::make(),
])
->bulkActions([
diff --git a/app/Filament/Resources/PengumumanResource.php b/app/Filament/Resources/PengumumanResource.php
index a1e9ac61..584b8971 100644
--- a/app/Filament/Resources/PengumumanResource.php
+++ b/app/Filament/Resources/PengumumanResource.php
@@ -10,7 +10,7 @@
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\ViewColumn;
-use Illuminate\Database\Eloquent\Builder; // Add this line
+use Illuminate\Database\Eloquent\Builder;
class PengumumanResource extends Resource
{
diff --git a/app/Filament/Widgets/TestWidget.php b/app/Filament/Widgets/TestWidget.php
index 1f6a6f5d..a6a71af0 100644
--- a/app/Filament/Widgets/TestWidget.php
+++ b/app/Filament/Widgets/TestWidget.php
@@ -16,10 +16,11 @@ protected function getStats(): array
return [
Stat::make('Kriteria', Kriteria::count()),
Stat::make('SubKriteria', Subkriteria::count()),
- Stat::make('Jumlah Pendaftar', Mahasiswa::count())
+ Stat::make('Jumlah Pendaftar', Mahasiswa::has('parameter')->count())
->description('Total Mahasiswa yang telah mendaftar')
->color('info')
- ->chart(Mahasiswa::selectRaw('DATE(created_at) as date, COUNT(*) as total')
+ ->chart(Mahasiswa::has('parameter')
+ ->selectRaw('DATE(created_at) as date, COUNT(*) as total')
->groupBy('date')
->orderBy('date')
->pluck('total')
diff --git a/app/Models/Pengumuman.php b/app/Models/Pengumuman.php
new file mode 100644
index 00000000..911b8cc7
--- /dev/null
+++ b/app/Models/Pengumuman.php
@@ -0,0 +1,30 @@
+belongsTo(Parameter::class);
+ }
+
+ public function user(): BelongsTo
+ {
+ return $this->belongsTo(User::class);
+ }
+}
\ No newline at end of file
diff --git a/app/Models/mahasiswa.php b/app/Models/mahasiswa.php
index e6b6cdcb..2c3ca664 100644
--- a/app/Models/mahasiswa.php
+++ b/app/Models/mahasiswa.php
@@ -10,4 +10,9 @@ class Mahasiswa extends Model
use HasFactory;
protected $guarded = [];
+
+ public function parameter()
+ {
+ return $this->hasOne(Parameter::class);
+ }
}
diff --git a/config/filament-shield.php b/config/filament-shield.php
index 157bca4d..37b90493 100644
--- a/config/filament-shield.php
+++ b/config/filament-shield.php
@@ -4,7 +4,7 @@
'shield_resource' => [
'should_register_navigation' => true,
'slug' => 'shield/roles',
- 'navigation_sort' => -1,
+ 'navigation_sort' => 4,
'navigation_badge' => true,
'navigation_group' => true,
'is_globally_searchable' => false,
diff --git a/database/migrations/2025_02_17_154416_create_mahasiswas_table.php b/database/migrations/2025_02_17_154416_create_mahasiswas_table.php
index 84e001a2..58e70ca3 100644
--- a/database/migrations/2025_02_17_154416_create_mahasiswas_table.php
+++ b/database/migrations/2025_02_17_154416_create_mahasiswas_table.php
@@ -13,6 +13,7 @@ public function up(): void
{
Schema::create('mahasiswas', function (Blueprint $table) {
$table->id();
+ $table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
$table->string('noreg_kipk');
$table->string('nama');
$table->string('NIM');
diff --git a/database/migrations/2025_02_20_222432_create_pengumumans_table.php b/database/migrations/2025_02_20_222432_create_pengumumans_table.php
new file mode 100644
index 00000000..3b0c33cb
--- /dev/null
+++ b/database/migrations/2025_02_20_222432_create_pengumumans_table.php
@@ -0,0 +1,24 @@
+id();
+ $table->foreignId('parameter_id')->constrained('parameters')->cascadeOnDelete();
+ $table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
+ $table->text('keterangan')->nullable();
+ $table->timestamps();
+ });
+ }
+
+ public function down()
+ {
+ Schema::dropIfExists('pengumumans');
+ }
+};
\ No newline at end of file
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
index 76fe2e03..335ab544 100644
--- a/database/seeders/DatabaseSeeder.php
+++ b/database/seeders/DatabaseSeeder.php
@@ -17,7 +17,7 @@ public function run(): void
KriteriaSeeder::class,
SubKriteriaSeeder::class,
MahasiswaSeeder::class,
- SuperAdminPermissionSeeder::class,
+ // SuperAdminPermissionSeeder::class,
PermissionSeeder::class,
]);
}
diff --git a/database/seeders/MahasiswaSeeder.php b/database/seeders/MahasiswaSeeder.php
index 5a6e459c..1631515e 100644
--- a/database/seeders/MahasiswaSeeder.php
+++ b/database/seeders/MahasiswaSeeder.php
@@ -3,6 +3,7 @@
namespace Database\Seeders;
use App\Models\Mahasiswa;
+use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
@@ -13,6 +14,9 @@ class MahasiswaSeeder extends Seeder
*/
public function run(): void
{
+ // Ambil user dengan role mahasiswa
+ $users = User::role('mahasiswa')->get();
+
$mahasiswas = [
[
'noreg_kipk' => 'KIP001',
@@ -52,8 +56,12 @@ public function run(): void
],
];
- foreach ($mahasiswas as $mahasiswa) {
- Mahasiswa::create($mahasiswa);
+ foreach ($users as $index => $user) {
+ if (isset($mahasiswas[$index])) {
+ Mahasiswa::create(array_merge($mahasiswas[$index], [
+ 'user_id' => $user->id
+ ]));
+ }
}
}
}
diff --git a/database/seeders/PermissionSeeder.php b/database/seeders/PermissionSeeder.php
new file mode 100644
index 00000000..4153dd06
--- /dev/null
+++ b/database/seeders/PermissionSeeder.php
@@ -0,0 +1,151 @@
+delete();
+ DB::table('model_has_roles')->delete();
+ DB::table('role_has_permissions')->delete();
+ DB::table('permissions')->delete();
+ DB::table('roles')->delete();
+
+ // Permission untuk Parameter
+ $parameterPermissions = [
+ 'view_any_parameter',
+ 'view_parameter',
+ 'create_parameter',
+ 'update_parameter',
+ 'delete_parameter',
+ 'delete_any_parameter',
+ 'force_delete_parameter',
+ 'force_delete_any_parameter',
+ 'restore_parameter',
+ 'restore_any_parameter',
+ 'replicate_parameter',
+ 'reorder_parameter'
+ ];
+
+ // Permission untuk Hasil
+ $hasilPermissions = [
+ 'view_any_hasil',
+ 'view_hasil',
+ 'create_hasil',
+ 'update_hasil',
+ 'delete_hasil',
+ 'delete_any_hasil',
+ 'force_delete_hasil',
+ 'force_delete_any_hasil',
+ 'restore_hasil',
+ 'restore_any_hasil',
+ 'replicate_hasil',
+ 'reorder_hasil'
+ ];
+
+ // Permission untuk Pengumuman
+ $pengumumanPermissions = [
+ 'view_any_pengumuman',
+ 'view_pengumuman',
+ 'create_pengumuman',
+ 'update_pengumuman',
+ 'delete_pengumuman',
+ 'delete_any_pengumuman',
+ 'force_delete_pengumuman',
+ 'force_delete_any_pengumuman',
+ 'restore_pengumuman',
+ 'restore_any_pengumuman',
+ 'replicate_pengumuman',
+ 'reorder_pengumuman'
+ ];
+
+ // Permission untuk Mahasiswa
+ $mahasiswaPermissions = [
+ 'view_any_mahasiswa',
+ 'view_mahasiswa',
+ 'create_mahasiswa',
+ 'update_mahasiswa',
+ 'delete_mahasiswa',
+ 'delete_any_mahasiswa',
+ 'force_delete_mahasiswa',
+ 'force_delete_any_mahasiswa',
+ 'restore_mahasiswa',
+ 'restore_any_mahasiswa',
+ 'replicate_mahasiswa',
+ 'reorder_mahasiswa'
+ ];
+
+ // Permission untuk Kriteria
+ $kriteriaPermissions = [
+ 'view_any_kriteria',
+ 'view_kriteria',
+ 'create_kriteria',
+ 'update_kriteria',
+ 'delete_kriteria',
+ 'delete_any_kriteria',
+ 'force_delete_kriteria',
+ 'force_delete_any_kriteria',
+ 'restore_kriteria',
+ 'restore_any_kriteria',
+ 'replicate_kriteria',
+ 'reorder_kriteria'
+ ];
+
+ // Permission untuk SubKriteria
+ $subKriteriaPermissions = [
+ 'view_any_subkriteria',
+ 'view_subkriteria',
+ 'create_subkriteria',
+ 'update_subkriteria',
+ 'delete_subkriteria',
+ 'delete_any_subkriteria',
+ 'force_delete_subkriteria',
+ 'force_delete_any_subkriteria',
+ 'restore_subkriteria',
+ 'restore_any_subkriteria',
+ 'replicate_subkriteria',
+ 'reorder_subkriteria'
+ ];
+
+ // Gabungkan semua permission
+ $allPermissions = array_merge(
+ $parameterPermissions,
+ $hasilPermissions,
+ $pengumumanPermissions,
+ $mahasiswaPermissions,
+ $kriteriaPermissions,
+ $subKriteriaPermissions
+ );
+
+ // Buat permission
+ foreach ($allPermissions as $permission) {
+ Permission::create(['name' => $permission]);
+ }
+
+ // Buat role Super Admin dan berikan semua permission
+ $superAdmin = Role::create(['name' => 'super_admin']);
+ $superAdmin->syncPermissions($allPermissions);
+
+ // Buat role Admin dan berikan permission yang diperlukan
+ $admin = Role::create(['name' => 'admin']);
+ $admin->syncPermissions(array_merge(
+ $parameterPermissions,
+ $hasilPermissions,
+ $pengumumanPermissions
+ ));
+
+ // Buat role Mahasiswa dan berikan permission yang diperlukan
+ $mahasiswa = Role::create(['name' => 'mahasiswa']);
+ $mahasiswa->syncPermissions($pengumumanPermissions);
+ }
+}
\ No newline at end of file
diff --git a/database/seeders/UserSeeder.php b/database/seeders/UserSeeder.php
index 2ffe25b5..63b13643 100644
--- a/database/seeders/UserSeeder.php
+++ b/database/seeders/UserSeeder.php
@@ -13,22 +13,38 @@ class UserSeeder extends Seeder
*/
public function run(): void
{
- // Hapus data yang sudah ada jika ingin fresh data
- User::truncate();
+ // Buat Super Admin
+ $superAdmin = User::create([
+ 'name' => 'Admin',
+ 'email' => 'pengelola@admin.com',
+ 'password' => Hash::make('12345678'),
+ 'email_verified_at' => now()
+ ]);
+ $superAdmin->assignRole('super_admin');
- // Cek apakah email sudah ada
- if (!User::where('email', 'najwa@admin.com')->exists()) {
- $user = User::create([
- 'name' => 'Najwa',
- 'email' => 'najwa@admin.com',
+ // Buat Admin
+ $admin = User::create([
+ 'name' => 'Admin',
+ 'email' => 'admin@admin.com',
+ 'password' => Hash::make('12345678'),
+ 'email_verified_at' => now()
+ ]);
+ $admin->assignRole('admin');
+
+ // Buat beberapa mahasiswa
+ $mahasiswas = [
+ [
+ 'name' => 'Ahmad Fauzi',
+ 'email' => 'ahmad@user.com',
'password' => Hash::make('12345678'),
'email_verified_at' => now()
- ]);
+ ],
+
+ ];
- // Berikan role super_admin
- $user->assignRole('super_admin');
+ foreach ($mahasiswas as $mahasiswa) {
+ $user = User::create($mahasiswa);
+ $user->assignRole('mahasiswa');
}
-
- // Tambahkan user lain jika diperlukan
}
}
diff --git a/resources/views/filament/pages/progres-data-page.blade.php b/resources/views/filament/pages/progres-data-page.blade.php
new file mode 100644
index 00000000..2f207179
--- /dev/null
+++ b/resources/views/filament/pages/progres-data-page.blade.php
@@ -0,0 +1,26 @@
+
+
+
+
Informasi Status
+ {{ $this->infolist }}
+
+
+
+
Status Progres
+
+
+
+ Data Anda sedang dalam proses validasi
+
+
+
+ Tim akan memeriksa kelengkapan dokumen Anda
+
+
+
+ Hasil seleksi akan diumumkan sesuai jadwal
+
+
+
+
+
\ No newline at end of file
diff --git a/resources/views/filament/resources/pengumuman-resource/pages/progres-data-page.blade.php b/resources/views/filament/resources/pengumuman-resource/pages/progres-data-page.blade.php
new file mode 100644
index 00000000..6ceaf40a
--- /dev/null
+++ b/resources/views/filament/resources/pengumuman-resource/pages/progres-data-page.blade.php
@@ -0,0 +1,26 @@
+
+