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') -
-

Perbandingan Alternatif

+

Pilih Alternatif

-
- - @if(session('success')) -
{{ session('success') }}
- @endif +
-
Pemilihan Alternatif
+
Pilih Alternatif (6 makanan)
+ + @if(session('success')) +
{{ session('success') }}
+ @endif + + {{-- Form Filter & Search --}} + {{-- Input pencarian (lebih pendek) --}} +
+ {{-- Input pencarian --}} +
+ +
+ {{-- Dropdown kategori --}} +
+ +
+ {{-- Dropdown urutkan --}} +
+ +
+ {{-- Dropdown order --}} +
+ +
+ {{-- Tombol --}} +
+ + Reset +
+
+ {{-- Form Pemilihan Alternatif --}} +
+ @csrf +
+ @foreach ($makanans as $makanan) +
+
+
+ + + +
+
+
+ @endforeach +
+ +
+ +
+
-
- @csrf -
- @foreach ($makanans as $makanan) -
-
- - -
-
- @endforeach -
-
- -
-

- -
Data Semua Alternatif
- -
-
- {{-- Tabel --}} -
- - - - - - - - - - - - - @foreach ($makanans as $index => $makanan) - - - - - - - - - @endforeach - -
NoNama MakananLemakNatriumEnergiKarbohidrat
{{ $index + 1 }}{{ $makanan->nama }}{{ $makanan->lemak }} g{{ $makanan->natrium }} mg{{ $makanan->energi }} kal{{ $makanan->karbohidrat }} g
-
-
- -
- {{-- Filter Kriteria --}} -
-
-
- - -
-
- -
-
-
-
-
-
- @endsection @push('scripts') diff --git a/resources/views/admin/proses/perbandingan.blade.php b/resources/views/admin/proses/perbandingan.blade.php index 7cb90c6..d506837 100644 --- a/resources/views/admin/proses/perbandingan.blade.php +++ b/resources/views/admin/proses/perbandingan.blade.php @@ -88,6 +88,16 @@ + + +
diff --git a/resources/views/admin/rekomendasi.blade.php b/resources/views/admin/rekomendasi.blade.php index 88cdf22..967f83f 100644 --- a/resources/views/admin/rekomendasi.blade.php +++ b/resources/views/admin/rekomendasi.blade.php @@ -2,79 +2,134 @@ @section('content')
+ + {{-- Judul halaman --}}

📊 Hasil Rekomendasi Makanan

Berikut adalah peringkat makanan berdasarkan hasil perhitungan AHP.

+ {{-- Flash success --}} @if(session('success')) -