fix testing

This commit is contained in:
annajwasz 2025-05-17 11:08:50 +07:00
parent 183a7bf01b
commit c4d8bfb4d9
17 changed files with 438 additions and 272 deletions

View File

@ -3,12 +3,16 @@
namespace App\Filament\Pages; namespace App\Filament\Pages;
use App\Models\Parameter; use App\Models\Parameter;
use App\Models\Mahasiswa;
use Filament\Pages\Page; use Filament\Pages\Page;
use Filament\Infolists\Infolist; use Filament\Infolists\Infolist;
use Filament\Infolists\Components\Section; use Filament\Infolists\Components\Section;
use Filament\Infolists\Components\TextEntry; use Filament\Infolists\Components\TextEntry;
use Filament\Infolists\Components\Grid; use Filament\Infolists\Components\Grid;
use Filament\Navigation\NavigationItem; use Filament\Navigation\NavigationItem;
use Filament\Actions\Action;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Storage;
class ProgresDataPage extends Page class ProgresDataPage extends Page
{ {
@ -27,7 +31,46 @@ public function getTitle(): string
public function infolist(Infolist $infolist): Infolist public function infolist(Infolist $infolist): Infolist
{ {
$user = auth()->user(); $user = auth()->user();
$data = Parameter::where('mahasiswa_id', $user->id)->first();
// Cari data mahasiswa berdasarkan user_id
$mahasiswa = Mahasiswa::where('user_id', $user->id)->first();
// Jika mahasiswa ditemukan, cari data parameter
$data = $mahasiswa ? Parameter::where('mahasiswa_id', $mahasiswa->id)->first() : null;
// Siapkan state untuk infolist
$state = [
'status' => 'Belum Mengisi Form',
'hasil' => 'Belum Ada Hasil',
'keterangan' => 'Silahkan lengkapi form pendaftaran KIP-K terlebih dahulu.'
];
// Jika data ada, update state sesuai data di database
if ($data) {
$state['status'] = match($data->status) {
'valid' => 'Berkas Valid',
'tidak_valid' => 'Berkas Tidak Valid',
'belum_validasi' => 'Belum Divalidasi',
default => 'Belum Mengisi Form'
};
$state['hasil'] = match($data->hasil) {
'Diterima' => 'Diterima',
'Tidak Diterima' => 'Tidak Diterima',
default => 'Belum Ada Hasil'
};
$state['keterangan'] = match($data->status) {
'valid' => match($data->hasil) {
'Diterima' => 'Selamat! Anda telah diterima sebagai penerima KIP-K. Silahkan cek pengumuman resmi untuk informasi lebih lanjut.',
'Tidak Diterima' => 'Mohon maaf, Anda belum berhasil menjadi penerima KIP-K. Tetap semangat dan jangan menyerah!',
default => 'Berkas Anda telah divalidasi. Hasil seleksi akan diumumkan segera.'
},
'tidak_valid' => "Berkas Anda tidak valid. Alasan: {$data->alasan_tidak_valid}",
'belum_validasi' => 'Berkas Anda sedang dalam proses validasi. Mohon tunggu informasi selanjutnya.',
default => 'Silahkan lengkapi form pendaftaran KIP-K terlebih dahulu.'
};
}
return $infolist return $infolist
->schema([ ->schema([
@ -39,18 +82,17 @@ public function infolist(Infolist $infolist): Infolist
->label('Status Berkas') ->label('Status Berkas')
->badge() ->badge()
->color(fn (string $state): string => match ($state) { ->color(fn (string $state): string => match ($state) {
'valid' => 'success', 'Berkas Valid' => 'success',
'tidak_valid' => 'danger', 'Berkas Tidak Valid' => 'danger',
'belum_validasi' => 'warning', 'Belum Divalidasi' => 'warning',
default => 'gray', default => 'gray',
}), }),
TextEntry::make('hasil') TextEntry::make('hasil')
->label('Hasil Seleksi') ->label('Hasil Seleksi')
->badge() ->badge()
->color(fn (string $state): string => match ($state) { ->color(fn (string $state): string => match ($state) {
'Layak' => 'success', 'Diterima' => 'success',
'Dipertimbangkan' => 'warning', 'Tidak Diterima' => 'danger',
'Tidak Layak' => 'danger',
default => 'gray', default => 'gray',
}), }),
]), ]),
@ -63,11 +105,34 @@ public function infolist(Infolist $infolist): Infolist
->columnSpanFull(), ->columnSpanFull(),
]), ]),
]) ])
->state([ ->state($state);
'status' => $data?->status ?? 'belum_validasi', }
'hasil' => $data?->hasil ?? 'Belum Ada Hasil',
'keterangan' => $data?->keterangan ?? 'Data Anda sedang dalam proses validasi', protected function getHeaderActions(): array
{
$user = auth()->user();
$mahasiswa = Mahasiswa::with(['prodi', 'jurusan'])->where('user_id', $user->id)->first();
$data = $mahasiswa ? Parameter::where('mahasiswa_id', $mahasiswa->id)->first() : null;
if ($data && $data->status === 'valid' && $data->hasil === 'Diterima') {
return [
Action::make('exportSurat')
->label('Download Surat Keterangan')
->icon('heroicon-o-document-arrow-down')
->action(function () use ($mahasiswa) {
$pdf = PDF::loadView('surat.keterangan', [
'mahasiswa' => $mahasiswa,
'tanggal' => now()->format('Y-m-d'),
]); ]);
return response()->streamDownload(function () use ($pdf) {
echo $pdf->output();
}, 'surat-keterangan-kipk.pdf');
})
];
}
return [];
} }
public static function shouldRegisterNavigation(): bool public static function shouldRegisterNavigation(): bool

