fixing set kuota akreditasi

This commit is contained in:
annajwasz 2025-05-09 14:23:58 +07:00
parent f59f93b885
commit 183a7bf01b
22 changed files with 1520 additions and 137 deletions

View File

@ -4,6 +4,8 @@
use App\Models\Parameter; use App\Models\Parameter;
use App\Models\Mahasiswa; use App\Models\Mahasiswa;
use App\Models\Jurusan;
use App\Models\Prodi;
use Filament\Forms\Components\Wizard; use Filament\Forms\Components\Wizard;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Forms\Components\Select; 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('noreg_kipk')->label('No. Registrasi KIP-K')->required(),
TextInput::make('nama')->label('Nama Lengkap')->required(), TextInput::make('nama')->label('Nama Lengkap')->required(),
TextInput::make('nim')->label('NIM')->required(), TextInput::make('nim')->label('NIM')->required(),
TextInput::make('jurusan')->label('Jurusan')->required(), Select::make('jurusan_id')
TextInput::make('prodi')->label('Program Studi')->required(), ->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('angkatan')->label('Angkatan')->required(),
TextInput::make('semester')->label('Semester')->required(),
TextInput::make('jalur_masuk')->label('Jalur Masuk')->required(), TextInput::make('jalur_masuk')->label('Jalur Masuk')->required(),
TextInput::make('ponsel')->label('No. Handphone')->tel()->required(), TextInput::make('ponsel')->label('No. Handphone')->tel()->required(),
TextInput::make('alamat')->label('Alamat')->required(), TextInput::make('alamat')->label('Alamat')->required(),
@ -231,11 +259,11 @@ public function submit()
'user_id' => auth()->id(), 'user_id' => auth()->id(),
'noreg_kipk' => $data['noreg_kipk'], 'noreg_kipk' => $data['noreg_kipk'],
'nama' => $data['nama'], 'nama' => $data['nama'],
'nim' => $data['nim'], 'NIM' => $data['nim'],
'jurusan' => $data['jurusan'], 'jurusan_id' => $data['jurusan_id'],
'prodi' => $data['prodi'], 'prodi_id' => $data['prodi_id'],
'akreditasi' => $data['akreditasi'] ?? Prodi::find($data['prodi_id'])->akreditasi,
'angkatan' => $data['angkatan'], 'angkatan' => $data['angkatan'],
'semester' => $data['semester'],
'jalur_masuk' => $data['jalur_masuk'], 'jalur_masuk' => $data['jalur_masuk'],
'ponsel' => $data['ponsel'], 'ponsel' => $data['ponsel'],
'alamat' => $data['alamat'], 'alamat' => $data['alamat'],

View File

