163 lines
5.0 KiB
PHP
163 lines
5.0 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use App\Models\Rekomendasi;
|
|
use App\Models\Makanan; // pastikan model di-import
|
|
use App\Models\JenisMakanan;
|
|
use App\Models\Kategori;
|
|
use App\Models\RekomendasiAhli;
|
|
use App\Models\WaktuMakan;
|
|
use Illuminate\Support\Facades\Auth; // pastikan ini ada di atas
|
|
|
|
class UserController extends Controller
|
|
{
|
|
//
|
|
public function userdash(){
|
|
$totalData = DB::table('makanans')->count();
|
|
$totalKriteria = DB::table('kriterias')->count();
|
|
$totalUser = DB::table('users')
|
|
->join('roles', 'users.role_id', '=', 'roles.id')
|
|
->where('roles.name', '=', 'user')
|
|
->count();
|
|
return view('user.userdash', compact('totalData', 'totalKriteria', 'totalUser'));
|
|
}
|
|
public function userabout(){
|
|
return view('user.userabout');
|
|
}
|
|
|
|
public function userfeature(){
|
|
return view('user.userfeature');
|
|
}
|
|
|
|
public function userdata(Request $request)
|
|
{
|
|
// Ambil data dropdown
|
|
$jenisMakananList = JenisMakanan::all();
|
|
$kategoriList = Kategori::all();
|
|
|
|
// Query awal
|
|
$makananQuery = Makanan::query();
|
|
|
|
// Filter berdasarkan jenis makanan
|
|
if ($request->has('jenis_id') && $request->jenis_id != '') {
|
|
$makananQuery->where('jenis_id', $request->jenis_id);
|
|
}
|
|
|
|
// Filter berdasarkan kategori
|
|
if ($request->has('kategori_id') && $request->kategori_id != '') {
|
|
$makananQuery->where('kategori_id', $request->kategori_id);
|
|
}
|
|
|
|
// Filter berdasarkan pencarian nama makanan
|
|
if ($request->has('search') && $request->search != '') {
|
|
$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 10
|
|
|
|
// Ambil data dengan paginasi dan simpan parameter pencarian/filter
|
|
$makanans = $makananQuery->paginate($perPage)->appends($request->except('page'));
|
|
|
|
// Kirim ke view
|
|
return view('user.userdata', compact('makanans', 'jenisMakananList', 'kategoriList'));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function userresult()
|
|
{
|
|
// Ambil rekomendasi ahli dan group by hari
|
|
$rekomendasiAhli = \App\Models\RekomendasiAhli::with(['makanan', 'komponen', 'waktuMakan'])
|
|
->get()
|
|
->groupBy([
|
|
'hari',
|
|
'waktuMakan.nama',
|
|
'komponen.nama'
|
|
]);
|
|
|
|
// Ambil data alternatif AHP untuk setiap kombinasi hari, waktu makan, dan komponen
|
|
$alternatifAHPData = [];
|
|
|
|
foreach ($rekomendasiAhli as $hari => $waktuMakans) {
|
|
$alternatifAHPData[$hari] = [];
|
|
|
|
foreach ($waktuMakans as $waktuMakan => $komponens) {
|
|
$alternatifAHPData[$hari][$waktuMakan] = [];
|
|
|
|
foreach ($komponens as $komponen => $makananCollection) {
|
|
// Karena groupBy, $makananCollection adalah collection, ambil item pertama
|
|
$makananItem = $makananCollection->first();
|
|
|
|
if ($makananItem) {
|
|
// Ambil waktu makan ID dan komponen ID dari item pertama
|
|
$waktuMakanId = $makananItem->waktu_makan_id;
|
|
$komponenId = $makananItem->komponen_id;
|
|
|
|
// Ambil alternatif AHP untuk kombinasi ini
|
|
$alternatifAHP = \App\Models\Rekomendasi::with('makanan')
|
|
->where('waktu_makan_id', $waktuMakanId)
|
|
->where('komponen_id', $komponenId)
|
|
->where('nilai_akhir', '>', 0)
|
|
->orderBy('nilai_akhir', 'desc')
|
|
->take(5)
|
|
->get();
|
|
|
|
$alternatifAHPData[$hari][$waktuMakan][$komponen] = $alternatifAHP;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return view('user.userresult', compact('rekomendasiAhli', 'alternatifAHPData'));
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function show($id)
|
|
{
|
|
// ambil data berdasarkan $id atau bisa juga switch/case
|
|
return view('user.userfeature', compact('id'));
|
|
}
|
|
|
|
|
|
public function register()
|
|
{
|
|
// ambil data berdasarkan $id atau bisa juga switch/case
|
|
return view('user.userregister', compact('id'));
|
|
}
|
|
|
|
|
|
}
|