MIF_E31221247/app/Http/Controllers/HomeController.php

140 lines
4.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\DataPengguna;
use App\Models\Indikator;
use App\Models\RiwayatKonsultasi;
use App\Services\CBRService;
use Barryvdh\DomPDF\Facade\Pdf;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
class HomeController extends Controller
{
public function index()
{
return view('check.cek-penyakit');
}
public function home()
{
return view('home.home'); // Pastikan file view ada di resources/views/home/home.blade.php
}
public function temukan($id)
{
$riwayat = RiwayatKonsultasi::find($id);
$indikatorIds = json_decode($riwayat->id_indikator, true);
$penggunaIds = json_decode($riwayat->id_data_pengguna, true);
$indikator = Indikator::whereIn('id', $indikatorIds)->get();
$pengguna = DataPengguna::whereIn('id', $penggunaIds)->get();
return view('check.hasil', [
'id' => $id,
'indikators' => $indikator,
'pengguna' => $pengguna,
]);
}
public function cetakPDF($id)
{
$riwayat = RiwayatKonsultasi::find($id);
$indikatorIds = json_decode($riwayat->id_indikator, true);
$penggunaIds = json_decode($riwayat->id_data_pengguna, true);
$indikators = Indikator::whereIn('id', $indikatorIds)->get();
$pengguna = DataPengguna::whereIn('id', $penggunaIds)->get();
$pdf = Pdf::loadView('check.cetak', compact('pengguna', 'indikators'));
return $pdf->stream('Hasil_Diagnosa.pdf');
}
public function temukanPenyakit(Request $request)
{
$validator = Validator::make($request->all(), [
'indikator' => 'required|min:2',
'indikator.*' => 'exists:indikators,kode',
'nama' => 'required|string|max:255',
'email' => 'required|string|max:255',
'nama_kucing' => 'required|string|max:20',
'usia_kucing' => 'required|numeric|min:1',
], [
'indikator.required' => 'Pilih minimal dua indikator.',
'indikator.min' => 'Minimal dua indikator harus dipilih.',
'nama.required' => 'Nama wajib diisi.',
'email.required' => 'Email wajib diisi.',
'nama_kucing.required' => 'Nama kucing wajib diisi.',
'usia_kucing.required' => 'Usia kucing wajib diisi.',
]);
$indicators = $request->indikator;
$predictions = CBRService::calculatePrediction($indicators);
$ids_data_pengguna = [];
DB::beginTransaction();
try {
foreach ($predictions as $prediction) {
$model = new DataPengguna();
$model->nama = $request->nama;
$model->email = $request->email;
$model->nama_kucing = $request->nama_kucing;
$model->usia_kucing = $request->usia_kucing;
$model->kode_indikator = implode(',', $request->indikator);
$model->kode_penyakit = $prediction['penyakit']->kode;
$model->nilai_cf = $prediction['confidence_score'];
$model->save();
$ids_data_pengguna[] = $model->id;
}
$riwayat = RiwayatKonsultasi::create([
'id_data_pengguna' => json_encode($ids_data_pengguna),
'id_indikator' => json_encode($indicators),
]);
DB::commit();
} catch (\Exception $e) {
DB::rollback();
return response()->json(['error' => $e->getMessage()], 500);
}
return redirect(route('hasil.penyakit', [$riwayat->id]));
}
public function statistikPenyakit()
{
// Mengelompokkan data penyakit berdasarkan kode_penyakit dan menghitung jumlahnya
$statistik = DataPengguna::select('kode_penyakit', DB::raw('count(*) as jumlah'))
->groupBy('kode_penyakit')
->get();
return view('admin.dashboard', compact('statistik'));
}
public function diagnosaUlang($id)
{
// Cari riwayat dan data pengguna terkait
$riwayat = RiwayatKonsultasi::findOrFail($id);
$dataPengguna = DataPengguna::whereIn('id', json_decode($riwayat->id_data_pengguna, true))->first();
// Simpan data ke session untuk otomatis isi form
session([
'riwayat_id' => $riwayat->id,
'nama' => $dataPengguna->nama,
'email' => $dataPengguna->email,
'nama_kucing' => $dataPengguna->nama_kucing,
'usia_kucing' => $dataPengguna->usia_kucing,
'indikator_terpilih' => json_decode($riwayat->id_indikator, true),
]);
// Arahkan ke halaman cek-penyakit
return redirect()->route('cek-penyakit');
}
}