iya
This commit is contained in:
parent
1ba7bd9e4a
commit
d31dc31bce
|
@ -22,7 +22,7 @@ class AuthController extends Controller
|
||||||
$credentials = $request->only('username', 'password');
|
$credentials = $request->only('username', 'password');
|
||||||
|
|
||||||
if (Auth::attempt($credentials)) {
|
if (Auth::attempt($credentials)) {
|
||||||
return redirect()->route('dashboard');
|
return redirect()->route('admin.dashboard');
|
||||||
}
|
}
|
||||||
|
|
||||||
return back()->withErrors(['login' => 'Username atau password salah.']);
|
return back()->withErrors(['login' => 'Username atau password salah.']);
|
||||||
|
|
|
@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use App\Models\DataAlternatif;
|
use App\Models\DataAlternatif;
|
||||||
use App\Models\Kriteria;
|
use App\Models\Kriteria;
|
||||||
|
use App\Models\Pakaian;
|
||||||
use App\Models\QuizHistory;
|
use App\Models\QuizHistory;
|
||||||
use App\Models\Subkriteria;
|
use App\Models\Subkriteria;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
@ -14,156 +15,6 @@ class HomeController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$kriteria = Kriteria::with('subkriteria')->get();
|
//
|
||||||
|
|
||||||
return view('landingpage.home', [
|
|
||||||
'skorAkhir' => $this->getSkorAkhirByJenis('Dress'),
|
|
||||||
'blouseSkorAkhir' => $this->getSkorAkhirByJenis('Blouse'),
|
|
||||||
'cardiganSkorAkhir' => $this->getSkorAkhirByJenis('Cardigan'),
|
|
||||||
'rokSkorAkhir' => $this->getSkorAkhirByJenis('Rok'),
|
|
||||||
'celanaSkorAkhir' => $this->getSkorAkhirByJenis('Celana'),
|
|
||||||
'kriteria' => $kriteria
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function dress() { return $this->showJenisPakaian('Dress'); }
|
|
||||||
public function blouse() { return $this->showJenisPakaian('Blouse'); }
|
|
||||||
public function cardigan() { return $this->showJenisPakaian('Cardigan'); }
|
|
||||||
public function rok() { return $this->showJenisPakaian('Rok'); }
|
|
||||||
public function celana() { return $this->showJenisPakaian('Celana'); }
|
|
||||||
|
|
||||||
private function showJenisPakaian($jenis, $preferensi = [])
|
|
||||||
{
|
|
||||||
$skorAkhir = $this->getSkorAkhirByJenis($jenis, $preferensi);
|
|
||||||
$alternatif = DataAlternatif::whereHas('penilaian.subkriteria', fn($q) => $q->where('nama_subkriteria', $jenis))->get();
|
|
||||||
$kriteria = Kriteria::with('subkriteria')->get();
|
|
||||||
|
|
||||||
return view('landingpage.rekomendasi', compact('alternatif', 'kriteria', 'jenis', 'skorAkhir', 'preferensi'));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getSkorAkhirByJenis($jenis, $preferensi = [])
|
|
||||||
{
|
|
||||||
$alternatif = DataAlternatif::with(['penilaian.subkriteria', 'penilaian.kriteria'])
|
|
||||||
->whereHas('penilaian.subkriteria', function ($query) use ($jenis) {
|
|
||||||
$query->where('nama_subkriteria', $jenis);
|
|
||||||
})
|
|
||||||
->get();
|
|
||||||
|
|
||||||
$kriteria = Kriteria::with('subkriteria')->get();
|
|
||||||
$skorAkhir = [];
|
|
||||||
|
|
||||||
foreach ($alternatif as $alt) {
|
|
||||||
$total = 0;
|
|
||||||
foreach ($kriteria as $k) {
|
|
||||||
$penilaian = $alt->penilaian->where('kriteria_id', $k->id)->first();
|
|
||||||
if (!$penilaian) continue;
|
|
||||||
|
|
||||||
$nilaiAlt = $penilaian->subkriteria->nilai;
|
|
||||||
$nilaiPref = $preferensi[$this->mapKriteriaKey($k->nama_kriteria)]['nilai'] ?? $nilaiAlt;
|
|
||||||
|
|
||||||
$normalisasi = 1 - abs($nilaiAlt - $nilaiPref);
|
|
||||||
$total += $normalisasi * $k->bobot;
|
|
||||||
}
|
|
||||||
|
|
||||||
$skorAkhir[] = [
|
|
||||||
'alternatif' => $alt,
|
|
||||||
'skor' => round($total, 3),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
usort($skorAkhir, fn($a, $b) => $b['skor'] <=> $a['skor']);
|
|
||||||
|
|
||||||
return $skorAkhir;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function mapKriteriaKey($nama)
|
|
||||||
{
|
|
||||||
$nama = strtolower($nama);
|
|
||||||
return match ($nama) {
|
|
||||||
'harga', 'cost' => 'harga',
|
|
||||||
'jenis pakaian' => 'jenis',
|
|
||||||
'warna pakaian' => 'warna',
|
|
||||||
'lokasi acara' => 'lokasi',
|
|
||||||
'cuaca acara' => 'cuaca',
|
|
||||||
'jenis acara' => 'acara',
|
|
||||||
default => str_replace(' ', '_', $nama),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public function simpankuisionerdanrekomendasi(Request $request)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
$validated = $request->validate([
|
|
||||||
'jenis_acara' => 'required|string',
|
|
||||||
'harga' => 'required|string',
|
|
||||||
'jenis_pakaian' => 'required|string',
|
|
||||||
'warna' => 'required|string',
|
|
||||||
'cuaca' => 'required|string',
|
|
||||||
'lokasi' => 'required|string',
|
|
||||||
]);
|
|
||||||
|
|
||||||
// Kumpulkan preferensi untuk diproses
|
|
||||||
$jawaban = [
|
|
||||||
'jenis_acara' => $validated['jenis_acara'],
|
|
||||||
'harga' => $validated['harga'],
|
|
||||||
'warna' => $validated['warna'],
|
|
||||||
'cuaca' => $validated['cuaca'],
|
|
||||||
'lokasi' => $validated['lokasi'],
|
|
||||||
];
|
|
||||||
|
|
||||||
$preferensi = $this->prosesPreferensiBerdasarkanSubkriteria($jawaban);
|
|
||||||
$skorAkhir = $this->getSkorAkhirByJenis($validated['jenis_pakaian'], $preferensi);
|
|
||||||
|
|
||||||
// Simpan ke database
|
|
||||||
$quizHistory = new QuizHistory();
|
|
||||||
$quizHistory->data_kuisioner = json_encode($jawaban);
|
|
||||||
$quizHistory->hasil_rekomendasi = json_encode($skorAkhir);
|
|
||||||
$quizHistory->save();
|
|
||||||
|
|
||||||
return $this->showJenisPakaian($validated['jenis_pakaian'], $preferensi);
|
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
Log::error('Error simpan kuis: ' . $e->getMessage());
|
|
||||||
return back()->with('error', 'Terjadi kesalahan. Silakan coba lagi.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function prosesPreferensiBerdasarkanSubkriteria($jawaban)
|
|
||||||
{
|
|
||||||
$preferensi = [];
|
|
||||||
|
|
||||||
foreach ($jawaban as $nama_kriteria => $nama_subkriteria) {
|
|
||||||
$kriteria = Kriteria::where('nama_kriteria', $nama_kriteria)->first();
|
|
||||||
$subkriteria = Subkriteria::where('nama_subkriteria', $nama_subkriteria)
|
|
||||||
->where('kriteria_id', $kriteria->id ?? null)
|
|
||||||
->first();
|
|
||||||
|
|
||||||
if ($kriteria && $subkriteria) {
|
|
||||||
$key = $this->mapKriteriaKey($kriteria->nama_kriteria);
|
|
||||||
|
|
||||||
$preferensi[$key] = [
|
|
||||||
'value' => $subkriteria->nama_subkriteria,
|
|
||||||
'nilai' => $subkriteria->nilai,
|
|
||||||
'bobot' => $kriteria->bobot
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($key === 'harga') {
|
|
||||||
$preferensi[$key]['range'] = $subkriteria->nama_subkriteria;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return $preferensi;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Menampilkan form kuis
|
|
||||||
public function showKuis($jenis = 'Dress')
|
|
||||||
{
|
|
||||||
$kriteria = Kriteria::with(['subkriteria' => function($query) {
|
|
||||||
$query->orderBy('nilai', 'desc');
|
|
||||||
}])->get();
|
|
||||||
|
|
||||||
return view('landingpage.pilihpakaian', compact('kriteria', 'jenis'));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ class PenilaianController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ambil jumlah per halaman dari parameter 'perPage' atau default ke 10
|
// Ambil jumlah per halaman dari parameter 'perPage' atau default ke 10
|
||||||
$perPage = $request->get('perPage', 10);
|
$perPage = $request->get('entries', 10);
|
||||||
|
|
||||||
// Ambil data pakaian dengan pagination
|
// Ambil data pakaian dengan pagination
|
||||||
$pakaians = $query->paginate($perPage);
|
$pakaians = $query->paginate($perPage);
|
||||||
|
@ -68,8 +68,27 @@ class PenilaianController extends Controller
|
||||||
// Ambil semua kriteria, supaya bisa ditampilkan di form edit untuk memilih/mengubah subkriteria
|
// Ambil semua kriteria, supaya bisa ditampilkan di form edit untuk memilih/mengubah subkriteria
|
||||||
$kriterias = Kriteria::with('subKriteria')->get();
|
$kriterias = Kriteria::with('subKriteria')->get();
|
||||||
|
|
||||||
// Kirim data ke view edit
|
// Ambil ID kriteria yang multiple select
|
||||||
return view('admin.pages.penilaian.edit', compact('pakaian', 'kriterias'));
|
$multiSelectKriteriaIds = Kriteria::whereIn('nama_kriteria', ['Jenis Acara', 'Lokasi Acara', 'Cuaca'])->pluck('id')->toArray();
|
||||||
|
|
||||||
|
// Kirim juga nilai penilaian yang sudah disimpan
|
||||||
|
$nilai = [];
|
||||||
|
foreach ($pakaian->subKriterias as $sub) {
|
||||||
|
$kriteriaId = $sub->kriteria->id;
|
||||||
|
// Untuk multiple, buat array; untuk single, overwrite
|
||||||
|
if (in_array($kriteriaId, $multiSelectKriteriaIds)) {
|
||||||
|
$nilai[$kriteriaId][] = $sub->id;
|
||||||
|
} else {
|
||||||
|
$nilai[$kriteriaId] = $sub->id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return view('admin.pages.penilaian.edit', compact(
|
||||||
|
'pakaian',
|
||||||
|
'kriterias',
|
||||||
|
'multiSelectKriteriaIds',
|
||||||
|
'nilai'
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -85,16 +104,20 @@ class PenilaianController extends Controller
|
||||||
$rules = [];
|
$rules = [];
|
||||||
$messages = [];
|
$messages = [];
|
||||||
|
|
||||||
|
$allKriteria = Kriteria::all()->keyBy('id');
|
||||||
|
|
||||||
foreach ($request->input('nilai') as $kriteriaId => $value) {
|
foreach ($request->input('nilai') as $kriteriaId => $value) {
|
||||||
|
if (!isset($allKriteria[$kriteriaId])) continue;
|
||||||
|
|
||||||
|
$nama = $allKriteria[$kriteriaId]->nama_kriteria;
|
||||||
|
|
||||||
if (in_array($kriteriaId, $multiSelectKriteria)) {
|
if (in_array($kriteriaId, $multiSelectKriteria)) {
|
||||||
// Kriteria yang multiple select wajib berupa array dengan minimal 1 elemen
|
|
||||||
$rules["nilai.$kriteriaId"] = 'required|array|min:1';
|
$rules["nilai.$kriteriaId"] = 'required|array|min:1';
|
||||||
$messages["nilai.$kriteriaId.required"] = 'Harap pilih minimal satu subkriteria untuk kriteria ' . Kriteria::find($kriteriaId)->nama_kriteria;
|
$messages["nilai.$kriteriaId.required"] = "Pilih minimal satu subkriteria untuk $nama.";
|
||||||
$messages["nilai.$kriteriaId.min"] = 'Harap pilih minimal satu subkriteria untuk kriteria ' . Kriteria::find($kriteriaId)->nama_kriteria;
|
$messages["nilai.$kriteriaId.min"] = "Pilih minimal satu subkriteria untuk $nama.";
|
||||||
} else {
|
} else {
|
||||||
// Kriteria yang single select wajib ada (string / integer)
|
|
||||||
$rules["nilai.$kriteriaId"] = 'required';
|
$rules["nilai.$kriteriaId"] = 'required';
|
||||||
$messages["nilai.$kriteriaId.required"] = 'Harap pilih satu subkriteria untuk kriteria ' . Kriteria::find($kriteriaId)->nama_kriteria;
|
$messages["nilai.$kriteriaId.required"] = "Pilih satu subkriteria untuk $nama.";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class RekomendasiController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,7 +44,7 @@ class SubKriteriaController extends Controller
|
||||||
$validated = $request->validate([
|
$validated = $request->validate([
|
||||||
'kriteria_id' => 'required',
|
'kriteria_id' => 'required',
|
||||||
'nama_sub' => 'required|string|max:255',
|
'nama_sub' => 'required|string|max:255',
|
||||||
'nilai' => 'required|numeric',
|
'nilai' => 'required|integer|min:1|max:5',
|
||||||
'min_harga' => 'nullable|numeric|min:0',
|
'min_harga' => 'nullable|numeric|min:0',
|
||||||
'max_harga' => 'nullable|numeric|min:0|gte:min_harga',
|
'max_harga' => 'nullable|numeric|min:0|gte:min_harga',
|
||||||
]);
|
]);
|
||||||
|
@ -86,7 +86,7 @@ class SubKriteriaController extends Controller
|
||||||
$request->validate([
|
$request->validate([
|
||||||
'kriteria_id' => 'required',
|
'kriteria_id' => 'required',
|
||||||
'nama_sub' => 'required|string|max:255',
|
'nama_sub' => 'required|string|max:255',
|
||||||
'nilai' => 'required|numeric',
|
'nilai' => 'required|integer|min:1|max:5',
|
||||||
'min_harga' => 'nullable|numeric',
|
'min_harga' => 'nullable|numeric',
|
||||||
'max_harga' => 'nullable|numeric',
|
'max_harga' => 'nullable|numeric',
|
||||||
]);
|
]);
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\User;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Hash;
|
||||||
|
|
||||||
|
class UserController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$users = User::all(); // Mengambil semua data user
|
||||||
|
return view('admin.pages.user.index', compact('users'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the specified resource.
|
||||||
|
*/
|
||||||
|
public function show($id)
|
||||||
|
{
|
||||||
|
$user = User::findOrFail($id); // Ambil data user, jika tidak ada akan 404
|
||||||
|
return view('admin.pages.user.show', compact('user'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for editing the specified resource.
|
||||||
|
*/
|
||||||
|
public function edit($id)
|
||||||
|
{
|
||||||
|
$user = User::findOrFail($id); // Ambil data user
|
||||||
|
return view('admin.pages.user.edit', compact('user'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the specified resource in storage.
|
||||||
|
*/
|
||||||
|
public function update(Request $request, $id)
|
||||||
|
{
|
||||||
|
$user = User::findOrFail($id); // Ambil user berdasarkan ID
|
||||||
|
|
||||||
|
// Validasi input dari form
|
||||||
|
$request->validate([
|
||||||
|
'name' => 'required|string|max:255',
|
||||||
|
'email' => 'required|email|unique:users,email,' . $id,
|
||||||
|
'username' => 'required|string|unique:users,username,' . $id,
|
||||||
|
'password' => 'nullable|string|min:6|confirmed', // validasi password + konfirmasi
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Ambil data yang akan diperbarui
|
||||||
|
$data = $request->only(['name', 'email', 'username']);
|
||||||
|
|
||||||
|
// Jika password diisi, enkripsi dan tambahkan ke data
|
||||||
|
if ($request->filled('password')) {
|
||||||
|
$data['password'] = Hash::make($request->password);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update data user di database
|
||||||
|
$user->update($data);
|
||||||
|
|
||||||
|
return redirect()->route('admin.user.show', $user->id)->with('success', 'User berhasil diperbarui');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the specified resource from storage.
|
||||||
|
*/
|
||||||
|
public function destroy(string $id)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class QuizHistory extends Model
|
||||||
|
{
|
||||||
|
protected $fillable = [
|
||||||
|
'jenis_acara',
|
||||||
|
'harga',
|
||||||
|
'jenis_pakaian',
|
||||||
|
'warna',
|
||||||
|
'cuaca',
|
||||||
|
'lokasi',
|
||||||
|
'pakaian_id',
|
||||||
|
];
|
||||||
|
|
||||||
|
public function pakaian()
|
||||||
|
{
|
||||||
|
return $this->belongsTo(Pakaian::class);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::create('quiz_histories', function (Blueprint $table) {
|
||||||
|
$table->id();
|
||||||
|
$table->string('jenis_acara');
|
||||||
|
$table->string('harga');
|
||||||
|
$table->string('jenis_pakaian');
|
||||||
|
$table->string('warna');
|
||||||
|
$table->string('cuaca');
|
||||||
|
$table->string('lokasi');
|
||||||
|
$table->unsignedBigInteger('pakaian_id')->nullable(); // hasil rekomendasi
|
||||||
|
$table->timestamps();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::dropIfExists('quiz_histories');
|
||||||
|
}
|
||||||
|
};
|
Binary file not shown.
After Width: | Height: | Size: 114 KiB |
Binary file not shown.
After Width: | Height: | Size: 86 KiB |
Binary file not shown.
After Width: | Height: | Size: 90 KiB |
Binary file not shown.
After Width: | Height: | Size: 80 KiB |
Binary file not shown.
After Width: | Height: | Size: 74 KiB |
|
@ -212,11 +212,12 @@
|
||||||
aria-labelledby="userDropdown">
|
aria-labelledby="userDropdown">
|
||||||
|
|
||||||
<!-- Profile Link -->
|
<!-- Profile Link -->
|
||||||
<a class="dropdown-item" href="#">
|
<a class="dropdown-item" href="{{ route('admin.user.show', Auth::user()->id) }}">
|
||||||
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
|
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
|
||||||
Profile
|
Profile
|
||||||
</a>
|
</a>
|
||||||
<div class="dropdown-divider"></div>
|
<div class="dropdown-divider"></div>
|
||||||
|
|
||||||
|
|
||||||
<!-- Logout Link -->
|
<!-- Logout Link -->
|
||||||
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
|
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
|
||||||
|
|
|
@ -122,7 +122,7 @@
|
||||||
<td>{{ $loop->iteration }}</td>
|
<td>{{ $loop->iteration }}</td>
|
||||||
<td>
|
<td>
|
||||||
@if ($item->img)
|
@if ($item->img)
|
||||||
<img src="{{ asset($item->img) }}" alt="Gambar" class="img-thumbnail" style="width: 100px; height: 100px;">
|
<img src="{{ asset($item->img) }}" alt="Gambar" style="width: 100px; height: 100px;">
|
||||||
@else
|
@else
|
||||||
<span class="text-muted">Tidak ada gambar</span>
|
<span class="text-muted">Tidak ada gambar</span>
|
||||||
@endif
|
@endif
|
||||||
|
@ -133,7 +133,7 @@
|
||||||
<button type="button" class="btn btn-info btn-sm" data-bs-toggle="modal" data-bs-target="#infoModal{{ $item->id }}">
|
<button type="button" class="btn btn-info btn-sm" data-bs-toggle="modal" data-bs-target="#infoModal{{ $item->id }}">
|
||||||
<i class="bi bi-info-circle"></i>
|
<i class="bi bi-info-circle"></i>
|
||||||
</button>
|
</button>
|
||||||
<a href="{{ route('admin.pakaian.edit', $item->id) }}" class="btn btn-warning btn-sm">
|
<a href="#" class="btn btn-warning btn-sm edit-button" data-id="{{ $item->id }}" data-bs-toggle="modal" data-bs-target="#modalEdit{{ $item->id }}">
|
||||||
<i class="bi bi-pencil-square"></i>
|
<i class="bi bi-pencil-square"></i>
|
||||||
</a>
|
</a>
|
||||||
<button type="button" class="btn btn-danger btn-sm btn-delete" data-id="{{ $item->id }}" data-nama="{{ $item->nama_pakaian }}">
|
<button type="button" class="btn btn-danger btn-sm btn-delete" data-id="{{ $item->id }}" data-nama="{{ $item->nama_pakaian }}">
|
||||||
|
@ -151,10 +151,6 @@
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<!-- Pagination -->
|
|
||||||
<div class="d-flex justify-content-end">
|
|
||||||
{{ $alternatif->appends(request()->query())->links('vendor.pagination.bootstrap-5') }}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Info -->
|
<!-- Modal Info -->
|
||||||
@foreach ($alternatif as $item)
|
@foreach ($alternatif as $item)
|
||||||
|
|
|
@ -76,43 +76,48 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@foreach ($kriterias as $kriteria)
|
@foreach ($kriterias as $kriteria)
|
||||||
<div class="col-md-6 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label class="form-label fw-semibold">{{ $kriteria->nama_kriteria }}</label>
|
<label class="form-label fw-semibold">{{ $kriteria->nama_kriteria }}</label>
|
||||||
|
|
||||||
@if(in_array($kriteria->nama_kriteria, ['Jenis Acara', 'Lokasi', 'Cuaca']))
|
@if(in_array($kriteria->id, $multiSelectKriteriaIds))
|
||||||
{{-- Checkbox group untuk multiple select --}}
|
{{-- Multiple select: checkbox group --}}
|
||||||
<div class="checkbox-group d-flex flex-wrap gap-2">
|
<div class="checkbox-group d-flex flex-wrap gap-2">
|
||||||
@foreach ($kriteria->subKriteria as $subkriteria)
|
@foreach ($kriteria->subKriteria as $subkriteria)
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input type="checkbox"
|
<input
|
||||||
|
type="checkbox"
|
||||||
name="nilai[{{ $kriteria->id }}][]"
|
name="nilai[{{ $kriteria->id }}][]"
|
||||||
value="{{ $subkriteria->id }}"
|
value="{{ $subkriteria->id }}"
|
||||||
id="sub_{{ $kriteria->id }}_{{ $subkriteria->id }}"
|
id="sub_{{ $kriteria->id }}_{{ $subkriteria->id }}"
|
||||||
class="form-check-input"
|
class="form-check-input"
|
||||||
{{ (isset($nilai[$kriteria->id]) && in_array($subkriteria->id, (array) $nilai[$kriteria->id])) ? 'checked' : '' }}>
|
{{ (isset($nilai[$kriteria->id]) && in_array($subkriteria->id, (array) $nilai[$kriteria->id])) ? 'checked' : '' }}
|
||||||
<label for="sub_{{ $kriteria->id }}_{{ $subkriteria->id }}" class="form-check-label cursor-pointer">
|
>
|
||||||
|
<label class="form-check-label" for="sub_{{ $kriteria->id }}_{{ $subkriteria->id }}">
|
||||||
{{ $subkriteria->nama_sub }}
|
{{ $subkriteria->nama_sub }}
|
||||||
</label>
|
</label>
|
||||||
</div>
|
</div>
|
||||||
@endforeach
|
@endforeach
|
||||||
</div>
|
</div>
|
||||||
<small class="form-text text-muted">Pilih satu atau lebih</small>
|
<small class="form-text text-muted">Pilih satu atau lebih</small>
|
||||||
@else
|
|
||||||
{{-- Dropdown biasa untuk single select --}}
|
@else
|
||||||
<select class="form-control" name="nilai[{{ $kriteria->id }}]" required>
|
{{-- Single select: dropdown --}}
|
||||||
<option value="">-- Pilih --</option>
|
<select class="form-control" name="nilai[{{ $kriteria->id }}]" required>
|
||||||
@foreach ($kriteria->subKriteria as $subkriteria)
|
<option value="">-- Pilih --</option>
|
||||||
<option value="{{ $subkriteria->id }}"
|
@foreach ($kriteria->subKriteria as $subkriteria)
|
||||||
{{ isset($nilai[$kriteria->id]) && $nilai[$kriteria->id] == $subkriteria->id ? 'selected' : '' }}>
|
<option
|
||||||
{{ $subkriteria->nama_sub }}
|
value="{{ $subkriteria->id }}"
|
||||||
</option>
|
{{ isset($nilai[$kriteria->id]) && $nilai[$kriteria->id] == $subkriteria->id ? 'selected' : '' }}
|
||||||
@endforeach
|
>
|
||||||
</select>
|
{{ $subkriteria->nama_sub }}
|
||||||
@endif
|
</option>
|
||||||
</div>
|
@endforeach
|
||||||
@endforeach
|
</select>
|
||||||
</div>
|
@endif
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
</div>
|
||||||
<button type="submit" class="btn" style="background-color: #064E3B; color: white;">
|
<button type="submit" class="btn" style="background-color: #064E3B; color: white;">
|
||||||
Simpan
|
Simpan
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -140,7 +140,7 @@
|
||||||
@endphp
|
@endphp
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
@if (count($namaSubs))
|
@if (count($namaSubs))
|
||||||
@if ($kriteria->nama_kriteria === 'Jenis Acara')
|
@if (in_array($kriteria->nama_kriteria, ['Jenis Acara', 'Lokasi Acara', 'Cuaca Acara']))
|
||||||
<div class="d-flex flex-wrap justify-content-center gap-2">
|
<div class="d-flex flex-wrap justify-content-center gap-2">
|
||||||
@foreach ($namaSubs as $nama)
|
@foreach ($namaSubs as $nama)
|
||||||
<span class="rounded-pill px-3 py-1 bg-light border text-dark small shadow-sm">
|
<span class="rounded-pill px-3 py-1 bg-light border text-dark small shadow-sm">
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form action="{{ route('user.update', $user->id) }}" method="POST">
|
<form action="{{ route('admin.user.update', $user->id) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
|
@ -47,7 +47,7 @@
|
||||||
<button type="submit" class="btn btn-success" style="background-color: #064e03; border-color: #064e03;">
|
<button type="submit" class="btn btn-success" style="background-color: #064e03; border-color: #064e03;">
|
||||||
Simpan
|
Simpan
|
||||||
</button>
|
</button>
|
||||||
<a href="{{ route('user.show', $user->id) }}" class="btn btn-success" style="background-color: #a6f4a3; border-color: #a6f4a3; color: #064e03;">
|
<a href="{{ route('admin.user.show', $user->id) }}" class="btn btn-success" style="background-color: #a6f4a3; border-color: #a6f4a3; color: #064e03;">
|
||||||
Kembali
|
Kembali
|
||||||
</a>
|
</a>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div class="mt-4 text-end">
|
<div class="mt-4 text-end">
|
||||||
<a href="{{ route('user.edit', $user->id) }}" class="btn" style="background-color: #064e03; color: white;">
|
<a href="{{ route('admin.user.edit', $user->id) }}" class="btn" style="background-color: #064e03; color: white;">
|
||||||
<i class="bi bi-pencil-square"></i> Edit Profil
|
<i class="bi bi-pencil-square"></i> Edit Profil
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -2,11 +2,13 @@
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
use App\Http\Controllers\UserController;
|
||||||
use App\Http\Controllers\PakaianController;
|
use App\Http\Controllers\PakaianController;
|
||||||
use App\Http\Controllers\KriteriaController;
|
use App\Http\Controllers\KriteriaController;
|
||||||
use App\Http\Controllers\PenilaianController;
|
use App\Http\Controllers\PenilaianController;
|
||||||
use App\Http\Controllers\Admin\AuthController;
|
use App\Http\Controllers\Admin\AuthController;
|
||||||
use App\Http\Controllers\SubKriteriaController;
|
use App\Http\Controllers\SubKriteriaController;
|
||||||
|
use App\Http\Controllers\Admin\RiwayatController;
|
||||||
use App\Http\Controllers\Admin\DashboardController;
|
use App\Http\Controllers\Admin\DashboardController;
|
||||||
use App\Http\Controllers\SubKriteriaShowController;
|
use App\Http\Controllers\SubKriteriaShowController;
|
||||||
use App\Http\Controllers\Landingpage\HomeController;
|
use App\Http\Controllers\Landingpage\HomeController;
|
||||||
|
@ -67,8 +69,11 @@ Route::prefix('admin')->middleware(['auth'])->as('admin.')->group(function () {
|
||||||
|
|
||||||
Route::resource('pakaian', PakaianController::class);
|
Route::resource('pakaian', PakaianController::class);
|
||||||
Route::resource('penilaian', PenilaianController::class);
|
Route::resource('penilaian', PenilaianController::class);
|
||||||
|
Route::resource('user', UserController::class);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::get('riwayat', [RiwayatController::class, 'index'])->name('riwayat.index');
|
||||||
|
|
||||||
// // Kriteria
|
// // Kriteria
|
||||||
// Route::get('/kriteria', [DataKriteriaController::class, 'indexPage'])->name('admin.kriteria.index');
|
// Route::get('/kriteria', [DataKriteriaController::class, 'indexPage'])->name('admin.kriteria.index');
|
||||||
// Route::get('/kriteria/create', [DataKriteriaController::class, 'create'])->name('admin.kriteria.create');
|
// Route::get('/kriteria/create', [DataKriteriaController::class, 'create'])->name('admin.kriteria.create');
|
||||||
|
|
Loading…
Reference in New Issue