diff --git a/app/Http/Controllers/AlternatifController.php b/app/Http/Controllers/AlternatifController.php index e210d1b..e1bea0e 100644 --- a/app/Http/Controllers/AlternatifController.php +++ b/app/Http/Controllers/AlternatifController.php @@ -5,6 +5,7 @@ use Illuminate\Http\Request; use App\Models\Kriteria; use App\Models\Makanan; // alternatif +use App\Models\Kategori; use App\Models\PerbandinganAlternatif; use App\Models\SkorMakanan; use Illuminate\Support\Facades\DB; @@ -16,17 +17,36 @@ class AlternatifController extends Controller // 1. Tampilkan form pemilihan alternatif public function formPilihAlternatif(Request $request) { - $sort = $request->query('sort'); + $kategoris = Kategori::all(); + $sort = $request->query('sort'); // lemak | natrium | energi | karbohidrat + $order = $request->query('order'); // asc | desc + $search = $request->query('q'); // kata kunci nama makanan + $kategoriFilter = $request->kategori; // kategori - if (in_array($sort, ['lemak', 'natrium', 'energi', 'karbohidrat'])) { - $makanans = Makanan::orderBy($sort, 'desc')->get(); // urut dari tinggi ke rendah - } else { - $makanans = Makanan::all(); + $query = Makanan::query(); + + // 1. Search by name + if ($search) { + $query->where('nama', 'like', "%{$search}%"); } - return view('admin.alternatif.pilih', compact('makanans')); + if ($kategoriFilter) { + $query->where('kategori_id', $kategoriFilter); + } + + // 2. Sort + if (in_array($sort, ['lemak','natrium','energi','karbohidrat'])) { + $order = $order === 'asc' ? 'asc' : 'desc'; // default desc + $query->orderBy($sort, $order); + } + + $makanans = $query->get(); + + return view('admin.alternatif.pilih', compact('makanans','sort','order','search', 'kategoriFilter', 'kategoris')); } + + // 2. Simpan pilihan alternatif ke session public function pilihAlternatif(Request $request) { diff --git a/app/Http/Controllers/RekomendasiController.php b/app/Http/Controllers/RekomendasiController.php index 246a7dd..226e7a5 100644 --- a/app/Http/Controllers/RekomendasiController.php +++ b/app/Http/Controllers/RekomendasiController.php @@ -53,21 +53,24 @@ public function hitungDanSimpan() // 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(); + { + // 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 - $tanggalList = Rekomendasi::select('tanggal_rekomendasi') - ->distinct() - ->orderBy('tanggal_rekomendasi', 'desc') - ->pluck('tanggal_rekomendasi'); - - return view('admin.rekomendasi', compact('rekomendasi', 'tanggalList')); -} + // 3. Kirim ke view + return view('admin.rekomendasi', [ + 'rekomendasiByDate' => $rekomendasiByDate, + 'tanggalList' => $tanggalList, + ]); + } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 6e1e4f8..28a5a09 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -52,10 +52,26 @@ public function userdata(Request $request) $makananQuery->where('nama', 'like', '%' . $request->search . '%'); } + // Filter berdasarkan nilai tertinggi / terendah pada kolom yang dipilih + if ($request->has('filter_nilai') && $request->filter_nilai != '' && $request->has('filter_kriteria') && $request->filter_kriteria != '') { + $kolom = $request->filter_kriteria; + + // Validasi kolom yang diperbolehkan supaya aman + $allowedColumns = ['lemak', 'natrium', 'energi', 'karbohidrat']; + if (in_array($kolom, $allowedColumns)) { + if ($request->filter_nilai == 'tertinggi') { + $makananQuery->orderBy($kolom, 'desc'); + } elseif ($request->filter_nilai == 'terendah') { + $makananQuery->orderBy($kolom, 'asc'); + } + } + } + + // Menentukan jumlah data per halaman $perPage = $request->per_page === 'all' ? $makananQuery->count() // tampilkan semua jika 'all' - : ($request->per_page ?? 10); // default 25 + : ($request->per_page ?? 10); // default 10 // Ambil data dengan paginasi dan simpan parameter pencarian/filter $makanans = $makananQuery->paginate($perPage)->appends($request->except('page')); @@ -69,6 +85,7 @@ public function userdata(Request $request) + public function userresult(Request $request) { $tanggal = $request->input('tanggal'); diff --git a/public/assetss/js/main.js b/public/assetss/js/main.js index 08f69ad..df13797 100644 --- a/public/assetss/js/main.js +++ b/public/assetss/js/main.js @@ -94,5 +94,7 @@ }); + + })(jQuery); diff --git a/resources/views/admin/alternatif/pilih.blade.php b/resources/views/admin/alternatif/pilih.blade.php index f87d07b..8b2d7a8 100644 --- a/resources/views/admin/alternatif/pilih.blade.php +++ b/resources/views/admin/alternatif/pilih.blade.php @@ -1,136 +1,136 @@ @extends('layout.app') @section('content') -
No | -Nama Makanan | -Lemak | -Natrium | -Energi | -Karbohidrat | -
---|---|---|---|---|---|
{{ $index + 1 }} | -{{ $makanan->nama }} | -{{ $makanan->lemak }} g | -{{ $makanan->natrium }} mg | -{{ $makanan->energi }} kal | -{{ $makanan->karbohidrat }} g | -
Berikut adalah peringkat makanan berdasarkan hasil perhitungan AHP.