148 lines
4.8 KiB
PHP
148 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Rule;
|
|
use App\Models\Penyakit;
|
|
use App\Models\Gejala;
|
|
use Illuminate\Http\Request;
|
|
|
|
class RuleController extends Controller
|
|
{
|
|
// Tentukan nilai pakar dari nilai CF
|
|
private function nilaiPakarDariCF(float $cf): int
|
|
{
|
|
if ($cf <= 0.2) return 1;
|
|
if ($cf <= 0.4) return 2;
|
|
if ($cf <= 0.6) return 3;
|
|
if ($cf <= 0.8) return 4;
|
|
return 5;
|
|
}
|
|
|
|
// Tampilkan daftar semua rule
|
|
public function index()
|
|
{
|
|
$rules = Rule::with(['penyakit', 'gejala'])
|
|
->when(request('penyakit_id'), fn($q) =>
|
|
$q->where('id_penyakit', request('penyakit_id'))
|
|
)
|
|
->when(request('search'), fn($q) =>
|
|
$q->where('kode_rule', 'like', '%' . request('search') . '%')
|
|
)
|
|
->orderBy('kode_rule')
|
|
->paginate(15);
|
|
|
|
$semuaPenyakit = Penyakit::orderBy('kode')->get();
|
|
|
|
return view('admin.rule.index', compact('rules', 'semuaPenyakit'));
|
|
}
|
|
|
|
// Tampilkan form tambah rule
|
|
public function create()
|
|
{
|
|
$penyakit = Penyakit::orderBy('kode')->get();
|
|
$gejala = Gejala::orderBy('kode')->get();
|
|
return view('admin.rule.form', compact('penyakit', 'gejala'));
|
|
}
|
|
|
|
// Simpan rule baru
|
|
public function store(Request $request)
|
|
{
|
|
$request->validate([
|
|
'id_penyakit' => 'required|exists:tbl_penyakit,id',
|
|
'id_gejala' => 'required|exists:tbl_gejala,id',
|
|
'nilai_mb' => 'required|numeric|min:0|max:1',
|
|
'nilai_md' => 'required|numeric|min:0|max:1',
|
|
], [
|
|
'id_penyakit.required' => 'Pilih penyakit terlebih dahulu.',
|
|
'id_gejala.required' => 'Pilih gejala terlebih dahulu.',
|
|
'nilai_mb.required' => 'Nilai MB wajib diisi.',
|
|
'nilai_md.required' => 'Nilai MD wajib diisi.',
|
|
]);
|
|
|
|
// Cek kombinasi penyakit-gejala sudah ada
|
|
$sudahAda = Rule::where('id_penyakit', $request->id_penyakit)
|
|
->where('id_gejala', $request->id_gejala)
|
|
->exists();
|
|
|
|
if ($sudahAda) {
|
|
return back()->withErrors(['id_gejala' => 'Rule untuk kombinasi penyakit dan gejala ini sudah ada.']);
|
|
}
|
|
|
|
// Hitung CF dan nilai pakar otomatis
|
|
$mb = (float) $request->nilai_mb;
|
|
$md = (float) $request->nilai_md;
|
|
$cf = round($mb - $md, 4);
|
|
$pakar = $this->nilaiPakarDariCF($cf);
|
|
|
|
// Auto-generate kode rule jika kosong
|
|
$kodeRule = $request->kode_rule;
|
|
if (empty($kodeRule)) {
|
|
$lastRule = Rule::orderByDesc('id')->first();
|
|
$nextNum = $lastRule ? (intval(substr($lastRule->kode_rule, 1)) + 1) : 1;
|
|
$kodeRule = 'R' . str_pad($nextNum, 3, '0', STR_PAD_LEFT);
|
|
}
|
|
|
|
Rule::create([
|
|
'kode_rule' => strtoupper($kodeRule),
|
|
'id_penyakit' => $request->id_penyakit,
|
|
'id_gejala' => $request->id_gejala,
|
|
'nilai_mb' => $mb,
|
|
'nilai_md' => $md,
|
|
'nilai_cf' => $cf,
|
|
'nilai_pakar' => $pakar,
|
|
]);
|
|
|
|
return redirect()->route('admin.rule.index')
|
|
->with('success', 'Rule "' . $kodeRule . '" berhasil ditambahkan.');
|
|
}
|
|
|
|
// Tampilkan form edit rule
|
|
public function edit(Rule $rule)
|
|
{
|
|
$penyakit = Penyakit::orderBy('kode')->get();
|
|
$gejala = Gejala::orderBy('kode')->get();
|
|
return view('admin.rule.form', compact('rule', 'penyakit', 'gejala'));
|
|
}
|
|
|
|
// Update rule
|
|
public function update(Request $request, Rule $rule)
|
|
{
|
|
$request->validate([
|
|
'id_penyakit' => 'required|exists:tbl_penyakit,id',
|
|
'id_gejala' => 'required|exists:tbl_gejala,id',
|
|
'nilai_mb' => 'required|numeric|min:0|max:1',
|
|
'nilai_md' => 'required|numeric|min:0|max:1',
|
|
]);
|
|
|
|
// Hitung CF dan nilai pakar otomatis
|
|
$mb = (float) $request->nilai_mb;
|
|
$md = (float) $request->nilai_md;
|
|
$cf = round($mb - $md, 4);
|
|
$pakar = $this->nilaiPakarDariCF($cf);
|
|
|
|
$rule->update([
|
|
'id_penyakit' => $request->id_penyakit,
|
|
'id_gejala' => $request->id_gejala,
|
|
'nilai_mb' => $mb,
|
|
'nilai_md' => $md,
|
|
'nilai_cf' => $cf,
|
|
'nilai_pakar' => $pakar,
|
|
]);
|
|
|
|
return redirect()->route('admin.rule.index')
|
|
->with('success', 'Rule "' . $rule->kode_rule . '" berhasil diperbarui.');
|
|
}
|
|
|
|
// Hapus rule
|
|
public function destroy(Rule $rule)
|
|
{
|
|
$kode = $rule->kode_rule;
|
|
$rule->delete();
|
|
|
|
return redirect()->route('admin.rule.index')
|
|
->with('success', 'Rule "' . $kode . '" berhasil dihapus.');
|
|
}
|
|
}
|