106 lines
3.2 KiB
PHP
106 lines
3.2 KiB
PHP
<?php
|
||
|
||
namespace App\Http\Controllers\User;
|
||
|
||
use App\Http\Controllers\Controller;
|
||
use Illuminate\Support\Facades\Auth;
|
||
use App\Models\Diagnosa;
|
||
use App\Models\HasilAhp;
|
||
use Illuminate\Support\Collection;
|
||
use Barryvdh\DomPDF\Facade\Pdf;
|
||
|
||
|
||
class DiagnosisHasilController extends Controller
|
||
{
|
||
public function index()
|
||
{
|
||
$userId = Auth::id();
|
||
|
||
// 1. Ambil Diagnosa Biasa
|
||
$diagnosas = Diagnosa::with('kecerdasan')
|
||
->where('user_id', $userId)
|
||
->get()
|
||
->map(function($d) {
|
||
return [
|
||
'tanggal' => $d->created_at,
|
||
'kecerdasan' => $d->kecerdasan ? $d->kecerdasan->nama : 'Tidak Diketahui',
|
||
'skor' => number_format($d->presentase, 2) . '%',
|
||
'type' => 'Diagnosa',
|
||
];
|
||
});
|
||
|
||
// 2. Ambil Hasil AHP
|
||
$ahps = HasilAhp::with('jurusan')
|
||
->where('user_id', $userId)
|
||
->get()
|
||
->map(function($h) {
|
||
return [
|
||
'tanggal' => $h->created_at,
|
||
'jurusan' => $h->jurusan->nama,
|
||
'skor' => number_format($h->score * 100, 2) . '%',
|
||
'type' => 'AHP',
|
||
];
|
||
});
|
||
|
||
// 3. Gabungkan dan urutkan berdasarkan tanggal (terbaru di atas)
|
||
$all = $diagnosas
|
||
->merge($ahps)
|
||
->sortByDesc('tanggal')
|
||
->values()
|
||
->map(function($item) {
|
||
// Format tanggal jadi string
|
||
$item['tanggal'] = $item['tanggal']->format('d-m-Y');
|
||
return $item;
|
||
});
|
||
|
||
return view('user.diagnosishasil', ['records' => $all]);
|
||
}
|
||
|
||
public function exportPdf()
|
||
{
|
||
$userId = Auth::id();
|
||
|
||
// Gabungkan data Diagnosa & AHP seperti di index()
|
||
$diagnosas = Diagnosa::with('kecerdasan')
|
||
->where('user_id', $userId)
|
||
->get()
|
||
->map(function($d) {
|
||
return [
|
||
'tanggal' => $d->created_at,
|
||
// optional() akan aman: jika null, dikembalikan null
|
||
'kecerdasan' => optional($d->kecerdasan)->nama ?? '–',
|
||
'skor' => number_format($d->presentase, 2) . '%',
|
||
'type' => 'Diagnosa',
|
||
];
|
||
});
|
||
$ahps = HasilAhp::with('jurusan')
|
||
->where('user_id', $userId)
|
||
->get()
|
||
->map(function($h) {
|
||
return [
|
||
'tanggal' => $h->created_at,
|
||
'jurusan' => $h->jurusan->nama,
|
||
'skor' => number_format($h->score * 100, 2) . '%',
|
||
'type' => 'AHP',
|
||
];
|
||
});
|
||
|
||
$records = $diagnosas
|
||
->merge($ahps)
|
||
->sortByDesc('tanggal')
|
||
->values()
|
||
->map(function($item) {
|
||
$item['tanggal'] = $item['tanggal']->format('d-m-Y');
|
||
return $item;
|
||
});
|
||
|
||
// generate PDF dari view 'user.diagnosishasil_pdf'
|
||
// generate PDF dari view
|
||
$pdf = Pdf::loadView('user.rr', ['records' => $records])
|
||
->setPaper('a4', 'portrait');
|
||
|
||
|
||
return $pdf->download('riwayat_diagnosa_ahp_'.date('Ymd').'.pdf');
|
||
}
|
||
}
|