From 183a7bf01b510c0d1a33cb9b6dc369224224a243 Mon Sep 17 00:00:00 2001 From: annajwasz Date: Fri, 9 May 2025 14:23:58 +0700 Subject: [PATCH] fixing set kuota akreditasi --- app/Filament/Pages/WizardForm.php | 42 ++- app/Filament/Resources/HasilResource.php | 166 +++++++--- .../HasilResource/Pages/HasilAkreditasiA.php | 158 +++++++++ .../HasilResource/Pages/HasilAkreditasiB.php | 159 ++++++++++ .../HasilResource/Pages/HasilAkreditasiC.php | 159 ++++++++++ app/Filament/Resources/MahasiswaResource.php | 21 +- app/Filament/Resources/ParameterResource.php | 22 +- .../Pages/ListParameters.php | 2 + app/Models/Jurusan.php | 25 ++ app/Models/Prodi.php | 27 ++ app/Models/mahasiswa.php | 29 +- app/Models/parameter.php | 16 +- composer.json | 1 + composer.lock | 299 +++++++++++++++++- ...025_02_17_154414_create_jurusans_table.php | 22 ++ .../2025_02_17_154415_create_prodis_table.php | 24 ++ ...5_02_17_154416_create_mahasiswas_table.php | 6 +- database/seeders/DatabaseSeeder.php | 2 + database/seeders/JurusanSeeder.php | 28 ++ database/seeders/MahasiswaSeeder.php | 100 +++--- database/seeders/ProdiSeeder.php | 174 ++++++++++ .../views/exports/hasil-penilaian.blade.php | 175 ++++++++++ 22 files changed, 1520 insertions(+), 137 deletions(-) create mode 100644 app/Filament/Resources/HasilResource/Pages/HasilAkreditasiA.php create mode 100644 app/Filament/Resources/HasilResource/Pages/HasilAkreditasiB.php create mode 100644 app/Filament/Resources/HasilResource/Pages/HasilAkreditasiC.php create mode 100644 app/Models/Jurusan.php create mode 100644 app/Models/Prodi.php create mode 100644 database/migrations/2025_02_17_154414_create_jurusans_table.php create mode 100644 database/migrations/2025_02_17_154415_create_prodis_table.php create mode 100644 database/seeders/JurusanSeeder.php create mode 100644 database/seeders/ProdiSeeder.php create mode 100644 resources/views/exports/hasil-penilaian.blade.php diff --git a/app/Filament/Pages/WizardForm.php b/app/Filament/Pages/WizardForm.php index 25388f8d..992c0cc2 100644 --- a/app/Filament/Pages/WizardForm.php +++ b/app/Filament/Pages/WizardForm.php @@ -4,6 +4,8 @@ use App\Models\Parameter; use App\Models\Mahasiswa; +use App\Models\Jurusan; +use App\Models\Prodi; use Filament\Forms\Components\Wizard; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Select; @@ -57,10 +59,36 @@ public function form(Form $form): Form TextInput::make('noreg_kipk')->label('No. Registrasi KIP-K')->required(), TextInput::make('nama')->label('Nama Lengkap')->required(), TextInput::make('nim')->label('NIM')->required(), - TextInput::make('jurusan')->label('Jurusan')->required(), - TextInput::make('prodi')->label('Program Studi')->required(), + Select::make('jurusan_id') + ->label('Jurusan') + ->options(Jurusan::all()->pluck('nama', 'id')) + ->required() + ->reactive() + ->afterStateUpdated(fn (callable $set) => $set('prodi_id', null)), + Select::make('prodi_id') + ->label('Program Studi') + ->options(function (callable $get) { + $jurusanId = $get('jurusan_id'); + if (!$jurusanId) { + return []; + } + return Prodi::where('jurusan_id', $jurusanId) + ->pluck('nama', 'id'); + }) + ->required() + ->reactive() + ->afterStateUpdated(function (callable $set, callable $get) { + $prodiId = $get('prodi_id'); + if ($prodiId) { + $prodi = Prodi::find($prodiId); + $set('akreditasi', $prodi->akreditasi); + } + }), + TextInput::make('akreditasi') + ->label('Akreditasi Prodi') + ->disabled() + ->required(), TextInput::make('angkatan')->label('Angkatan')->required(), - TextInput::make('semester')->label('Semester')->required(), TextInput::make('jalur_masuk')->label('Jalur Masuk')->required(), TextInput::make('ponsel')->label('No. Handphone')->tel()->required(), TextInput::make('alamat')->label('Alamat')->required(), @@ -231,11 +259,11 @@ public function submit() 'user_id' => auth()->id(), 'noreg_kipk' => $data['noreg_kipk'], 'nama' => $data['nama'], - 'nim' => $data['nim'], - 'jurusan' => $data['jurusan'], - 'prodi' => $data['prodi'], + 'NIM' => $data['nim'], + 'jurusan_id' => $data['jurusan_id'], + 'prodi_id' => $data['prodi_id'], + 'akreditasi' => $data['akreditasi'] ?? Prodi::find($data['prodi_id'])->akreditasi, 'angkatan' => $data['angkatan'], - 'semester' => $data['semester'], 'jalur_masuk' => $data['jalur_masuk'], 'ponsel' => $data['ponsel'], 'alamat' => $data['alamat'], diff --git a/app/Filament/Resources/HasilResource.php b/app/Filament/Resources/HasilResource.php index a822dcc8..f92e7d11 100644 --- a/app/Filament/Resources/HasilResource.php +++ b/app/Filament/Resources/HasilResource.php @@ -32,63 +32,102 @@ public static function table(Table $table): Table { return $table ->headerActions([ - Tables\Actions\Action::make('setKuota') - ->label('Set Kuota Penerimaan') - ->form([ - TextInput::make('kuota') - ->label('Jumlah Kuota') - ->numeric() - ->required() - ->minValue(1) - ->helperText('Masukkan jumlah kuota penerimaan. Hanya mahasiswa dengan nilai tertinggi dan berkas valid yang akan diterima.'), - ]) - ->action(function (array $data): void { - DB::beginTransaction(); - try { - // Reset semua hasil terlebih dahulu - Parameter::query()->update(['hasil' => 'Tidak Layak']); + Tables\Actions\Action::make('exportPdf') + ->label('Export PDF') + ->icon('heroicon-o-document-arrow-down') + ->color('info') + ->action(function () { + $data = Parameter::with(['mahasiswa.jurusan', 'mahasiswa.prodi']) + ->where('status', 'valid') + ->orderBy('total_nilai', 'desc') + ->get(); - // Ambil semua data parameter yang valid dan urutkan berdasarkan total nilai - $validParameters = Parameter::where('status', 'valid') - ->orderBy('total_nilai', 'desc') - ->get(); + $pdf = \PDF::loadView('exports.hasil-penilaian', [ + 'data' => $data, + 'title' => 'Hasil Penilaian KIPK', + 'date' => now()->format('d F Y'), + ]); - $kuota = (int) $data['kuota']; - $index = 0; + return response()->streamDownload(function () use ($pdf) { + echo $pdf->output(); + }, 'hasil-penilaian-' . now()->format('Y-m-d') . '.pdf'); + }), - foreach ($validParameters as $parameter) { - // Gunakan update langsung ke database untuk memastikan perubahan tersimpan - if ($index < $kuota) { - DB::table('parameters') - ->where('id', $parameter->id) - ->update(['hasil' => 'Layak']); - } elseif ($index < ($kuota + 3)) { - DB::table('parameters') - ->where('id', $parameter->id) - ->update(['hasil' => 'Dipertimbangkan']); - } - $index++; - } + Tables\Actions\Action::make('akreditasiA') + ->label('Set Akreditasi A') + ->url(fn () => route('filament.admin.resources.hasil-penilaian.akreditasi-a')) + ->color('success') + ->icon('heroicon-o-bookmark'), + + Tables\Actions\Action::make('akreditasiB') + ->label('Set Akreditasi B') + ->url(fn () => route('filament.admin.resources.hasil-penilaian.akreditasi-b')) + ->color('warning') + ->icon('heroicon-o-bookmark'), + + Tables\Actions\Action::make('akreditasiC') + ->label('Set Akreditasi C') + ->url(fn () => route('filament.admin.resources.hasil-penilaian.akreditasi-c')) + ->color('danger') + ->icon('heroicon-o-bookmark'), + + // Tables\Actions\Action::make('setKuota') + // ->label('Set Kuota Penerimaan') + // ->form([ + // TextInput::make('kuota') + // ->label('Jumlah Kuota') + // ->numeric() + // ->required() + // ->minValue(1) + // ->helperText('Masukkan jumlah kuota penerimaan. Hanya mahasiswa dengan nilai tertinggi dan berkas valid yang akan diterima.'), + // ]) + // ->action(function (array $data): void { + // DB::beginTransaction(); + // try { + // // Reset semua hasil terlebih dahulu + // Parameter::query()->update(['hasil' => 'Tidak Layak']); - DB::commit(); + // // Ambil semua data parameter yang valid dan urutkan berdasarkan total nilai + // $validParameters = Parameter::where('status', 'valid') + // ->orderBy('total_nilai', 'desc') + // ->get(); - Notification::make() - ->title("Berhasil mengatur kuota penerimaan untuk {$kuota} mahasiswa") - ->success() - ->send(); - } catch (\Exception $e) { - DB::rollBack(); - Notification::make() - ->title('Terjadi kesalahan: ' . $e->getMessage()) - ->danger() - ->send(); - } - }) - ->requiresConfirmation() - ->modalHeading('Set Kuota Penerimaan') - ->modalDescription('Apakah Anda yakin ingin mengatur kuota penerimaan? Tindakan ini akan mengubah status kelayakan semua mahasiswa.') - ->modalSubmitActionLabel('Ya, Set Kuota') - ->successNotificationTitle('Kuota berhasil diatur'), + // $kuota = (int) $data['kuota']; + // $index = 0; + + // foreach ($validParameters as $parameter) { + // // Gunakan update langsung ke database untuk memastikan perubahan tersimpan + // if ($index < $kuota) { + // DB::table('parameters') + // ->where('id', $parameter->id) + // ->update(['hasil' => 'Layak']); + // } elseif ($index < ($kuota + 3)) { + // DB::table('parameters') + // ->where('id', $parameter->id) + // ->update(['hasil' => 'Dipertimbangkan']); + // } + // $index++; + // } + + // DB::commit(); + + // Notification::make() + // ->title("Berhasil mengatur kuota penerimaan untuk {$kuota} mahasiswa") + // ->success() + // ->send(); + // } catch (\Exception $e) { + // DB::rollBack(); + // Notification::make() + // ->title('Terjadi kesalahan: ' . $e->getMessage()) + // ->danger() + // ->send(); + // } + // }) + // ->requiresConfirmation() + // ->modalHeading('Set Kuota Penerimaan') + // ->modalDescription('Apakah Anda yakin ingin mengatur kuota penerimaan? Tindakan ini akan mengubah status kelayakan semua mahasiswa.') + // ->modalSubmitActionLabel('Ya, Set Kuota') + // ->successNotificationTitle('Kuota berhasil diatur'), ]) ->modifyQueryUsing(fn ($query) => $query->where('status', 'valid')) ->columns([ @@ -102,6 +141,21 @@ public static function table(Table $table): Table ->searchable() ->sortable(), + TextColumn::make('mahasiswa.jurusan.nama') + ->label('Jurusan') + ->searchable() + ->sortable(), + + TextColumn::make('mahasiswa.prodi.nama') + ->label('Program Studi') + ->searchable() + ->sortable(), + + TextColumn::make('mahasiswa.prodi.akreditasi') + ->label('Akreditasi Prodi') + ->searchable() + ->sortable(), + TextColumn::make('total_nilai') ->label('Total Nilai') ->formatStateUsing(fn ($state) => number_format($state, 4)) @@ -115,6 +169,11 @@ public static function table(Table $table): Table 'Dipertimbangkan' => 'warning', 'Tidak Layak' => 'danger', default => 'gray', + }) + ->formatStateUsing(fn (string $state): string => match ($state) { + 'Layak' => 'Diterima', + 'Tidak Layak' => 'Tidak Diterima', + default => $state, }), ]) ->defaultSort('total_nilai', 'desc') @@ -132,6 +191,9 @@ public static function getPages(): array { return [ 'index' => Pages\ListHasil::route('/'), + 'akreditasi-a' => Pages\HasilAkreditasiA::route('/akreditasi-a'), + 'akreditasi-b' => Pages\HasilAkreditasiB::route('/akreditasi-b'), + 'akreditasi-c' => Pages\HasilAkreditasiC::route('/akreditasi-c'), ]; } } \ No newline at end of file diff --git a/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiA.php b/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiA.php new file mode 100644 index 00000000..050f0c8d --- /dev/null +++ b/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiA.php @@ -0,0 +1,158 @@ +headerActions([ + Action::make('setKuota') + ->label('Set Kuota Penerimaan') + ->form([ + TextInput::make('kuota') + ->label('Jumlah Kuota') + ->numeric() + ->required() + ->minValue(1) + ->helperText('Masukkan jumlah kuota penerimaan untuk akreditasi A.'), + ]) + ->action(function (array $data): void { + DB::beginTransaction(); + try { + // Reset hasil untuk akreditasi A + Parameter::whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'A'); + })->update(['hasil' => 'Tidak Layak']); + + // Ambil data parameter yang valid dengan akreditasi A + $validParameters = Parameter::where('status', 'valid') + ->whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'A'); + }) + ->orderBy('total_nilai', 'desc') + ->get(); + + $kuota = (int) $data['kuota']; + $index = 0; + + foreach ($validParameters as $parameter) { + if ($index < $kuota) { + DB::table('parameters') + ->where('id', $parameter->id) + ->update(['hasil' => 'Layak']); + } elseif ($index < ($kuota + 3)) { + DB::table('parameters') + ->where('id', $parameter->id) + ->update(['hasil' => 'Dipertimbangkan']); + } + $index++; + } + + DB::commit(); + + Notification::make() + ->title("Berhasil mengatur kuota penerimaan untuk {$kuota} mahasiswa akreditasi A") + ->success() + ->send(); + } catch (\Exception $e) { + DB::rollBack(); + Notification::make() + ->title('Terjadi kesalahan: ' . $e->getMessage()) + ->danger() + ->send(); + } + }) + ->requiresConfirmation() + ->modalHeading('Set Kuota Penerimaan Akreditasi A') + ->modalDescription('Apakah Anda yakin ingin mengatur kuota penerimaan untuk akreditasi A?') + ->modalSubmitActionLabel('Ya, Set Kuota') + ->successNotificationTitle('Kuota berhasil diatur'), + + Action::make('resetKuota') + ->label('Reset') + ->color('danger') + ->icon('heroicon-o-arrow-path') + ->action(function (): void { + DB::beginTransaction(); + try { + Parameter::whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'A'); + })->update(['hasil' => null]); + + DB::commit(); + + Notification::make() + ->title('Berhasil mereset hasil kuota penerimaan') + ->success() + ->send(); + } catch (\Exception $e) { + DB::rollBack(); + Notification::make() + ->title('Terjadi kesalahan: ' . $e->getMessage()) + ->danger() + ->send(); + } + }) + ->requiresConfirmation() + ->modalHeading('Reset Kuota Penerimaan') + ->modalDescription('Apakah Anda yakin ingin mereset hasil kuota penerimaan? Semua hasil akan dikosongkan.') + ->modalSubmitActionLabel('Ya, Reset Kuota') + ->successNotificationTitle('Kuota berhasil direset'), + ]) + ->modifyQueryUsing(fn ($query) => $query->where('status', 'valid') + ->whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'A'); + })) + ->columns([ + TextColumn::make('no') + ->label('No.') + ->rowIndex(false) + ->alignCenter(), + + TextColumn::make('mahasiswa.nama') + ->label('Nama Mahasiswa') + ->searchable() + ->sortable(), + + TextColumn::make('total_nilai') + ->label('Total Nilai') + ->formatStateUsing(fn ($state) => number_format($state, 4)) + ->sortable(), + + TextColumn::make('hasil') + ->label('Hasil') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'Layak' => 'success', + 'Dipertimbangkan' => 'warning', + 'Tidak Layak' => 'danger', + default => 'gray', + }), + ]) + ->defaultSort('total_nilai', 'desc') + ->filters([ + \Filament\Tables\Filters\SelectFilter::make('hasil') + ->options([ + 'Layak' => 'Layak', + 'Dipertimbangkan' => 'Dipertimbangkan', + 'Tidak Layak' => 'Tidak Layak', + ]), + ]); + } +} \ No newline at end of file diff --git a/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiB.php b/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiB.php new file mode 100644 index 00000000..d888dc90 --- /dev/null +++ b/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiB.php @@ -0,0 +1,159 @@ +headerActions([ + Action::make('setKuota') + ->label('Set Kuota Penerimaan') + ->form([ + TextInput::make('kuota') + ->label('Jumlah Kuota') + ->numeric() + ->required() + ->minValue(1) + ->helperText('Masukkan jumlah kuota penerimaan untuk akreditasi B.'), + ]) + ->action(function (array $data): void { + DB::beginTransaction(); + try { + // Reset hasil untuk akreditasi B + Parameter::whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'B'); + })->update(['hasil' => 'Tidak Layak']); + + // Ambil data parameter yang valid dengan akreditasi B + $validParameters = Parameter::where('status', 'valid') + ->whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'B'); + }) + ->orderBy('total_nilai', 'desc') + ->get(); + + $kuota = (int) $data['kuota']; + $index = 0; + + foreach ($validParameters as $parameter) { + if ($index < $kuota) { + DB::table('parameters') + ->where('id', $parameter->id) + ->update(['hasil' => 'Layak']); + } elseif ($index < ($kuota + 3)) { + DB::table('parameters') + ->where('id', $parameter->id) + ->update(['hasil' => 'Dipertimbangkan']); + } + $index++; + } + + DB::commit(); + + Notification::make() + ->title("Berhasil mengatur kuota penerimaan untuk {$kuota} mahasiswa akreditasi B") + ->success() + ->send(); + } catch (\Exception $e) { + DB::rollBack(); + Notification::make() + ->title('Terjadi kesalahan: ' . $e->getMessage()) + ->danger() + ->send(); + } + }) + ->requiresConfirmation() + ->modalHeading('Set Kuota Penerimaan Akreditasi B') + ->modalDescription('Apakah Anda yakin ingin mengatur kuota penerimaan untuk akreditasi B?') + ->modalSubmitActionLabel('Ya, Set Kuota') + ->successNotificationTitle('Kuota berhasil diatur'), + + Action::make('resetKuota') + ->label('Reset') + ->color('danger') + ->icon('heroicon-o-arrow-path') + ->action(function (): void { + DB::beginTransaction(); + try { + Parameter::whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'B'); + })->update(['hasil' => null]); + + DB::commit(); + + Notification::make() + ->title('Berhasil mereset hasil kuota penerimaan') + ->success() + ->send(); + } catch (\Exception $e) { + DB::rollBack(); + Notification::make() + ->title('Terjadi kesalahan: ' . $e->getMessage()) + ->danger() + ->send(); + } + }) + ->requiresConfirmation() + ->modalHeading('Reset Kuota Penerimaan') + ->modalDescription('Apakah Anda yakin ingin mereset hasil kuota penerimaan? Semua hasil akan dikosongkan.') + ->modalSubmitActionLabel('Ya, Reset Kuota') + ->successNotificationTitle('Kuota berhasil direset'), + ]) + ->modifyQueryUsing(fn ($query) => $query->where('status', 'valid') + ->whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'B'); + })) + ->columns([ + TextColumn::make('no') + ->label('No.') + ->rowIndex(false) + ->alignCenter(), + + TextColumn::make('mahasiswa.nama') + ->label('Nama Mahasiswa') + ->searchable() + ->sortable(), + + TextColumn::make('total_nilai') + ->label('Total Nilai') + ->formatStateUsing(fn ($state) => number_format($state, 4)) + ->sortable(), + + TextColumn::make('hasil') + ->label('Hasil') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'Layak' => 'success', + 'Dipertimbangkan' => 'warning', + 'Tidak Layak' => 'danger', + default => 'gray', + }), + ]) + ->defaultSort('total_nilai', 'desc') + ->filters([ + \Filament\Tables\Filters\SelectFilter::make('hasil') + ->options([ + 'Layak' => 'Layak', + 'Dipertimbangkan' => 'Dipertimbangkan', + 'Tidak Layak' => 'Tidak Layak', + ]), + ]); + } +} \ No newline at end of file diff --git a/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiC.php b/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiC.php new file mode 100644 index 00000000..5596910b --- /dev/null +++ b/app/Filament/Resources/HasilResource/Pages/HasilAkreditasiC.php @@ -0,0 +1,159 @@ +headerActions([ + Action::make('setKuota') + ->label('Set Kuota Penerimaan') + ->form([ + TextInput::make('kuota') + ->label('Jumlah Kuota') + ->numeric() + ->required() + ->minValue(1) + ->helperText('Masukkan jumlah kuota penerimaan untuk akreditasi C.'), + ]) + ->action(function (array $data): void { + DB::beginTransaction(); + try { + // Reset hasil untuk akreditasi C + Parameter::whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'C'); + })->update(['hasil' => 'Tidak Layak']); + + // Ambil data parameter yang valid dengan akreditasi C + $validParameters = Parameter::where('status', 'valid') + ->whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'C'); + }) + ->orderBy('total_nilai', 'desc') + ->get(); + + $kuota = (int) $data['kuota']; + $index = 0; + + foreach ($validParameters as $parameter) { + if ($index < $kuota) { + DB::table('parameters') + ->where('id', $parameter->id) + ->update(['hasil' => 'Layak']); + } elseif ($index < ($kuota + 3)) { + DB::table('parameters') + ->where('id', $parameter->id) + ->update(['hasil' => 'Dipertimbangkan']); + } + $index++; + } + + DB::commit(); + + Notification::make() + ->title("Berhasil mengatur kuota penerimaan untuk {$kuota} mahasiswa akreditasi C") + ->success() + ->send(); + } catch (\Exception $e) { + DB::rollBack(); + Notification::make() + ->title('Terjadi kesalahan: ' . $e->getMessage()) + ->danger() + ->send(); + } + }) + ->requiresConfirmation() + ->modalHeading('Set Kuota Penerimaan Akreditasi C') + ->modalDescription('Apakah Anda yakin ingin mengatur kuota penerimaan untuk akreditasi C?') + ->modalSubmitActionLabel('Ya, Set Kuota') + ->successNotificationTitle('Kuota berhasil diatur'), + + Action::make('resetKuota') + ->label('Reset') + ->color('danger') + ->icon('heroicon-o-arrow-path') + ->action(function (): void { + DB::beginTransaction(); + try { + Parameter::whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'C'); + })->update(['hasil' => null]); + + DB::commit(); + + Notification::make() + ->title('Berhasil mereset hasil kuota penerimaan') + ->success() + ->send(); + } catch (\Exception $e) { + DB::rollBack(); + Notification::make() + ->title('Terjadi kesalahan: ' . $e->getMessage()) + ->danger() + ->send(); + } + }) + ->requiresConfirmation() + ->modalHeading('Reset Kuota Penerimaan') + ->modalDescription('Apakah Anda yakin ingin mereset hasil kuota penerimaan? Semua hasil akan dikosongkan.') + ->modalSubmitActionLabel('Ya, Reset Kuota') + ->successNotificationTitle('Kuota berhasil direset'), + ]) + ->modifyQueryUsing(fn ($query) => $query->where('status', 'valid') + ->whereHas('mahasiswa.prodi', function ($query) { + $query->where('akreditasi', 'C'); + })) + ->columns([ + TextColumn::make('no') + ->label('No.') + ->rowIndex(false) + ->alignCenter(), + + TextColumn::make('mahasiswa.nama') + ->label('Nama Mahasiswa') + ->searchable() + ->sortable(), + + TextColumn::make('total_nilai') + ->label('Total Nilai') + ->formatStateUsing(fn ($state) => number_format($state, 4)) + ->sortable(), + + TextColumn::make('hasil') + ->label('Hasil') + ->badge() + ->color(fn (string $state): string => match ($state) { + 'Layak' => 'success', + 'Dipertimbangkan' => 'warning', + 'Tidak Layak' => 'danger', + default => 'gray', + }), + ]) + ->defaultSort('total_nilai', 'desc') + ->filters([ + \Filament\Tables\Filters\SelectFilter::make('hasil') + ->options([ + 'Layak' => 'Layak', + 'Dipertimbangkan' => 'Dipertimbangkan', + 'Tidak Layak' => 'Tidak Layak', + ]), + ]); + } +} \ No newline at end of file diff --git a/app/Filament/Resources/MahasiswaResource.php b/app/Filament/Resources/MahasiswaResource.php index 38e0fa78..b3cde37f 100644 --- a/app/Filament/Resources/MahasiswaResource.php +++ b/app/Filament/Resources/MahasiswaResource.php @@ -14,6 +14,7 @@ use Illuminate\Database\Eloquent\SoftDeletingScope; use Filament\Forms\Components\TextInput; use Filament\Tables\Columns\TextColumn; +use Filament\Forms\Components\Select; class MahasiswaResource extends Resource { @@ -39,15 +40,20 @@ public static function form(Form $form): Form TextInput::make('NIM') ->label('NIM') ->required(), - TextInput::make('jurusan') + Select::make('jurusan_id') + ->label('Jurusan') + ->relationship('jurusan', 'nama') ->required(), - TextInput::make('prodi') + Select::make('prodi_id') ->label('Program Studi') + ->relationship('prodi', 'nama') + ->required(), + Select::make('akreditasi') + ->label('Akreditasi Program Studi') + ->relationship('prodi', 'akreditasi') ->required(), TextInput::make('angkatan') ->required(), - TextInput::make('semester') - ->required(), TextInput::make('jalur_masuk') ->required(), TextInput::make('ponsel') @@ -68,11 +74,10 @@ public static function table(Table $table): Table // ->shortable(), //biar urut berdasarkan abjad TextColumn::make('NIM') ->label('NIM'), - TextColumn::make('jurusan'), - TextColumn::make('prodi') - ->label('Program Studi'), + TextColumn::make('jurusan.nama')->label('Jurusan'), + TextColumn::make('prodi.nama')->label('Program Studi'), + TextColumn::make('prodi.akreditasi')->label('Akreditasi Prodi'), TextColumn::make('angkatan'), - TextColumn::make('semester'), TextColumn::make('jalur_masuk'), TextColumn::make('ponsel'), TextColumn::make('alamat'), diff --git a/app/Filament/Resources/ParameterResource.php b/app/Filament/Resources/ParameterResource.php index 1a551c8f..7babcd4f 100644 --- a/app/Filament/Resources/ParameterResource.php +++ b/app/Filament/Resources/ParameterResource.php @@ -30,12 +30,14 @@ class ParameterResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-clipboard-document-list'; - protected static ?string $navigationLabel = 'Form Penilaian KIP-K'; + protected static ?string $navigationLabel = 'Validasi Data'; protected static ?string $navigationGroup = 'Penilaian'; protected static ?int $navigationSort = 1; + protected static ?string $title = 'Validasi Data'; + public static function form(Form $form): Form { return $form @@ -298,15 +300,15 @@ public static function table(Table $table): Table ->label('Total Nilai') ->sortable(), - Tables\Columns\TextColumn::make('hasil') - ->label('Hasil') - ->badge() - ->color(fn (string $state): string => match ($state) { - 'Layak' => 'success', - 'Dipertimbangkan' => 'warning', - 'Tidak Layak' => 'danger', - default => 'gray', - }), + // Tables\Columns\TextColumn::make('hasil') + // ->label('Hasil') + // ->badge() + // ->color(fn (string $state): string => match ($state) { + // 'Layak' => 'success', + // 'Dipertimbangkan' => 'warning', + // 'Tidak Layak' => 'danger', + // default => 'gray', + // }), Tables\Columns\TextColumn::make('status') ->label('Status Validasi') diff --git a/app/Filament/Resources/ParameterResource/Pages/ListParameters.php b/app/Filament/Resources/ParameterResource/Pages/ListParameters.php index cc639b1a..1ff21746 100644 --- a/app/Filament/Resources/ParameterResource/Pages/ListParameters.php +++ b/app/Filament/Resources/ParameterResource/Pages/ListParameters.php @@ -10,6 +10,8 @@ class ListParameters extends ListRecords { protected static string $resource = ParameterResource::class; + protected static ?string $title = 'Validasi Data'; + protected function getHeaderActions(): array { return [ diff --git a/app/Models/Jurusan.php b/app/Models/Jurusan.php new file mode 100644 index 00000000..70d8243f --- /dev/null +++ b/app/Models/Jurusan.php @@ -0,0 +1,25 @@ +hasMany(Prodi::class); + } + + public function mahasiswas() + { + return $this->hasMany(Mahasiswa::class); + } +} \ No newline at end of file diff --git a/app/Models/Prodi.php b/app/Models/Prodi.php new file mode 100644 index 00000000..eaa9cd7b --- /dev/null +++ b/app/Models/Prodi.php @@ -0,0 +1,27 @@ +belongsTo(Jurusan::class); + } + + public function mahasiswas() + { + return $this->hasMany(Mahasiswa::class); + } +} \ No newline at end of file diff --git a/app/Models/mahasiswa.php b/app/Models/mahasiswa.php index 2c3ca664..dcb49df8 100644 --- a/app/Models/mahasiswa.php +++ b/app/Models/mahasiswa.php @@ -9,7 +9,34 @@ class Mahasiswa extends Model { use HasFactory; - protected $guarded = []; + protected $fillable = [ + 'user_id', + 'noreg_kipk', + 'nama', + 'NIM', + 'jurusan_id', + 'prodi_id', + 'akreditasi', + 'angkatan', + 'jalur_masuk', + 'ponsel', + 'alamat' + ]; + + public function user() + { + return $this->belongsTo(User::class); + } + + public function jurusan() + { + return $this->belongsTo(Jurusan::class); + } + + public function prodi() + { + return $this->belongsTo(Prodi::class); + } public function parameter() { diff --git a/app/Models/parameter.php b/app/Models/parameter.php index 9b43ab4d..b8c32ba7 100644 --- a/app/Models/parameter.php +++ b/app/Models/parameter.php @@ -173,14 +173,14 @@ protected static function boot() $parameter->total_nilai = $totalNilai; - // Tentukan hasil berdasarkan total nilai - if ($totalNilai >= 0.75) { - $parameter->hasil = 'Layak'; - } elseif ($totalNilai >= 0.5) { - $parameter->hasil = 'Dipertimbangkan'; - } else { - $parameter->hasil = 'Tidak Layak'; - } + // // Tentukan hasil berdasarkan total nilai ini kayanya engga dipake deh + // if ($totalNilai >= 0.75) { + // $parameter->hasil = 'Layak'; + // } elseif ($totalNilai >= 0.5) { + // $parameter->hasil = 'Dipertimbangkan'; + // } else { + // $parameter->hasil = 'Tidak Layak'; + // } }); } } diff --git a/composer.json b/composer.json index af119ec6..c58ca9b0 100644 --- a/composer.json +++ b/composer.json @@ -7,6 +7,7 @@ "license": "MIT", "require": { "php": "^8.2", + "barryvdh/laravel-dompdf": "^3.1", "bezhansalleh/filament-shield": "^3.3", "filament/filament": "^3.2", "laravel/framework": "^11.31", diff --git a/composer.lock b/composer.lock index 5ffd021c..ca8cc35f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "b7799fc8d95c29ec920219812daf4b93", + "content-hash": "37d23fa0748ae9cc0599922cd0df01a3", "packages": [ { "name": "anourvalar/eloquent-serialize", @@ -72,6 +72,83 @@ }, "time": "2025-02-25T05:18:46+00:00" }, + { + "name": "barryvdh/laravel-dompdf", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/barryvdh/laravel-dompdf.git", + "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d", + "reference": "8e71b99fc53bb8eb77f316c3c452dd74ab7cb25d", + "shasum": "" + }, + "require": { + "dompdf/dompdf": "^3.0", + "illuminate/support": "^9|^10|^11|^12", + "php": "^8.1" + }, + "require-dev": { + "larastan/larastan": "^2.7|^3.0", + "orchestra/testbench": "^7|^8|^9|^10", + "phpro/grumphp": "^2.5", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "PDF": "Barryvdh\\DomPDF\\Facade\\Pdf", + "Pdf": "Barryvdh\\DomPDF\\Facade\\Pdf" + }, + "providers": [ + "Barryvdh\\DomPDF\\ServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Barryvdh\\DomPDF\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Barry vd. Heuvel", + "email": "barryvdh@gmail.com" + } + ], + "description": "A DOMPDF Wrapper for Laravel", + "keywords": [ + "dompdf", + "laravel", + "pdf" + ], + "support": { + "issues": "https://github.com/barryvdh/laravel-dompdf/issues", + "source": "https://github.com/barryvdh/laravel-dompdf/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2025-02-13T15:07:54+00:00" + }, { "name": "bezhansalleh/filament-shield", "version": "3.3.5", @@ -937,6 +1014,161 @@ ], "time": "2024-02-05T11:56:58+00:00" }, + { + "name": "dompdf/dompdf", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/dompdf.git", + "reference": "a51bd7a063a65499446919286fb18b518177155a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/a51bd7a063a65499446919286fb18b518177155a", + "reference": "a51bd7a063a65499446919286fb18b518177155a", + "shasum": "" + }, + "require": { + "dompdf/php-font-lib": "^1.0.0", + "dompdf/php-svg-lib": "^1.0.0", + "ext-dom": "*", + "ext-mbstring": "*", + "masterminds/html5": "^2.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "ext-gd": "*", + "ext-json": "*", + "ext-zip": "*", + "mockery/mockery": "^1.3", + "phpunit/phpunit": "^7.5 || ^8 || ^9 || ^10 || ^11", + "squizlabs/php_codesniffer": "^3.5", + "symfony/process": "^4.4 || ^5.4 || ^6.2 || ^7.0" + }, + "suggest": { + "ext-gd": "Needed to process images", + "ext-gmagick": "Improves image processing performance", + "ext-imagick": "Improves image processing performance", + "ext-zlib": "Needed for pdf stream compression" + }, + "type": "library", + "autoload": { + "psr-4": { + "Dompdf\\": "src/" + }, + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1" + ], + "authors": [ + { + "name": "The Dompdf Community", + "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md" + } + ], + "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter", + "homepage": "https://github.com/dompdf/dompdf", + "support": { + "issues": "https://github.com/dompdf/dompdf/issues", + "source": "https://github.com/dompdf/dompdf/tree/v3.1.0" + }, + "time": "2025-01-15T14:09:04+00:00" + }, + { + "name": "dompdf/php-font-lib", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-font-lib.git", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "reference": "6137b7d4232b7f16c882c75e4ca3991dbcf6fe2d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "FontLib\\": "src/FontLib" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-2.1-or-later" + ], + "authors": [ + { + "name": "The FontLib Community", + "homepage": "https://github.com/dompdf/php-font-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse, export and make subsets of different types of font files.", + "homepage": "https://github.com/dompdf/php-font-lib", + "support": { + "issues": "https://github.com/dompdf/php-font-lib/issues", + "source": "https://github.com/dompdf/php-font-lib/tree/1.0.1" + }, + "time": "2024-12-02T14:37:59+00:00" + }, + { + "name": "dompdf/php-svg-lib", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/dompdf/php-svg-lib.git", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "reference": "eb045e518185298eb6ff8d80d0d0c6b17aecd9af", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^7.1 || ^8.0", + "sabberworm/php-css-parser": "^8.4" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Svg\\": "src/Svg" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0-or-later" + ], + "authors": [ + { + "name": "The SvgLib Community", + "homepage": "https://github.com/dompdf/php-svg-lib/blob/master/AUTHORS.md" + } + ], + "description": "A library to read, parse and export to PDF SVG files.", + "homepage": "https://github.com/dompdf/php-svg-lib", + "support": { + "issues": "https://github.com/dompdf/php-svg-lib/issues", + "source": "https://github.com/dompdf/php-svg-lib/tree/1.0.0" + }, + "time": "2024-04-29T13:26:35+00:00" + }, { "name": "dragonmantank/cron-expression", "version": "v3.4.0", @@ -4794,6 +5026,71 @@ ], "time": "2025-02-25T09:09:36+00:00" }, + { + "name": "sabberworm/php-css-parser", + "version": "v8.8.0", + "source": { + "type": "git", + "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git", + "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/3de493bdddfd1f051249af725c7e0d2c38fed740", + "reference": "3de493bdddfd1f051249af725c7e0d2c38fed740", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + }, + "require-dev": { + "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41" + }, + "suggest": { + "ext-mbstring": "for parsing UTF-8 CSS" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "9.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Sabberworm\\CSS\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Raphael Schweikert" + }, + { + "name": "Oliver Klee", + "email": "github@oliverklee.de" + }, + { + "name": "Jake Hotson", + "email": "jake.github@qzdesign.co.uk" + } + ], + "description": "Parser for CSS Files written in PHP", + "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser", + "keywords": [ + "css", + "parser", + "stylesheet" + ], + "support": { + "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues", + "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.8.0" + }, + "time": "2025-03-23T17:59:05+00:00" + }, { "name": "spatie/color", "version": "1.8.0", diff --git a/database/migrations/2025_02_17_154414_create_jurusans_table.php b/database/migrations/2025_02_17_154414_create_jurusans_table.php new file mode 100644 index 00000000..9d57ff9a --- /dev/null +++ b/database/migrations/2025_02_17_154414_create_jurusans_table.php @@ -0,0 +1,22 @@ +id(); + $table->string('nama'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('jurusans'); + } +}; \ No newline at end of file diff --git a/database/migrations/2025_02_17_154415_create_prodis_table.php b/database/migrations/2025_02_17_154415_create_prodis_table.php new file mode 100644 index 00000000..9a2cd6df --- /dev/null +++ b/database/migrations/2025_02_17_154415_create_prodis_table.php @@ -0,0 +1,24 @@ +id(); + $table->foreignId('jurusan_id')->constrained('jurusans')->cascadeOnDelete(); + $table->string('nama'); + $table->string('akreditasi'); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('prodis'); + } +}; \ No newline at end of file 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 58e70ca3..454c0d1e 100644 --- a/database/migrations/2025_02_17_154416_create_mahasiswas_table.php +++ b/database/migrations/2025_02_17_154416_create_mahasiswas_table.php @@ -17,10 +17,10 @@ public function up(): void $table->string('noreg_kipk'); $table->string('nama'); $table->string('NIM'); - $table->string('jurusan'); - $table->string('prodi'); + $table->foreignId('jurusan_id')->constrained('jurusans')->cascadeOnDelete(); + $table->foreignId('prodi_id')->constrained('prodis')->cascadeOnDelete(); + $table->string('akreditasi'); $table->string('angkatan'); - $table->string('semester'); $table->string('jalur_masuk'); $table->string('ponsel'); $table->string('alamat'); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 335ab544..66cefed6 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -19,6 +19,8 @@ public function run(): void MahasiswaSeeder::class, // SuperAdminPermissionSeeder::class, PermissionSeeder::class, + JurusanSeeder::class, + ProdiSeeder::class, ]); } } diff --git a/database/seeders/JurusanSeeder.php b/database/seeders/JurusanSeeder.php new file mode 100644 index 00000000..6be1356e --- /dev/null +++ b/database/seeders/JurusanSeeder.php @@ -0,0 +1,28 @@ + 'Produksi Pertanian'], + ['nama' => 'Teknologi Pertanian'], + ['nama' => 'Peternakan'], + ['nama' => 'Manajemen Agribisnis'], + ['nama' => 'Teknologi Informasi'], + ['nama' => 'Bahasa, Komunikasi dan Pariwisata'], + ['nama' => 'Kesehatan'], + ['nama' => 'Teknik'], + ['nama' => 'Bisnis'], + ]; + + foreach ($jurusans as $jurusan) { + Jurusan::create($jurusan); + } + } +} \ No newline at end of file diff --git a/database/seeders/MahasiswaSeeder.php b/database/seeders/MahasiswaSeeder.php index 1631515e..612396f8 100644 --- a/database/seeders/MahasiswaSeeder.php +++ b/database/seeders/MahasiswaSeeder.php @@ -4,6 +4,8 @@ use App\Models\Mahasiswa; use App\Models\User; +use App\Models\Jurusan; +use App\Models\Prodi; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; @@ -14,54 +16,58 @@ class MahasiswaSeeder extends Seeder */ public function run(): void { - // Ambil user dengan role mahasiswa - $users = User::role('mahasiswa')->get(); + // // Ambil user dengan role mahasiswa + // $users = User::role('mahasiswa')->get(); - $mahasiswas = [ - [ - 'noreg_kipk' => 'KIP001', - 'nama' => 'Ahmad Fauzi', - 'NIM' => '2021573010001', - 'jurusan' => 'Teknik', - 'prodi' => 'Teknik Informatika', - 'angkatan' => '2021', - 'semester' => '5', - 'jalur_masuk' => 'SNMPTN', - 'ponsel' => '081234567890', - 'alamat' => 'Jl. Pendidikan No. 1', - ], - [ - 'noreg_kipk' => 'KIP002', - 'nama' => 'Siti Nurhaliza', - 'NIM' => '2021573010002', - 'jurusan' => 'Teknik', - 'prodi' => 'Teknik Informatika', - 'angkatan' => '2021', - 'semester' => '5', - 'jalur_masuk' => 'SBMPTN', - 'ponsel' => '081234567891', - 'alamat' => 'Jl. Pendidikan No. 2', - ], - [ - 'noreg_kipk' => 'KIP003', - 'nama' => 'Budi Santoso', - 'NIM' => '2021573010003', - 'jurusan' => 'Teknik', - 'prodi' => 'Teknik Informatika', - 'angkatan' => '2021', - 'semester' => '5', - 'jalur_masuk' => 'SNMPTN', - 'ponsel' => '081234567892', - 'alamat' => 'Jl. Pendidikan No. 3', - ], - ]; + // // Ambil jurusan dan prodi + // $jurusanTI = Jurusan::where('nama', 'Teknologi Informasi')->first(); + // $prodiInformatika = Prodi::where('nama', 'Teknik Informatika')->first(); - foreach ($users as $index => $user) { - if (isset($mahasiswas[$index])) { - Mahasiswa::create(array_merge($mahasiswas[$index], [ - 'user_id' => $user->id - ])); - } - } + // $mahasiswas = [ + // [ + // 'noreg_kipk' => 'KIP001', + // 'nama' => 'Ahmad Fauzi', + // 'NIM' => '2021573010001', + // 'jurusan_id' => $jurusanTI->id, + // 'prodi_id' => $prodiInformatika->id, + // 'akreditasi' => $prodiInformatika->akreditasi, + // 'angkatan' => '2021', + // 'jalur_masuk' => 'SNMPTN', + // 'ponsel' => '081234567890', + // 'alamat' => 'Jl. Pendidikan No. 1', + // ], + // [ + // 'noreg_kipk' => 'KIP002', + // 'nama' => 'Siti Nurhaliza', + // 'NIM' => '2021573010002', + // 'jurusan_id' => $jurusanTI->id, + // 'prodi_id' => $prodiInformatika->id, + // 'akreditasi' => $prodiInformatika->akreditasi, + // 'angkatan' => '2021', + // 'jalur_masuk' => 'SBMPTN', + // 'ponsel' => '081234567891', + // 'alamat' => 'Jl. Pendidikan No. 2', + // ], + // [ + // 'noreg_kipk' => 'KIP003', + // 'nama' => 'Budi Santoso', + // 'NIM' => '2021573010003', + // 'jurusan_id' => $jurusanTI->id, + // 'prodi_id' => $prodiInformatika->id, + // 'akreditasi' => $prodiInformatika->akreditasi, + // 'angkatan' => '2021', + // 'jalur_masuk' => 'SNMPTN', + // 'ponsel' => '081234567892', + // 'alamat' => 'Jl. Pendidikan No. 3', + // ], + // ]; + + // foreach ($users as $index => $user) { + // if (isset($mahasiswas[$index])) { + // Mahasiswa::create(array_merge($mahasiswas[$index], [ + // 'user_id' => $user->id + // ])); + // } + // } } } diff --git a/database/seeders/ProdiSeeder.php b/database/seeders/ProdiSeeder.php new file mode 100644 index 00000000..faf84bdf --- /dev/null +++ b/database/seeders/ProdiSeeder.php @@ -0,0 +1,174 @@ + 1, + 'nama' => 'Produksi Tanaman Hortikultura', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 1, + 'nama' => 'Produksi Tanaman Perkebunan', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 1, + 'nama' => 'Teknik Produksi Benih', + 'akreditasi' => 'B' + ], + [ + 'jurusan_id' => 1, + 'nama' => 'Teknologi Produksi Tanaman Pangan', + 'akreditasi' => 'B' + ], + [ + 'jurusan_id' => 1, + 'nama' => 'Budidaya Tanaman Perkebunan', + 'akreditasi' => 'B' + ], + [ + 'jurusan_id' => 1, + 'nama' => 'Pengelolaan Perkebunan Kopi', + 'akreditasi' => 'C' + ], + + + // Teknologi Pertanian + [ + 'jurusan_id' => 2, + 'nama' => 'Keteknikan Pertanian', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 2, + 'nama' => 'Teknologi Industri Pangan', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 2, + 'nama' => 'Teknologi Rekayasa Pangan', + 'akreditasi' => 'C' + ], + + // Peternakan + [ + 'jurusan_id' => 3, + 'nama' => 'Produksi Ternak', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 3, + 'nama' => 'Manajemen Bisnis Unggas', + 'akreditasi' => 'B' + ], + [ + 'jurusan_id' => 3, + 'nama' => 'Teknologi Pakan Ternak', + 'akreditasi' => 'C' + ], + + // Manajemen Agribisnis + [ + 'jurusan_id' => 4, + 'nama' => 'Manajemen Agribisnis', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 4, + 'nama' => 'Manajemen Agroindustri', + 'akreditasi' => 'A' + ], + // Teknologi Informasi + [ + 'jurusan_id' => 5, + 'nama' => 'Manajemen Informatika', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 5, + 'nama' => 'Teknik Komputer', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 5, + 'nama' => 'Teknik Informatika', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 5, + 'nama' => 'Bisnis Digital', + 'akreditasi' => 'C' + ], + // Bahasa, Komunikasi dan Pariwisata + [ + 'jurusan_id' => 6, + 'nama' => 'Bahasa Inggris', + 'akreditasi' => 'B' + ], + [ + 'jurusan_id' => 6, + 'nama' => 'Destinasi Pariwisata', + 'akreditasi' => 'C' + ], + // Kesehatan + [ + 'jurusan_id' => 7, + 'nama' => 'Manajemen Informasi Kesehatan', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 7, + 'nama' => 'Gizi Klinik', + 'akreditasi' => 'B' + ], + [ + 'jurusan_id' => 7, + 'nama' => 'Promosi Kesehatan', + 'akreditasi' => 'C' + ], + //Teknik + [ + 'jurusan_id' => 8, + 'nama' => 'Teknik Energi Terbarukan', + 'akreditasi' => 'A' + ], + [ + 'jurusan_id' => 8, + 'nama' => 'Mesin Otomotif', + 'akreditasi' => 'B' + ], + [ + 'jurusan_id' => 8, + 'nama' => 'Teknologi Rekayasa Mekatronika', + 'akreditasi' => 'C' + ], + //Bisnis + [ + 'jurusan_id' => 9, + 'nama' => 'Akuntansi Sektor Publik', + 'akreditasi' => 'C' + ], + [ + 'jurusan_id' => 9, + 'nama' => 'Manajemen Pemasaran Internasional', + 'akreditasi' => 'C' + ], + + + ]; + + foreach ($prodis as $prodi) { + Prodi::create($prodi); + } + } +} \ No newline at end of file diff --git a/resources/views/exports/hasil-penilaian.blade.php b/resources/views/exports/hasil-penilaian.blade.php new file mode 100644 index 00000000..0d236f09 --- /dev/null +++ b/resources/views/exports/hasil-penilaian.blade.php @@ -0,0 +1,175 @@ + + + + + {{ $title }} + + + + + + + + + + +
+ + + KEMENTERIAN PENDIDIKAN TINGGI, SAINS, DAN TEKNOLOGI
+ POLITEKNIK NEGERI JEMBER
+ JL. Mastrip PO BOX 164 Jember 68101 +
+ +
+ + +
+
Kode Dokumen: FR-JUR-031
+
Tanggal Berlaku: {{ \Carbon\Carbon::parse($date)->format('d/m/Y') }}
+
Revisi: 0
+
Halaman: 1
+
+ + +
{{ $title }}
+
Tanggal: {{ \Carbon\Carbon::parse($date)->format('d F Y') }}
+ + + + + + + + + + + + + + + + @foreach($data as $index => $item) + + + + + + + + + + @endforeach + +
NoNama MahasiswaJurusanProgram StudiAkreditasiTotal NilaiHasil
{{ $index + 1 }}{{ $item->mahasiswa->nama }}{{ $item->mahasiswa->jurusan->nama }}{{ $item->mahasiswa->prodi->nama }}{{ $item->mahasiswa->prodi->akreditasi }}{{ number_format($item->total_nilai, 4) }} + @if($item->hasil == 'Layak') + Diterima + @elseif($item->hasil == 'Dipertimbangkan') + Dipertimbangkan + @else + Tidak Diterima + @endif +
+ + + + + \ No newline at end of file