View File

@ -61,7 +61,8 @@ public static function table(Table $table): Table
TextColumn::make('nama'), TextColumn::make('nama'),
TextColumn::make('tgl_pembuatan') TextColumn::make('tgl_pembuatan')
->label('Tanggal'), ->label('Tanggal'),
TextColumn::make('kuota'), TextColumn::make('kuota')
->visible(fn () => !Auth::user()->hasRole('mahasiswa')),
TextColumn::make('status') TextColumn::make('status')
->badge() ->badge()
->color(fn (string $state): string => match ($state) { ->color(fn (string $state): string => match ($state) {

View File

@ -70,64 +70,6 @@ public static function table(Table $table): Table
->url(fn () => route('filament.admin.resources.hasil-penilaian.akreditasi-c')) ->url(fn () => route('filament.admin.resources.hasil-penilaian.akreditasi-c'))
->color('danger') ->color('danger')
->icon('heroicon-o-bookmark'), ->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']);
// // 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([
@ -165,24 +107,17 @@ public static function table(Table $table): Table
->label('Hasil') ->label('Hasil')
->badge() ->badge()
->color(fn (string $state): string => match ($state) { ->color(fn (string $state): string => match ($state) {
'Layak' => 'success', 'Diterima' => 'success',
'Dipertimbangkan' => 'warning', 'Tidak Diterima' => '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')
->filters([ ->filters([
Tables\Filters\SelectFilter::make('hasil') Tables\Filters\SelectFilter::make('hasil')
->options([ ->options([
'Layak' => 'Layak', 'Diterima' => 'Diterima',
'Dipertimbangkan' => 'Dipertimbangkan', 'Tidak Diterima' => 'Tidak Diterima',
'Tidak Layak' => 'Tidak Layak',
]), ]),
]); ]);
} }

View File

@ -38,7 +38,7 @@ public function table(Table $table): Table
// Reset hasil untuk akreditasi A // Reset hasil untuk akreditasi A
Parameter::whereHas('mahasiswa.prodi', function ($query) { Parameter::whereHas('mahasiswa.prodi', function ($query) {
$query->where('akreditasi', 'A'); $query->where('akreditasi', 'A');
})->update(['hasil' => 'Tidak Layak']); })->update(['hasil' => 'Tidak Diterima']);
// Ambil data parameter yang valid dengan akreditasi A // Ambil data parameter yang valid dengan akreditasi A
$validParameters = Parameter::where('status', 'valid') $validParameters = Parameter::where('status', 'valid')
@ -55,11 +55,7 @@ public function table(Table $table): Table
if ($index < $kuota) { if ($index < $kuota) {
DB::table('parameters') DB::table('parameters')
->where('id', $parameter->id) ->where('id', $parameter->id)
->update(['hasil' => 'Layak']); ->update(['hasil' => 'Diterima']);
} elseif ($index < ($kuota + 3)) {
DB::table('parameters')
->where('id', $parameter->id)
->update(['hasil' => 'Dipertimbangkan']);
} }
$index++; $index++;
} }
@ -139,9 +135,8 @@ public function table(Table $table): Table
->label('Hasil') ->label('Hasil')
->badge() ->badge()
->color(fn (string $state): string => match ($state) { ->color(fn (string $state): string => match ($state) {
'Layak' => 'success', 'Diterima' => 'success',
'Dipertimbangkan' => 'warning', 'Tidak Diterima' => 'danger',
'Tidak Layak' => 'danger',
default => 'gray', default => 'gray',
}), }),
]) ])
@ -149,9 +144,8 @@ public function table(Table $table): Table
->filters([ ->filters([
\Filament\Tables\Filters\SelectFilter::make('hasil') \Filament\Tables\Filters\SelectFilter::make('hasil')
->options([ ->options([
'Layak' => 'Layak', 'Diterima' => 'success',
'Dipertimbangkan' => 'Dipertimbangkan', 'Tidak Diterima' => 'danger',
'Tidak Layak' => 'Tidak Layak',
]), ]),
]); ]);
} }

