113 lines
3.3 KiB
PHP
113 lines
3.3 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()
|
|
{
|
|
$idAlternatif = session('alternatifs_dipilih');
|
|
|
|
if (!$idAlternatif || count($idAlternatif) < 2) {
|
|
return redirect()->route('alternatif.pilih')->with('error', 'Alternatif belum dipilih atau kurang dari dua.');
|
|
}
|
|
|
|
$alternatifs = Makanan::whereIn('id', $idAlternatif)->get();
|
|
$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;
|
|
}
|
|
|
|
Rekomendasi::updateOrCreate(
|
|
['makanan_id' => $alternatif->id, 'user_id' => Auth::id()],
|
|
[
|
|
'nilai_akhir' => $nilaiAkhir,
|
|
'tanggal_rekomendasi' => now()->toDateString()
|
|
]
|
|
);
|
|
}
|
|
|
|
return redirect()->route('rekomendasi.hasil')->with('success', 'Rekomendasi berhasil dihitung dan disimpan.');
|
|
}
|
|
|
|
|
|
// 2. Tampilkan hasil rekomendasi
|
|
public function tampil()
|
|
{
|
|
// 1. Ambil & kelompokkan data
|
|
$rekomendasiByDate = Rekomendasi::with('makanan')
|
|
->where('nilai_akhir', '>', 0)
|
|
->orderByDesc('tanggal_rekomendasi') // terbaru di depan carousel
|
|
->orderByDesc('nilai_akhir') // ranking per tanggal
|
|
->get()
|
|
->groupBy('tanggal_rekomendasi'); // hasil: Collection keyed by yyyy-mm-dd
|
|
|
|
// 2. Daftar tanggal unik untuk dropdown hapus
|
|
$tanggalList = $rekomendasiByDate->keys(); // Collection of dates
|
|
|
|
// 3. Kirim ke view
|
|
return view('admin.rekomendasi', [
|
|
'rekomendasiByDate' => $rekomendasiByDate,
|
|
'tanggalList' => $tanggalList,
|
|
]);
|
|
}
|
|
|
|
|
|
|
|
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(Request $request)
|
|
{
|
|
$tanggal = $request->input('tanggal_rekomendasi');
|
|
|
|
if (!$tanggal) {
|
|
return redirect()->back()->with('error', 'Tanggal rekomendasi harus dipilih.');
|
|
}
|
|
|
|
// Hapus data berdasarkan tanggal_rekomendasi
|
|
Rekomendasi::where('tanggal_rekomendasi', $tanggal)->delete();
|
|
|
|
return redirect()->back()->with('success', 'Data rekomendasi untuk tanggal ' . $tanggal . ' berhasil dihapus.');
|
|
}
|
|
|
|
|
|
|
|
}
|