@ -32,63 +32,102 @@ public static function table(Table $table): Table
{ {
return $table return $table
->headerActions([ ->headerActions([
Tables\Actions\Action::make('setKuota') Tables\Actions\Action::make('exportPdf')
->label('Set Kuota Penerimaan') ->label('Export PDF')
->form([ ->icon('heroicon-o-document-arrow-down')
TextInput::make('kuota') ->color('info')
->label('Jumlah Kuota') ->action(function () {
->numeric() $data = Parameter::with(['mahasiswa.jurusan', 'mahasiswa.prodi'])
->required() ->where('status', 'valid')
->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']);
// Ambil semua data parameter yang valid dan urutkan berdasarkan total nilai
$validParameters = Parameter::where('status', 'valid')
->orderBy('total_nilai', 'desc') ->orderBy('total_nilai', 'desc')
->get(); ->get();
$kuota = (int) $data['kuota']; $pdf = \PDF::loadView('exports.hasil-penilaian', [
$index = 0; 'data' => $data,
'title' => 'Hasil Penilaian KIPK',
'date' => now()->format('d F Y'),
]);
foreach ($validParameters as $parameter) { return response()->streamDownload(function () use ($pdf) {
// Gunakan update langsung ke database untuk memastikan perubahan tersimpan echo $pdf->output();
if ($index < $kuota) { }, 'hasil-penilaian-' . now()->format('Y-m-d') . '.pdf');
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(); 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'),
Notification::make() Tables\Actions\Action::make('akreditasiB')
->title("Berhasil mengatur kuota penerimaan untuk {$kuota} mahasiswa") ->label('Set Akreditasi B')
->success() ->url(fn () => route('filament.admin.resources.hasil-penilaian.akreditasi-b'))
->send(); ->color('warning')
} catch (\Exception $e) { ->icon('heroicon-o-bookmark'),
DB::rollBack();
Notification::make() Tables\Actions\Action::make('akreditasiC')
->title('Terjadi kesalahan: ' . $e->getMessage()) ->label('Set Akreditasi C')
->danger() ->url(fn () => route('filament.admin.resources.hasil-penilaian.akreditasi-c'))
->send(); ->color('danger')
} ->icon('heroicon-o-bookmark'),
})
->requiresConfirmation() // Tables\Actions\Action::make('setKuota')
->modalHeading('Set Kuota Penerimaan') // ->label('Set Kuota Penerimaan')
->modalDescription('Apakah Anda yakin ingin mengatur kuota penerimaan? Tindakan ini akan mengubah status kelayakan semua mahasiswa.') // ->form([
->modalSubmitActionLabel('Ya, Set Kuota') // TextInput::make('kuota')
->successNotificationTitle('Kuota berhasil diatur'), // ->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']);
// // Ambil semua data parameter yang valid dan urutkan berdasarkan total nilai
// $validParameters = Parameter::where('status', 'valid')
// ->orderBy('total_nilai', 'desc')
// ->get();
// $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')) ->modifyQueryUsing(fn ($query) => $query->where('status', 'valid'))
->columns([ ->columns([
@ -102,6 +141,21 @@ public static function table(Table $table): Table
->searchable() ->searchable()
->sortable(), ->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') TextColumn::make('total_nilai')
->label('Total Nilai') ->label('Total Nilai')
->formatStateUsing(fn ($state) => number_format($state, 4)) ->formatStateUsing(fn ($state) => number_format($state, 4))
@ -115,6 +169,11 @@ public static function table(Table $table): Table
'Dipertimbangkan' => 'warning', 'Dipertimbangkan' => 'warning',
'Tidak Layak' => 'danger', 'Tidak Layak' => 'danger',
default => 'gray', default => 'gray',
})
->formatStateUsing(fn (string $state): string => match ($state) {
'Layak' => 'Diterima',
'Tidak Layak' => 'Tidak Diterima',
default => $state,
}), }),
]) ])
->defaultSort('total_nilai', 'desc') ->defaultSort('total_nilai', 'desc')
@ -132,6 +191,9 @@ public static function getPages(): array
{ {
return [ return [
'index' => Pages\ListHasil::route('/'), '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'),
]; ];
} }
} }

View File

@ -0,0 +1,158 @@
<?php
namespace App\Filament\Resources\HasilResource\Pages;
use App\Filament\Resources\HasilResource;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Actions\Action;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Illuminate\Support\Facades\DB;
use App\Models\Parameter;
class HasilAkreditasiA extends ListRecords
{
protected static string $resource = HasilResource::class;
protected static ?string $title = 'Hasil Penilaian Akreditasi A';
public function table(Table $table): Table
{
return $table
->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',
]),
]);
}
}

View File

@ -0,0 +1,159 @@
<?php
namespace App\Filament\Resources\HasilResource\Pages;
use App\Filament\Resources\HasilResource;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Actions\Action;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Tables\Filters\SelectFilter;
use Illuminate\Support\Facades\DB;
use App\Models\Parameter;
class HasilAkreditasiB extends ListRecords
{
protected static string $resource = HasilResource::class;
protected static ?string $title = 'Hasil Penilaian Akreditasi B';
public function table(Table $table): Table
{
return $table
->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',
]),
]);
}
}

View File

@ -0,0 +1,159 @@
<?php
namespace App\Filament\Resources\HasilResource\Pages;
use App\Filament\Resources\HasilResource;
use Filament\Resources\Pages\ListRecords;
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Actions\Action;
use Filament\Forms\Components\TextInput;
use Filament\Notifications\Notification;
use Filament\Tables\Filters\SelectFilter;
use Illuminate\Support\Facades\DB;
use App\Models\Parameter;
class HasilAkreditasiC extends ListRecords
{
protected static string $resource = HasilResource::class;
protected static ?string $title = 'Hasil Penilaian Akreditasi C';
public function table(Table $table): Table
{
return $table
->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',
]),
]);
}
}

View File