View File

@ -39,7 +39,7 @@ public function table(Table $table): Table
// Reset hasil untuk akreditasi B // Reset hasil untuk akreditasi B
Parameter::whereHas('mahasiswa.prodi', function ($query) { Parameter::whereHas('mahasiswa.prodi', function ($query) {
$query->where('akreditasi', 'B'); $query->where('akreditasi', 'B');
})->update(['hasil' => 'Tidak Layak']); })->update(['hasil' => 'Tidak Diterima']);
// Ambil data parameter yang valid dengan akreditasi B // Ambil data parameter yang valid dengan akreditasi B
$validParameters = Parameter::where('status', 'valid') $validParameters = Parameter::where('status', 'valid')
@ -56,11 +56,7 @@ public function table(Table $table): Table
if ($index < $kuota) { if ($index < $kuota) {
DB::table('parameters') DB::table('parameters')
->where('id', $parameter->id) ->where('id', $parameter->id)
->update(['hasil' => 'Layak']); ->update(['hasil' => 'Diterima']);
} elseif ($index < ($kuota + 3)) {
DB::table('parameters')
->where('id', $parameter->id)
->update(['hasil' => 'Dipertimbangkan']);
} }
$index++; $index++;
} }
@ -140,9 +136,8 @@ public function table(Table $table): Table
->label('Hasil') ->label('Hasil')
->badge() ->badge()
->color(fn (string $state): string => match ($state) { ->color(fn (string $state): string => match ($state) {
'Layak' => 'success', 'Diterima' => 'success',
'Dipertimbangkan' => 'warning', 'Tidak Diterima' => 'danger',
'Tidak Layak' => 'danger',
default => 'gray', default => 'gray',
}), }),
]) ])
@ -150,9 +145,8 @@ public function table(Table $table): Table
->filters([ ->filters([
\Filament\Tables\Filters\SelectFilter::make('hasil') \Filament\Tables\Filters\SelectFilter::make('hasil')
->options([ ->options([
'Layak' => 'Layak', 'Diterima' => 'success',
'Dipertimbangkan' => 'Dipertimbangkan', 'Tidak Diterima' => 'danger',
'Tidak Layak' => 'Tidak Layak',
]), ]),
]); ]);
} }

