MIF_E31230333/app/Http/Controllers/PdfController.php

52 lines
1.9 KiB
PHP

<?php
// ════════════════════════════════════════════════════════════════
// app/Http/Controllers/PdfController.php
//
// KEGUNAAN: Menghasilkan file PDF dari hasil diagnosa.
// User bisa download PDF dari halaman hasil diagnosa
// maupun dari halaman riwayat konsultasi.
// ════════════════════════════════════════════════════════════════
namespace App\Http\Controllers;
use App\Models\Konsultasi;
use App\Services\CertaintyFactorService;
use Barryvdh\DomPDF\Facade\Pdf;
class PdfController extends Controller
{
public function __construct(private CertaintyFactorService $cfService) {}
// ── Download PDF hasil diagnosa ───────────────────────────
public function download(int $id)
{
$konsultasi = Konsultasi::with([
'hasilDiagnosa.penyakit.solusi',
'gejalaList.gejala',
'user',
])->findOrFail($id);
// Pastikan hanya pemilik yang bisa download
if (auth()->check() && $konsultasi->user_id != auth()->id()) {
abort(403);
}
// Hitung ulang untuk log CF
$gejalaIds = $konsultasi->gejalaList->pluck('id_gejala')->toArray();
$hasilInfer = $this->cfService->hitung($gejalaIds);
$pdf = Pdf::loadView('pdf.hasil-diagnosa', compact('konsultasi', 'hasilInfer'))
->setPaper('a4', 'portrait')
->setOptions([
'defaultFont' => 'sans-serif',
'isHtml5ParserEnabled' => true,
'isRemoteEnabled' => false,
]);
$filename = 'RedGuard-' . $konsultasi->kode_konsultasi . '.pdf';
return $pdf->download($filename);
}
}