@ -14,6 +14,7 @@
use Illuminate\Database\Eloquent\SoftDeletingScope; use Illuminate\Database\Eloquent\SoftDeletingScope;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Forms\Components\Select;
class MahasiswaResource extends Resource class MahasiswaResource extends Resource
{ {
@ -39,15 +40,20 @@ public static function form(Form $form): Form
TextInput::make('NIM') TextInput::make('NIM')
->label('NIM') ->label('NIM')
->required(), ->required(),
TextInput::make('jurusan') Select::make('jurusan_id')
->label('Jurusan')
->relationship('jurusan', 'nama')
->required(), ->required(),
TextInput::make('prodi') Select::make('prodi_id')
->label('Program Studi') ->label('Program Studi')
->relationship('prodi', 'nama')
->required(),
Select::make('akreditasi')
->label('Akreditasi Program Studi')
->relationship('prodi', 'akreditasi')
->required(), ->required(),
TextInput::make('angkatan') TextInput::make('angkatan')
->required(), ->required(),
TextInput::make('semester')
->required(),
TextInput::make('jalur_masuk') TextInput::make('jalur_masuk')
->required(), ->required(),
TextInput::make('ponsel') TextInput::make('ponsel')
@ -68,11 +74,10 @@ public static function table(Table $table): Table
// ->shortable(), //biar urut berdasarkan abjad // ->shortable(), //biar urut berdasarkan abjad
TextColumn::make('NIM') TextColumn::make('NIM')
->label('NIM'), ->label('NIM'),
TextColumn::make('jurusan'), TextColumn::make('jurusan.nama')->label('Jurusan'),
TextColumn::make('prodi') TextColumn::make('prodi.nama')->label('Program Studi'),
->label('Program Studi'), TextColumn::make('prodi.akreditasi')->label('Akreditasi Prodi'),
TextColumn::make('angkatan'), TextColumn::make('angkatan'),
TextColumn::make('semester'),
TextColumn::make('jalur_masuk'), TextColumn::make('jalur_masuk'),
TextColumn::make('ponsel'), TextColumn::make('ponsel'),
TextColumn::make('alamat'), TextColumn::make('alamat'),

View File

@ -30,12 +30,14 @@ class ParameterResource extends Resource
protected static ?string $navigationIcon = 'heroicon-o-clipboard-document-list'; 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 ?string $navigationGroup = 'Penilaian';
protected static ?int $navigationSort = 1; protected static ?int $navigationSort = 1;
protected static ?string $title = 'Validasi Data';
public static function form(Form $form): Form public static function form(Form $form): Form
{ {
return $form return $form
@ -298,15 +300,15 @@ public static function table(Table $table): Table
->label('Total Nilai') ->label('Total Nilai')
->sortable(), ->sortable(),
Tables\Columns\TextColumn::make('hasil') // Tables\Columns\TextColumn::make('hasil')
->label('Hasil') // ->label('Hasil')
->badge() // ->badge()
->color(fn (string $state): string => match ($state) { // ->color(fn (string $state): string => match ($state) {
'Layak' => 'success', // 'Layak' => 'success',
'Dipertimbangkan' => 'warning', // 'Dipertimbangkan' => 'warning',
'Tidak Layak' => 'danger', // 'Tidak Layak' => 'danger',
default => 'gray', // default => 'gray',
}), // }),
Tables\Columns\TextColumn::make('status') Tables\Columns\TextColumn::make('status')
->label('Status Validasi') ->label('Status Validasi')

View File

@ -10,6 +10,8 @@ class ListParameters extends ListRecords
{ {
protected static string $resource = ParameterResource::class; protected static string $resource = ParameterResource::class;
protected static ?string $title = 'Validasi Data';
protected function getHeaderActions(): array protected function getHeaderActions(): array
{ {
return [ return [

25
app/Models/Jurusan.php Normal file
View File

@ -0,0 +1,25 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Jurusan extends Model
{
use HasFactory;
protected $fillable = [
'nama'
];
public function prodis()
{
return $this->hasMany(Prodi::class);
}
public function mahasiswas()
{
return $this->hasMany(Mahasiswa::class);
}
}

27
app/Models/Prodi.php Normal file
View File

@ -0,0 +1,27 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Prodi extends Model
{
use HasFactory;
protected $fillable = [
'nama',
'jurusan_id',
'akreditasi'
];
public function jurusan()
{
return $this->belongsTo(Jurusan::class);
}
public function mahasiswas()
{
return $this->hasMany(Mahasiswa::class);
}
}

View File

@ -9,7 +9,34 @@ class Mahasiswa extends Model
{ {
use HasFactory; 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() public function parameter()
{ {

View File

@ -173,14 +173,14 @@ protected static function boot()
$parameter->total_nilai = $totalNilai; $parameter->total_nilai = $totalNilai;
// Tentukan hasil berdasarkan total nilai // // Tentukan hasil berdasarkan total nilai ini kayanya engga dipake deh
if ($totalNilai >= 0.75) { // if ($totalNilai >= 0.75) {
$parameter->hasil = 'Layak'; // $parameter->hasil = 'Layak';
} elseif ($totalNilai >= 0.5) { // } elseif ($totalNilai >= 0.5) {
$parameter->hasil = 'Dipertimbangkan'; // $parameter->hasil = 'Dipertimbangkan';
} else { // } else {
$parameter->hasil = 'Tidak Layak'; // $parameter->hasil = 'Tidak Layak';
} // }
}); });
} }
} }

View File

@ -7,6 +7,7 @@
"license": "MIT", "license": "MIT",
"require": { "require": {
"php": "^8.2", "php": "^8.2",
"barryvdh/laravel-dompdf": "^3.1",
"bezhansalleh/filament-shield": "^3.3", "bezhansalleh/filament-shield": "^3.3",
"filament/filament": "^3.2", "filament/filament": "^3.2",
"laravel/framework": "^11.31", "laravel/framework": "^11.31",

299
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "b7799fc8d95c29ec920219812daf4b93", "content-hash": "37d23fa0748ae9cc0599922cd0df01a3",
"packages": [ "packages": [
{ {
"name": "anourvalar/eloquent-serialize", "name": "anourvalar/eloquent-serialize",
@ -72,6 +72,83 @@
}, },
"time": "2025-02-25T05:18:46+00:00" "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", "name": "bezhansalleh/filament-shield",
"version": "3.3.5", "version": "3.3.5",
@ -937,6 +1014,161 @@
], ],
"time": "2024-02-05T11:56:58+00:00" "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", "name": "dragonmantank/cron-expression",
"version": "v3.4.0", "version": "v3.4.0",
@ -4794,6 +5026,71 @@
], ],
"time": "2025-02-25T09:09:36+00:00" "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", "name": "spatie/color",
"version": "1.8.0", "version": "1.8.0",

View File

@ -0,0 +1,22 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('jurusans', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('jurusans');
}
};

View File

@ -0,0 +1,24 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('prodis', function (Blueprint $table) {
$table->id();
$table->foreignId('jurusan_id')->constrained('jurusans')->cascadeOnDelete();
$table->string('nama');
$table->string('akreditasi');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('prodis');
}
};

View File

@ -17,10 +17,10 @@ public function up(): void
$table->string('noreg_kipk'); $table->string('noreg_kipk');
$table->string('nama'); $table->string('nama');
$table->string('NIM'); $table->string('NIM');
$table->string('jurusan'); $table->foreignId('jurusan_id')->constrained('jurusans')->cascadeOnDelete();
$table->string('prodi'); $table->foreignId('prodi_id')->constrained('prodis')->cascadeOnDelete();
$table->string('akreditasi');
$table->string('angkatan'); $table->string('angkatan');
$table->string('semester');
$table->string('jalur_masuk'); $table->string('jalur_masuk');
$table->string('ponsel'); $table->string('ponsel');
$table->string('alamat'); $table->string('alamat');

View File

@ -19,6 +19,8 @@ public function run(): void
MahasiswaSeeder::class, MahasiswaSeeder::class,
// SuperAdminPermissionSeeder::class, // SuperAdminPermissionSeeder::class,
PermissionSeeder::class, PermissionSeeder::class,
JurusanSeeder::class,
ProdiSeeder::class,
]); ]);
} }
} }