View File

@ -39,7 +39,7 @@ public function table(Table $table): Table
// Reset hasil untuk akreditasi C // Reset hasil untuk akreditasi C
Parameter::whereHas('mahasiswa.prodi', function ($query) { Parameter::whereHas('mahasiswa.prodi', function ($query) {
$query->where('akreditasi', 'C'); $query->where('akreditasi', 'C');
})->update(['hasil' => 'Tidak Layak']); })->update(['hasil' => 'Tidak Diterima']);
// Ambil data parameter yang valid dengan akreditasi C // Ambil data parameter yang valid dengan akreditasi C
$validParameters = Parameter::where('status', 'valid') $validParameters = Parameter::where('status', 'valid')
@ -56,11 +56,7 @@ public function table(Table $table): Table
if ($index < $kuota) { if ($index < $kuota) {
DB::table('parameters') DB::table('parameters')
->where('id', $parameter->id) ->where('id', $parameter->id)
->update(['hasil' => 'Layak']); ->update(['hasil' => 'Diterima']);
} elseif ($index < ($kuota + 3)) {
DB::table('parameters')
->where('id', $parameter->id)
->update(['hasil' => 'Dipertimbangkan']);
} }
$index++; $index++;
} }
@ -140,9 +136,8 @@ public function table(Table $table): Table
->label('Hasil') ->label('Hasil')
->badge() ->badge()
->color(fn (string $state): string => match ($state) { ->color(fn (string $state): string => match ($state) {
'Layak' => 'success', 'Diterima' => 'success',
'Dipertimbangkan' => 'warning', 'Tidak Diterima' => 'danger',
'Tidak Layak' => 'danger',
default => 'gray', default => 'gray',
}), }),
]) ])
@ -150,9 +145,8 @@ public function table(Table $table): Table
->filters([ ->filters([
\Filament\Tables\Filters\SelectFilter::make('hasil') \Filament\Tables\Filters\SelectFilter::make('hasil')
->options([ ->options([
'Layak' => 'Layak', 'Diterima' => 'success',
'Dipertimbangkan' => 'Dipertimbangkan', 'Tidak Diterima' => 'danger',
'Tidak Layak' => 'Tidak Layak',
]), ]),
]); ]);
} }

View File

@ -36,6 +36,8 @@ public static function form(Form $form): Form
TextInput::make('prioritas') TextInput::make('prioritas')
->required(), ->required(),
TextInput::make('bobot') TextInput::make('bobot')
->disabled()
->helperText('Bobot akan dihitung otomatis oleh sistem')
// ->required(), // ->required(),
]); ]);
} }

View File

@ -38,6 +38,11 @@ class ParameterResource extends Resource
protected static ?string $title = 'Validasi Data'; protected static ?string $title = 'Validasi Data';
public static function canCreate(): bool
{
return false;
}
public static function form(Form $form): Form public static function form(Form $form): Form
{ {
return $form return $form
@ -304,9 +309,8 @@ public static function table(Table $table): Table
// ->label('Hasil') // ->label('Hasil')
// ->badge() // ->badge()
// ->color(fn (string $state): string => match ($state) { // ->color(fn (string $state): string => match ($state) {
// 'Layak' => 'success', // 'Diterima' => 'success',
// 'Dipertimbangkan' => 'warning', // 'Tidak Diterima' => 'danger',
// 'Tidak Layak' => 'danger',
// default => 'gray', // default => 'gray',
// }), // }),
@ -376,6 +380,12 @@ public static function table(Table $table): Table
'valid' => 'Valid', 'valid' => 'Valid',
'tidak_valid' => 'Tidak Valid', 'tidak_valid' => 'Tidak Valid',
]), ]),
Tables\Filters\SelectFilter::make('hasil')
->options([
'Diterima' => 'Diterima',
'Tidak Diterima' => 'Tidak Diterima',
]),
]) ])
->actions([ ->actions([
Tables\Actions\Action::make('validasi') Tables\Actions\Action::make('validasi')
@ -590,7 +600,6 @@ public static function getPages(): array
{ {
return [ return [
'index' => Pages\ListParameters::route('/'), 'index' => Pages\ListParameters::route('/'),
'create' => Pages\CreateParameter::route('/create'),
'edit' => Pages\EditParameter::route('/{record}/edit'), 'edit' => Pages\EditParameter::route('/{record}/edit'),
]; ];
} }

View File

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

View File

@ -55,6 +55,8 @@ public static function form(Form $form): Form
->required(), ->required(),
TextInput::make('bobot') TextInput::make('bobot')
->numeric() ->numeric()
->disabled()
->helperText('Bobot akan dihitung otomatis oleh sistem')
// ->required(), // ->required(),
]); ]);
} }

