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;
use App\Models\Parameter;
use App\Models\Mahasiswa;
use Filament\Pages\Page;
use Filament\Infolists\Infolist;
use Filament\Infolists\Components\Section;
use Filament\Infolists\Components\TextEntry;
use Filament\Infolists\Components\Grid;
use Filament\Navigation\NavigationItem;
use Filament\Actions\Action;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Support\Facades\Storage;
class ProgresDataPage extends Page
{
@ -27,7 +31,46 @@ public function getTitle(): string
public function infolist(Infolist $infolist): Infolist
{
$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
->schema([
@ -39,18 +82,17 @@ public function infolist(Infolist $infolist): Infolist
->label('Status Berkas')
->badge()
->color(fn (string $state): string => match ($state) {
'valid' => 'success',
'tidak_valid' => 'danger',
'belum_validasi' => 'warning',
'Berkas Valid' => 'success',
'Berkas Tidak Valid' => 'danger',
'Belum Divalidasi' => 'warning',
default => 'gray',
}),
TextEntry::make('hasil')
->label('Hasil Seleksi')
->badge()
->color(fn (string $state): string => match ($state) {
'Layak' => 'success',
'Dipertimbangkan' => 'warning',
'Tidak Layak' => 'danger',
'Diterima' => 'success',
'Tidak Diterima' => 'danger',
default => 'gray',
}),
]),
@ -63,11 +105,34 @@ public function infolist(Infolist $infolist): Infolist
->columnSpanFull(),
]),
])
->state([
'status' => $data?->status ?? 'belum_validasi',
'hasil' => $data?->hasil ?? 'Belum Ada Hasil',
'keterangan' => $data?->keterangan ?? 'Data Anda sedang dalam proses validasi',
]);
->state($state);
}
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

View File

@ -61,7 +61,8 @@ public static function table(Table $table): Table
TextColumn::make('nama'),
TextColumn::make('tgl_pembuatan')
->label('Tanggal'),
TextColumn::make('kuota'),
TextColumn::make('kuota')
->visible(fn () => !Auth::user()->hasRole('mahasiswa')),
TextColumn::make('status')
->badge()
->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'))
->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']);
// // 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'))
->columns([
@ -165,24 +107,17 @@ public static function table(Table $table): Table
->label('Hasil')
->badge()
->color(fn (string $state): string => match ($state) {
'Layak' => 'success',
'Dipertimbangkan' => 'warning',
'Tidak Layak' => 'danger',
'Diterima' => 'success',
'Tidak Diterima' => 'danger',
default => 'gray',
})
->formatStateUsing(fn (string $state): string => match ($state) {
'Layak' => 'Diterima',
'Tidak Layak' => 'Tidak Diterima',
default => $state,
}),
])
->defaultSort('total_nilai', 'desc')
->filters([
Tables\Filters\SelectFilter::make('hasil')
->options([
'Layak' => 'Layak',
'Dipertimbangkan' => 'Dipertimbangkan',
'Tidak Layak' => 'Tidak Layak',
'Diterima' => 'Diterima',
'Tidak Diterima' => 'Tidak Diterima',
]),
]);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -117,6 +117,16 @@ protected static function boot()
}
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':
// Hitung jumlah berkas yang diupload
$berkasCount = 0;

View File

@ -75,7 +75,7 @@ public function up()
$table->decimal('total_nilai', 10, 7)->default(0);
// Hasil penilaian
$table->enum('hasil', ['Layak', 'Dipertimbangkan', 'Tidak Layak'])->nullable();
$table->enum('hasil', ['Diterima', 'Tidak Diterima'])->nullable();
$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',
'prioritas' => 1,
'bobot' => 0.5208333,
'bobot' => 0.4566667,
],
[
'nama' => 'Terdata DTKS',
'prioritas' => 2,
'bobot' => 0.2566667,
],
[
'nama' => 'Tingkatan Desil',
'prioritas' => 2,
'bobot' => 0.2708333,
'prioritas' => 3,
'bobot' => 0.1566667,
],
[
'nama' => 'Kondisi Ekonomi',
'prioritas' => 3,
'bobot' => 0.1458333,
'prioritas' => 4,
'bobot' => 0.09,
],
[
'nama' => 'Status Orang Tua',
'prioritas' => 4,
'bobot' => 0.0625000,
'prioritas' => 5,
'bobot' => 0.04,
],
];