View File

@ -0,0 +1,28 @@
<?php
namespace Database\Seeders;
use App\Models\Jurusan;
use Illuminate\Database\Seeder;
class JurusanSeeder extends Seeder
{
public function run(): void
{
$jurusans = [
['nama' => '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);
}
}
}

View File

@ -4,6 +4,8 @@
use App\Models\Mahasiswa; use App\Models\Mahasiswa;
use App\Models\User; use App\Models\User;
use App\Models\Jurusan;
use App\Models\Prodi;
use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder; use Illuminate\Database\Seeder;
@ -14,54 +16,58 @@ class MahasiswaSeeder extends Seeder
*/ */
public function run(): void public function run(): void
{ {
// Ambil user dengan role mahasiswa // // Ambil user dengan role mahasiswa
$users = User::role('mahasiswa')->get(); // $users = User::role('mahasiswa')->get();
$mahasiswas = [ // // Ambil jurusan dan prodi
[ // $jurusanTI = Jurusan::where('nama', 'Teknologi Informasi')->first();
'noreg_kipk' => 'KIP001', // $prodiInformatika = Prodi::where('nama', 'Teknik Informatika')->first();
'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',
],
];
foreach ($users as $index => $user) { // $mahasiswas = [
if (isset($mahasiswas[$index])) { // [
Mahasiswa::create(array_merge($mahasiswas[$index], [ // 'noreg_kipk' => 'KIP001',
'user_id' => $user->id // '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
// ]));
// }
// }
} }
} }

View File

@ -0,0 +1,174 @@
<?php
namespace Database\Seeders;
use App\Models\Prodi;
use Illuminate\Database\Seeder;
class ProdiSeeder extends Seeder
{
public function run(): void
{
$prodis = [
// Produksi Pertanian
[
'jurusan_id' => 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);
}
}
}

View File

@ -0,0 +1,175 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{ $title }}</title>
<style>
body {
font-family: Arial, sans-serif;
font-size: 12px;
}
.header-table {
width: 100%;
border-collapse: collapse;
margin-bottom: 0;
}
.header-table td {
vertical-align: top;
}
.logo {
width: 70px;
height: 70px;
}
.instansi-text {
text-align: center;
font-size: 14px;
font-weight: bold;
line-height: 1.5;
}
.line {
border-top: 2px solid black;
margin-top: 5px;
margin-bottom: 5px;
}
.document-info {
font-size: 11px;
margin-top: 5px;
margin-bottom: 15px;
}
.document-info div {
margin-bottom: 2px;
}
.title {
text-align: center;
font-size: 14px;
font-weight: bold;
}
.subtitle {
text-align: center;
margin-bottom: 10px;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 10px;
}
th, td {
border: 1px solid #000;
padding: 5px;
text-align: left;
}
th {
background-color: #f0f0f0;
}
.badge {
padding: 3px 6px;
border-radius: 3px;
font-size: 11px;
}
.success {
background-color: #d4edda;
color: #155724;
}
.warning {
background-color: #fff3cd;
color: #856404;
}
.danger {
background-color: #f8d7da;
color: #721c24;
}
.footer {
text-align: right;
margin-top: 40px;
}
</style>
</head>
<body>
<!-- HEADER -->
<table class="header-table" style="border: none;">
<tr>
<td style="width: 15%; border: none;">
<img src="{{ public_path('images/logo-polije.png') }}" class="logo" alt="Logo">
</td>
<td style="width: 85%; border: none;" class="instansi-text">
KEMENTERIAN PENDIDIKAN TINGGI, SAINS, DAN TEKNOLOGI<br>
POLITEKNIK NEGERI JEMBER<br>
JL. Mastrip PO BOX 164 Jember 68101
</td>
</tr>
</table>
<div class="line"></div>
<!-- INFO DOKUMEN -->
<div class="document-info">
<div><strong>Kode Dokumen</strong>: FR-JUR-031</div>
<div><strong>Tanggal Berlaku</strong>: {{ \Carbon\Carbon::parse($date)->format('d/m/Y') }}</div>
<div><strong>Revisi</strong>: 0</div>
<div><strong>Halaman</strong>: 1</div>
</div>
<!-- JUDUL -->
<div class="title">{{ $title }}</div>
<div class="subtitle">Tanggal: {{ \Carbon\Carbon::parse($date)->format('d F Y') }}</div>
<!-- TABEL -->
<table>
<thead>
<tr>
<th>No</th>
<th>Nama Mahasiswa</th>
<th>Jurusan</th>
<th>Program Studi</th>
<th>Akreditasi</th>
<th>Total Nilai</th>
<th>Hasil</th>
</tr>
</thead>
<tbody>
@foreach($data as $index => $item)
<tr>
<td>{{ $index + 1 }}</td>
<td>{{ $item->mahasiswa->nama }}</td>
<td>{{ $item->mahasiswa->jurusan->nama }}</td>
<td>{{ $item->mahasiswa->prodi->nama }}</td>
<td>{{ $item->mahasiswa->prodi->akreditasi }}</td>
<td>{{ number_format($item->total_nilai, 4) }}</td>
<td>
@if($item->hasil == 'Layak')
<span class="badge success">Diterima</span>
@elseif($item->hasil == 'Dipertimbangkan')
<span class="badge warning">Dipertimbangkan</span>
@else
<span class="badge danger">Tidak Diterima</span>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
<div class="footer">
<p>Dicetak pada: {{ now()->format('d F Y H:i:s') }}</p>
</div>
</body>
</html>