View File

@ -1,30 +1,30 @@
<?php <?php
namespace App\Models; // namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; // use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model; // use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo; // use Illuminate\Database\Eloquent\Relations\BelongsTo;
class Pengumuman extends Model // class Pengumuman extends Model
{ // {
use HasFactory; // use HasFactory;
protected $table = 'pengumumans'; // protected $table = 'pengumumans';
protected $fillable = [ // protected $fillable = [
'parameter_id', // 'parameter_id',
'user_id', // 'user_id',
'keterangan' // 'keterangan'
]; // ];
public function parameter(): BelongsTo // public function parameter(): BelongsTo
{ // {
return $this->belongsTo(Parameter::class); // return $this->belongsTo(Parameter::class);
} // }
public function user(): BelongsTo // public function user(): BelongsTo
{ // {
return $this->belongsTo(User::class); // return $this->belongsTo(User::class);
} // }
} // }

View File

@ -117,6 +117,16 @@ protected static function boot()
} }
break; break;
case 'Terdata DTKS':
// Ambil SubKriteria berdasarkan status terdata DTKS
$subKriteria = SubKriteria::where('kriteria_id', $kriteria->id)
->where('nama', $parameter->terdata_dtks)
->first();
if ($subKriteria) {
$totalNilai += $subKriteria->bobot;
}
break;
case 'Kondisi Ekonomi': case 'Kondisi Ekonomi':
// Hitung jumlah berkas yang diupload // Hitung jumlah berkas yang diupload
$berkasCount = 0; $berkasCount = 0;

View File

@ -75,7 +75,7 @@ public function up()
$table->decimal('total_nilai', 10, 7)->default(0); $table->decimal('total_nilai', 10, 7)->default(0);
// Hasil penilaian // Hasil penilaian
$table->enum('hasil', ['Layak', 'Dipertimbangkan', 'Tidak Layak'])->nullable(); $table->enum('hasil', ['Diterima', 'Tidak Diterima'])->nullable();
$table->timestamps(); $table->timestamps();

View File

@ -1,24 +0,0 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up()
{
Schema::create('pengumumans', function (Blueprint $table) {
$table->id();
$table->foreignId('parameter_id')->constrained('parameters')->cascadeOnDelete();
$table->foreignId('user_id')->constrained('users')->cascadeOnDelete();
$table->text('keterangan')->nullable();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('pengumumans');
}
};

View File

@ -17,22 +17,27 @@ public function run(): void
[ [
'nama' => 'Kepemilikan KIP', 'nama' => 'Kepemilikan KIP',
'prioritas' => 1, 'prioritas' => 1,
'bobot' => 0.5208333, 'bobot' => 0.4566667,
],
[
'nama' => 'Terdata DTKS',
'prioritas' => 2,
'bobot' => 0.2566667,
], ],
[ [
'nama' => 'Tingkatan Desil', 'nama' => 'Tingkatan Desil',
'prioritas' => 2, 'prioritas' => 3,
'bobot' => 0.2708333, 'bobot' => 0.1566667,
], ],
[ [
'nama' => 'Kondisi Ekonomi', 'nama' => 'Kondisi Ekonomi',
'prioritas' => 3, 'prioritas' => 4,
'bobot' => 0.1458333, 'bobot' => 0.09,
], ],
[ [
'nama' => 'Status Orang Tua', 'nama' => 'Status Orang Tua',
'prioritas' => 4, 'prioritas' => 5,
'bobot' => 0.0625000, 'bobot' => 0.04,
], ],
]; ];

