MIF_E31222307/app/Http/Controllers/RekomendasiController.php

89 lines
2.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Makanan;
use App\Models\Kriteria;
use App\Models\BobotKriteria;
use App\Models\SkorMakanan;
use App\Models\Rekomendasi;
use Illuminate\Support\Facades\Auth; // pastikan ini ada di atas
use Carbon\Carbon;
class RekomendasiController extends Controller
{
//
public function hitungDanSimpan()
{
$alternatifs = Makanan::all();
$kriterias = Kriteria::all();
$bobotKriterias = BobotKriteria::pluck('bobot', 'kriteria_id');
foreach ($alternatifs as $alternatif) {
$nilaiAkhir = 0;
foreach ($kriterias as $kriteria) {
$bobotKriteria = $bobotKriterias[$kriteria->id] ?? 0;
$bobotAlternatif = SkorMakanan::where('kriteria_id', $kriteria->id)
->where('makanan_id', $alternatif->id)
->value('nilai') ?? 0;
$nilaiAkhir += $bobotKriteria * $bobotAlternatif;
}
// Simpan ke tabel rekomendasi
Rekomendasi::updateOrCreate(
['makanan_id' => $alternatif->id, 'user_id' => Auth::id()],
[
'nilai_akhir' => $nilaiAkhir,
'tanggal_rekomendasi' => Carbon::now()->toDateString()
]
);
}
return redirect()->route('rekomendasi.hasil')->with('success', 'Rekomendasi berhasil dihitung dan disimpan.');
}
// 2. Tampilkan hasil rekomendasi
public function tampil()
{
// Hanya mengambil data rekomendasi dengan nilai_akhir lebih besar dari 0
$rekomendasi = Rekomendasi::with('makanan')
->where('nilai_akhir', '>', 0)
->orderByDesc('nilai_akhir')
->get();
return view('admin.rekomendasi', compact('rekomendasi'));
}
public function kirimKeUser($userId)
{
$adminId = Auth::id();
$dataAdmin = Rekomendasi::where('user_id', $adminId)->get();
foreach ($dataAdmin as $item) {
Rekomendasi::updateOrCreate(
['user_id' => $userId, 'makanan_id' => $item->makanan_id],
[
'nilai_akhir' => $item->nilai_akhir,
'tanggal_rekomendasi' => now(),
]
);
}
return redirect()->back()->with('success', 'Hasil rekomendasi berhasil dikirim ke user.');
}
public function hapusSemua()
{
Rekomendasi::truncate(); // Menghapus semua data
return redirect()->back()->with('success', 'Semua data rekomendasi berhasil dihapus.');
}
}