From 3d3f320be655f7485c0266b6f22f824109e80996 Mon Sep 17 00:00:00 2001 From: HANIF FEBRIANSYAH <143672338+hanzhighmekaniq@users.noreply.github.com> Date: Sun, 25 May 2025 01:09:14 +0700 Subject: [PATCH] Kekuatan Update --- .../Admin/AlternatifController.php | 154 ---- .../Controllers/Admin/DashboardController.php | 23 +- .../Admin/DataKriteriaController.php | 84 --- .../Controllers/Admin/PenilaianController.php | 93 --- .../Admin/PerhitunganController.php | 103 --- .../Admin/SubKriteriaController.php | 118 --- app/Http/Controllers/KriteriaController.php | 117 +++ app/Http/Controllers/PakaianController.php | 129 ++++ .../Controllers/SubKriteriaController.php | 114 +++ .../Controllers/SubKriteriaShowController.php | 18 + app/Models/DataAlternatif.php | 29 - app/Models/Kriteria.php | 15 +- app/Models/NilaiAlternatif.php | 30 - app/Models/Pakaian.php | 21 +- app/Models/PakaianSubKriteria.php | 13 + app/Models/Penilaian.php | 32 - app/Models/QuizHistory.php | 23 - app/Models/Subkriteria.php | 25 +- app/Providers/AppServiceProvider.php | 6 +- ...02_14_103354_create_datakriteria_table.php | 24 - ..._02_21_035239_create_subkriteria_table.php | 28 - ...25_03_05_040748_create_penilaian_table.php | 36 - ...2025_03_20_115444_create_pakaian_table.php | 28 - ...206_add_gambar_to_dataalternatif_table.php | 28 - ...05_22_111608_create_quiz_history_table.php | 29 - ...2025_05_24_131029_create_pakaian_table.php | 38 - .../2025_05_24_131238_create_cuaca_table.php | 29 - .../2025_05_24_131317_create_warna_table.php | 29 - ...05_24_131341_create_jenispakaian_table.php | 29 - ...5_05_24_131417_create_jenisacara_table.php | 29 - ...5_05_24_133346_create_kriterias_table.php} | 10 +- ...5_24_133401_create_sub_kriterias_table.php | 32 + ...25_05_24_133412_create_pakaians_table.php} | 10 +- ...26_create_pakaian_sub_kriterias_table.php} | 11 +- ...748104172_Screenshot 2025-04-23 195651.png | Bin 0 -> 12898 bytes ...748104366_Screenshot 2025-04-25 133404.png | Bin 0 -> 3116 bytes resources/views/admin/layouts/base.blade.php | 204 ++---- .../admin/pages/alternatif/index.blade.php | 677 ------------------ .../admin/pages/dashboard/index.blade.php | 26 +- .../admin/pages/kriteria/create.blade.php | 101 +-- .../views/admin/pages/kriteria/edit.blade.php | 102 +-- .../admin/pages/kriteria/index.blade.php | 187 ++--- .../views/admin/pages/pakaian/index.blade.php | 365 ++++++++++ .../pages/subkriteria/cuacaacara.blade.php | 303 -------- .../admin/pages/subkriteria/dynamic.blade.php | 156 ---- .../admin/pages/subkriteria/harga.blade.php | 303 -------- .../admin/pages/subkriteria/index.blade.php | 361 ++++++++++ .../pages/subkriteria/jenisacara.blade.php | 303 -------- .../pages/subkriteria/jenispakaian.blade.php | 303 -------- .../pages/subkriteria/lokasiacara.blade.php | 303 -------- .../pages/subkriteria/warnapakaian.blade.php | 303 -------- routes/web.php | 112 +-- 52 files changed, 1550 insertions(+), 4096 deletions(-) delete mode 100644 app/Http/Controllers/Admin/AlternatifController.php delete mode 100644 app/Http/Controllers/Admin/DataKriteriaController.php delete mode 100644 app/Http/Controllers/Admin/PenilaianController.php delete mode 100644 app/Http/Controllers/Admin/PerhitunganController.php delete mode 100644 app/Http/Controllers/Admin/SubKriteriaController.php create mode 100644 app/Http/Controllers/KriteriaController.php create mode 100644 app/Http/Controllers/PakaianController.php create mode 100644 app/Http/Controllers/SubKriteriaController.php create mode 100644 app/Http/Controllers/SubKriteriaShowController.php delete mode 100644 app/Models/DataAlternatif.php delete mode 100644 app/Models/NilaiAlternatif.php create mode 100644 app/Models/PakaianSubKriteria.php delete mode 100644 app/Models/Penilaian.php delete mode 100644 app/Models/QuizHistory.php delete mode 100644 database/migrations/2025_02_14_103354_create_datakriteria_table.php delete mode 100644 database/migrations/2025_02_21_035239_create_subkriteria_table.php delete mode 100644 database/migrations/2025_03_05_040748_create_penilaian_table.php delete mode 100644 database/migrations/2025_03_20_115444_create_pakaian_table.php delete mode 100644 database/migrations/2025_05_17_033206_add_gambar_to_dataalternatif_table.php delete mode 100644 database/migrations/2025_05_22_111608_create_quiz_history_table.php delete mode 100644 database/migrations/2025_05_24_131029_create_pakaian_table.php delete mode 100644 database/migrations/2025_05_24_131238_create_cuaca_table.php delete mode 100644 database/migrations/2025_05_24_131317_create_warna_table.php delete mode 100644 database/migrations/2025_05_24_131341_create_jenispakaian_table.php delete mode 100644 database/migrations/2025_05_24_131417_create_jenisacara_table.php rename database/migrations/{2025_03_05_040712_create_dataalternatif_table.php => 2025_05_24_133346_create_kriterias_table.php} (57%) create mode 100644 database/migrations/2025_05_24_133401_create_sub_kriterias_table.php rename database/migrations/{2025_05_24_131254_create_lokasi_table.php => 2025_05_24_133412_create_pakaians_table.php} (62%) rename database/migrations/{2025_05_24_131155_create_hargakategori_table.php => 2025_05_24_133426_create_pakaian_sub_kriterias_table.php} (54%) create mode 100644 public/uploads/pakaian/1748104172_Screenshot 2025-04-23 195651.png create mode 100644 public/uploads/pakaian/1748104366_Screenshot 2025-04-25 133404.png delete mode 100644 resources/views/admin/pages/alternatif/index.blade.php create mode 100644 resources/views/admin/pages/pakaian/index.blade.php delete mode 100644 resources/views/admin/pages/subkriteria/cuacaacara.blade.php delete mode 100644 resources/views/admin/pages/subkriteria/dynamic.blade.php delete mode 100644 resources/views/admin/pages/subkriteria/harga.blade.php create mode 100644 resources/views/admin/pages/subkriteria/index.blade.php delete mode 100644 resources/views/admin/pages/subkriteria/jenisacara.blade.php delete mode 100644 resources/views/admin/pages/subkriteria/jenispakaian.blade.php delete mode 100644 resources/views/admin/pages/subkriteria/lokasiacara.blade.php delete mode 100644 resources/views/admin/pages/subkriteria/warnapakaian.blade.php diff --git a/app/Http/Controllers/Admin/AlternatifController.php b/app/Http/Controllers/Admin/AlternatifController.php deleted file mode 100644 index be0432f..0000000 --- a/app/Http/Controllers/Admin/AlternatifController.php +++ /dev/null @@ -1,154 +0,0 @@ -get(); - - // Ambil semua kriteria - $kriteria = Kriteria::all(); - - // Ambil semua alternatif dengan relasi ke subkriteria - $query = DataAlternatif::with('subkriteria', 'penilaian'); - - // Jika ada filter jenis pakaian, gunakan filter berdasarkan subkriteria_id - if ($request->filled('jenis_pakaian')) { - $query->where('subkriteria_id', $request->jenis_pakaian); - } - - // Search - if ($request->filled('search')) { - $query->where('nama_alternatif', 'like', '%' . $request->search . '%'); - } - - // Ambil data alternatif dengan pagination (10 per halaman) - $perPage = $request->input('entries', 10); // Ambil dari URL ?entries=xx, default 10 - $alternatif = $query->paginate($perPage)->appends($request->query()); - - // Kirim data ke view - return view('admin.pages.alternatif.index', compact('subkriteria', 'alternatif', 'kriteria')); - } - - - public function store(Request $request) - { - // Validasi input - $request->validate([ - 'nama_alternatif' => 'required|string|max:255|unique:dataalternatif,nama_alternatif', - 'subkriteria_id' => 'required|exists:subkriteria,id', - 'gambar' => 'nullable|image|mimes:jpeg,png,jpg,gif|max:2048', - ]); - - $gambarPath = null; - - // Jika ada gambar yang diunggah, simpan ke folder public/assets/img - if ($request->hasFile('gambar')) { - $gambar = $request->file('gambar'); - $namaFile = time() . '_' . $gambar->getClientOriginalName(); - // simpan ke public/assets/img - $gambar->move(public_path('assets/img'), $namaFile); - $gambarPath = 'assets/img/' . $namaFile; - } - - // Simpan data alternatif ke database - $alternatif = DataAlternatif::create([ - 'nama_alternatif' => $request->nama_alternatif, - 'subkriteria_id' => $request->subkriteria_id, - 'gambar' => $gambarPath, - ]); - - // Ambil semua kriteria yang ada - $kriteria = Kriteria::all(); - - // Simpan nilai awal 0 untuk semua kriteria pada alternatif baru - foreach ($kriteria as $k) { - \App\Models\Penilaian::create([ - 'alternatif_id' => $alternatif->id, - 'kriteria_id' => $k->id, - 'nilai' => 0, // Atur nilai default - ]); - } - - // Redirect kembali ke halaman index dengan pesan sukses - return redirect()->route('admin.alternatif.index')->with('success', 'Data Alternatif berhasil ditambahkan.'); - } - - // Menampilkan form edit untuk alternatif - public function edit($id) - { - // Ambil data alternatif berdasarkan ID - $alternatif = DataAlternatif::findOrFail($id); - - // Ambil semua subkriteria (untuk pilihan dropdown misalnya) - $subkriteria = \App\Models\Subkriteria::all(); - - // Tampilkan view edit - return view('admin.pages.alternatif.edit', compact('alternatif', 'subkriteria')); - } - - public function update(Request $request, $id) - { - // Tampilkan view edit - $request->validate([ - 'nama_alternatif' => 'required|string|max:255|unique:dataalternatif,nama_alternatif,' . $id, - 'subkriteria_id' => 'required|exists:subkriteria,id', - 'gambar' => 'nullable|image|mimes:jpg,jpeg,png|max:2048', - ]); - - // Ambil data alternatif berdasarkan ID - $alternatif = DataAlternatif::findOrFail($id); - - // Update data dari input - $alternatif->nama_alternatif = $request->nama_alternatif; - $alternatif->subkriteria_id = $request->subkriteria_id; - - // Jika user mengunggah gambar baru, simpan dan update path-nya - if ($request->hasFile('gambar')) { - $file = $request->file('gambar'); - $namaFile = time() . '_' . $file->getClientOriginalName(); - - // Simpan di public/assets/img - $file->move(public_path('assets/img'), $namaFile); - - // Update path di DB - $alternatif->gambar = 'assets/img/' . $namaFile; - } - - // Simpan perubahan ke database - $alternatif->save(); - - // Jika permintaan AJAX, kirim response JSON - if ($request->ajax()) { - return response()->json(['success' => true, 'message' => 'Data Alternatif berhasil diperbarui!']); - } - - // Redirect ke halaman index dengan pesan sukses - return redirect()->route('admin.alternatif.index')->with('success', 'Data Alternatif berhasil diperbarui.'); - } - - public function destroy(Request $request, $id) - { - // Cari data berdasarkan ID dan hapus - $alternatif = DataAlternatif::findOrFail($id); - $alternatif->delete(); - - // Jika permintaan AJAX, kirim response JSON - if ($request->ajax()) { - return response()->json(['success' => true, 'message' => 'Data berhasil dihapus.']); - } - - // Redirect ke halaman index dengan pesan sukses - return redirect()->route('admin.alternatif.index')->with('success', 'Data Alternatif berhasil dihapus.'); - } -} diff --git a/app/Http/Controllers/Admin/DashboardController.php b/app/Http/Controllers/Admin/DashboardController.php index 60db684..2188941 100644 --- a/app/Http/Controllers/Admin/DashboardController.php +++ b/app/Http/Controllers/Admin/DashboardController.php @@ -5,32 +5,21 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Models\DataAlternatif; use App\Models\Kriteria; +use App\Models\Pakaian; use App\Models\Penilaian; use App\Models\Subkriteria; +use App\Models\SubKriteria as ModelsSubKriteria; use Illuminate\Http\Request; class DashboardController extends Controller { - public function indexPage() + + public function index() { - // Ambil jumlah data dari masing-masing model + $totalPakaian = Pakaian::count(); $totalKriteria = Kriteria::count(); $totalSubKriteria = Subkriteria::count(); - $totalAlternatif = DataAlternatif::count(); - $totalPenilaian = Penilaian::count(); - // Ambil salah satu kriteria, misal yang pertama - $kriteriaPertama = Kriteria::first(); - - // Kirim data ke view - return view('admin.pages.dashboard.index', [ - 'totalKriteria' => $totalKriteria, - 'totalSubKriteria' => $totalSubKriteria, - 'totalAlternatif' => $totalAlternatif, - 'totalPenilaian' => $totalPenilaian, - 'totalPerhitungan' => $totalPenilaian, - 'totalHasilAkhir' => $totalPenilaian, - 'kriteriaId' => $kriteriaPertama ? $kriteriaPertama->id : null, - ]); + return view("admin.pages.dashboard.index", compact("totalPakaian", "totalKriteria", "totalSubKriteria")); } } diff --git a/app/Http/Controllers/Admin/DataKriteriaController.php b/app/Http/Controllers/Admin/DataKriteriaController.php deleted file mode 100644 index 23c689f..0000000 --- a/app/Http/Controllers/Admin/DataKriteriaController.php +++ /dev/null @@ -1,84 +0,0 @@ -get(); - return view('admin.pages.kriteria.index', compact('kriteria')); - } - - // Menampilkan form tambah data - public function create() - { - return view('admin.pages.kriteria.create'); - } - - // Menyimpan data baru - public function store(Request $request) - { - // Validasi inputan dari form - $request->validate([ - 'kode_kriteria' => 'required|unique:datakriteria,kode_kriteria|max:10', - 'nama_kriteria' => 'required|max:255', - 'bobot' => 'required|numeric|min:0.01|max:1', // nilai > 0 - 'jenis' => 'required|in:Benefit,Cost', - ], [ - 'bobot.min' => 'Bobot tidak boleh 0.', - ]); - - // Simpan data kriteria baru ke database - Kriteria::create($request->only(['kode_kriteria', 'nama_kriteria', 'bobot', 'jenis'])); - - return redirect()->route('admin.kriteria.index')->with('success', 'Data Kriteria berhasil ditambahkan!'); - } - - // Menampilkan form edit data - public function edit($id) - { - // Cari data kriteria berdasarkan ID - $kriteria = Kriteria::findOrFail($id); - return view('admin.pages.kriteria.edit', compact('kriteria')); - } - - // Menyimpan perubahan data - public function update(Request $request, $id) - { - // Validasi inputan dari form edit - $request->validate([ - 'kode_kriteria' => "required|max:10|unique:datakriteria,kode_kriteria,$id,id", - 'nama_kriteria' => 'required|max:255', - 'bobot' => 'required|numeric|min:0.01|max:1', // nilai > 0 - 'jenis' => 'required|in:Benefit,Cost', - ], [ - 'bobot.min' => 'Bobot tidak boleh 0.', - ]); - - // Cari data kriteria yang akan diupdate - $kriteria = Kriteria::findOrFail($id); - // Update data dengan input yang diberikan - $kriteria->update($request->only(['kode_kriteria', 'nama_kriteria', 'bobot', 'jenis'])); - - return redirect()->route('admin.kriteria.index')->with('success', 'Data Kriteria berhasil diperbarui!'); - } - - // Menghapus data kriteria - public function destroy($id) - { - // Cari data kriteria berdasarkan ID - $kriteria = Kriteria::findOrFail($id); - // Hapus data dari database - $kriteria->delete(); - - return redirect()->route('admin.kriteria.index')->with('success', 'Data Kriteria berhasil dihapus!'); - } -} diff --git a/app/Http/Controllers/Admin/PenilaianController.php b/app/Http/Controllers/Admin/PenilaianController.php deleted file mode 100644 index 503df8b..0000000 --- a/app/Http/Controllers/Admin/PenilaianController.php +++ /dev/null @@ -1,93 +0,0 @@ -input('perPage', 10); // Jumlah data per halaman - $search = $request->input('search'); // Keyword pencaria - - $query = DataAlternatif::with(['penilaian.subkriteria']); // Relasi eager loading - - if ($search) { - // Jika terdapat pencarian, filter berdasarkan nama alternatif atau nama subkriteria - $query->where(function ($q) use ($search) { - $q->where('nama_alternatif', 'like', "%{$search}%") - ->orWhereHas('penilaian.subkriteria', function ($sub) use ($search) { - $sub->where('nama_subkriteria', 'like', "%{$search}%"); - }); - }); - } - - // Ambil data dengan pagination dan simpan parameter query kecuali halaman - $data = $query->paginate($perPage)->appends($request->except('page')); - - // Ambil semua data kriteria untuk ditampilkan - $kriteria = Kriteria::all(); - - return view('admin.pages.penilaian.index', compact('data', 'perPage', 'kriteria', 'search')); - } - - // Menampilkan form edit penilaian - public function edit($id) - { - $alternatif = DataAlternatif::findOrFail($id); // Ambil data alternatif berdasarkan ID - $penilaians = Penilaian::where('alternatif_id', $id)->get(); // Ambil data penilaian yang terkait - $kriteria = Kriteria::all(); // Ambil seluruh kriteria - - $nilai = []; // Menyimpan ID subkriteria per kriteria untuk ditampilkan di form - foreach ($penilaians as $penilaian) { - $nilai[$penilaian->kriteria_id] = $penilaian->subkriteria_id; - } - - return view('admin.pages.penilaian.edit', compact('alternatif', 'kriteria', 'nilai')); - } - - // Memperbarui data penilaian - public function update(Request $request, $id) - { - $alternatif = DataAlternatif::findOrFail($id); // Pastikan data alternatif ada - - // Validasi input - $request->validate([ - 'subkriteria_1' => 'required|numeric', - 'subkriteria_2' => 'required|numeric', - 'subkriteria_3' => 'required|numeric', - 'subkriteria_4' => 'required|numeric', - 'subkriteria_5' => 'required|numeric', - 'subkriteria_6' => 'required|numeric', - ]); - - // Lakukan update atau insert data penilaian untuk masing-masing kriteria - foreach (range(1, 6) as $i) { - $subkriteriaId = $request->input("subkriteria_$i"); // Ambil input subkriteria - $subkriteria = Subkriteria::find($subkriteriaId); // Cari data subkriteria - - if ($subkriteria) { - Penilaian::updateOrCreate( - [ - 'alternatif_id' => $alternatif->id, // Berdasarkan alternatif dan kriteria - 'kriteria_id' => $i, - ], - [ - 'subkriteria_id' => $subkriteria->id, // Simpan subkriteria yang dipilih - 'nilai' => $subkriteria->nilai, // Ambil nilai dari subkriteria - ] - ); - } - } - - return redirect()->route('admin.penilaian.index')->with('success', 'Penilaian berhasil diperbarui!'); - } -} diff --git a/app/Http/Controllers/Admin/PerhitunganController.php b/app/Http/Controllers/Admin/PerhitunganController.php deleted file mode 100644 index d077fda..0000000 --- a/app/Http/Controllers/Admin/PerhitunganController.php +++ /dev/null @@ -1,103 +0,0 @@ -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'); } - - // Method umum untuk menampilkan data berdasarkan jenis pakaian - public function showJenisPakaian($jenis) - { - // Ambil data alternatif yang memiliki penilaian pada kriteria ke-3 (jenis pakaian), - // dan nilai subkriteria-nya sesuai dengan jenis yang dipilih (misalnya 'Dress') - $alternatif = DataAlternatif::with(['penilaian.subkriteria']) - ->whereHas('penilaian', function($query) use ($jenis) { - $query->where('kriteria_id', 3) - ->whereHas('subkriteria', function($subquery) use ($jenis) { - $subquery->where('nama_subkriteria', $jenis); - }); - }) - ->get(); - - // Ambil semua data kriteria - $kriteria = Kriteria::all(); - - // Hitung nilai maksimum dan minimum untuk tiap kriteria - $maxNilai = []; - $minNilai = []; - - foreach ($kriteria as $index => $k) { - $nilaiKriteria = []; - - foreach ($alternatif as $alt) { - $penilaian = $alt->penilaian->firstWhere('kriteria_id', $k->id); - if ($penilaian && $penilaian->subkriteria) { - $nilaiKriteria[] = $penilaian->subkriteria->nilai; - } - } - - $kode = 'C' . ($index + 1); - $maxNilai[$kode] = count($nilaiKriteria) > 0 ? max($nilaiKriteria) : 1; - $minNilai[$kode] = count($nilaiKriteria) > 0 ? min($nilaiKriteria) : 1; - } - - $normalisasi = []; - $pembobotan = []; - - foreach ($alternatif as $alt) { - $barisNormal = []; - $barisBobot = []; - - foreach ($kriteria as $index => $k) { - $penilaian = $alt->penilaian->firstWhere('kriteria_id', $k->id); - $nilai = $penilaian && $penilaian->subkriteria ? $penilaian->subkriteria->nilai : 0; - - $kode = 'C' . ($index + 1); - - if ($k->jenis == 'Cost') { - $normal = $nilai > 0 ? $minNilai[$kode] / $nilai : 0; - } else { - $normal = $maxNilai[$kode] > 0 ? $nilai / $maxNilai[$kode] : 0; - } - - $normalRounded = round($normal, 3); - $bobot = round($normalRounded * $k->bobot, 3); - - $barisNormal[$kode] = $normalRounded; - $barisBobot[$kode] = $bobot; - } - - $normalisasi[] = [ - 'nama' => $alt->nama_alternatif, - 'nilai' => $barisNormal - ]; - - $pembobotan[] = [ - 'nama' => $alt->nama_alternatif, - 'nilai' => $barisBobot - ]; - } - - $viewName = strtolower($jenis); - return view("admin.pages.perhitungan.$viewName", compact( - 'alternatif', - 'kriteria', - 'jenis', - 'normalisasi', - 'pembobotan' - )); - } -} diff --git a/app/Http/Controllers/Admin/SubKriteriaController.php b/app/Http/Controllers/Admin/SubKriteriaController.php deleted file mode 100644 index abc323d..0000000 --- a/app/Http/Controllers/Admin/SubKriteriaController.php +++ /dev/null @@ -1,118 +0,0 @@ -get(); // Periksa kolom yang digunakan - - // Kirim data ke view - return view('admin.pages.subkriteria.dynamic', compact('kriteria', 'subkriterias')); - } - - // Menampilkan form untuk membuat subkriteria - public function create($id) - { - // Ambil data kriteria berdasarkan ID - $kriteria = Kriteria::findOrFail($id); - - // Kirim data ke view - return view('admin.pages.subkriteria.create', compact('kriteria')); - } - - // Menyimpan data subkriteria baru - public function store(Request $request) - { - // Validasi input - $validated = $request->validate([ - 'kriteria_id' => 'required|exists:datakriteria,id', - 'name' => 'required|string|max:255', - 'nilai' => 'required|numeric|min:0.01', - ], [ - 'nilai.min' => 'Nilai tidak boleh 0.', - ]); - - // Simpan data subkriteria - SubKriteria::create([ - 'kriteria_id' => $validated['kriteria_id'], - 'nama_subkriteria' => $validated['name'], - 'nilai' => $validated['nilai'], - ]); - - // Redirect kembali ke halaman subkriteria berdasarkan kriteria_id - return redirect()->route('admin.pages.subkriteria.kriteria', ['id' => $validated['kriteria_id']]) - ->with('success', 'Subkriteria berhasil ditambahkan.'); - } - - public function edit($id) - { - // Ambil data subkriteria berdasarkan subkriteria_id - $subkriteria = SubKriteria::find($id); - - if (!$subkriteria) { - return redirect()->back()->with('error', 'Subkriteria tidak ditemukan.'); - } - - // Ambil data kriteria terkait - $kriteria = Kriteria::findOrFail($subkriteria->kriteria_id); - - // Kirim data ke view - return view('admin.pages.subkriteria.edit', compact('subkriteria', 'kriteria')); - } - - public function update(Request $request, $id) - { - // Validasi input - $validated = $request->validate([ - 'kriteria_id' => 'required|exists:datakriteria,id', - 'name' => 'required|string|max:255', - 'nilai' => 'required|numeric|min:0.01', - ], [ - 'nilai.min' => 'Nilai tidak boleh 0.', - ]); - - // Ambil data subkriteria berdasarkan ID - $subkriteria = SubKriteria::findOrFail($id); // Pastikan menggunakan subkriteria_id jika diperlukan - - // Update data subkriteria - $subkriteria->update([ - 'kriteria_id' => $validated['kriteria_id'], - 'nama_subkriteria' => $validated['name'], - 'nilai' => $validated['nilai'], - ]); - - // Redirect kembali ke halaman subkriteria berdasarkan kriteria_id - return redirect()->route('admin.pages.subkriteria.kriteria', ['id' => $validated['kriteria_id']]) - ->with('success', 'Subkriteria berhasil diperbarui.'); - } - - public function destroy($id) - { - // Cari subkriteria berdasarkan ID - $subkriteria = SubKriteria::find($id); - - // Jika tidak ditemukan, redirect balik dengan pesan error - if (!$subkriteria) { - return redirect()->back()->with('error', 'Subkriteria tidak ditemukan.'); - } - - // Hapus subkriteria - $subkriteria->delete(); - - // Redirect kembali dengan pesan sukses - return redirect()->back()->with('success', 'Subkriteria berhasil dihapus.'); - } - -} diff --git a/app/Http/Controllers/KriteriaController.php b/app/Http/Controllers/KriteriaController.php new file mode 100644 index 0000000..a272228 --- /dev/null +++ b/app/Http/Controllers/KriteriaController.php @@ -0,0 +1,117 @@ +all()); // 👈 akan menampilkan semua input form dan menghentikan proses + + $request->validate([ + 'kode_kriteria' => 'required', + 'nama_kriteria' => 'required', + 'bobot' => 'required', + 'jenis' => 'required', + ]); + + try { + Kriteria::create([ + 'kode_kriteria' => $request->kode_kriteria, + 'nama_kriteria' => $request->nama_kriteria, + 'bobot' => $request->bobot, + 'jenis' => $request->jenis, + ]); + return redirect()->route('admin.kriteria.index')->with('success', 'Data berhasil ditambahkan!'); + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Gagal menyimpan data: ' . $e->getMessage()); + } + } + + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // $kriteria = Kriteria::findOrFail($id); + // return view('admin.kriteria.show', compact('kriteria')); + } + + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + $kriteria = Kriteria::findOrFail($id); + return view('admin.pages.kriteria.edit', compact('kriteria')); + } + + + /** + * Update the specified resource in storage. + */ + public function update(Request $request, string $id) + { + $request->validate([ + 'kode_kriteria' => 'required', + 'nama_kriteria' => 'required', + 'bobot' => 'required', + 'jenis' => 'required', + ]); + + try { + $kriteria = Kriteria::findOrFail($id); + $kriteria->update([ + 'kode_kriteria' => $request->kode_kriteria, + 'nama_kriteria' => $request->nama_kriteria, + 'bobot' => $request->bobot, + 'jenis' => $request->jenis, + ]); + return redirect()->route('admin.kriteria.index')->with('success', 'Data berhasil diperbarui!'); + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Gagal memperbarui data: ' . $e->getMessage()); + } + } + + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + try { + $kriteria = Kriteria::findOrFail($id); + $kriteria->delete(); + return redirect()->route('admin.kriteria.index')->with('success', 'Data berhasil dihapus!'); + } catch (\Exception $e) { + return redirect()->back()->with('error', 'Gagal menghapus data: ' . $e->getMessage()); + } + } +} diff --git a/app/Http/Controllers/PakaianController.php b/app/Http/Controllers/PakaianController.php new file mode 100644 index 0000000..bec4035 --- /dev/null +++ b/app/Http/Controllers/PakaianController.php @@ -0,0 +1,129 @@ +filled('search')) { + $query->where('nama_pakaian', 'like', '%' . $request->search . '%'); + } + + $perPage = $request->input('entries', 10); + $alternatif = $query->paginate($perPage)->appends($request->query()); + + return view('admin.pages.pakaian.index', compact('kriteria', 'alternatif')); + } + + + + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + $request->validate([ + 'nama_pakaian' => 'required|string|max:255', + 'harga' => 'required|numeric', + 'img' => 'nullable|image|max:2048', + ]); + + $imgPath = null; + if ($request->hasFile('img')) { + $imgPath = $request->file('img')->store('uploads/pakaian', 'public'); + } + + $pakaian = Pakaian::create([ + 'nama_pakaian' => $request->nama_pakaian, + 'harga' => $request->harga, + 'img' => $imgPath ? 'storage/' . $imgPath : null, + ]); + + // Simpan relasi subkriteria (many-to-many) + $pakaian->subKriterias()->sync($request->subkriterias); + + return redirect()->route('admin.pakaian.index')->with('success', 'Data pakaian berhasil ditambahkan.'); + } + + + /** + * 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, $id) + { + $request->validate([ + 'nama_pakaian' => 'required|string|max:255', + 'harga' => 'required|numeric|min:0', + 'gambar' => 'nullable|image|mimes:jpeg,png,jpg|max:2048', + ]); + + $pakaian = Pakaian::findOrFail($id); + $pakaian->nama_pakaian = $request->nama_pakaian; + $pakaian->harga = $request->harga; + + // Jika upload gambar baru + if ($request->hasFile('gambar')) { + if ($pakaian->img && file_exists(public_path($pakaian->img))) { + unlink(public_path($pakaian->img)); + } + + $file = $request->file('gambar'); + $path = 'uploads/pakaian/'; + $filename = time() . '_' . $file->getClientOriginalName(); + $file->move(public_path($path), $filename); + $pakaian->img = $path . $filename; + } + + $pakaian->save(); + + return redirect()->back()->with('success', 'Data pakaian berhasil diperbarui!'); + } + + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } +} diff --git a/app/Http/Controllers/SubKriteriaController.php b/app/Http/Controllers/SubKriteriaController.php new file mode 100644 index 0000000..6eb758f --- /dev/null +++ b/app/Http/Controllers/SubKriteriaController.php @@ -0,0 +1,114 @@ +query('kriteria_id'); + + if (!$kriteria_id) { + return redirect()->back()->with('error', 'ID Kriteria tidak ditemukan.'); + } + + $kriteria = Kriteria::findOrFail($kriteria_id); + $subkriterias = SubKriteria::where('kriteria_id', $kriteria_id)->get(); + + return view('admin.subkriteria.index', compact('kriteria', 'subkriterias')); + } + + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // Validasi input + $validated = $request->validate([ + 'kriteria_id' => 'required', + 'nama_sub' => 'required|string|max:255', + 'nilai' => 'required|numeric', + 'min_harga' => 'nullable|numeric|min:0', + 'max_harga' => 'nullable|numeric|min:0|gte:min_harga', + ]); + + // Simpan data + SubKriteria::create([ + 'kriteria_id' => $validated['kriteria_id'], + 'nama_sub' => $validated['nama_sub'], + 'nilai' => $validated['nilai'], + 'min_harga' => $validated['min_harga'] ?? null, + 'max_harga' => $validated['max_harga'] ?? null, + ]); + + return redirect()->back()->with('success', 'Subkriteria berhasil ditambahkan.'); + } + + + /** + * 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) + { + $request->validate([ + 'kriteria_id' => 'required', + 'nama_sub' => 'required|string|max:255', + 'nilai' => 'required|numeric', + 'min_harga' => 'nullable|numeric', + 'max_harga' => 'nullable|numeric', + ]); + + $subkriteria = SubKriteria::findOrFail($id); + $subkriteria->update([ + 'kriteria_id' => $request->kriteria_id, + 'nama_sub' => $request->nama_sub, + 'nilai' => $request->nilai, + 'min_harga' => $request->min_harga, + 'max_harga' => $request->max_harga, + ]); + + return redirect()->back()->with('success', 'Subkriteria berhasil diperbarui.'); + } + + + public function destroy(string $id) + { + $subkriteria = SubKriteria::findOrFail($id); + $subkriteria->delete(); + + return redirect()->back()->with('success', 'Subkriteria berhasil dihapus.'); + } +} diff --git a/app/Http/Controllers/SubKriteriaShowController.php b/app/Http/Controllers/SubKriteriaShowController.php new file mode 100644 index 0000000..f4b508c --- /dev/null +++ b/app/Http/Controllers/SubKriteriaShowController.php @@ -0,0 +1,18 @@ +firstOrFail(); + $subkriterias = SubKriteria::where('kriteria_id', $kriteria->id)->get(); + $kriterias = Kriteria::all(); + return view('admin.pages.subkriteria.index', compact('kriteria', 'subkriterias', 'kriterias')); + } +} diff --git a/app/Models/DataAlternatif.php b/app/Models/DataAlternatif.php deleted file mode 100644 index 2c6908c..0000000 --- a/app/Models/DataAlternatif.php +++ /dev/null @@ -1,29 +0,0 @@ -hasMany(Penilaian::class, 'alternatif_id'); - } - - public function subkriteria() - { - return $this->belongsTo(Subkriteria::class, 'subkriteria_id'); - } - - public function nilai() - { - return $this->hasMany(Penilaian::class, 'alternatif_id', 'id'); - } - -} diff --git a/app/Models/Kriteria.php b/app/Models/Kriteria.php index b561caf..97f2773 100644 --- a/app/Models/Kriteria.php +++ b/app/Models/Kriteria.php @@ -8,18 +8,13 @@ use Illuminate\Database\Eloquent\Model; class Kriteria extends Model { use HasFactory; - protected $table = 'datakriteria'; // Sesuaikan dengan nama tabel di database - protected $fillable = ['kode_kriteria', 'nama_kriteria', 'bobot', 'jenis']; // Sesuaikan dengan kolom yang ada di tabel + protected $table = 'kriterias'; - public function subkriteria() + protected $fillable = ['nama_kriteria', 'bobot', 'jenis', 'kode_kriteria']; + + public function subKriteria() { - return $this->hasMany(Subkriteria::class, 'kriteria_id'); // Pastikan foreign key sesuai dengan tabel subkriteria + return $this->hasMany(SubKriteria::class); } - - public function penilaian() - { - return $this->hasMany(Penilaian::class, 'kriteria_id'); - } - } diff --git a/app/Models/NilaiAlternatif.php b/app/Models/NilaiAlternatif.php deleted file mode 100644 index 1d56261..0000000 --- a/app/Models/NilaiAlternatif.php +++ /dev/null @@ -1,30 +0,0 @@ -belongsTo(DataAlternatif::class, 'alternatif_id'); - } - - public function kriteria() - { - return $this->belongsTo(Kriteria::class, 'kriteria_id'); - } - - public function nilai() - { - return $this->hasMany(Penilaian::class, 'alternatif_id'); // Hubungkan ke Penilaian - } -} diff --git a/app/Models/Pakaian.php b/app/Models/Pakaian.php index 0101229..a7e43c3 100644 --- a/app/Models/Pakaian.php +++ b/app/Models/Pakaian.php @@ -2,23 +2,20 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Pakaian extends Model { use HasFactory; - protected $table = 'pakaian'; // Nama tabel di database + protected $table = 'pakaians'; - protected $fillable = [ - 'nama', - 'jenis_acara', - 'jenis_pakaian', - 'harga', - 'warna', - 'lokasi', - 'cuaca', - 'rating' - ]; + protected $fillable = ['nama_pakaian', 'img', 'harga']; + + public function subKriterias(): BelongsToMany + { + return $this->belongsToMany(SubKriteria::class, 'pakaian_sub_kriterias'); + } } diff --git a/app/Models/PakaianSubKriteria.php b/app/Models/PakaianSubKriteria.php new file mode 100644 index 0000000..bbe6833 --- /dev/null +++ b/app/Models/PakaianSubKriteria.php @@ -0,0 +1,13 @@ + 'array', // Pastikan nilai disimpan sebagai array dalam database - ]; - - public function alternatif() - { - return $this->belongsTo(DataAlternatif::class, 'alternatif_id'); - } - - public function kriteria() - { - return $this->belongsTo(Kriteria::class, 'kriteria_id'); - } - - public function subkriteria() - { - return $this->belongsTo(Subkriteria::class, 'subkriteria_id'); - } -} diff --git a/app/Models/QuizHistory.php b/app/Models/QuizHistory.php deleted file mode 100644 index ee1839d..0000000 --- a/app/Models/QuizHistory.php +++ /dev/null @@ -1,23 +0,0 @@ - 'array', - 'hasil_rekomendasi' => 'array', - ]; -} diff --git a/app/Models/Subkriteria.php b/app/Models/Subkriteria.php index 76db3e0..4e727ce 100644 --- a/app/Models/Subkriteria.php +++ b/app/Models/Subkriteria.php @@ -2,29 +2,26 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; -class Subkriteria extends Model +class SubKriteria extends Model { use HasFactory; - protected $table = 'subkriteria'; // Pastikan Laravel menggunakan nama tabel yang benar - protected $primaryKey = 'id'; // Jika primary key bukan 'id' - protected $fillable = ['nama_subkriteria', 'nilai', 'kriteria_id']; // Sesuaikan dengan kolom tabel + protected $table = 'sub_kriterias'; - public function kriteria() + protected $fillable = ['kriteria_id', 'nama_sub', 'nilai', 'min_harga', 'max_harga']; + + public function kriteria(): BelongsTo { - return $this->belongsTo(Kriteria::class, 'kriteria_id'); + return $this->belongsTo(Kriteria::class); } - public function penilaian() + public function pakaian(): BelongsToMany { - return $this->hasMany(Penilaian::class, 'subkriteria_id'); - } - - public function dataAlternatif() - { - return $this->hasMany(DataAlternatif::class, 'subkriteria_id'); + return $this->belongsToMany(Pakaian::class, 'pakaian_sub_kriteria'); } } diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index b62b8d0..e81e6d0 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -21,8 +21,8 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - view()->composer('*', function ($view) { - $view->with('semua_kriteria', Kriteria::all()); - }); + // view()->composer('*', function ($view) { + // $view->with('semua_kriteria', Kriteria::all()); + // }); } } diff --git a/database/migrations/2025_02_14_103354_create_datakriteria_table.php b/database/migrations/2025_02_14_103354_create_datakriteria_table.php deleted file mode 100644 index 0168155..0000000 --- a/database/migrations/2025_02_14_103354_create_datakriteria_table.php +++ /dev/null @@ -1,24 +0,0 @@ -id(); // ID auto-increment - $table->string('kode_kriteria', 10)->unique(); // Kode kriteria (VARCHAR 10) - $table->string('nama_kriteria', 255); // Nama kriteria (VARCHAR 255) - $table->decimal('bobot', 5, 2); // Bobot (DECIMAL 5,2) - $table->enum('jenis', ['Benefit', 'Cost']); // Jenis (Benefit atau Cost) - $table->timestamps(); // Kolom created_at & updated_at - }); - } - - public function down() - { - Schema::dropIfExists('datakriteria'); - } -}; diff --git a/database/migrations/2025_02_21_035239_create_subkriteria_table.php b/database/migrations/2025_02_21_035239_create_subkriteria_table.php deleted file mode 100644 index b5f7b35..0000000 --- a/database/migrations/2025_02_21_035239_create_subkriteria_table.php +++ /dev/null @@ -1,28 +0,0 @@ -id(); - $table->string('nama_subkriteria'); - $table->integer('nilai'); - $table->foreignId('kriteria_id')->nullable()->constrained('datakriteria')->onDelete('set null'); - $table->timestamps(); - }); - } - - public function down(): void - { - Schema::table('subkriteria', function (Blueprint $table) { - $table->dropForeign(['kriteria_id']); - }); - - Schema::dropIfExists('subkriteria'); - } -}; \ No newline at end of file diff --git a/database/migrations/2025_03_05_040748_create_penilaian_table.php b/database/migrations/2025_03_05_040748_create_penilaian_table.php deleted file mode 100644 index 17c166f..0000000 --- a/database/migrations/2025_03_05_040748_create_penilaian_table.php +++ /dev/null @@ -1,36 +0,0 @@ -id(); - $table->foreignId('alternatif_id')->constrained('dataalternatif')->onDelete('cascade'); - $table->foreignId('kriteria_id')->constrained('datakriteria')->onDelete('cascade'); - $table->foreignId('subkriteria_id')->nullable()->constrained('subkriteria')->onDelete('cascade'); // ✅ Tambahkan ini - $table->float('nilai_c1')->nullable(); // Menyimpan nilai C1 - $table->float('nilai_c2')->nullable(); // Menyimpan nilai C2 - $table->float('nilai_c3')->nullable(); // Menyimpan nilai C3 - $table->float('nilai_c4')->nullable(); // Menyimpan nilai C4 - $table->float('nilai_c5')->nullable(); // Menyimpan nilai C5 - $table->float('nilai_c6')->nullable(); // Menyimpan nilai C6 - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('penilaian'); - } -}; diff --git a/database/migrations/2025_03_20_115444_create_pakaian_table.php b/database/migrations/2025_03_20_115444_create_pakaian_table.php deleted file mode 100644 index 27db7cd..0000000 --- a/database/migrations/2025_03_20_115444_create_pakaian_table.php +++ /dev/null @@ -1,28 +0,0 @@ -id(); // ID otomatis - $table->string('nama'); // Nama pakaian - $table->string('jenis_acara'); // Kasual, Formal, Pesta, Santai - $table->string('jenis_pakaian'); // Kemeja, Blouse, Celana, Rok, Dress, Cardigan - $table->integer('harga'); // Harga pakaian - $table->string('warna'); // Warna pakaian - $table->string('lokasi'); // Indoor / Outdoor - $table->string('cuaca'); // Cerah / Berawan - $table->decimal('rating', 3, 2)->default(0); // Contoh: 4.5 - $table->timestamps(); // Tanggal dibuat & diperbarui - }); - } - - public function down() - { - Schema::dropIfExists('pakaian'); - } -}; diff --git a/database/migrations/2025_05_17_033206_add_gambar_to_dataalternatif_table.php b/database/migrations/2025_05_17_033206_add_gambar_to_dataalternatif_table.php deleted file mode 100644 index 46b4741..0000000 --- a/database/migrations/2025_05_17_033206_add_gambar_to_dataalternatif_table.php +++ /dev/null @@ -1,28 +0,0 @@ -string('gambar')->nullable()->after('nama_alternatif'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('dataalternatif', function (Blueprint $table) { - $table->dropColumn('gambar'); - }); - } -}; diff --git a/database/migrations/2025_05_22_111608_create_quiz_history_table.php b/database/migrations/2025_05_22_111608_create_quiz_history_table.php deleted file mode 100644 index 144c42b..0000000 --- a/database/migrations/2025_05_22_111608_create_quiz_history_table.php +++ /dev/null @@ -1,29 +0,0 @@ -id(); - $table->json('data_kuisioner'); - $table->json('hasil_rekomendasi'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('quiz_history'); - } -}; diff --git a/database/migrations/2025_05_24_131029_create_pakaian_table.php b/database/migrations/2025_05_24_131029_create_pakaian_table.php deleted file mode 100644 index 4365f35..0000000 --- a/database/migrations/2025_05_24_131029_create_pakaian_table.php +++ /dev/null @@ -1,38 +0,0 @@ -id(); - $table->string('nama'); - - $table->foreignId('jenis_id')->constrained('jenispakaian')->onDelete('cascade'); - $table->foreignId('warna_id')->constrained('warna')->onDelete('cascade'); - $table->foreignId('lokasi_id')->constrained('lokasi')->onDelete('cascade'); - $table->foreignId('cuaca_id')->constrained('cuaca')->onDelete('cascade'); - $table->foreignId('acara_id')->constrained('jenisacara')->onDelete('cascade'); - $table->foreignId('harga_id')->constrained('hargakategori')->onDelete('cascade'); - - $table->integer('harga_asli'); // harga sebenarnya, misal: 134000 - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('pakaian'); - } -}; diff --git a/database/migrations/2025_05_24_131238_create_cuaca_table.php b/database/migrations/2025_05_24_131238_create_cuaca_table.php deleted file mode 100644 index 6a2e7ec..0000000 --- a/database/migrations/2025_05_24_131238_create_cuaca_table.php +++ /dev/null @@ -1,29 +0,0 @@ -id(); - $table->string('nama'); - $table->integer('nilai'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('cuaca'); - } -}; diff --git a/database/migrations/2025_05_24_131317_create_warna_table.php b/database/migrations/2025_05_24_131317_create_warna_table.php deleted file mode 100644 index 8517b16..0000000 --- a/database/migrations/2025_05_24_131317_create_warna_table.php +++ /dev/null @@ -1,29 +0,0 @@ -id(); - $table->string('nama'); - $table->integer('nilai'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('warna'); - } -}; diff --git a/database/migrations/2025_05_24_131341_create_jenispakaian_table.php b/database/migrations/2025_05_24_131341_create_jenispakaian_table.php deleted file mode 100644 index a7b991a..0000000 --- a/database/migrations/2025_05_24_131341_create_jenispakaian_table.php +++ /dev/null @@ -1,29 +0,0 @@ -id(); - $table->string('nama'); - $table->integer('nilai'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jenispakaian'); - } -}; diff --git a/database/migrations/2025_05_24_131417_create_jenisacara_table.php b/database/migrations/2025_05_24_131417_create_jenisacara_table.php deleted file mode 100644 index 52cf901..0000000 --- a/database/migrations/2025_05_24_131417_create_jenisacara_table.php +++ /dev/null @@ -1,29 +0,0 @@ -id(); - $table->string('nama'); - $table->integer('nilai'); // bobot untuk SAW - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('jenisacara'); - } -}; diff --git a/database/migrations/2025_03_05_040712_create_dataalternatif_table.php b/database/migrations/2025_05_24_133346_create_kriterias_table.php similarity index 57% rename from database/migrations/2025_03_05_040712_create_dataalternatif_table.php rename to database/migrations/2025_05_24_133346_create_kriterias_table.php index b711588..ce296a7 100644 --- a/database/migrations/2025_03_05_040712_create_dataalternatif_table.php +++ b/database/migrations/2025_05_24_133346_create_kriterias_table.php @@ -11,10 +11,12 @@ return new class extends Migration */ public function up(): void { - Schema::create('dataalternatif', function (Blueprint $table) { + Schema::create('kriterias', function (Blueprint $table) { $table->id(); - $table->string('nama_alternatif'); - $table->foreignId('subkriteria_id')->nullable()->constrained('subkriteria')->onDelete('set null'); + $table->string('nama_kriteria'); + $table->string('kode_kriteria'); + $table->enum('jenis', ['COST', 'BENEFIT']); + $table->float('bobot'); // bobot untuk SAW $table->timestamps(); }); } @@ -24,6 +26,6 @@ return new class extends Migration */ public function down(): void { - Schema::dropIfExists('dataalternatif'); + Schema::dropIfExists('kriterias'); } }; diff --git a/database/migrations/2025_05_24_133401_create_sub_kriterias_table.php b/database/migrations/2025_05_24_133401_create_sub_kriterias_table.php new file mode 100644 index 0000000..b48aac9 --- /dev/null +++ b/database/migrations/2025_05_24_133401_create_sub_kriterias_table.php @@ -0,0 +1,32 @@ +id(); + $table->foreignId('kriteria_id')->constrained()->onDelete('cascade'); + $table->string('nama_sub'); + $table->float('nilai'); // nilai untuk metode SAW + $table->unsignedBigInteger('min_harga')->nullable(); // khusus kriteria harga + $table->unsignedBigInteger('max_harga')->nullable(); // khusus kriteria harga + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sub_kriterias'); + } +}; diff --git a/database/migrations/2025_05_24_131254_create_lokasi_table.php b/database/migrations/2025_05_24_133412_create_pakaians_table.php similarity index 62% rename from database/migrations/2025_05_24_131254_create_lokasi_table.php rename to database/migrations/2025_05_24_133412_create_pakaians_table.php index f80ddce..78f120f 100644 --- a/database/migrations/2025_05_24_131254_create_lokasi_table.php +++ b/database/migrations/2025_05_24_133412_create_pakaians_table.php @@ -11,13 +11,13 @@ return new class extends Migration */ public function up(): void { - Schema::create('lokasi', function (Blueprint $table) { + Schema::create('pakaians', function (Blueprint $table) { $table->id(); - $table->string('nama'); - $table->integer('nilai'); + $table->string('nama_pakaian'); + $table->longText('img'); + $table->unsignedBigInteger('harga'); // harga asli pakaian $table->timestamps(); }); - } /** @@ -25,6 +25,6 @@ return new class extends Migration */ public function down(): void { - Schema::dropIfExists('lokasi'); + Schema::dropIfExists('pakaians'); } }; diff --git a/database/migrations/2025_05_24_131155_create_hargakategori_table.php b/database/migrations/2025_05_24_133426_create_pakaian_sub_kriterias_table.php similarity index 54% rename from database/migrations/2025_05_24_131155_create_hargakategori_table.php rename to database/migrations/2025_05_24_133426_create_pakaian_sub_kriterias_table.php index 9f6f0e0..1bb02cd 100644 --- a/database/migrations/2025_05_24_131155_create_hargakategori_table.php +++ b/database/migrations/2025_05_24_133426_create_pakaian_sub_kriterias_table.php @@ -11,12 +11,13 @@ return new class extends Migration */ public function up(): void { - Schema::create('hargakategori', function (Blueprint $table) { + Schema::create('pakaian_sub_kriterias', function (Blueprint $table) { $table->id(); - $table->integer('min'); // contoh: 80000 - $table->integer('max'); // contoh: 100000 - $table->integer('nilai'); // nilai bobot untuk SAW + $table->foreignId('pakaian_id')->constrained()->onDelete('cascade'); + $table->foreignId('sub_kriteria_id')->constrained()->onDelete('cascade'); $table->timestamps(); + + $table->unique(['pakaian_id', 'sub_kriteria_id']); }); } @@ -25,6 +26,6 @@ return new class extends Migration */ public function down(): void { - Schema::dropIfExists('hargakategori'); + Schema::dropIfExists('pakaian_sub_kriterias'); } }; diff --git a/public/uploads/pakaian/1748104172_Screenshot 2025-04-23 195651.png b/public/uploads/pakaian/1748104172_Screenshot 2025-04-23 195651.png new file mode 100644 index 0000000000000000000000000000000000000000..f05bb4e2a2ce6ff2281fbb869b2d97652932a455 GIT binary patch literal 12898 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 b6n`h}<__(t>g3h46h7cG(i%ZE_Kf`xS~bh{ literal 0 HcmV?d00001 diff --git a/resources/views/admin/layouts/base.blade.php b/resources/views/admin/layouts/base.blade.php index e0f4b09..c9016f5 100644 --- a/resources/views/admin/layouts/base.blade.php +++ b/resources/views/admin/layouts/base.blade.php @@ -13,24 +13,24 @@ V-Person Assistant - @yield('title') - + - + - - + @@ -54,7 +54,7 @@ @@ -68,43 +68,52 @@ - + + + - - - - - - - - - @stack('scripts') - @@ -232,16 +186,15 @@ Admin - + - + - - + + - + - + - + - \ No newline at end of file + diff --git a/resources/views/admin/pages/alternatif/index.blade.php b/resources/views/admin/pages/alternatif/index.blade.php deleted file mode 100644 index d5dfce1..0000000 --- a/resources/views/admin/pages/alternatif/index.blade.php +++ /dev/null @@ -1,677 +0,0 @@ -@extends('admin.layouts.base') - -@section('title', 'Data Alternatif') - -@section('content') - -
-

- Data Alternatif -

-
- -
-
-
- Daftar Data Alternatif -
- -
- - - -
-
-
-
- {{-- Kiri: Dropdown jumlah data --}} -
- - - entries -
- - {{-- Kanan: Search input --}} -
- - - -
- - {{-- Hidden --}} - @if(request('jenis_pakaian')) - - @endif -
-
-
-
-
- - - - - - - - - - - - @php - $no = ($alternatif->currentPage() - 1) * $alternatif->perPage() + 1; - @endphp - @foreach ($alternatif as $key => $item) - - - - - - - - @endforeach - -
NoGambarNama AlternatifJenis PakaianAksi
{{ $no++ }} - @if($item->gambar) - Gambar - @else - Tidak ada gambar - @endif - {{ $item->nama_alternatif }}{{ $item->subkriteria?->nama_subkriteria ?? '-' }} -
- - -
- @csrf - @method('DELETE') - -
-
-
-
- {{ $alternatif->appends(['entries' => request('entries')])->links('vendor.pagination.bootstrap-5') }} -
-
-
-
-
- - - - - -