View File

@ -20,104 +20,118 @@ public function run(): void
'nama' => 'Memiliki KIP', 'nama' => 'Memiliki KIP',
'deskripsi' => 'Mahasiswa memiliki Kartu Indonesia Pintar', 'deskripsi' => 'Mahasiswa memiliki Kartu Indonesia Pintar',
'prioritas' => 1, 'prioritas' => 1,
'bobot' => 0.3906250, 'bobot' => 0.3425000,
], ],
[ [
'kriteria_id' => 1, 'kriteria_id' => 1,
'nama' => 'Tidak Memiliki KIP', 'nama' => 'Tidak Memiliki KIP',
'deskripsi' => 'Mahasiswa tidak memiliki Kartu Indonesia Pintar', 'deskripsi' => 'Mahasiswa tidak memiliki Kartu Indonesia Pintar',
'prioritas' => 2, 'prioritas' => 2,
'bobot' => 0.1302083, 'bobot' => 0.1141667,
], ],
// Subkriteria untuk Terdata dalam DTKS (kriteria_id: 2)
// Subkriteria untuk Tingkatan Desil (kriteria_id: 2)
[ [
'kriteria_id' => 2, 'kriteria_id' => 2,
'nama' => 'Terdata',
'deskripsi' => 'Mahasiswa yang datanya tercatat dalam Data Terpadu Kesejahteraan Sosial (DTKS).',
'prioritas' => 1,
'bobot' => 0.1925000,
],
[
'kriteria_id' => 2,
'nama' => 'Tidak Terdata',
'deskripsi' => 'Mahasiswa yang datanya tidak tercatat dalam Data Terpadu Kesejahteraan Sosial (DTKS).',
'prioritas' => 2,
'bobot' => 0.0641667,
],
// Subkriteria untuk Tingkatan Desil (kriteria_id: 3)
[
'kriteria_id' => 3,
'nama' => 'Desil 1', 'nama' => 'Desil 1',
'deskripsi' => 'Tingkat kesejahteraan terendah', 'deskripsi' => 'Tingkat kesejahteraan terendah',
'prioritas' => 1, 'prioritas' => 1,
'bobot' => 0.1238805, 'bobot' => 0.0715445,
], ],
[ [
'kriteria_id' => 2, 'kriteria_id' => 3,
'nama' => 'Desil 2', 'nama' => 'Desil 2',
'deskripsi' => 'Tingkat kesejahteraan sangat rendah', 'deskripsi' => 'Tingkat kesejahteraan sangat rendah',
'prioritas' => 2, 'prioritas' => 2,
'bobot' => 0.0695139, 'bobot' => 0.0402111,
], ],
[ [
'kriteria_id' => 2, 'kriteria_id' => 3,
'nama' => 'Desil 3', 'nama' => 'Desil 3',
'deskripsi' => 'Tingkat kesejahteraan rendah', 'deskripsi' => 'Tingkat kesejahteraan rendah',
'prioritas' => 3, 'prioritas' => 3,
'bobot' => 0.0424306, 'bobot' => 0.0245444,
], ],
[ [
'kriteria_id' => 2, 'kriteria_id' => 3,
'nama' => 'Desil 4', 'nama' => 'Desil 4',
'deskripsi' => 'Tingkat kesejahteraan menengah bawah', 'deskripsi' => 'Tingkat kesejahteraan menengah bawah',
'prioritas' => 4, 'prioritas' => 4,
'bobot' => 0.0243750, 'bobot' => 0.0141000,
], ],
[ [
'kriteria_id' => 2, 'kriteria_id' => 3,
'nama' => 'Desil 5', 'nama' => 'Desil 5',
'deskripsi' => 'Tingkat kesejahteraan menengah', 'deskripsi' => 'Tingkat kesejahteraan menengah',
'prioritas' => 5, 'prioritas' => 5,
'bobot' => 0.0108333, 'bobot' => 0.0062667,
], ],
// Subkriteria untuk Kondisi Ekonomi (kriteria_id: 3) // Subkriteria untuk Kondisi Ekonomi (kriteria_id: 4)
[ [
'kriteria_id' => 3, 'kriteria_id' => 4,
'nama' => 'Sangat Kurang Mampu', 'nama' => 'Sangat Kurang Mampu',
'deskripsi' => 'Memiliki lebih dari 2 bantuan pemerintah', 'deskripsi' => 'Memiliki lebih dari 2 bantuan pemerintah',
'prioritas' => 1, 'prioritas' => 1,
'bobot' => 0.0759548, 'bobot' => 0.0468750,
], ],
[ [
'kriteria_id' => 3, 'kriteria_id' => 4,
'nama' => 'Kurang Mampu', 'nama' => 'Kurang Mampu',
'deskripsi' => 'Memiliki 2 bantuan pemerintah', 'deskripsi' => 'Memiliki 2 bantuan pemerintah',
'prioritas' => 2, 'prioritas' => 2,
'bobot' => 0.0394965, 'bobot' => 0.0243750,
], ],
[ [
'kriteria_id' => 3, 'kriteria_id' => 4,
'nama' => 'Cukup Mampu', 'nama' => 'Cukup Mampu',
'deskripsi' => 'Mahasiswa memiliki 1 bantuan pemerintah', 'deskripsi' => 'Mahasiswa memiliki 1 bantuan pemerintah',
'prioritas' => 3, 'prioritas' => 3,
'bobot' => 0.0212674, 'bobot' => 0.0131250,
], ],
[ [
'kriteria_id' => 3, 'kriteria_id' => 4,
'nama' => 'Tidak Menerima Bantuan', 'nama' => 'Tidak Menerima Bantuan',
'deskripsi' => 'Mahasiswa tidak memiliki bantuan pemerintah', 'deskripsi' => 'Mahasiswa tidak memiliki bantuan pemerintah',
'prioritas' => 4, 'prioritas' => 4,
'bobot' => 0.0091146, 'bobot' => 0.0056250,
], ],
// Subkriteria untuk Status Orang Tua (kriteria_id: 4) // Subkriteria untuk Status Orang Tua (kriteria_id: 5)
[ [
'kriteria_id' => 4, 'kriteria_id' => 5,
'nama' => 'Kedua Orang Tua Wafat', 'nama' => 'Kedua Orang Tua Wafat',
'deskripsi' => 'Ayah dan Ibu wafat', 'deskripsi' => 'Ayah dan Ibu wafat',
'prioritas' => 1, 'prioritas' => 1,
'bobot' => 0.0381944, 'bobot' => 0.0244444,
], ],
[ [
'kriteria_id' => 4, 'kriteria_id' => 5,
'nama' => 'Salah Satu Orang Tua Wafat', 'nama' => 'Salah Satu Orang Tua Wafat',
'deskripsi' => 'Ayah atau Ibu-nya wafat', 'deskripsi' => 'Ayah atau Ibu-nya wafat',
'prioritas' => 2, 'prioritas' => 2,
'bobot' => 0.0173611, 'bobot' => 0.0111111,
], ],
[ [
'kriteria_id' => 4, 'kriteria_id' => 5,
'nama' => 'Kedua Orang Tua Masih Hidup', 'nama' => 'Kedua Orang Tua Masih Hidup',
'deskripsi' => 'Ayah dan Ibu-nya masih hidup', 'deskripsi' => 'Ayah dan Ibu-nya masih hidup',
'prioritas' => 3, 'prioritas' => 3,
'bobot' => 0.0069444, 'bobot' => 0.0044444,
], ],
]; ];

