52 lines
1.9 KiB
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);
|
|
}
|
|
}
|