View File

@ -20,104 +20,118 @@ public function run(): void
'nama' => 'Memiliki KIP',
'deskripsi' => 'Mahasiswa memiliki Kartu Indonesia Pintar',
'prioritas' => 1,
'bobot' => 0.3906250,
'bobot' => 0.3425000,
],
[
'kriteria_id' => 1,
'nama' => 'Tidak Memiliki KIP',
'deskripsi' => 'Mahasiswa tidak memiliki Kartu Indonesia Pintar',
'prioritas' => 2,
'bobot' => 0.1302083,
'bobot' => 0.1141667,
],
// Subkriteria untuk Tingkatan Desil (kriteria_id: 2)
// Subkriteria untuk Terdata dalam DTKS (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',
'deskripsi' => 'Tingkat kesejahteraan terendah',
'prioritas' => 1,
'bobot' => 0.1238805,
'bobot' => 0.0715445,
],
[
'kriteria_id' => 2,
'kriteria_id' => 3,
'nama' => 'Desil 2',
'deskripsi' => 'Tingkat kesejahteraan sangat rendah',
'prioritas' => 2,
'bobot' => 0.0695139,
'bobot' => 0.0402111,
],
[
'kriteria_id' => 2,
'kriteria_id' => 3,
'nama' => 'Desil 3',
'deskripsi' => 'Tingkat kesejahteraan rendah',
'prioritas' => 3,
'bobot' => 0.0424306,
'bobot' => 0.0245444,
],
[
'kriteria_id' => 2,
'kriteria_id' => 3,
'nama' => 'Desil 4',
'deskripsi' => 'Tingkat kesejahteraan menengah bawah',
'prioritas' => 4,
'bobot' => 0.0243750,
'bobot' => 0.0141000,
],
[
'kriteria_id' => 2,
'kriteria_id' => 3,
'nama' => 'Desil 5',
'deskripsi' => 'Tingkat kesejahteraan menengah',
'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',
'deskripsi' => 'Memiliki lebih dari 2 bantuan pemerintah',
'prioritas' => 1,
'bobot' => 0.0759548,
'bobot' => 0.0468750,
],
[
'kriteria_id' => 3,
'kriteria_id' => 4,
'nama' => 'Kurang Mampu',
'deskripsi' => 'Memiliki 2 bantuan pemerintah',
'prioritas' => 2,
'bobot' => 0.0394965,
'bobot' => 0.0243750,
],
[
'kriteria_id' => 3,
'kriteria_id' => 4,
'nama' => 'Cukup Mampu',
'deskripsi' => 'Mahasiswa memiliki 1 bantuan pemerintah',
'prioritas' => 3,
'bobot' => 0.0212674,
'bobot' => 0.0131250,
],
[
'kriteria_id' => 3,
'kriteria_id' => 4,
'nama' => 'Tidak Menerima Bantuan',
'deskripsi' => 'Mahasiswa tidak memiliki bantuan pemerintah',
'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',
'deskripsi' => 'Ayah dan Ibu wafat',
'prioritas' => 1,
'bobot' => 0.0381944,
'bobot' => 0.0244444,
],
[
'kriteria_id' => 4,
'kriteria_id' => 5,
'nama' => 'Salah Satu Orang Tua Wafat',
'deskripsi' => 'Ayah atau Ibu-nya wafat',
'prioritas' => 2,
'bobot' => 0.0173611,
'bobot' => 0.0111111,
],
[
'kriteria_id' => 4,
'kriteria_id' => 5,
'nama' => 'Kedua Orang Tua Masih Hidup',
'deskripsi' => 'Ayah dan Ibu-nya masih hidup',
'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>