View File

@ -0,0 +1,165 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Surat Keterangan KIP-K</title>
<style>
body {
font-family: Arial, sans-serif;
line-height: 1.6;
margin: 40px;
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;
}
.header {
text-align: center;
margin-bottom: 30px;
}
.content {
margin-bottom: 30px;
}
.footer {
margin-top: 50px;
text-align: right;
}
.signature {
margin-top: 50px;
text-align: right;
}
.signature-line {
margin-top: 50px;
border-top: 1px solid black;
width: 200px;
margin-left: auto;
}
</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>
<div class="header">
<h2>SURAT KETERANGAN</h2>
<h3>PENERIMA KIP-K</h3>
<p>Nomor: {{ date('Y') }}/KIP-K/{{ str_pad($mahasiswa->id, 4, '0', STR_PAD_LEFT) }}</p>
</div>
<div class="content">
<p>Yang bertanda tangan di bawah ini, Kepala Program Studi {{ $mahasiswa->prodi->nama ?? '-' }}, menyatakan bahwa:</p>
<table style="margin-left: 40px;">
<tr>
<td>No. Registrasi KIP-K</td>
<td>: {{ $mahasiswa->noreg_kipk }}</td>
</tr>
<tr>
<td>Nama Lengkap</td>
<td>: {{ $mahasiswa->nama }}</td>
</tr>
<tr>
<td>NIM</td>
<td>: {{ $mahasiswa->NIM }}</td>
</tr>
<tr>
<td>Program Studi</td>
<td>: {{ $mahasiswa->prodi->nama ?? '-' }}</td>
</tr>
<tr>
<td>Jurusan</td>
<td>: {{ $mahasiswa->jurusan->nama ?? '-' }}</td>
</tr>
<tr>
<td>Akreditasi Prodi</td>
<td>: {{ $mahasiswa->akreditasi }}</td>
</tr>
<tr>
<td>Angkatan</td>
<td>: {{ $mahasiswa->angkatan }}</td>
</tr>
<tr>
<td>Jalur Masuk</td>
<td>: {{ $mahasiswa->jalur_masuk }}</td>
</tr>
<tr>
<td>No. Handphone</td>
<td>: {{ $mahasiswa->ponsel }}</td>
</tr>
<tr>
<td>Alamat</td>
<td>: {{ $mahasiswa->alamat }}</td>
</tr>
</table>
<p style="margin-top: 20px;">
Telah dinyatakan <strong>DITERIMA</strong> sebagai penerima Kartu Indonesia Pintar Kuliah (KIP-K)
berdasarkan hasil seleksi yang telah dilakukan.
</p>
</div>
<div class="footer">
<p>Jember, {{ \Carbon\Carbon::parse($tanggal)->locale('id')->isoFormat('D MMMM Y') }}</p>
<table style="width: 100%; margin-top: 50px;">
<tr>
<td style="width: 33%; text-align: center;">
<p>Penerima KIP-K</p>
<div style="border-top: 1px solid black; width: 200px; margin: 50px auto 0;"></div>
<p>{{ $mahasiswa->nama }}</p>
</td>
<td style="width: 33%; text-align: center;">
<p>Wali Mahasiswa</p>
<div style="border-top: 1px solid black; width: 200px; margin: 50px auto 0;"></div>
<p>........................</p>
</td>
<td style="width: 33%; text-align: center;">
<p>Kepala Program Studi</p>
<div style="border-top: 1px solid black; width: 200px; margin: 50px auto 0;"></div>
<p>........................</p>
</td>
</tr>
</table>
</div>
</body>
</html>