commit
48ce40d3ca
|
@ -1,154 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use App\Models\DataAlternatif;
|
|
||||||
use App\Models\DataKriteria;
|
|
||||||
use App\Models\Kriteria;
|
|
||||||
use Illuminate\Support\Str;
|
|
||||||
|
|
||||||
class AlternatifController extends Controller
|
|
||||||
{
|
|
||||||
public function indexPage(Request $request)
|
|
||||||
{
|
|
||||||
// Ambil semua subkriteria tanpa filter "Jenis Pakaian"
|
|
||||||
$subkriteria = \App\Models\Subkriteria::where('kriteria_id', 3)->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.');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -5,32 +5,21 @@ namespace App\Http\Controllers\Admin;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Models\DataAlternatif;
|
use App\Models\DataAlternatif;
|
||||||
use App\Models\Kriteria;
|
use App\Models\Kriteria;
|
||||||
|
use App\Models\Pakaian;
|
||||||
use App\Models\Penilaian;
|
use App\Models\Penilaian;
|
||||||
use App\Models\Subkriteria;
|
use App\Models\Subkriteria;
|
||||||
|
use App\Models\SubKriteria as ModelsSubKriteria;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
class DashboardController extends Controller
|
class DashboardController extends Controller
|
||||||
{
|
{
|
||||||
public function indexPage()
|
|
||||||
|
public function index()
|
||||||
{
|
{
|
||||||
// Ambil jumlah data dari masing-masing model
|
$totalPakaian = Pakaian::count();
|
||||||
$totalKriteria = Kriteria::count();
|
$totalKriteria = Kriteria::count();
|
||||||
$totalSubKriteria = Subkriteria::count();
|
$totalSubKriteria = Subkriteria::count();
|
||||||
$totalAlternatif = DataAlternatif::count();
|
|
||||||
$totalPenilaian = Penilaian::count();
|
|
||||||
|
|
||||||
// Ambil salah satu kriteria, misal yang pertama
|
return view("admin.pages.dashboard.index", compact("totalPakaian", "totalKriteria", "totalSubKriteria"));
|
||||||
$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,
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,84 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use App\Models\DataKriteria;
|
|
||||||
use App\Models\Kriteria;
|
|
||||||
use Dflydev\DotAccessData\Data;
|
|
||||||
|
|
||||||
class DataKriteriaController extends Controller
|
|
||||||
{
|
|
||||||
// Menampilkan daftar kriteria
|
|
||||||
public function indexPage()
|
|
||||||
{
|
|
||||||
$kriteria = Kriteria::orderBy('kode_kriteria', 'asc')->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!');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,93 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Models\Penilaian;
|
|
||||||
use App\Models\Alternatif;
|
|
||||||
use App\Models\DataAlternatif;
|
|
||||||
use App\Models\Kriteria;
|
|
||||||
use App\Models\Subkriteria;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class PenilaianController extends Controller
|
|
||||||
{
|
|
||||||
// Menampilkan daftar penilaian
|
|
||||||
public function indexPage(Request $request)
|
|
||||||
{
|
|
||||||
$perPage = $request->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!');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,103 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
use App\Models\DataAlternatif;
|
|
||||||
use App\Models\Kriteria;
|
|
||||||
use App\Models\Penilaian;
|
|
||||||
use App\Models\Subkriteria;
|
|
||||||
|
|
||||||
class PerhitunganController extends Controller
|
|
||||||
{
|
|
||||||
// Method untuk masing-masing jenis pakaian
|
|
||||||
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'); }
|
|
||||||
|
|
||||||
// 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'
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,118 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Http\Controllers\Admin;
|
|
||||||
|
|
||||||
use App\Http\Controllers\Controller;
|
|
||||||
use App\Models\Subkriteria;
|
|
||||||
use App\Models\Kriteria;
|
|
||||||
use Illuminate\Http\Request;
|
|
||||||
|
|
||||||
class SubkriteriaController extends Controller
|
|
||||||
{
|
|
||||||
// Menampilkan data berdasarkan kriteria
|
|
||||||
public function showByKriteria($id)
|
|
||||||
{
|
|
||||||
// Ambil data kriteria berdasarkan ID
|
|
||||||
$kriteria = Kriteria::findOrFail($id);
|
|
||||||
|
|
||||||
// Ambil data subkriteria berdasarkan subkriteria_id, jika menggunakan kolom ini
|
|
||||||
$subkriterias = SubKriteria::where('kriteria_id', $id)->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.');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Kriteria;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use Illuminate\Database\QueryException;
|
||||||
|
|
||||||
|
class KriteriaController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$kriteria = Kriteria::all();
|
||||||
|
return view('admin.pages.kriteria.index', compact('kriteria'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Show the form for creating a new resource.
|
||||||
|
*/
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
return view('admin.pages.kriteria.create');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store a newly created resource in storage.
|
||||||
|
*/
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
// dd($request->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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,129 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Kriteria;
|
||||||
|
use App\Models\Pakaian;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class PakaianController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$kriteria = Kriteria::all();
|
||||||
|
|
||||||
|
// Ambil relasi pakaian dan subkriteria dengan kriteria-nya
|
||||||
|
$query = Pakaian::with(['subKriterias.kriteria']);
|
||||||
|
|
||||||
|
// Filter search nama pakaian
|
||||||
|
if ($request->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)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,114 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Kriteria;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Models\SubKriteria;
|
||||||
|
|
||||||
|
class SubKriteriaController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Display a listing of the resource.
|
||||||
|
*/
|
||||||
|
public function index(Request $request)
|
||||||
|
{
|
||||||
|
$kriteria_id = $request->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.');
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Kriteria;
|
||||||
|
use App\Models\SubKriteria;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class SubKriteriaShowController extends Controller
|
||||||
|
{
|
||||||
|
public function indexShow($nama_kriteria)
|
||||||
|
{
|
||||||
|
$kriteria = Kriteria::where('nama_kriteria', $nama_kriteria)->firstOrFail();
|
||||||
|
$subkriterias = SubKriteria::where('kriteria_id', $kriteria->id)->get();
|
||||||
|
$kriterias = Kriteria::all();
|
||||||
|
return view('admin.pages.subkriteria.index', compact('kriteria', 'subkriterias', 'kriterias'));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,29 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class DataAlternatif extends Model
|
|
||||||
{
|
|
||||||
use HasFactory;
|
|
||||||
protected $table = 'dataalternatif';
|
|
||||||
protected $fillable = ['nama_alternatif', 'subkriteria_id', 'gambar'];
|
|
||||||
|
|
||||||
public function penilaian()
|
|
||||||
{
|
|
||||||
return $this->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');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -8,18 +8,13 @@ use Illuminate\Database\Eloquent\Model;
|
||||||
class Kriteria extends Model
|
class Kriteria extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
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');
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class NilaiAlternatif extends Model
|
|
||||||
{
|
|
||||||
use HasFactory;
|
|
||||||
|
|
||||||
protected $table = 'nilai_alternatif'; // Sesuaikan dengan nama tabel di database
|
|
||||||
|
|
||||||
protected $fillable = ['alternatif_id', 'nilai'];
|
|
||||||
|
|
||||||
public function alternatif()
|
|
||||||
{
|
|
||||||
return $this->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
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,23 +2,20 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||||
|
|
||||||
class Pakaian extends Model
|
class Pakaian extends Model
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
|
|
||||||
protected $table = 'pakaian'; // Nama tabel di database
|
protected $table = 'pakaians';
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = ['nama_pakaian', 'img', 'harga'];
|
||||||
'nama',
|
|
||||||
'jenis_acara',
|
public function subKriterias(): BelongsToMany
|
||||||
'jenis_pakaian',
|
{
|
||||||
'harga',
|
return $this->belongsToMany(SubKriteria::class, 'pakaian_sub_kriterias');
|
||||||
'warna',
|
}
|
||||||
'lokasi',
|
|
||||||
'cuaca',
|
|
||||||
'rating'
|
|
||||||
];
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Models;
|
||||||
|
|
||||||
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
|
||||||
|
class PakaianSubKriteria extends Model
|
||||||
|
{
|
||||||
|
protected $table = 'pakaian_sub_kriterias';
|
||||||
|
|
||||||
|
protected $fillable = ['pakaian_id', 'sub_kriteria_id'];
|
||||||
|
}
|
|
@ -1,32 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class Penilaian extends Model
|
|
||||||
{
|
|
||||||
use HasFactory;
|
|
||||||
protected $table = 'penilaian';
|
|
||||||
protected $fillable = ['alternatif_id', 'kriteria_id', 'subkriteria_id'];
|
|
||||||
|
|
||||||
protected $casts = [
|
|
||||||
'nilai' => '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');
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Models;
|
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
|
||||||
|
|
||||||
class QuizHistory extends Model
|
|
||||||
{
|
|
||||||
use HasFactory;
|
|
||||||
|
|
||||||
protected $table = 'quiz_histories';
|
|
||||||
|
|
||||||
protected $fillable = [
|
|
||||||
'data_kuisioner',
|
|
||||||
'hasil_rekomendasi',
|
|
||||||
];
|
|
||||||
|
|
||||||
protected $casts = [
|
|
||||||
'data_kuisioner' => 'array',
|
|
||||||
'hasil_rekomendasi' => 'array',
|
|
||||||
];
|
|
||||||
}
|
|
|
@ -2,29 +2,26 @@
|
||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
||||||
use Illuminate\Database\Eloquent\Model;
|
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;
|
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');
|
return $this->belongsToMany(Pakaian::class, 'pakaian_sub_kriteria');
|
||||||
}
|
|
||||||
|
|
||||||
public function dataAlternatif()
|
|
||||||
{
|
|
||||||
return $this->hasMany(DataAlternatif::class, 'subkriteria_id');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,8 +21,8 @@ class AppServiceProvider extends ServiceProvider
|
||||||
*/
|
*/
|
||||||
public function boot(): void
|
public function boot(): void
|
||||||
{
|
{
|
||||||
view()->composer('*', function ($view) {
|
// view()->composer('*', function ($view) {
|
||||||
$view->with('semua_kriteria', Kriteria::all());
|
// $view->with('semua_kriteria', Kriteria::all());
|
||||||
});
|
// });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration {
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
Schema::create('datakriteria', function (Blueprint $table) {
|
|
||||||
$table->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');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration
|
|
||||||
{
|
|
||||||
public function up(): void
|
|
||||||
{
|
|
||||||
Schema::create('subkriteria', function (Blueprint $table) {
|
|
||||||
$table->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');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,36 +0,0 @@
|
||||||
<?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('penilaian', function (Blueprint $table) {
|
|
||||||
$table->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');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration {
|
|
||||||
public function up()
|
|
||||||
{
|
|
||||||
Schema::create('pakaian', function (Blueprint $table) {
|
|
||||||
$table->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');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?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::table('dataalternatif', function (Blueprint $table) {
|
|
||||||
$table->string('gambar')->nullable()->after('nama_alternatif');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::table('dataalternatif', function (Blueprint $table) {
|
|
||||||
$table->dropColumn('gambar');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?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->json('data_kuisioner');
|
|
||||||
$table->json('hasil_rekomendasi');
|
|
||||||
$table->timestamps();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('quiz_history');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,38 +0,0 @@
|
||||||
<?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('pakaian', function (Blueprint $table) {
|
|
||||||
$table->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');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?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('cuaca', function (Blueprint $table) {
|
|
||||||
$table->id();
|
|
||||||
$table->string('nama');
|
|
||||||
$table->integer('nilai');
|
|
||||||
$table->timestamps();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('cuaca');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?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('warna', function (Blueprint $table) {
|
|
||||||
$table->id();
|
|
||||||
$table->string('nama');
|
|
||||||
$table->integer('nilai');
|
|
||||||
$table->timestamps();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('warna');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?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('jenispakaian', function (Blueprint $table) {
|
|
||||||
$table->id();
|
|
||||||
$table->string('nama');
|
|
||||||
$table->integer('nilai');
|
|
||||||
$table->timestamps();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('jenispakaian');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,29 +0,0 @@
|
||||||
<?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('jenisacara', function (Blueprint $table) {
|
|
||||||
$table->id();
|
|
||||||
$table->string('nama');
|
|
||||||
$table->integer('nilai'); // bobot untuk SAW
|
|
||||||
$table->timestamps();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
Schema::dropIfExists('jenisacara');
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -11,10 +11,12 @@ return new class extends Migration
|
||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('dataalternatif', function (Blueprint $table) {
|
Schema::create('kriterias', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->string('nama_alternatif');
|
$table->string('nama_kriteria');
|
||||||
$table->foreignId('subkriteria_id')->nullable()->constrained('subkriteria')->onDelete('set null');
|
$table->string('kode_kriteria');
|
||||||
|
$table->enum('jenis', ['COST', 'BENEFIT']);
|
||||||
|
$table->float('bobot'); // bobot untuk SAW
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -24,6 +26,6 @@ return new class extends Migration
|
||||||
*/
|
*/
|
||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::dropIfExists('dataalternatif');
|
Schema::dropIfExists('kriterias');
|
||||||
}
|
}
|
||||||
};
|
};
|
|
@ -0,0 +1,32 @@
|
||||||
|
<?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('sub_kriterias', function (Blueprint $table) {
|
||||||
|
$table->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');
|
||||||
|
}
|
||||||
|
};
|
|
@ -11,13 +11,13 @@ return new class extends Migration
|
||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('lokasi', function (Blueprint $table) {
|
Schema::create('pakaians', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->string('nama');
|
$table->string('nama_pakaian');
|
||||||
$table->integer('nilai');
|
$table->longText('img');
|
||||||
|
$table->unsignedBigInteger('harga'); // harga asli pakaian
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,6 +25,6 @@ return new class extends Migration
|
||||||
*/
|
*/
|
||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::dropIfExists('lokasi');
|
Schema::dropIfExists('pakaians');
|
||||||
}
|
}
|
||||||
};
|
};
|
|
@ -11,12 +11,13 @@ return new class extends Migration
|
||||||
*/
|
*/
|
||||||
public function up(): void
|
public function up(): void
|
||||||
{
|
{
|
||||||
Schema::create('hargakategori', function (Blueprint $table) {
|
Schema::create('pakaian_sub_kriterias', function (Blueprint $table) {
|
||||||
$table->id();
|
$table->id();
|
||||||
$table->integer('min'); // contoh: 80000
|
$table->foreignId('pakaian_id')->constrained()->onDelete('cascade');
|
||||||
$table->integer('max'); // contoh: 100000
|
$table->foreignId('sub_kriteria_id')->constrained()->onDelete('cascade');
|
||||||
$table->integer('nilai'); // nilai bobot untuk SAW
|
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
|
|
||||||
|
$table->unique(['pakaian_id', 'sub_kriteria_id']);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +26,6 @@ return new class extends Migration
|
||||||
*/
|
*/
|
||||||
public function down(): void
|
public function down(): void
|
||||||
{
|
{
|
||||||
Schema::dropIfExists('hargakategori');
|
Schema::dropIfExists('pakaian_sub_kriterias');
|
||||||
}
|
}
|
||||||
};
|
};
|
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
After Width: | Height: | Size: 3.0 KiB |
|
@ -13,24 +13,24 @@
|
||||||
<title>V-Person Assistant - @yield('title')</title>
|
<title>V-Person Assistant - @yield('title')</title>
|
||||||
|
|
||||||
<!-- Custom fonts for this template-->
|
<!-- Custom fonts for this template-->
|
||||||
<link href="{{asset('/assets/vendor/fontawesome-free/css/all.min.css')}}" rel="stylesheet" type="text/css">
|
<link href="{{ asset('/assets/vendor/fontawesome-free/css/all.min.css') }}" rel="stylesheet" type="text/css">
|
||||||
<link
|
<link
|
||||||
href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"
|
href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"
|
||||||
rel="stylesheet">
|
rel="stylesheet">
|
||||||
|
|
||||||
<!-- Custom styles for this template-->
|
<!-- Custom styles for this template-->
|
||||||
<link href="{{asset('/assets/css/sb-admin-2.min.css')}}" rel="stylesheet">
|
<link href="{{ asset('/assets/css/sb-admin-2.min.css') }}" rel="stylesheet">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
.bg-gradient-green {
|
.bg-gradient-green {
|
||||||
background-color: #43a047 !important; /* hijau medium */
|
background-color: #43a047 !important;
|
||||||
background-image: linear-gradient(180deg, #388e3c 10%, #4caf50 100%) !important;
|
/* hijau medium */
|
||||||
background-size: cover;
|
background-image: linear-gradient(180deg, #388e3c 10%, #4caf50 100%) !important;
|
||||||
}
|
background-size: cover;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@
|
||||||
|
|
||||||
<!-- Nav Item - Dashboard -->
|
<!-- Nav Item - Dashboard -->
|
||||||
<li class="nav-item {{ request()->is('dashboard') ? 'active' : '' }}">
|
<li class="nav-item {{ request()->is('dashboard') ? 'active' : '' }}">
|
||||||
<a class="nav-link" href="{{ url('dashboard') }}">
|
<a class="nav-link" href="{{ route('admin.dashboard') }}">
|
||||||
<i class="bi bi-house-door-fill"></i>
|
<i class="bi bi-house-door-fill"></i>
|
||||||
<span>Dashboard</span></a>
|
<span>Dashboard</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -68,37 +68,46 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Nav Item - Data Kriteria -->
|
<!-- Nav Item - Data Kriteria -->
|
||||||
<li class="nav-item {{ request()->is('kriteria') ? 'active' : '' }}">
|
<li class="nav-item {{ request()->is('admin/kriteria') ? 'active' : '' }}">
|
||||||
<a class="nav-link" href="{{ url('kriteria') }}">
|
<a class="nav-link" href="{{ route('admin.kriteria.index') }}">
|
||||||
<i class="bi bi-box"></i>
|
<i class="bi bi-box"></i>
|
||||||
<span>Data Kriteria</span></a>
|
<span>Data Kriteria</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Nav Item - Data Sub Kriteria (Collapse) -->
|
<!-- Nav Item - Data Sub Kriteria (Collapse) -->
|
||||||
<li class="nav-item {{ request()->is('admin/subkriteria/kriteria/*') ? 'active' : '' }}">
|
<li class="nav-item {{ request()->is('admin/subkriteria/kriteria/*') ? 'active' : '' }}">
|
||||||
<a class="nav-link" href="#" data-toggle="collapse" data-target="#collapsePages" aria-expanded="true"
|
<a class="nav-link" href="#" data-toggle="collapse" data-target="#collapsePages"
|
||||||
aria-controls="collapsePages">
|
aria-expanded="true" aria-controls="collapsePages">
|
||||||
<i class="bi bi-boxes"></i>
|
<i class="bi bi-boxes"></i>
|
||||||
<span>Data Sub Kriteria</span>
|
<span>Data Sub Kriteria</span>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<div id="collapsePages" class="collapse {{ request()->is('admin/subkriteria/kriteria/*') ? 'show' : '' }}"
|
<div id="collapsePages"
|
||||||
|
class="collapse {{ request()->is('admin/kriteria/subkriteria/*') ? 'show' : '' }}"
|
||||||
aria-labelledby="headingPages" data-parent="#accordionSidebar">
|
aria-labelledby="headingPages" data-parent="#accordionSidebar">
|
||||||
<div class="bg-white py-2 collapse-inner rounded">
|
<div class="bg-white py-2 collapse-inner rounded">
|
||||||
@foreach ($semua_kriteria as $kriteria)
|
@php
|
||||||
{{-- Loop semua kriteria untuk ditampilkan sebagai submenu --}}
|
use App\Models\Kriteria;
|
||||||
<a class="collapse-item {{ request()->is('admin/subkriteria/kriteria/' . $kriteria->id) ? 'active text-white' : '' }}"
|
$kriterias = Kriteria::with('subKriteria')->get(); // ambil dengan relasi
|
||||||
style="{{ request()->is('admin/subkriteria/kriteria/' . $kriteria->id) ? 'background-color: #064e03;' : '' }}"
|
@endphp
|
||||||
href="{{ route('admin.pages.subkriteria.kriteria', $kriteria->id) }}">
|
<ul>
|
||||||
{{ $kriteria->nama_kriteria }} (C{{ $loop->iteration }})
|
@foreach ($kriterias as $kriteria)
|
||||||
</a>
|
<li>
|
||||||
@endforeach
|
<a href="{{ route('admin.kriteria.subkriteria.index', ['nama_kriteria' => $kriteria->nama_kriteria]) }}">
|
||||||
|
{{ $kriteria->nama_kriteria }}
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
@endforeach
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
let collapseMenu = document.getElementById("collapsePages");
|
let collapseMenu = document.getElementById("collapsePages");
|
||||||
let collapseToggle = document.querySelector("[data-target='#collapsePages']");
|
let collapseToggle = document.querySelector("[data-target='#collapsePages']");
|
||||||
|
|
||||||
|
@ -115,84 +124,29 @@
|
||||||
}, 50); // Delay kecil untuk menghindari efek flicker
|
}, 50); // Delay kecil untuk menghindari efek flicker
|
||||||
|
|
||||||
// Event listener untuk tombol collapse
|
// Event listener untuk tombol collapse
|
||||||
collapseToggle.addEventListener("click", function () {
|
collapseToggle.addEventListener("click", function() {
|
||||||
isOpen = !collapseMenu.classList.contains("show");
|
isOpen = !collapseMenu.classList.contains("show");
|
||||||
localStorage.setItem("collapsePages", isOpen ? "open" : "closed");
|
localStorage.setItem("collapsePages", isOpen ? "open" : "closed");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<!-- Nav Item - Alternatif -->
|
<!-- Nav Item - Alternatif -->
|
||||||
<li class="nav-item {{ request()->is('alternatif') ? 'active' : '' }}">
|
<li class="nav-item {{ request()->is('admin/pakaian') ? 'active' : '' }}">
|
||||||
<a class="nav-link" href="{{ url('alternatif') }}">
|
<a class="nav-link" href="{{ route('admin.pakaian.index') }}">
|
||||||
<i class="bi bi-person-lines-fill"></i>
|
<i class="bi bi-person-lines-fill"></i>
|
||||||
<span>Data Alternatif</span></a>
|
<span>Data Pakaian</span></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Nav Item - Penilaian -->
|
|
||||||
<li class="nav-item {{ request()->is('penilaian') ? 'active' : '' }}">
|
|
||||||
<a class="nav-link" href="{{ url('penilaian') }}">
|
|
||||||
<i class="bi bi-list-ul"></i>
|
|
||||||
<span>Penilaian Alternatif</span></a>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<!-- Nav Item - Perhitungan -->
|
|
||||||
<li class="nav-item {{ request()->is('admin/perhitungan/*') ? 'active' : '' }}">
|
|
||||||
<a class="nav-link" href="#" data-toggle="collapse" data-target="#collapsePerhitungan" aria-expanded="true"
|
|
||||||
aria-controls="collapsePerhitungan">
|
|
||||||
<i class="bi bi-calculator-fill"></i>
|
|
||||||
<span>Perhitungan</span>
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<div id="collapsePerhitungan" class="collapse {{ request()->is('admin/perhitungan/*') ? 'show' : '' }}"
|
|
||||||
aria-labelledby="headingPages" data-psarent="#accordionSidebar">
|
|
||||||
<div class="bg-white py-2 collapse-inner rounded">
|
|
||||||
<a class="collapse-item {{ request()->is('admin/perhitungan/dress') ? 'active' : '' }}" href="{{ route('admin.perhitungan.dress') }}">Dress</a>
|
|
||||||
<a class="collapse-item {{ request()->is('admin/perhitungan/blouse') ? 'active' : '' }}" href="{{ route('admin.perhitungan.blouse') }}">Blouse</a>
|
|
||||||
<a class="collapse-item {{ request()->is('admin/perhitungan/cardigan') ? 'active' : '' }}" href="{{ route('admin.perhitungan.cardigan') }}">Cardigan</a>
|
|
||||||
<a class="collapse-item {{ request()->is('admin/perhitungan/rok') ? 'active' : '' }}" href="{{ route('admin.perhitungan.rok') }}">Rok</a>
|
|
||||||
<a class="collapse-item {{ request()->is('admin/perhitungan/celana') ? 'active' : '' }}" href="{{ route('admin.perhitungan.celana') }}">Celana</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
let collapseMenu = document.getElementById("collapsePerhitungan");
|
|
||||||
let collapseToggle = document.querySelector("[data-target='#collapsePerhitungan']");
|
|
||||||
|
|
||||||
if (!collapseMenu || !collapseToggle) return;
|
|
||||||
|
|
||||||
// Cek status collapse di localStorage
|
|
||||||
let isOpen = localStorage.getItem("collapsePerhitungan") === "open";
|
|
||||||
|
|
||||||
// Tunggu sebentar sebelum menyesuaikan tampilan
|
|
||||||
setTimeout(() => {
|
|
||||||
if (isOpen) {
|
|
||||||
collapseMenu.classList.add("show");
|
|
||||||
} else {
|
|
||||||
collapseMenu.classList.remove("show");
|
|
||||||
}
|
|
||||||
}, 50);
|
|
||||||
|
|
||||||
// Event listener untuk toggle
|
|
||||||
collapseToggle.addEventListener("click", function () {
|
|
||||||
let willOpen = !collapseMenu.classList.contains("show");
|
|
||||||
localStorage.setItem("collapsePerhitungan", willOpen ? "open" : "closed");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Nav Item - Hasil Akhir -->
|
<!-- Nav Item - Hasil Akhir -->
|
||||||
<li class="nav-item {{ request()->is('admin/riwayat') ? 'active' : '' }}">
|
<li class="nav-item {{ request()->is('admin/riwayat') ? 'active' : '' }}">
|
||||||
<a class="nav-link" href="{{ route('admin.riwayat.index') }}">
|
<a class="nav-link" href="#">
|
||||||
<i class="bi bi-hourglass-split"></i>
|
<i class="bi bi-hourglass-split"></i>
|
||||||
<span>Riwayat</span>
|
<span>Riwayat</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@stack('scripts')
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Divider -->
|
<!-- Divider -->
|
||||||
|
@ -232,16 +186,15 @@
|
||||||
<span class="mr-2 d-none d-lg-inline text-gray-600 small">
|
<span class="mr-2 d-none d-lg-inline text-gray-600 small">
|
||||||
Admin
|
Admin
|
||||||
</span>
|
</span>
|
||||||
<img class="img-profile rounded-circle"
|
<img class="img-profile rounded-circle" src="{{ asset('/assets/img/profile.svg') }}">
|
||||||
src="{{ asset('/assets/img/profile.svg') }}">
|
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<!-- Dropdown - User Information -->
|
<!-- Dropdown - User Information -->
|
||||||
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
<div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
|
||||||
aria-labelledby="userDropdown">
|
aria-labelledby="userDropdown">
|
||||||
|
|
||||||
<!-- Profile Link -->
|
<!-- Profile Link -->
|
||||||
<a class="dropdown-item" href="{{ route('user.show', Auth::user()->id) }}">
|
<a class="dropdown-item" href="#">
|
||||||
<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>
|
||||||
|
@ -294,44 +247,45 @@
|
||||||
|
|
||||||
<!-- Logout Modal-->
|
<!-- Logout Modal-->
|
||||||
<div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="logoutModalLabel"
|
<div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="logoutModalLabel"
|
||||||
aria-hidden="true">
|
aria-hidden="true">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog" role="document">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title" id="logoutModalLabel">Apakah Anda yakin ingin keluar?</h5>
|
<h5 class="modal-title" id="logoutModalLabel">Apakah Anda yakin ingin keluar?</h5>
|
||||||
<button class="close" type="button" data-dismiss="modal" aria-label="Close">
|
<button class="close" type="button" data-dismiss="modal" aria-label="Close">
|
||||||
<span aria-hidden="true">×</span>
|
<span aria-hidden="true">×</span>
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
Pilih "Logout" di bawah ini jika anda siap mengakhiri sesi anda
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button class="btn btn-secondary" type="button" data-dismiss="modal"
|
|
||||||
style="background-color: #90ee90; color: black; border-color: #90ee90;">
|
|
||||||
Batal
|
|
||||||
</button>
|
|
||||||
<form action="{{ route('logout') }}" method="POST" class="d-inline">
|
|
||||||
@csrf
|
|
||||||
<button type="submit" class="btn" style="background-color: #064e03; border-color: #064e03; color: white;">
|
|
||||||
Logout
|
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
Pilih "Logout" di bawah ini jika anda siap mengakhiri sesi anda
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button class="btn btn-secondary" type="button" data-dismiss="modal"
|
||||||
|
style="background-color: #90ee90; color: black; border-color: #90ee90;">
|
||||||
|
Batal
|
||||||
|
</button>
|
||||||
|
<form action="{{ route('logout') }}" method="POST" class="d-inline">
|
||||||
|
@csrf
|
||||||
|
<button type="submit" class="btn"
|
||||||
|
style="background-color: #064e03; border-color: #064e03; color: white;">
|
||||||
|
Logout
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Bootstrap core JavaScript-->
|
<!-- Bootstrap core JavaScript-->
|
||||||
<script src="{{asset('/assets/vendor/jquery/jquery.min.js')}}"></script>
|
<script src="{{ asset('/assets/vendor/jquery/jquery.min.js') }}"></script>
|
||||||
<script src="{{asset('/assets/vendor/bootstrap/js/bootstrap.bundle.min.js')}}"></script>
|
<script src="{{ asset('/assets/vendor/bootstrap/js/bootstrap.bundle.min.js') }}"></script>
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css">
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons/font/bootstrap-icons.css">
|
||||||
|
|
||||||
<!-- Core plugin JavaScript-->
|
<!-- Core plugin JavaScript-->
|
||||||
<script src="{{asset('/assets/vendor/jquery-easing/jquery.easing.min.js')}}"></script>
|
<script src="{{ asset('/assets/vendor/jquery-easing/jquery.easing.min.js') }}"></script>
|
||||||
|
|
||||||
<!-- Custom scripts for all pages-->
|
<!-- Custom scripts for all pages-->
|
||||||
<script src="{{asset('/assets/js/sb-admin-2.min.js')}}"></script>
|
<script src="{{ asset('/assets/js/sb-admin-2.min.js') }}"></script>
|
||||||
|
|
||||||
<!-- jQuery -->
|
<!-- jQuery -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
||||||
|
|
|
@ -1,677 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Alternatif')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Alternatif
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold" style="color: #064E3B;">
|
|
||||||
<i class="bi bi-table"></i> Daftar Data Alternatif
|
|
||||||
</h6>
|
|
||||||
<button type="button" class="btn" style="background-color: #064E3B; color: white;" data-bs-toggle="modal" data-bs-target="#modalTambah">
|
|
||||||
<i></i> Tambah Data
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.label-spacing {
|
|
||||||
margin-right: 0.3rem; /* Jarak antara label dan select */
|
|
||||||
}
|
|
||||||
.search-input {
|
|
||||||
width: 200px; /* Lebar input search */
|
|
||||||
}
|
|
||||||
.justify-between {
|
|
||||||
justify-content: space-between;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination {
|
|
||||||
display: flex;
|
|
||||||
justify-content: flex-end; /* Geser ke pojok kanan */
|
|
||||||
align-items: center;
|
|
||||||
padding: 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination .page-item .page-link {
|
|
||||||
font-size: 14px;
|
|
||||||
padding: 6px 12px;
|
|
||||||
border-radius: 5px;
|
|
||||||
border: none;
|
|
||||||
color: white;
|
|
||||||
background-color: #064E3B; /* Warna biru */
|
|
||||||
margin: 0 2px;
|
|
||||||
transition: 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination .page-item.active .page-link {
|
|
||||||
background-color: #053B2D; /* Biru lebih gelap */
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination .page-item .page-link:hover {
|
|
||||||
background-color: #046C4E;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pagination .page-item.disabled .page-link {
|
|
||||||
background-color: #e9ecef;
|
|
||||||
color: #6c757d;
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entries-form {
|
|
||||||
display: flex;
|
|
||||||
justify-content: space-between;
|
|
||||||
align-items: center;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: 1rem;
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entries-left,
|
|
||||||
.entries-right {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: 0.5rem;
|
|
||||||
font-size: 14px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entries-left label,
|
|
||||||
.entries-right label {
|
|
||||||
margin: 0;
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entries-left select,
|
|
||||||
.entries-right input[type="text"] {
|
|
||||||
padding: 4px 8px;
|
|
||||||
height: 32px;
|
|
||||||
font-size: 14px;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entries-right button {
|
|
||||||
height: 32px;
|
|
||||||
padding: 0 12px;
|
|
||||||
font-size: 14px;
|
|
||||||
background-color: #007bff;
|
|
||||||
color: #fff;
|
|
||||||
border: none;
|
|
||||||
border-radius: 4px;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
|
|
||||||
.entries-right button:hover {
|
|
||||||
background-color: #0056b3;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="d-flex align-items-center justify-between mb-3">
|
|
||||||
<div class="d-flex align-items-center">
|
|
||||||
<form method="GET" id="entriesForm" action="{{ route('admin.alternatif.index') }}" class="entries-form mb-3" style="display: flex; justify-content: space-between; align-items: center;">
|
|
||||||
{{-- Kiri: Dropdown jumlah data --}}
|
|
||||||
<div class="entries-left">
|
|
||||||
<label for="entriesPerPage">Show</label>
|
|
||||||
<select name="entries" id="entriesPerPage" onchange="document.getElementById('entriesForm').submit()">
|
|
||||||
<option value="10" {{ request('entries') == 10 ? 'selected' : '' }}>10</option>
|
|
||||||
<option value="25" {{ request('entries') == 25 ? 'selected' : '' }}>25</option>
|
|
||||||
<option value="50" {{ request('entries') == 50 ? 'selected' : '' }}>50</option>
|
|
||||||
</select>
|
|
||||||
<span>entries</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- Kanan: Search input --}}
|
|
||||||
<div class="entries-right" style="display: flex; align-items: center; gap: 0.5rem;">
|
|
||||||
<label for="search" class="me-2">Search:</label>
|
|
||||||
<input type="text" name="search" id="search" placeholder="Search..." value="{{ request('search') }}">
|
|
||||||
<button type="submit">Cari</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{{-- Hidden --}}
|
|
||||||
@if(request('jenis_pakaian'))
|
|
||||||
<input type="hidden" name="jenis_pakaian" value="{{ request('jenis_pakaian') }}">
|
|
||||||
@endif
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Gambar</th>
|
|
||||||
<th class="text-center">Nama Alternatif</th>
|
|
||||||
<th class="text-center">Jenis Pakaian</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="tableBody">
|
|
||||||
@php
|
|
||||||
$no = ($alternatif->currentPage() - 1) * $alternatif->perPage() + 1;
|
|
||||||
@endphp
|
|
||||||
@foreach ($alternatif as $key => $item)
|
|
||||||
<tr class="data-row">
|
|
||||||
<td class="text-center">{{ $no++ }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
@if($item->gambar)
|
|
||||||
<img src="{{ asset($item->gambar) }}" alt="Gambar" style="max-width: 100px; max-height: 100px;">
|
|
||||||
@else
|
|
||||||
Tidak ada gambar
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
<td class="text-center data-item">{{ $item->nama_alternatif }}</td>
|
|
||||||
<td class="text-center">{{ $item->subkriteria?->nama_subkriteria ?? '-' }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn btn-primary btn-sm edit-btn"
|
|
||||||
data-id="{{ $item->id }}"
|
|
||||||
data-nama="{{ $item->nama_alternatif }}"
|
|
||||||
data-subkriteria="{{ $item->subkriteria_id }}"
|
|
||||||
data-gambar="{{ $item->gambar }}"
|
|
||||||
data-bs-toggle="modal"
|
|
||||||
data-bs-target="#modalEdit">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form action="{{ route('admin.alternatif.destroy', $item->id) }}" method="POST" class="delete-form">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="button" class="btn btn-danger btn-sm delete-button" data-id="{{ $item->id }}">
|
|
||||||
<i class="bi bi-trash"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="d-flex justify-content-end">
|
|
||||||
{{ $alternatif->appends(['entries' => request('entries')])->links('vendor.pagination.bootstrap-5') }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Tambah Data Alternatif -->
|
|
||||||
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<!-- Header Modal -->
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalTambahLabel">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Alternatif
|
|
||||||
</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Body Modal -->
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('admin.alternatif.store') }}" method="POST" enctype="multipart/form-data">
|
|
||||||
@csrf
|
|
||||||
<!-- Nama Alternatif -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nama_alternatif" class="form-label">Nama Alternatif</label>
|
|
||||||
<input type="text" class="form-control" id="nama_alternatif" name="nama_alternatif" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Jenis Pakaian -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="subkriteria_id" class="form-label fw-bold">Jenis Pakaian</label>
|
|
||||||
<select name="subkriteria_id" id="subkriteria_id" class="form-control" required>
|
|
||||||
<option value="">Pilih Jenis Pakaian</option>
|
|
||||||
@foreach ($subkriteria as $sub)
|
|
||||||
<option value="{{ $sub->id }}">{{ $sub->nama_subkriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Upload Gambar -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="gambar" class="form-label">Upload Gambar</label>
|
|
||||||
<input type="file" class="form-control" id="gambar" name="gambar" accept="image/*">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Simpan & Batal -->
|
|
||||||
<div class="d-flex justify-content-end" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn" style="background-color: #90ee90; color: black;" data-bs-dismiss="modal">
|
|
||||||
Batal
|
|
||||||
</button>
|
|
||||||
<button type="submit" class="btn" style="background-color: #064E3B; color: white;">
|
|
||||||
Simpan
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Edit -->
|
|
||||||
<div class="modal fade" id="modalEdit" tabindex="-1" aria-labelledby="modalEditLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog modal-lg"> <!-- Tambahkan modal-lg -->
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalEditLabel">Edit Data Alternatif</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<form id="formEdit" method="POST" enctype="multipart/form-data" action="">
|
|
||||||
@csrf
|
|
||||||
@method('PUT')
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" id="edit_id" name="id">
|
|
||||||
|
|
||||||
<!-- Nama Alternatif -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nama_alternatif" class="form-label">Nama Alternatif</label>
|
|
||||||
<input type="text" id="edit_nama_alternatif" name="nama_alternatif" class="form-control">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Jenis Pakaian -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_subkriteria_id" class="form-label fw-bold">Jenis Pakaian</label>
|
|
||||||
<select name="subkriteria_id" id="edit_subkriteria_id" class="form-control" required>
|
|
||||||
<option value="">Pilih Jenis Pakaian</option>
|
|
||||||
@foreach ($subkriteria as $sub)
|
|
||||||
<option value="{{ $sub->id }}">{{ $sub->nama_subkriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Upload Gambar -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_gambar" class="form-label">Upload Gambar</label>
|
|
||||||
<input type="file" name="gambar" id="edit_gambar" class="form-control">
|
|
||||||
|
|
||||||
<!-- Tampilkan gambar lama -->
|
|
||||||
<div id="preview_gambar_lama" class="mt-2">
|
|
||||||
<img src="" id="gambar_lama" alt="Gambar Lama" width="120">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn" style="background-color: #90ee90; color: black;" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn" style="background-color: #064E3B; color: white;">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.edit-btn', function () {
|
|
||||||
let id = $(this).data('id');
|
|
||||||
let nama = $(this).data('nama');
|
|
||||||
let subkriteria = $(this).data('subkriteria');
|
|
||||||
let gambar = $(this).data('gambar');
|
|
||||||
|
|
||||||
$('#edit_id').val(id);
|
|
||||||
$('#edit_nama_alternatif').val(nama);
|
|
||||||
$('#edit_subkriteria_id').val(subkriteria);
|
|
||||||
$('#gambar_lama').attr('src', '/' + gambar);
|
|
||||||
|
|
||||||
// Set action URL dinamis
|
|
||||||
$('#formEdit').attr('action', '{{ route("admin.alternatif.update", ":id") }}'.replace(':id', id));
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
|
|
||||||
$('#formEdit').on('submit', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
let form = $(this)[0];
|
|
||||||
let data = new FormData(form);
|
|
||||||
let actionUrl = $(this).attr('action');
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: actionUrl,
|
|
||||||
type: 'POST',
|
|
||||||
data: data,
|
|
||||||
processData: false,
|
|
||||||
contentType: false,
|
|
||||||
success: function (res) {
|
|
||||||
// alert(res.message); // Dihapus agar tidak muncul pop-up
|
|
||||||
$('#modalEdit').modal('hide');
|
|
||||||
location.reload(); // Bisa diganti dengan update DOM jika tidak ingin reload
|
|
||||||
},
|
|
||||||
error: function (xhr) {
|
|
||||||
alert("Gagal mengubah data.");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$('#modalEdit').on('show.bs.modal', function (event) {
|
|
||||||
const button = $(event.relatedTarget);
|
|
||||||
|
|
||||||
const id = button.data('id');
|
|
||||||
const nama = button.data('nama');
|
|
||||||
const subkriteria = button.data('subkriteria-id');
|
|
||||||
|
|
||||||
// Isi form
|
|
||||||
$('#edit_id').val(id);
|
|
||||||
$('#edit_nama_alternatif').val(nama);
|
|
||||||
$('#edit_subkriteria_id').val(subkriteria);
|
|
||||||
|
|
||||||
// Ubah action-nya
|
|
||||||
$('#formEdit').attr('action', '/alternatif/' + id);
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
const editButtons = document.querySelectorAll(".edit-btn");
|
|
||||||
const formEdit = document.getElementById("formEdit");
|
|
||||||
|
|
||||||
editButtons.forEach(button => {
|
|
||||||
button.addEventListener("click", function () {
|
|
||||||
const id = this.dataset.id;
|
|
||||||
const nama = this.dataset.nama;
|
|
||||||
const subkriteria = this.dataset.subkriteria;
|
|
||||||
|
|
||||||
document.getElementById("edit_id").value = id;
|
|
||||||
document.getElementById("edit_nama_alternatif").value = nama;
|
|
||||||
document.getElementById("edit_subkriteria_id").value = subkriteria;
|
|
||||||
|
|
||||||
// ⬇️ Perhatikan ini: Sesuaikan dengan route manual kamu
|
|
||||||
formEdit.action = `/alternatif/${id}`;
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
const modal = new bootstrap.Modal(document.getElementById("modalEdit"));
|
|
||||||
modal.show();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
let editButtons = document.querySelectorAll(".edit-btn");
|
|
||||||
|
|
||||||
editButtons.forEach(function (button) {
|
|
||||||
button.addEventListener("click", function () {
|
|
||||||
// Ambil data dari tombol
|
|
||||||
let id = this.getAttribute("data-id");
|
|
||||||
let nama = this.getAttribute("data-nama");
|
|
||||||
let subkriteriaId = this.getAttribute("data-subkriteria");
|
|
||||||
|
|
||||||
// Isi form di modal
|
|
||||||
document.getElementById("edit_id").value = id;
|
|
||||||
document.getElementById("edit_nama_alternatif").value = nama;
|
|
||||||
document.getElementById("edit_subkriteria_id").value = subkriteriaId;
|
|
||||||
|
|
||||||
// Ubah action form ke /alternatif/{id}
|
|
||||||
document.getElementById("formEdit").action = "/alternatif/" + id;
|
|
||||||
|
|
||||||
// Tampilkan modal (kalau pakai Bootstrap 5)
|
|
||||||
let modal = new bootstrap.Modal(document.getElementById('modalEdit'));
|
|
||||||
modal.show();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function updateEntries() {
|
|
||||||
let selectedValue = document.getElementById("entriesPerPage").value;
|
|
||||||
let url = new URL(window.location.href);
|
|
||||||
url.searchParams.set("entries", selectedValue);
|
|
||||||
window.location.href = url.toString();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function searchFunction() {
|
|
||||||
let input = document.getElementById('search').value.toLowerCase();
|
|
||||||
let rows = document.querySelectorAll('.data-row');
|
|
||||||
|
|
||||||
rows.forEach(row => {
|
|
||||||
let text = row.querySelector('.data-item').textContent.toLowerCase();
|
|
||||||
row.style.display = text.includes(input) ? "" : "none";
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
// Ambil semua tombol dengan class "edit-btn"
|
|
||||||
let editButtons = document.querySelectorAll(".edit-btn");
|
|
||||||
|
|
||||||
editButtons.forEach(function (button) {
|
|
||||||
button.addEventListener("click", function () {
|
|
||||||
// Ambil data dari atribut data-*
|
|
||||||
let id = this.getAttribute("data-id");
|
|
||||||
let nama = this.getAttribute("data-nama");
|
|
||||||
let subkriteriaId = this.getAttribute("data-subkriteria");
|
|
||||||
|
|
||||||
// Set nilai input di modal
|
|
||||||
document.getElementById("edit_id").value = id;
|
|
||||||
document.getElementById("edit_nama_alternatif").value = nama;
|
|
||||||
|
|
||||||
// Set dropdown "Jenis Pakaian"
|
|
||||||
let dropdown = document.getElementById("edit_subkriteria_id");
|
|
||||||
for (let i = 0; i < dropdown.options.length; i++) {
|
|
||||||
if (dropdown.options[i].value == subkriteriaId) {
|
|
||||||
dropdown.options[i].selected = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set action form ke URL update
|
|
||||||
document.getElementById("formEdit").action = "/alternatif/" + id;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-edit', function() {
|
|
||||||
var id = $(this).data('id');
|
|
||||||
$.get("/admin/dataalternatif/" + id + "/edit", function(data) {
|
|
||||||
$('#edit_id').val(data.id);
|
|
||||||
$('#edit_nama_alternatif').val(data.nama_alternatif);
|
|
||||||
|
|
||||||
// Update form action agar konsisten
|
|
||||||
$('#formEdit').attr('action', '/admin/dataalternatif/' + id);
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$('#modalEdit').on('show.bs.modal', function (event) {
|
|
||||||
let button = $(event.relatedTarget);
|
|
||||||
let id = button.data('id'); // Pastikan tombol punya data-id
|
|
||||||
let nama = button.data('nama');
|
|
||||||
let subkriteria_id = button.data('subkriteria');
|
|
||||||
let gambar = button.data('gambar'); // Optional
|
|
||||||
|
|
||||||
let modal = $(this);
|
|
||||||
modal.find('#edit_id').val(id);
|
|
||||||
modal.find('#edit_nama_alternatif').val(nama);
|
|
||||||
modal.find('#edit_subkriteria_id').val(subkriteria_id);
|
|
||||||
|
|
||||||
// Set form action URL (pastikan sesuai route update)
|
|
||||||
$('#formEdit').attr('action', '/admin/alternatif/' + id);
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function () {
|
|
||||||
let editButtons = document.querySelectorAll(".edit-btn");
|
|
||||||
|
|
||||||
editButtons.forEach(function (button) {
|
|
||||||
button.addEventListener("click", function () {
|
|
||||||
let id = this.getAttribute("data-id");
|
|
||||||
let nama = this.getAttribute("data-nama"); // Ambil nama alternatif dari tombol
|
|
||||||
|
|
||||||
// Masukkan data ke input di modal
|
|
||||||
document.getElementById("edit_nama_alternatif").value = nama || ""; // Jangan biarkan NULL
|
|
||||||
document.getElementById("formEdit").action = "/alternatif/" + id;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.getElementById("filterKriteria").addEventListener("change", function() {
|
|
||||||
let selectedValue = this.value;
|
|
||||||
let rows = document.querySelectorAll(".data-row");
|
|
||||||
|
|
||||||
rows.forEach(row => {
|
|
||||||
if (selectedValue === "" || row.dataset.kriteriaId === selectedValue) {
|
|
||||||
row.style.display = "";
|
|
||||||
} else {
|
|
||||||
row.style.display = "none";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).ready(function () {
|
|
||||||
// Form Edit Data
|
|
||||||
$('#formEdit').submit(function (event) {
|
|
||||||
event.preventDefault(); // Mencegah reload halaman
|
|
||||||
|
|
||||||
let form = $(this);
|
|
||||||
let url = form.attr('action');
|
|
||||||
let formData = form.serialize(); // Ambil data form
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: url,
|
|
||||||
type: "POST",
|
|
||||||
data: formData,
|
|
||||||
dataType: "json",
|
|
||||||
success: function (response) {
|
|
||||||
console.log("Respon dari server:", response); // Debugging
|
|
||||||
|
|
||||||
if (response.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: response.message || 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'error',
|
|
||||||
title: 'Gagal!',
|
|
||||||
text: response.message || "Data tidak dapat diperbarui.",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function (xhr) {
|
|
||||||
console.log("Error AJAX:", xhr.responseText);
|
|
||||||
|
|
||||||
let errorMsg = "Terjadi kesalahan!";
|
|
||||||
if (xhr.responseJSON && xhr.responseJSON.message) {
|
|
||||||
errorMsg = xhr.responseJSON.message;
|
|
||||||
}
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'error',
|
|
||||||
title: 'Oops...',
|
|
||||||
text: errorMsg,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
$(document).on('click', '.delete-button', function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
let button = $(this);
|
|
||||||
let form = button.closest('form');
|
|
||||||
let url = form.attr('action');
|
|
||||||
let row = button.closest('tr'); // Ambil elemen baris yang ingin dihapus
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah Anda yakin?",
|
|
||||||
text: "Data yang dihapus tidak dapat dikembalikan!",
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#d33",
|
|
||||||
cancelButtonColor: "#3085d6",
|
|
||||||
confirmButtonText: "Ya, hapus!",
|
|
||||||
cancelButtonText: "Batal"
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
$.ajax({
|
|
||||||
url: url,
|
|
||||||
type: "POST",
|
|
||||||
data: {
|
|
||||||
_method: "DELETE",
|
|
||||||
_token: $('meta[name="csrf-token"]').attr('content')
|
|
||||||
},
|
|
||||||
success: function (data) {
|
|
||||||
if (data.success) {
|
|
||||||
// Animasi fade out sebelum elemen dihapus
|
|
||||||
row.fadeOut(300, function () {
|
|
||||||
$(this).remove();
|
|
||||||
updateRowNumbers(); // Update nomor setelah dihapus
|
|
||||||
});
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Data Terhapus!',
|
|
||||||
text: 'Data berhasil dihapus.',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat dihapus.", "error");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error: function () {
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat menghapus data.", "error");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Fungsi untuk memperbarui nomor urut setelah data dihapus
|
|
||||||
function updateRowNumbers() {
|
|
||||||
$('tbody tr').each(function (index) {
|
|
||||||
$(this).find('td:first').text(index + 1);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
// Tampilkan SweetAlert jika ada session success
|
|
||||||
let successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage && successMessage.trim() !== "") {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: successMessage,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -68,7 +68,7 @@
|
||||||
|
|
||||||
<!-- Data Kriteria -->
|
<!-- Data Kriteria -->
|
||||||
<div class="col-xl-4 col-md-6 mb-4">
|
<div class="col-xl-4 col-md-6 mb-4">
|
||||||
<a href="{{ route('admin.kriteria.index') }}" class="card-link">
|
<a href="#">
|
||||||
<div class="card border-left-primary shadow h-100 py-2">
|
<div class="card border-left-primary shadow h-100 py-2">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
|
|
||||||
<!-- Data Sub Kriteria -->
|
<!-- Data Sub Kriteria -->
|
||||||
<div class="col-xl-4 col-md-6 mb-4">
|
<div class="col-xl-4 col-md-6 mb-4">
|
||||||
<a href="{{ $kriteriaId ? route('admin.pages.subkriteria.kriteria', ['id' => $kriteriaId]) : '#' }}" class="card-link">
|
<a href="#">
|
||||||
<div class="card border-left-info shadow h-100 py-2">
|
<div class="card border-left-info shadow h-100 py-2">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
|
@ -100,12 +100,12 @@
|
||||||
|
|
||||||
<!-- Data Alternatif -->
|
<!-- Data Alternatif -->
|
||||||
<div class="col-xl-4 col-md-6 mb-4">
|
<div class="col-xl-4 col-md-6 mb-4">
|
||||||
<a href="{{ route('admin.alternatif.index') }}" class="text-decoration-none">
|
<a href="#" class="text-decoration-none">
|
||||||
<div class="card border-left-success shadow h-100 py-2">
|
<div class="card border-left-success shadow h-100 py-2">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
<div class="d-flex justify-content-between align-items-center">
|
<div class="d-flex justify-content-between align-items-center">
|
||||||
<span class="h5 mb-0 font-weight-bold text-gray-800 underline-on-hover">
|
<span class="h5 mb-0 font-weight-bold text-gray-800 underline-on-hover">
|
||||||
Data Alternatif: {{ $totalAlternatif }}
|
Data Alternatif: {{ $totalPakaian }}
|
||||||
</span>
|
</span>
|
||||||
<i class="bi bi-person-lines-fill text-gray-400" style="font-size: 1.5rem;"></i>
|
<i class="bi bi-person-lines-fill text-gray-400" style="font-size: 1.5rem;"></i>
|
||||||
</div>
|
</div>
|
||||||
|
@ -114,7 +114,7 @@
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Data Penilaian -->
|
{{-- <!-- Data Penilaian -->
|
||||||
<div class="col-xl-4 col-md-6 mb-4">
|
<div class="col-xl-4 col-md-6 mb-4">
|
||||||
<a href="{{ route('admin.penilaian.index') }}" style="text-decoration: none;">
|
<a href="{{ route('admin.penilaian.index') }}" style="text-decoration: none;">
|
||||||
<div class="card border-left-secondary shadow h-100 py-2">
|
<div class="card border-left-secondary shadow h-100 py-2">
|
||||||
|
@ -150,7 +150,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div> --}}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@endsection
|
@endsection
|
|
@ -3,61 +3,64 @@
|
||||||
@section('title', 'Tambah Data Kriteria')
|
@section('title', 'Tambah Data Kriteria')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<h1 class="h3 mb-4 text-grey-800">
|
<h1 class="h3 mb-4 text-grey-800">
|
||||||
<i class="bi bi-database"></i> Data Kriteria
|
<i class="bi bi-database"></i> Data Kriteria
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
<div class="card shadow mb-4">
|
||||||
<div class="card-header bg-white d-flex justify-content-between align-items-center">
|
<div class="card-header bg-white d-flex justify-content-between align-items-center">
|
||||||
<span style="color: #006400;" class="fw-bold">
|
<span style="color: #006400;" class="fw-bold">
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Data Kriteria
|
<i class="bi bi-plus-circle"></i> Tambah Data Kriteria
|
||||||
</span>
|
</span>
|
||||||
<a href="{{ route('admin.kriteria.index') }}" class="btn" style="background-color: #90ee90; border-color: #90ee90; color: black;">
|
<a href="{{ route('admin.kriteria.index') }}" class="btn"
|
||||||
<i class="bi bi-arrow-left"></i> Kembali
|
style="background-color: #90ee90; border-color: #90ee90; color: black;">
|
||||||
</a>
|
<i class="bi bi-arrow-left"></i> Kembali
|
||||||
</div>
|
</a>
|
||||||
<div class="card-body">
|
</div>
|
||||||
@if ($errors->any())
|
<div class="card-body">
|
||||||
<div class="alert alert-danger">
|
@if ($errors->any())
|
||||||
<ul>
|
<div class="alert alert-danger">
|
||||||
@foreach ($errors->all() as $error)
|
<ul>
|
||||||
<li>{{ $error }}</li>
|
@foreach ($errors->all() as $error)
|
||||||
@endforeach
|
<li>{{ $error }}</li>
|
||||||
</ul>
|
@endforeach
|
||||||
</div>
|
</ul>
|
||||||
@endif
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
<form action="{{ route('admin.kriteria.store') }}" method="POST">
|
<form action="{{ route('admin.kriteria.store') }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-6 mb-3">
|
<div class="col-md-6 mb-3">
|
||||||
<label for="kode_kriteria" class="form-label">Kode Kriteria</label>
|
<label for="kode_kriteria" class="form-label">Kode Kriteria</label>
|
||||||
<input type="text" class="form-control" id="kode_kriteria" name="kode_kriteria" required>
|
<input type="text" class="form-control" id="kode_kriteria" name="kode_kriteria" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="nama_kriteria" class="form-label">Nama Kriteria</label>
|
||||||
|
<input type="text" class="form-control" id="nama_kriteria" name="nama_kriteria" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="bobot" class="form-label">Bobot</label>
|
||||||
|
<input type="number" step="0.01" class="form-control" id="bobot" name="bobot" required>
|
||||||
|
</div>
|
||||||
|
<div class="col-md-6 mb-3">
|
||||||
|
<label for="jenis" class="form-label">Jenis</label>
|
||||||
|
<select class="form-control" id="jenis" name="jenis" required>
|
||||||
|
<option value="" selected disabled>--Pilih Jenis--</option>
|
||||||
|
<option value="BENEFIT">Benefit</option>
|
||||||
|
<option value="COST">Cost</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-md-6 mb-3">
|
<button type="submit" class="btn me-3"
|
||||||
<label for="nama_kriteria" class="form-label">Nama Kriteria</label>
|
style="background-color: #006400; border-color: #006400; color: white;">
|
||||||
<input type="text" class="form-control" id="nama_kriteria" name="nama_kriteria" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 mb-3">
|
|
||||||
<label for="bobot" class="form-label">Bobot</label>
|
|
||||||
<input type="number" step="0.01" class="form-control" id="bobot" name="bobot" required>
|
|
||||||
</div>
|
|
||||||
<div class="col-md-6 mb-3">
|
|
||||||
<label for="jenis" class="form-label">Jenis</label>
|
|
||||||
<select class="form-control" id="jenis" name="jenis" required>
|
|
||||||
<option value="" selected disabled>--Pilih Jenis--</option>
|
|
||||||
<option value="Benefit">Benefit</option>
|
|
||||||
<option value="Cost">Cost</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="btn me-3" style="background-color: #006400; border-color: #006400; color: white;">
|
|
||||||
<i></i> Simpan
|
<i></i> Simpan
|
||||||
</button>
|
</button>
|
||||||
<button type="reset" class="btn" style="background-color: #90ee90; border-color: #90ee90; color: black; margin-left: 10px;">
|
<button type="reset" class="btn"
|
||||||
|
style="background-color: #90ee90; border-color: #90ee90; color: black; margin-left: 10px;">
|
||||||
<i class="bi bi-arrow-clockwise"></i> Reset
|
<i class="bi bi-arrow-clockwise"></i> Reset
|
||||||
</button>
|
</button>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
@ -3,53 +3,59 @@
|
||||||
@section('title', 'Edit Data Kriteria')
|
@section('title', 'Edit Data Kriteria')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
<h1 class="h3 text-grey-800">
|
<h1 class="h3 text-grey-800">
|
||||||
<i class="bi bi-pencil-square"></i> Edit Data Kriteria
|
<i class="bi bi-pencil-square"></i> Edit Data Kriteria
|
||||||
</h1>
|
</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
<div class="card shadow mb-4">
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@if ($errors->any())
|
@if ($errors->any())
|
||||||
<div class="alert alert-danger">
|
<div class="alert alert-danger">
|
||||||
<ul>
|
<ul>
|
||||||
@foreach ($errors->all() as $error)
|
@foreach ($errors->all() as $error)
|
||||||
<li>{{ $error }}</li>
|
<li>{{ $error }}</li>
|
||||||
@endforeach
|
@endforeach
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
|
||||||
<form action="{{ route('admin.kriteria.update', $kriteria->id) }}" method="POST">
|
<form action="{{ route('admin.kriteria.update', $kriteria->id) }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<div class="mb-3">
|
<div class="mb-3">
|
||||||
<label for="kode_kriteria" class="form-label">Kode Kriteria</label>
|
<label for="kode_kriteria" class="form-label">Kode Kriteria</label>
|
||||||
<input type="text" class="form-control" id="kode_kriteria" name="kode_kriteria" value="{{ $kriteria->kode_kriteria }}" required>
|
<input type="text" class="form-control" id="kode_kriteria" name="kode_kriteria"
|
||||||
</div>
|
value="{{ $kriteria->kode_kriteria }}" required>
|
||||||
<div class="mb-3">
|
</div>
|
||||||
<label for="nama_kriteria" class="form-label">Nama Kriteria</label>
|
<div class="mb-3">
|
||||||
<input type="text" class="form-control" id="nama_kriteria" name="nama_kriteria" value="{{ $kriteria->nama_kriteria }}" required>
|
<label for="nama_kriteria" class="form-label">Nama Kriteria</label>
|
||||||
</div>
|
<input type="text" class="form-control" id="nama_kriteria" name="nama_kriteria"
|
||||||
<div class="mb-3">
|
value="{{ $kriteria->nama_kriteria }}" required>
|
||||||
<label for="bobot" class="form-label">Bobot</label>
|
</div>
|
||||||
<input type="number" step="0.01" class="form-control" id="bobot" name="bobot" value="{{ $kriteria->bobot }}" required>
|
<div class="mb-3">
|
||||||
</div>
|
<label for="bobot" class="form-label">Bobot</label>
|
||||||
<div class="mb-3">
|
<input type="number" step="0.01" class="form-control" id="bobot" name="bobot"
|
||||||
<label for="jenis" class="form-label">Jenis</label>
|
value="{{ $kriteria->bobot }}" required>
|
||||||
<select class="form-control" id="jenis" name="jenis" required>
|
</div>
|
||||||
<option value="Benefit" {{ $kriteria->jenis == 'Benefit' ? 'selected' : '' }}>Benefit</option>
|
<div class="mb-3">
|
||||||
<option value="Cost" {{ $kriteria->jenis == 'Cost' ? 'selected' : '' }}>Cost</option>
|
<label for="jenis" class="form-label">Jenis</label>
|
||||||
</select>
|
<select class="form-control" id="jenis" name="jenis" required>
|
||||||
</div>
|
<option value="BENEFIT" {{ $kriteria->jenis == 'BENEFIT' ? 'selected' : '' }}>Benefit</option>
|
||||||
<button type="submit" class="btn" style="background-color: #006400; border-color: #006400; color: white;">
|
<option value="COST" {{ $kriteria->jenis == 'COST' ? 'selected' : '' }}>Cost</option>
|
||||||
Simpan
|
</select>
|
||||||
</button>
|
|
||||||
<a href="{{ route('admin.kriteria.index') }}" class="btn" style="background-color: #90ee90; border-color: #90ee90; color: black;">
|
</div>
|
||||||
Kembali
|
<button type="submit" class="btn"
|
||||||
</a>
|
style="background-color: #006400; border-color: #006400; color: white;">
|
||||||
</form>
|
Simpan
|
||||||
|
</button>
|
||||||
|
<a href="{{ route('admin.kriteria.index') }}" class="btn"
|
||||||
|
style="background-color: #90ee90; border-color: #90ee90; color: black;">
|
||||||
|
Kembali
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
@ -3,104 +3,109 @@
|
||||||
@section('title', 'Data Kriteria')
|
@section('title', 'Data Kriteria')
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
<h1 class="h3 text-grey-800">
|
<h1 class="h3 text-grey-800">
|
||||||
<i class="bi bi-box"></i> Data Kriteria
|
<i class="bi bi-box"></i> Data Kriteria
|
||||||
</h1>
|
</h1>
|
||||||
<a href="{{ route('admin.kriteria.create') }}" class="btn btn-success" style="background-color: #006400; border-color: #004d00;">
|
<a href="{{ route('admin.kriteria.create') }}" class="btn btn-success"
|
||||||
<i></i> Tambah Data
|
style="background-color: #006400; border-color: #004d00;">
|
||||||
</a>
|
<i></i> Tambah Data
|
||||||
</div>
|
</a>
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3">
|
|
||||||
<h6 class="m-0 font-weight-bold" style="color: #006400;">
|
|
||||||
<i class="bi bi-table"></i> Daftar Data Kriteria
|
|
||||||
</h6>
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
<div class="card shadow mb-4">
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
<div class="card-header py-3">
|
||||||
<thead>
|
<h6 class="m-0 font-weight-bold" style="color: #006400;">
|
||||||
<tr>
|
<i class="bi bi-table"></i> Daftar Data Kriteria
|
||||||
<th class="text-center">No</th>
|
</h6>
|
||||||
<th class="text-center" style="width: 120px;">Kode Kriteria</th>
|
|
||||||
<th class="text-center">Nama Kriteria</th>
|
</div>
|
||||||
<th class="text-center">Bobot</th>
|
<div class="card-body">
|
||||||
<th class="text-center">Jenis</th>
|
<div class="table-responsive">
|
||||||
<th class="text-center">Aksi</th>
|
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
||||||
</tr>
|
<thead>
|
||||||
</thead>
|
<tr>
|
||||||
<tbody>
|
<th class="text-center">No</th>
|
||||||
@foreach ($kriteria as $key => $item)
|
<th class="text-center" style="width: 120px;">Kode Kriteria</th>
|
||||||
<tr>
|
<th class="text-center">Nama Kriteria</th>
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
<th class="text-center">Bobot</th>
|
||||||
<td class="text-center">{{ $item->kode_kriteria }}</td>
|
<th class="text-center">Jenis</th>
|
||||||
<td class="text-center">{{ $item->nama_kriteria }}</td>
|
<th class="text-center">Aksi</th>
|
||||||
<td class="text-center">{{ $item->bobot }}</td>
|
</tr>
|
||||||
<td class="text-center">{{ $item->jenis }}</td>
|
</thead>
|
||||||
<td class="text-center">
|
<tbody>
|
||||||
<div class="d-flex justify-content-center">
|
@foreach ($kriteria as $key => $item)
|
||||||
<a href="{{ route('admin.kriteria.edit', ['id' => $item->id]) }}" class="btn btn-warning btn-sm mx-1">
|
<tr>
|
||||||
<i class="bi bi-pencil"></i>
|
<td class="text-center">{{ $key + 1 }}</td>
|
||||||
</a>
|
<td class="text-center">{{ $item->kode_kriteria }}</td>
|
||||||
<button type="button" class="btn btn-danger btn-sm mx-1 delete-button" data-id="{{ $item->id }}">
|
<td class="text-center">{{ $item->nama_kriteria }}</td>
|
||||||
<i class="bi bi-trash"></i>
|
<td class="text-center">{{ $item->bobot }}</td>
|
||||||
</button>
|
<td class="text-center">{{ $item->jenis }}</td>
|
||||||
<form id="delete-form-{{ $item->id }}" action="{{ route('admin.kriteria.destroy', $item->id) }}" method="POST" style="display: none;">
|
<td class="text-center">
|
||||||
@csrf
|
<div class="d-flex justify-content-center">
|
||||||
@method('DELETE')
|
<a href="{{ route('admin.kriteria.edit', $item->id) }}"
|
||||||
</form>
|
class="btn btn-warning btn-sm mx-1">
|
||||||
</div>
|
<i class="bi bi-pencil"></i>
|
||||||
</td>
|
</a>
|
||||||
</tr>
|
|
||||||
@endforeach
|
<form action="{{ route('admin.kriteria.destroy', $item->id) }}" method="POST"
|
||||||
</tbody>
|
class="d-inline" onsubmit="return confirm('Yakin ingin menghapus data ini?')">
|
||||||
</table>
|
@csrf
|
||||||
|
@method('DELETE')
|
||||||
|
<button type="submit" class="btn btn-danger btn-sm mx-1">
|
||||||
|
<i class="bi bi-trash"></i>
|
||||||
|
</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- SweetAlert CDN -->
|
<!-- SweetAlert CDN -->
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||||
|
|
||||||
|
@if (session('success'))
|
||||||
|
<script>
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Berhasil!',
|
||||||
|
text: '{{ session('success') }}',
|
||||||
|
icon: 'success',
|
||||||
|
timer: 3000,
|
||||||
|
showConfirmButton: false
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
|
||||||
@if (session('success'))
|
|
||||||
<script>
|
<script>
|
||||||
Swal.fire({
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
title: 'Berhasil!',
|
const deleteButtons = document.querySelectorAll('.delete-button');
|
||||||
text: '{{ session('success') }}',
|
|
||||||
icon: 'success',
|
|
||||||
timer: 3000,
|
|
||||||
showConfirmButton: false
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
@endif
|
|
||||||
|
|
||||||
|
deleteButtons.forEach(button => {
|
||||||
<script>
|
button.addEventListener('click', function() {
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
const id = this.getAttribute('data-id');
|
||||||
const deleteButtons = document.querySelectorAll('.delete-button');
|
Swal.fire({
|
||||||
|
title: 'Apakah Anda yakin?',
|
||||||
deleteButtons.forEach(button => {
|
text: 'Data ini akan dihapus secara permanen!',
|
||||||
button.addEventListener('click', function () {
|
icon: 'warning',
|
||||||
const id = this.getAttribute('data-id');
|
showCancelButton: true,
|
||||||
Swal.fire({
|
confirmButtonColor: '#d33',
|
||||||
title: 'Apakah Anda yakin?',
|
cancelButtonColor: '#3085d6',
|
||||||
text: 'Data ini akan dihapus secara permanen!',
|
confirmButtonText: 'Ya, hapus!',
|
||||||
icon: 'warning',
|
cancelButtonText: 'Batal'
|
||||||
showCancelButton: true,
|
}).then((result) => {
|
||||||
confirmButtonColor: '#d33',
|
if (result.isConfirmed) {
|
||||||
cancelButtonColor: '#3085d6',
|
document.getElementById('delete-form-' + id).submit();
|
||||||
confirmButtonText: 'Ya, hapus!',
|
}
|
||||||
cancelButtonText: 'Batal'
|
});
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
document.getElementById('delete-form-' + id).submit();
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
</script>
|
||||||
</script>
|
|
||||||
@endsection
|
@endsection
|
|
@ -0,0 +1,365 @@
|
||||||
|
@extends('admin.layouts.base')
|
||||||
|
|
||||||
|
@section('title', 'Data Alternatif')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||||
|
|
||||||
|
@if (session('success'))
|
||||||
|
<script>
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Berhasil!',
|
||||||
|
text: '{{ session('success') }}',
|
||||||
|
icon: 'success',
|
||||||
|
timer: 3000,
|
||||||
|
showConfirmButton: false
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
@endif
|
||||||
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
|
<h1 class="h3 text-grey-800">
|
||||||
|
<i class="bi bi-boxes"></i> Data Alternatif
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
||||||
|
<h6 class="m-0 font-weight-bold" style="color: #064E3B;">
|
||||||
|
<i class="bi bi-table"></i> Daftar Data Alternatif
|
||||||
|
</h6>
|
||||||
|
<button type="button" class="btn" style="background-color: #064E3B; color: white;" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#modalTambah">
|
||||||
|
<i></i> Tambah Data
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card-body">
|
||||||
|
<form method="GET" id="entriesForm" action="{{ route('admin.pakaian.index') }}"
|
||||||
|
class="d-flex justify-content-between align-items-center mb-3 flex-wrap gap-3">
|
||||||
|
<div class="d-flex align-items-center">
|
||||||
|
<label for="entriesPerPage" class="me-2">Show</label>
|
||||||
|
<select name="entries" id="entriesPerPage" class="form-select me-3"
|
||||||
|
onchange="document.getElementById('entriesForm').submit()">
|
||||||
|
<option value="10" {{ request('entries') == 10 ? 'selected' : '' }}>10</option>
|
||||||
|
<option value="25" {{ request('entries') == 25 ? 'selected' : '' }}>25</option>
|
||||||
|
<option value="50" {{ request('entries') == 50 ? 'selected' : '' }}>50</option>
|
||||||
|
</select>
|
||||||
|
<span class="me-3">entries</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex align-items-center gap-2">
|
||||||
|
<label for="search" class="me-2">Search:</label>
|
||||||
|
<input type="text" name="search" id="search" class="form-control" placeholder="Search..."
|
||||||
|
value="{{ request('search') }}">
|
||||||
|
<button type="submit" class="btn btn-primary">Cari</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead class="table-light text-center">
|
||||||
|
<tr>
|
||||||
|
<th>No</th>
|
||||||
|
<th>Gambar</th>
|
||||||
|
<th>Nama Pakaian</th>
|
||||||
|
<th>Aksi</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@php $no = ($alternatif->currentPage() - 1) * $alternatif->perPage() + 1; @endphp
|
||||||
|
@foreach ($alternatif as $item)
|
||||||
|
<tr class="text-center">
|
||||||
|
<td>{{ $no++ }}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
@if ($item->img)
|
||||||
|
<img src="{{ asset($item->img) }}" alt="Gambar"
|
||||||
|
class="img-fluid rounded object-fit-cover"
|
||||||
|
style="width: 100px; height: 100px; object-fit: cover;">
|
||||||
|
@else
|
||||||
|
Tidak ada gambar
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
|
||||||
|
<td>{{ $item->nama_pakaian }}</td>
|
||||||
|
<td class="text-center">
|
||||||
|
<!-- Tombol Info -->
|
||||||
|
<button class="btn btn-info btn-sm" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#infoModal{{ $item->id }}">
|
||||||
|
Info
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<!-- Tombol Edit -->
|
||||||
|
<button class="btn btn-warning btn-sm" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#modalEdit{{ $item->id }}">
|
||||||
|
Edit
|
||||||
|
</button>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@foreach ($alternatif as $item)
|
||||||
|
<!-- Modal Info -->
|
||||||
|
<div class="modal fade" id="infoModal{{ $item->id }}" tabindex="-1"
|
||||||
|
aria-labelledby="infoModalLabel{{ $item->id }}" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="infoModalLabel{{ $item->id }}">
|
||||||
|
Detail Subkriteria - {{ $item->nama_pakaian }}
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"
|
||||||
|
aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Kriteria</th>
|
||||||
|
<th>Subkriteria</th>
|
||||||
|
<th>Nilai</th>
|
||||||
|
<th>Range Harga</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@foreach ($item->subKriterias as $sub)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $sub->kriteria->nama_kriteria ?? '-' }}</td>
|
||||||
|
<td>{{ $sub->nama_sub }}</td>
|
||||||
|
<td>{{ $sub->nilai }}</td>
|
||||||
|
<td>
|
||||||
|
@if ($sub->kriteria->nama_kriteria === 'Harga')
|
||||||
|
Rp{{ number_format($sub->min_harga, 0, ',', '.') }}
|
||||||
|
-
|
||||||
|
Rp{{ number_format($sub->max_harga, 0, ',', '.') }}
|
||||||
|
@else
|
||||||
|
-
|
||||||
|
@endif
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary"
|
||||||
|
data-bs-dismiss="modal">Tutup</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
</td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
@endforeach
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<!-- Pagination -->
|
||||||
|
<div class="d-flex justify-content-end">
|
||||||
|
{{ $alternatif->appends(request()->query())->links('vendor.pagination.bootstrap-5') }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<!-- Modal Tambah Data Pakaian -->
|
||||||
|
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<!-- Header -->
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="modalTambahLabel">
|
||||||
|
<i class="bi bi-plus-circle"></i> Tambah Pakaian
|
||||||
|
</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Body -->
|
||||||
|
<div class="modal-body">
|
||||||
|
<form action="{{ route('admin.pakaian.store') }}" method="POST" enctype="multipart/form-data">
|
||||||
|
@csrf
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="nama_pakaian" class="form-label">Nama Pakaian</label>
|
||||||
|
<input type="text" class="form-control" name="nama_pakaian" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="harga" class="form-label">Harga</label>
|
||||||
|
<input type="number" class="form-control" name="harga" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="img" class="form-label">Upload Gambar</label>
|
||||||
|
<input type="file" class="form-control" name="img" accept="image/*">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-end gap-2">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
||||||
|
<button type="submit" class="btn btn-success">Simpan</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@foreach ($alternatif as $item)
|
||||||
|
<!-- Modal Edit -->
|
||||||
|
<div class="modal fade" id="modalEdit{{ $item->id }}" tabindex="-1"
|
||||||
|
aria-labelledby="modalEdit{{ $item->id }}" aria-hidden="true">
|
||||||
|
<div class="modal-dialog modal-lg">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="modalEdit{{ $item->id }}">Edit Data Pakaian</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form method="POST" action="{{ route('admin.pakaian.update', $item->id) }}"
|
||||||
|
enctype="multipart/form-data">
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<!-- Nama Pakaian -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="edit_nama_pakaian{{ $item->id }}" class="form-label">Nama Pakaian</label>
|
||||||
|
<input type="text" class="form-control" id="edit_nama_pakaian{{ $item->id }}"
|
||||||
|
name="nama_pakaian" value="{{ $item->nama_pakaian }}" required>
|
||||||
|
</div>
|
||||||
|
<!-- Harga -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="edit_harga{{ $item->id }}" class="form-label">Harga</label>
|
||||||
|
<input type="number" id="edit_harga{{ $item->id }}" name="harga"
|
||||||
|
class="form-control" value="{{ $item->harga }}" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Upload Gambar Baru -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="edit_gambar{{ $item->id }}" class="form-label">Gambar Baru</label>
|
||||||
|
<input type="file" class="form-control" name="gambar"
|
||||||
|
id="edit_gambar{{ $item->id }}" accept="image/*">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Preview Gambar Lama -->
|
||||||
|
<div class="mb-3">
|
||||||
|
<label class="form-label">Gambar Lama:</label><br>
|
||||||
|
<img src="{{ asset($item->img) }}" alt="Gambar Lama"
|
||||||
|
style="width: 100px; height: 100px; object-fit: cover;" class="border rounded">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn" style="background-color: #90ee90; color: black;"
|
||||||
|
data-bs-dismiss="modal">Batal</button>
|
||||||
|
<button type="submit" class="btn"
|
||||||
|
style="background-color: #064E3B; color: white;">Simpan</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.label-spacing {
|
||||||
|
margin-right: 0.3rem;
|
||||||
|
/* Jarak antara label dan select */
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input {
|
||||||
|
width: 200px;
|
||||||
|
/* Lebar input search */
|
||||||
|
}
|
||||||
|
|
||||||
|
.justify-between {
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
/* Geser ke pojok kanan */
|
||||||
|
align-items: center;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination .page-item .page-link {
|
||||||
|
font-size: 14px;
|
||||||
|
padding: 6px 12px;
|
||||||
|
border-radius: 5px;
|
||||||
|
border: none;
|
||||||
|
color: white;
|
||||||
|
background-color: #064E3B;
|
||||||
|
/* Warna biru */
|
||||||
|
margin: 0 2px;
|
||||||
|
transition: 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination .page-item.active .page-link {
|
||||||
|
background-color: #053B2D;
|
||||||
|
/* Biru lebih gelap */
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination .page-item .page-link:hover {
|
||||||
|
background-color: #046C4E;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination .page-item.disabled .page-link {
|
||||||
|
background-color: #e9ecef;
|
||||||
|
color: #6c757d;
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-form {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 1rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-left,
|
||||||
|
.entries-right {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-left label,
|
||||||
|
.entries-right label {
|
||||||
|
margin: 0;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-left select,
|
||||||
|
.entries-right input[type="text"] {
|
||||||
|
padding: 4px 8px;
|
||||||
|
height: 32px;
|
||||||
|
font-size: 14px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-right button {
|
||||||
|
height: 32px;
|
||||||
|
padding: 0 12px;
|
||||||
|
font-size: 14px;
|
||||||
|
background-color: #007bff;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.entries-right button:hover {
|
||||||
|
background-color: #0056b3;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
@endsection
|
|
@ -1,303 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Sub Kriteria')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Sub Kriteria
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold text-primary">
|
|
||||||
<i class="bi bi-table"></i> Cuaca Acara (C6)
|
|
||||||
</h6>
|
|
||||||
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalTambah">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Data
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Nama Sub Kriteria</th>
|
|
||||||
<th class="text-center">Nilai</th>
|
|
||||||
<th class="text-center">Kriteria</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($subkriteria as $key => $item)
|
|
||||||
<tr id="subkriteria_{{ $item->id }}">
|
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
|
||||||
<td class="text-center nama">{{ $item->nama_subkriteria }}</td>
|
|
||||||
<td class="text-center nilai">{{ $item->nilai }}</td>
|
|
||||||
<td class="text-center">{{ $item->datakriteria->nama_kriteria ?? $item->kriteria_id }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center" style="gap: 10px;">
|
|
||||||
<button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalEdit"
|
|
||||||
data-id="{{ $item->id }}"
|
|
||||||
data-nama="{{ $item->nama_subkriteria }}"
|
|
||||||
data-nilai="{{ $item->nilai }}"
|
|
||||||
data-kriteria="{{ $item->kriteria_id }}">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form action="{{ route('admin.subkriteria.destroy', $item->id) }}" method="POST" class="delete-form">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm delete-button">
|
|
||||||
<i class="bi bi-trash"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Tambah Data -->
|
|
||||||
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalTambahLabel">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Sub Kriteria
|
|
||||||
</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('admin.subkriteria.cuacaacara.store') }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<!-- Nama Sub Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Nilai -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="nilai" name="nilai" min="1" max="5" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="kriteria_id" class="form-label fw-bold">Kriteria</label>
|
|
||||||
<select class="form-select" id="kriteria_id" name="kriteria_id" required>
|
|
||||||
<option value="" disabled selected>--- Pilih Kriteria ---</option>
|
|
||||||
@foreach($datakriteria as $kriteria)
|
|
||||||
<option value="{{ $kriteria->id }}">{{ $kriteria->nama_kriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Simpan & Batal -->
|
|
||||||
<div class="d-flex justify-content-end" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn btn-warning" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-success">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Edit -->
|
|
||||||
<div class="modal fade" id="modalEdit" tabindex="-1" aria-labelledby="modalEditLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalEditLabel">Edit Sub Kriteria</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<form id="formEdit" method="POST">
|
|
||||||
@csrf
|
|
||||||
@method('PUT')
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" id="edit_id" name="id">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="edit_nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="edit_nilai" name="nilai" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-edit', function() {
|
|
||||||
var id = $(this).data('id');
|
|
||||||
$.get("/admin/subkriteria/" + id + "/edit", function(data) {
|
|
||||||
$('#edit_id').val(data.id);
|
|
||||||
$('#edit_nama_subkriteria').val(data.nama_subkriteria);
|
|
||||||
$('#edit_nilai').val(data.nilai);
|
|
||||||
|
|
||||||
// Update form action
|
|
||||||
$('#formEdit').attr('action', '/admin/subkriteria/' + id);
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.querySelectorAll('button[data-bs-target="#modalEdit"]').forEach(button => {
|
|
||||||
button.addEventListener('click', function () {
|
|
||||||
const id = this.getAttribute('data-id');
|
|
||||||
const nama = this.getAttribute('data-nama');
|
|
||||||
const nilai = this.getAttribute('data-nilai');
|
|
||||||
const kriteria = this.getAttribute('data-kriteria');
|
|
||||||
|
|
||||||
document.getElementById('edit_id').value = id;
|
|
||||||
document.getElementById('edit_nama_subkriteria').value = nama;
|
|
||||||
document.getElementById('edit_nilai').value = nilai;
|
|
||||||
document.getElementById('formEdit').action = `/admin/subkriteria/${id}`;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Fungsi untuk menampilkan SweetAlert sukses
|
|
||||||
function showSuccessMessage(message) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fungsi untuk memperbarui nomor urut setelah penghapusan
|
|
||||||
function updateRowNumbers() {
|
|
||||||
let rows = document.querySelectorAll("#dataTable tbody tr");
|
|
||||||
rows.forEach((row, index) => {
|
|
||||||
let numberCell = row.querySelector("td:first-child");
|
|
||||||
if (numberCell) {
|
|
||||||
numberCell.textContent = index + 1; // Perbarui nomor urut
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
document.querySelectorAll('.delete-button').forEach(button => {
|
|
||||||
button.addEventListener('click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah Anda yakin?",
|
|
||||||
text: "Data yang dihapus tidak dapat dikembalikan!",
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#d33",
|
|
||||||
cancelButtonColor: "#3085d6",
|
|
||||||
confirmButtonText: "Ya, hapus!",
|
|
||||||
cancelButtonText: "Batal"
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
let form = this.closest('form');
|
|
||||||
let url = form.action;
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'Accept': 'application/json'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.success) {
|
|
||||||
document.getElementById(`subkriteria_${data.id}`)?.remove();
|
|
||||||
updateRowNumbers();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Data Terhapus!',
|
|
||||||
text: 'Data berhasil dihapus.',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat dihapus.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat menghapus data.", "error");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah menambah data
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah edit data
|
|
||||||
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let form = this;
|
|
||||||
let url = form.action;
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'POST', // atau 'PUT' jika pakai PUT
|
|
||||||
body: formData,
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
console.log(data);
|
|
||||||
if (data.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log("Error di fetch:", error);
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -1,156 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Sub Kriteria')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Sub Kriteria untuk: {{ $kriteria->nama_kriteria }}
|
|
||||||
</h1>
|
|
||||||
<a href="{{ route('admin.subkriteria.create', ['id' => $kriteria->id]) }}" class="btn" style="background-color: #006400; border-color: #006400; color: white;">
|
|
||||||
<i></i> Tambah Data
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold" style="color: #006400;">
|
|
||||||
<i class="bi bi-table"></i> Daftar Sub Kriteria
|
|
||||||
</h6>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Nama Sub Kriteria</th>
|
|
||||||
<th class="text-center">Nilai</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($subkriterias as $key => $sub)
|
|
||||||
<tr>
|
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
|
||||||
<td>{{ $sub->nama_subkriteria }}</td>
|
|
||||||
<td class="text-center">{{ $sub->nilai }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center">
|
|
||||||
<a href="{{ route('admin.subkriteria.edit', $sub->id) }}" class="btn btn-warning btn-sm mr-3">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</a>
|
|
||||||
<!-- Form untuk hapus subkriteria -->
|
|
||||||
<form action="{{ route('subkriteria.destroy', $sub->id) }}" method="POST" class="form-hapus">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm"><i class="fas fa-trash"></i></button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Fungsi untuk menampilkan SweetAlert sukses
|
|
||||||
function showSuccessMessage(message) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
|
||||||
const forms = document.querySelectorAll('.form-hapus');
|
|
||||||
|
|
||||||
forms.forEach(form => {
|
|
||||||
form.addEventListener('submit', function (e) {
|
|
||||||
e.preventDefault(); // Cegah submit langsung
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Yakin ingin menghapus?',
|
|
||||||
text: "Data tidak bisa dikembalikan!",
|
|
||||||
icon: 'warning',
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: '#d33',
|
|
||||||
cancelButtonColor: '#3085d6',
|
|
||||||
confirmButtonText: 'Ya, hapus!',
|
|
||||||
cancelButtonText: 'Batal'
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
form.submit(); // Lanjutkan submit jika dikonfirmasi
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Menampilkan SweetAlert saat ada pesan sukses dari server
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah menambah data
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah edit data
|
|
||||||
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let form = this;
|
|
||||||
let url = form.action;
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'POST', // atau 'PUT' jika pakai PUT
|
|
||||||
body: formData,
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
console.log(data);
|
|
||||||
if (data.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log("Error di fetch:", error);
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -1,303 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Sub Kriteria')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Sub Kriteria
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold text-primary">
|
|
||||||
<i class="bi bi-table"></i> Harga (C2)
|
|
||||||
</h6>
|
|
||||||
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalTambah">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Data
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Nama Sub Kriteria</th>
|
|
||||||
<th class="text-center">Nilai</th>
|
|
||||||
<th class="text-center">Kriteria</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($subkriteria as $key => $item)
|
|
||||||
<tr id="subkriteria_{{ $item->id }}">
|
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
|
||||||
<td class="text-center nama">{{ $item->nama_subkriteria }}</td>
|
|
||||||
<td class="text-center nilai">{{ $item->nilai }}</td>
|
|
||||||
<td class="text-center">{{ $item->datakriteria->nama_kriteria ?? $item->kriteria_id }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center" style="gap: 10px;">
|
|
||||||
<button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalEdit"
|
|
||||||
data-id="{{ $item->id }}"
|
|
||||||
data-nama="{{ $item->nama_subkriteria }}"
|
|
||||||
data-nilai="{{ $item->nilai }}"
|
|
||||||
data-kriteria="{{ $item->kriteria_id }}">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form action="{{ route('admin.subkriteria.destroy', $item->id) }}" method="POST" class="delete-form">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm delete-button">
|
|
||||||
<i class="bi bi-trash"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Tambah Data -->
|
|
||||||
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalTambahLabel">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Sub Kriteria
|
|
||||||
</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('admin.subkriteria.harga.store') }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<!-- Nama Sub Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Nilai -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="nilai" name="nilai" min="1" max="5" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="kriteria_id" class="form-label fw-bold">Kriteria</label>
|
|
||||||
<select class="form-select" id="kriteria_id" name="kriteria_id" required>
|
|
||||||
<option value="" disabled selected>--- Pilih Kriteria ---</option>
|
|
||||||
@foreach($datakriteria as $kriteria)
|
|
||||||
<option value="{{ $kriteria->id }}">{{ $kriteria->nama_kriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Simpan & Batal -->
|
|
||||||
<div class="d-flex justify-content-end" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn btn-warning" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-success">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Edit -->
|
|
||||||
<div class="modal fade" id="modalEdit" tabindex="-1" aria-labelledby="modalEditLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalEditLabel">Edit Sub Kriteria</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<form id="formEdit" method="POST">
|
|
||||||
@csrf
|
|
||||||
@method('PUT')
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" id="edit_id" name="id">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="edit_nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="edit_nilai" name="nilai" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-edit', function() {
|
|
||||||
var id = $(this).data('id');
|
|
||||||
$.get("/admin/subkriteria/" + id + "/edit", function(data) {
|
|
||||||
$('#edit_id').val(data.id);
|
|
||||||
$('#edit_nama_subkriteria').val(data.nama_subkriteria);
|
|
||||||
$('#edit_nilai').val(data.nilai);
|
|
||||||
|
|
||||||
// Update form action
|
|
||||||
$('#formEdit').attr('action', '/admin/subkriteria/' + id);
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.querySelectorAll('button[data-bs-target="#modalEdit"]').forEach(button => {
|
|
||||||
button.addEventListener('click', function () {
|
|
||||||
const id = this.getAttribute('data-id');
|
|
||||||
const nama = this.getAttribute('data-nama');
|
|
||||||
const nilai = this.getAttribute('data-nilai');
|
|
||||||
const kriteria = this.getAttribute('data-kriteria');
|
|
||||||
|
|
||||||
document.getElementById('edit_id').value = id;
|
|
||||||
document.getElementById('edit_nama_subkriteria').value = nama;
|
|
||||||
document.getElementById('edit_nilai').value = nilai;
|
|
||||||
document.getElementById('formEdit').action = `/admin/subkriteria/${id}`;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Fungsi untuk menampilkan SweetAlert sukses
|
|
||||||
function showSuccessMessage(message) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fungsi untuk memperbarui nomor urut setelah penghapusan
|
|
||||||
function updateRowNumbers() {
|
|
||||||
let rows = document.querySelectorAll("#dataTable tbody tr");
|
|
||||||
rows.forEach((row, index) => {
|
|
||||||
let numberCell = row.querySelector("td:first-child");
|
|
||||||
if (numberCell) {
|
|
||||||
numberCell.textContent = index + 1; // Perbarui nomor urut
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
document.querySelectorAll('.delete-button').forEach(button => {
|
|
||||||
button.addEventListener('click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah Anda yakin?",
|
|
||||||
text: "Data yang dihapus tidak dapat dikembalikan!",
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#d33",
|
|
||||||
cancelButtonColor: "#3085d6",
|
|
||||||
confirmButtonText: "Ya, hapus!",
|
|
||||||
cancelButtonText: "Batal"
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
let form = this.closest('form');
|
|
||||||
let url = form.action;
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'Accept': 'application/json'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.success) {
|
|
||||||
document.getElementById(`subkriteria_${data.id}`)?.remove();
|
|
||||||
updateRowNumbers();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Data Terhapus!',
|
|
||||||
text: 'Data berhasil dihapus.',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat dihapus.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat menghapus data.", "error");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah menambah data
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah edit data
|
|
||||||
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let form = this;
|
|
||||||
let url = form.action;
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'POST', // atau 'PUT' jika pakai PUT
|
|
||||||
body: formData,
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
console.log(data);
|
|
||||||
if (data.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log("Error di fetch:", error);
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -0,0 +1,361 @@
|
||||||
|
@extends('admin.layouts.base')
|
||||||
|
|
||||||
|
@section('title', 'Data Sub Kriteria')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
|
||||||
|
<div class="d-flex justify-content-between align-items-center mb-4">
|
||||||
|
<h1 class="h3 text-grey-800">
|
||||||
|
<i class="bi bi-boxes"></i> Data Sub Kriteria untuk: {{ $kriteria->nama_kriteria }}
|
||||||
|
</h1>
|
||||||
|
<button type="button" class="btn btn-success mb-3" data-bs-toggle="modal" data-bs-target="#tambahSubkriteriaModal"
|
||||||
|
style="background-color: #006400; border-color: #006400; color: white;">
|
||||||
|
<i></i> Tambah Data
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
||||||
|
<h6 class="m-0 font-weight-bold" style="color: #006400;">
|
||||||
|
<i class="bi bi-table"></i> Daftar Sub Kriteria
|
||||||
|
</h6>
|
||||||
|
</div>
|
||||||
|
<div class="card shadow mb-4">
|
||||||
|
<div class="card-header bg-white d-flex justify-content-between align-items-center">
|
||||||
|
<span class="fw-bold text-success">
|
||||||
|
Subkriteria untuk: {{ $kriteria->nama_kriteria }}
|
||||||
|
</span>
|
||||||
|
<a href="{{ route('admin.kriteria.index') }}" class="btn btn-sm btn-success">
|
||||||
|
<i class="bi bi-arrow-left"></i> Kembali
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="card-body">
|
||||||
|
<table class="table table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Nama Subkriteria</th>
|
||||||
|
<th>Nilai</th>
|
||||||
|
<th>Min Harga</th>
|
||||||
|
<th>Max Harga</th>
|
||||||
|
<th>Aksi</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
@forelse ($subkriterias as $sub)
|
||||||
|
<tr>
|
||||||
|
<td>{{ $sub->nama_sub }}</td>
|
||||||
|
<td>{{ $sub->nilai }}</td>
|
||||||
|
<td>{{ $sub->min_harga ?? '-' }}</td>
|
||||||
|
<td>{{ $sub->max_harga ?? '-' }}</td>
|
||||||
|
<td>
|
||||||
|
<!-- Tombol Edit -->
|
||||||
|
<button class="btn btn-sm btn-primary" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#editModal{{ $sub->id }}">Edit</button>
|
||||||
|
|
||||||
|
<!-- Tombol Delete -->
|
||||||
|
<button class="btn btn-sm btn-danger" data-bs-toggle="modal"
|
||||||
|
data-bs-target="#deleteModal{{ $sub->id }}">Hapus</button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
@empty
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" class="text-center">Belum ada subkriteria</td>
|
||||||
|
</tr>
|
||||||
|
@endforelse
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Modal Tambah Subkriteria -->
|
||||||
|
<div class="modal fade" id="tambahSubkriteriaModal" tabindex="-1" aria-labelledby="tambahSubkriteriaLabel"
|
||||||
|
aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<form action="{{ route('admin.subkriteria.store') }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
<input type="hidden" name="kriteria_id" value="{{ $kriteria->id }}">
|
||||||
|
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="tambahSubkriteriaLabel">Tambah Subkriteria</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Tutup"></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="kriteria_id" class="form-label">Pilih Kriteria</label>
|
||||||
|
<select class="form-select" id="kriteria_id" name="kriteria_id" required
|
||||||
|
onchange="toggleHargaFields()">
|
||||||
|
<option value="">-- Pilih Kriteria --</option>
|
||||||
|
@foreach ($kriterias as $kriteria)
|
||||||
|
<option value="{{ $kriteria->id }}" data-nama="{{ $kriteria->nama_kriteria }}">
|
||||||
|
{{ $kriteria->nama_kriteria }}
|
||||||
|
</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="nama_sub" class="form-label">Nama Subkriteria</label>
|
||||||
|
<input type="text" class="form-control" id="nama_sub" name="nama_sub" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="nilai" class="form-label">Nilai</label>
|
||||||
|
<input type="number" class="form-control" id="nilai" name="nilai" step="1"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="harga-fields" style="display: none;">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="min_harga" class="form-label">Min Harga</label>
|
||||||
|
<input type="number" class="form-control" id="min_harga" name="min_harga" min="0">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="max_harga" class="form-label">Max Harga</label>
|
||||||
|
<input type="number" class="form-control" id="max_harga" name="max_harga" min="0">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
function toggleHargaFields() {
|
||||||
|
const select = document.getElementById('kriteria_id');
|
||||||
|
const selectedOption = select.options[select.selectedIndex];
|
||||||
|
const namaKriteria = selectedOption.getAttribute('data-nama');
|
||||||
|
const hargaFields = document.getElementById('harga-fields');
|
||||||
|
|
||||||
|
if (namaKriteria === 'Harga') {
|
||||||
|
hargaFields.style.display = 'block';
|
||||||
|
document.getElementById('min_harga').required = true;
|
||||||
|
document.getElementById('max_harga').required = true;
|
||||||
|
} else {
|
||||||
|
hargaFields.style.display = 'none';
|
||||||
|
document.getElementById('min_harga').required = false;
|
||||||
|
document.getElementById('max_harga').required = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
||||||
|
<button type="submit" class="btn btn-primary">Simpan</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{-- Modal Edit --}}
|
||||||
|
@foreach ($subkriterias as $sub)
|
||||||
|
<div class="modal fade" id="editModal{{ $sub->id }}" tabindex="-1"
|
||||||
|
aria-labelledby="editModalLabel{{ $sub->id }}" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<form action="{{ route('admin.subkriteria.update', $sub->id) }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
@method('PUT')
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="editModalLabel{{ $sub->id }}">Edit Subkriteria</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"
|
||||||
|
aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="kriteria_id" class="form-label">Kriteria</label>
|
||||||
|
<select class="form-select kriteria-select" data-id="{{ $sub->id }}"
|
||||||
|
name="kriteria_id" required>
|
||||||
|
@foreach ($kriterias as $kriteria)
|
||||||
|
<option value="{{ $kriteria->id }}" data-nama="{{ $kriteria->nama_kriteria }}"
|
||||||
|
{{ $sub->kriteria_id == $kriteria->id ? 'selected' : '' }}>
|
||||||
|
{{ $kriteria->nama_kriteria }}
|
||||||
|
</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="nama_sub" class="form-label">Nama Subkriteria</label>
|
||||||
|
<input type="text" class="form-control" name="nama_sub" value="{{ $sub->nama_sub }}"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="nilai" class="form-label">Nilai</label>
|
||||||
|
<input type="number" class="form-control" name="nilai" value="{{ $sub->nilai }}"
|
||||||
|
required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="harga-fields" id="hargaFields{{ $sub->id }}" style="display: none;">
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="min_harga" class="form-label">Min Harga</label>
|
||||||
|
<input type="number" class="form-control" name="min_harga"
|
||||||
|
value="{{ $sub->min_harga }}">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-3">
|
||||||
|
<label for="max_harga" class="form-label">Max Harga</label>
|
||||||
|
<input type="number" class="form-control" name="max_harga"
|
||||||
|
value="{{ $sub->max_harga }}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
// Loop semua select.kriteria-select
|
||||||
|
document.querySelectorAll('.kriteria-select').forEach(select => {
|
||||||
|
const id = select.dataset.id;
|
||||||
|
const hargaFields = document.getElementById(`hargaFields${id}`);
|
||||||
|
|
||||||
|
function toggleHargaFields() {
|
||||||
|
const selectedOption = select.options[select.selectedIndex];
|
||||||
|
const namaKriteria = selectedOption.getAttribute('data-nama');
|
||||||
|
if (namaKriteria === 'Harga') {
|
||||||
|
hargaFields.style.display = 'block';
|
||||||
|
} else {
|
||||||
|
hargaFields.style.display = 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tampilkan sesuai kondisi saat pertama kali modal muncul
|
||||||
|
toggleHargaFields();
|
||||||
|
|
||||||
|
// Tambahkan event saat value berubah
|
||||||
|
select.addEventListener('change', toggleHargaFields);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
||||||
|
<button type="submit" class="btn btn-success">Simpan Perubahan</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
@foreach ($subkriterias as $sub)
|
||||||
|
<!-- Modal Delete -->
|
||||||
|
<div class="modal fade" id="deleteModal{{ $sub->id }}" tabindex="-1"
|
||||||
|
aria-labelledby="deleteModalLabel{{ $sub->id }}" aria-hidden="true">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<form action="{{ route('admin.subkriteria.destroy', $sub->id) }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
@method('DELETE')
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title" id="deleteModalLabel{{ $sub->id }}">Konfirmasi Hapus</h5>
|
||||||
|
<button type="button" class="btn-close" data-bs-dismiss="modal"
|
||||||
|
aria-label="Close"></button>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body">
|
||||||
|
Apakah Anda yakin ingin menghapus subkriteria "<strong>{{ $sub->nama_sub }}</strong>"?
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
||||||
|
<button type="submit" class="btn btn-danger">Ya, Hapus</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
@endforeach
|
||||||
|
<!-- Tambahkan SweetAlert2 -->
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
// Fungsi untuk menampilkan SweetAlert sukses
|
||||||
|
function showSuccessMessage(message) {
|
||||||
|
Swal.fire({
|
||||||
|
icon: 'success',
|
||||||
|
title: 'Berhasil!',
|
||||||
|
text: message,
|
||||||
|
showConfirmButton: false,
|
||||||
|
timer: 1500
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// SweetAlert untuk konfirmasi hapus data
|
||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
const forms = document.querySelectorAll('.form-hapus');
|
||||||
|
|
||||||
|
forms.forEach(form => {
|
||||||
|
form.addEventListener('submit', function(e) {
|
||||||
|
e.preventDefault(); // Cegah submit langsung
|
||||||
|
|
||||||
|
Swal.fire({
|
||||||
|
title: 'Yakin ingin menghapus?',
|
||||||
|
text: "Data tidak bisa dikembalikan!",
|
||||||
|
icon: 'warning',
|
||||||
|
showCancelButton: true,
|
||||||
|
confirmButtonColor: '#d33',
|
||||||
|
cancelButtonColor: '#3085d6',
|
||||||
|
confirmButtonText: 'Ya, hapus!',
|
||||||
|
cancelButtonText: 'Batal'
|
||||||
|
}).then((result) => {
|
||||||
|
if (result.isConfirmed) {
|
||||||
|
form.submit(); // Lanjutkan submit jika dikonfirmasi
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Menampilkan SweetAlert saat ada pesan sukses dari server
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
const successMessage = "{{ session('success') }}";
|
||||||
|
if (successMessage.trim() !== "") {
|
||||||
|
showSuccessMessage(successMessage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// SweetAlert setelah menambah data
|
||||||
|
document.addEventListener("DOMContentLoaded", function() {
|
||||||
|
const successMessage = "{{ session('success') }}";
|
||||||
|
if (successMessage.trim() !== "") {
|
||||||
|
showSuccessMessage(successMessage);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// SweetAlert setelah edit data
|
||||||
|
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
let form = this;
|
||||||
|
let url = form.action;
|
||||||
|
let formData = new FormData(form);
|
||||||
|
|
||||||
|
fetch(url, {
|
||||||
|
method: 'POST', // atau 'PUT' jika pakai PUT
|
||||||
|
body: formData,
|
||||||
|
headers: {
|
||||||
|
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
||||||
|
'X-Requested-With': 'XMLHttpRequest'
|
||||||
|
},
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
console.log(data);
|
||||||
|
if (data.success) {
|
||||||
|
Swal.fire({
|
||||||
|
icon: 'success',
|
||||||
|
title: 'Berhasil!',
|
||||||
|
text: 'Data berhasil diperbarui!',
|
||||||
|
showConfirmButton: false,
|
||||||
|
timer: 1500
|
||||||
|
}).then(() => {
|
||||||
|
location.reload();
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.log("Error di fetch:", error);
|
||||||
|
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
@endsection
|
|
@ -1,303 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Sub Kriteria')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Sub Kriteria
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold text-primary">
|
|
||||||
<i class="bi bi-table"></i> Jenis Acara (C1)
|
|
||||||
</h6>
|
|
||||||
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalTambah">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Data
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Nama Sub Kriteria</th>
|
|
||||||
<th class="text-center">Nilai</th>
|
|
||||||
<th class="text-center">Kriteria</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($subkriteria as $key => $item)
|
|
||||||
<tr id="subkriteria_{{ $item->id }}">
|
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
|
||||||
<td class="text-center nama">{{ $item->nama_subkriteria }}</td>
|
|
||||||
<td class="text-center nilai">{{ $item->nilai }}</td>
|
|
||||||
<td class="text-center">{{ $item->datakriteria->nama_kriteria ?? $item->kriteria_id }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center" style="gap: 10px;">
|
|
||||||
<button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalEdit"
|
|
||||||
data-id="{{ $item->id }}"
|
|
||||||
data-nama="{{ $item->nama_subkriteria }}"
|
|
||||||
data-nilai="{{ $item->nilai }}"
|
|
||||||
data-kriteria="{{ $item->kriteria_id }}">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form action="{{ route('admin.subkriteria.destroy', $item->id) }}" method="POST" class="delete-form">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm delete-button">
|
|
||||||
<i class="bi bi-trash"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Tambah Data -->
|
|
||||||
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalTambahLabel">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Sub Kriteria
|
|
||||||
</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('admin.subkriteria.store') }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<!-- Nama Sub Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Nilai -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="nilai" name="nilai" min="1" max="5" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="kriteria_id" class="form-label fw-bold">Kriteria</label>
|
|
||||||
<select class="form-select" id="kriteria_id" name="kriteria_id" required>
|
|
||||||
<option value="" disabled selected>--- Pilih Kriteria ---</option>
|
|
||||||
@foreach($datakriteria as $kriteria)
|
|
||||||
<option value="{{ $kriteria->id }}">{{ $kriteria->nama_kriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Simpan & Batal -->
|
|
||||||
<div class="d-flex justify-content-end" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn btn-warning" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-success">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Edit -->
|
|
||||||
<div class="modal fade" id="modalEdit" tabindex="-1" aria-labelledby="modalEditLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalEditLabel">Edit Sub Kriteria</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<form id="formEdit" method="POST">
|
|
||||||
@csrf
|
|
||||||
@method('PUT')
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" id="edit_id" name="id">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="edit_nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="edit_nilai" name="nilai" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-edit', function() {
|
|
||||||
var id = $(this).data('id');
|
|
||||||
$.get("/admin/subkriteria/" + id + "/edit", function(data) {
|
|
||||||
$('#edit_id').val(data.id);
|
|
||||||
$('#edit_nama_subkriteria').val(data.nama_subkriteria);
|
|
||||||
$('#edit_nilai').val(data.nilai);
|
|
||||||
|
|
||||||
// Update form action
|
|
||||||
$('#formEdit').attr('action', '/admin/subkriteria/' + id);
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.querySelectorAll('button[data-bs-target="#modalEdit"]').forEach(button => {
|
|
||||||
button.addEventListener('click', function () {
|
|
||||||
const id = this.getAttribute('data-id');
|
|
||||||
const nama = this.getAttribute('data-nama');
|
|
||||||
const nilai = this.getAttribute('data-nilai');
|
|
||||||
const kriteria = this.getAttribute('data-kriteria');
|
|
||||||
|
|
||||||
document.getElementById('edit_id').value = id;
|
|
||||||
document.getElementById('edit_nama_subkriteria').value = nama;
|
|
||||||
document.getElementById('edit_nilai').value = nilai;
|
|
||||||
document.getElementById('formEdit').action = `/admin/subkriteria/${id}`;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Fungsi untuk menampilkan SweetAlert sukses
|
|
||||||
function showSuccessMessage(message) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fungsi untuk memperbarui nomor urut setelah penghapusan
|
|
||||||
function updateRowNumbers() {
|
|
||||||
let rows = document.querySelectorAll("#dataTable tbody tr");
|
|
||||||
rows.forEach((row, index) => {
|
|
||||||
let numberCell = row.querySelector("td:first-child");
|
|
||||||
if (numberCell) {
|
|
||||||
numberCell.textContent = index + 1; // Perbarui nomor urut
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
document.querySelectorAll('.delete-button').forEach(button => {
|
|
||||||
button.addEventListener('click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah Anda yakin?",
|
|
||||||
text: "Data yang dihapus tidak dapat dikembalikan!",
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#d33",
|
|
||||||
cancelButtonColor: "#3085d6",
|
|
||||||
confirmButtonText: "Ya, hapus!",
|
|
||||||
cancelButtonText: "Batal"
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
let form = this.closest('form');
|
|
||||||
let url = form.action;
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'Accept': 'application/json'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.success) {
|
|
||||||
document.getElementById(`subkriteria_${data.id}`)?.remove();
|
|
||||||
updateRowNumbers();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Data Terhapus!',
|
|
||||||
text: 'Data berhasil dihapus.',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat dihapus.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat menghapus data.", "error");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah menambah data
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah edit data
|
|
||||||
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let form = this;
|
|
||||||
let url = form.action;
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'POST', // atau 'PUT' jika pakai PUT
|
|
||||||
body: formData,
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
console.log(data);
|
|
||||||
if (data.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log("Error di fetch:", error);
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -1,303 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Sub Kriteria')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Sub Kriteria
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold text-primary">
|
|
||||||
<i class="bi bi-table"></i> Jenis Pakaian (C3)
|
|
||||||
</h6>
|
|
||||||
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalTambah">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Data
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Nama Sub Kriteria</th>
|
|
||||||
<th class="text-center">Nilai</th>
|
|
||||||
<th class="text-center">Kriteria</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($subkriteria as $key => $item)
|
|
||||||
<tr id="subkriteria_{{ $item->id }}">
|
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
|
||||||
<td class="text-center nama">{{ $item->nama_subkriteria }}</td>
|
|
||||||
<td class="text-center nilai">{{ $item->nilai }}</td>
|
|
||||||
<td class="text-center">{{ $item->datakriteria->nama_kriteria ?? $item->kriteria_id }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center" style="gap: 10px;">
|
|
||||||
<button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalEdit"
|
|
||||||
data-id="{{ $item->id }}"
|
|
||||||
data-nama="{{ $item->nama_subkriteria }}"
|
|
||||||
data-nilai="{{ $item->nilai }}"
|
|
||||||
data-kriteria="{{ $item->kriteria_id }}">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form action="{{ route('admin.subkriteria.destroy', $item->id) }}" method="POST" class="delete-form">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm delete-button">
|
|
||||||
<i class="bi bi-trash"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Tambah Data -->
|
|
||||||
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalTambahLabel">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Sub Kriteria
|
|
||||||
</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('admin.subkriteria.jenispakaian.store') }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<!-- Nama Sub Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Nilai -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="nilai" name="nilai" min="1" max="5" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="kriteria_id" class="form-label fw-bold">Kriteria</label>
|
|
||||||
<select class="form-select" id="kriteria_id" name="kriteria_id" required>
|
|
||||||
<option value="" disabled selected>--- Pilih Kriteria ---</option>
|
|
||||||
@foreach($datakriteria as $kriteria)
|
|
||||||
<option value="{{ $kriteria->id }}">{{ $kriteria->nama_kriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Simpan & Batal -->
|
|
||||||
<div class="d-flex justify-content-end" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn btn-warning" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-success">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Edit -->
|
|
||||||
<div class="modal fade" id="modalEdit" tabindex="-1" aria-labelledby="modalEditLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalEditLabel">Edit Sub Kriteria</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<form id="formEdit" method="POST">
|
|
||||||
@csrf
|
|
||||||
@method('PUT')
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" id="edit_id" name="id">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="edit_nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="edit_nilai" name="nilai" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-edit', function() {
|
|
||||||
var id = $(this).data('id');
|
|
||||||
$.get("/admin/subkriteria/" + id + "/edit", function(data) {
|
|
||||||
$('#edit_id').val(data.id);
|
|
||||||
$('#edit_nama_subkriteria').val(data.nama_subkriteria);
|
|
||||||
$('#edit_nilai').val(data.nilai);
|
|
||||||
|
|
||||||
// Update form action
|
|
||||||
$('#formEdit').attr('action', '/admin/subkriteria/' + id);
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.querySelectorAll('button[data-bs-target="#modalEdit"]').forEach(button => {
|
|
||||||
button.addEventListener('click', function () {
|
|
||||||
const id = this.getAttribute('data-id');
|
|
||||||
const nama = this.getAttribute('data-nama');
|
|
||||||
const nilai = this.getAttribute('data-nilai');
|
|
||||||
const kriteria = this.getAttribute('data-kriteria');
|
|
||||||
|
|
||||||
document.getElementById('edit_id').value = id;
|
|
||||||
document.getElementById('edit_nama_subkriteria').value = nama;
|
|
||||||
document.getElementById('edit_nilai').value = nilai;
|
|
||||||
document.getElementById('formEdit').action = `/admin/subkriteria/${id}`;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Fungsi untuk menampilkan SweetAlert sukses
|
|
||||||
function showSuccessMessage(message) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fungsi untuk memperbarui nomor urut setelah penghapusan
|
|
||||||
function updateRowNumbers() {
|
|
||||||
let rows = document.querySelectorAll("#dataTable tbody tr");
|
|
||||||
rows.forEach((row, index) => {
|
|
||||||
let numberCell = row.querySelector("td:first-child");
|
|
||||||
if (numberCell) {
|
|
||||||
numberCell.textContent = index + 1; // Perbarui nomor urut
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
document.querySelectorAll('.delete-button').forEach(button => {
|
|
||||||
button.addEventListener('click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah Anda yakin?",
|
|
||||||
text: "Data yang dihapus tidak dapat dikembalikan!",
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#d33",
|
|
||||||
cancelButtonColor: "#3085d6",
|
|
||||||
confirmButtonText: "Ya, hapus!",
|
|
||||||
cancelButtonText: "Batal"
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
let form = this.closest('form');
|
|
||||||
let url = form.action;
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'Accept': 'application/json'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.success) {
|
|
||||||
document.getElementById(`subkriteria_${data.id}`)?.remove();
|
|
||||||
updateRowNumbers();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Data Terhapus!',
|
|
||||||
text: 'Data berhasil dihapus.',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat dihapus.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat menghapus data.", "error");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah menambah data
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah edit data
|
|
||||||
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let form = this;
|
|
||||||
let url = form.action;
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'POST', // atau 'PUT' jika pakai PUT
|
|
||||||
body: formData,
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
console.log(data);
|
|
||||||
if (data.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log("Error di fetch:", error);
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -1,303 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Sub Kriteria')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Sub Kriteria
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold text-primary">
|
|
||||||
<i class="bi bi-table"></i> Lokasi Acara (C5)
|
|
||||||
</h6>
|
|
||||||
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalTambah">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Data
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Nama Sub Kriteria</th>
|
|
||||||
<th class="text-center">Nilai</th>
|
|
||||||
<th class="text-center">Kriteria</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($subkriteria as $key => $item)
|
|
||||||
<tr id="subkriteria_{{ $item->id }}">
|
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
|
||||||
<td class="text-center nama">{{ $item->nama_subkriteria }}</td>
|
|
||||||
<td class="text-center nilai">{{ $item->nilai }}</td>
|
|
||||||
<td class="text-center">{{ $item->datakriteria->nama_kriteria ?? $item->kriteria_id }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center" style="gap: 10px;">
|
|
||||||
<button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalEdit"
|
|
||||||
data-id="{{ $item->id }}"
|
|
||||||
data-nama="{{ $item->nama_subkriteria }}"
|
|
||||||
data-nilai="{{ $item->nilai }}"
|
|
||||||
data-kriteria="{{ $item->kriteria_id }}">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form action="{{ route('admin.subkriteria.destroy', $item->id) }}" method="POST" class="delete-form">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm delete-button">
|
|
||||||
<i class="bi bi-trash"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Tambah Data -->
|
|
||||||
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalTambahLabel">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Sub Kriteria
|
|
||||||
</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('admin.subkriteria.lokasiacara.store') }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<!-- Nama Sub Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Nilai -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="nilai" name="nilai" min="1" max="5" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="kriteria_id" class="form-label fw-bold">Kriteria</label>
|
|
||||||
<select class="form-select" id="kriteria_id" name="kriteria_id" required>
|
|
||||||
<option value="" disabled selected>--- Pilih Kriteria ---</option>
|
|
||||||
@foreach($datakriteria as $kriteria)
|
|
||||||
<option value="{{ $kriteria->id }}">{{ $kriteria->nama_kriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Simpan & Batal -->
|
|
||||||
<div class="d-flex justify-content-end" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn btn-warning" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-success">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Edit -->
|
|
||||||
<div class="modal fade" id="modalEdit" tabindex="-1" aria-labelledby="modalEditLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalEditLabel">Edit Sub Kriteria</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<form id="formEdit" method="POST">
|
|
||||||
@csrf
|
|
||||||
@method('PUT')
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" id="edit_id" name="id">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="edit_nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="edit_nilai" name="nilai" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-edit', function() {
|
|
||||||
var id = $(this).data('id');
|
|
||||||
$.get("/admin/subkriteria/" + id + "/edit", function(data) {
|
|
||||||
$('#edit_id').val(data.id);
|
|
||||||
$('#edit_nama_subkriteria').val(data.nama_subkriteria);
|
|
||||||
$('#edit_nilai').val(data.nilai);
|
|
||||||
|
|
||||||
// Update form action
|
|
||||||
$('#formEdit').attr('action', '/admin/subkriteria/' + id);
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.querySelectorAll('button[data-bs-target="#modalEdit"]').forEach(button => {
|
|
||||||
button.addEventListener('click', function () {
|
|
||||||
const id = this.getAttribute('data-id');
|
|
||||||
const nama = this.getAttribute('data-nama');
|
|
||||||
const nilai = this.getAttribute('data-nilai');
|
|
||||||
const kriteria = this.getAttribute('data-kriteria');
|
|
||||||
|
|
||||||
document.getElementById('edit_id').value = id;
|
|
||||||
document.getElementById('edit_nama_subkriteria').value = nama;
|
|
||||||
document.getElementById('edit_nilai').value = nilai;
|
|
||||||
document.getElementById('formEdit').action = `/admin/subkriteria/${id}`;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Fungsi untuk menampilkan SweetAlert sukses
|
|
||||||
function showSuccessMessage(message) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fungsi untuk memperbarui nomor urut setelah penghapusan
|
|
||||||
function updateRowNumbers() {
|
|
||||||
let rows = document.querySelectorAll("#dataTable tbody tr");
|
|
||||||
rows.forEach((row, index) => {
|
|
||||||
let numberCell = row.querySelector("td:first-child");
|
|
||||||
if (numberCell) {
|
|
||||||
numberCell.textContent = index + 1; // Perbarui nomor urut
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
document.querySelectorAll('.delete-button').forEach(button => {
|
|
||||||
button.addEventListener('click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah Anda yakin?",
|
|
||||||
text: "Data yang dihapus tidak dapat dikembalikan!",
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#d33",
|
|
||||||
cancelButtonColor: "#3085d6",
|
|
||||||
confirmButtonText: "Ya, hapus!",
|
|
||||||
cancelButtonText: "Batal"
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
let form = this.closest('form');
|
|
||||||
let url = form.action;
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'Accept': 'application/json'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.success) {
|
|
||||||
document.getElementById(`subkriteria_${data.id}`)?.remove();
|
|
||||||
updateRowNumbers();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Data Terhapus!',
|
|
||||||
text: 'Data berhasil dihapus.',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat dihapus.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat menghapus data.", "error");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah menambah data
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah edit data
|
|
||||||
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let form = this;
|
|
||||||
let url = form.action;
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'POST', // atau 'PUT' jika pakai PUT
|
|
||||||
body: formData,
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
console.log(data);
|
|
||||||
if (data.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log("Error di fetch:", error);
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -1,303 +0,0 @@
|
||||||
@extends('admin.layouts.base')
|
|
||||||
|
|
||||||
@section('title', 'Data Sub Kriteria')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
|
|
||||||
<div class="d-flex justify-content-between align-items-center mb-4">
|
|
||||||
<h1 class="h3 text-grey-800">
|
|
||||||
<i class="bi bi-boxes"></i> Data Sub Kriteria
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card shadow mb-4">
|
|
||||||
<div class="card-header py-3 d-flex justify-content-between align-items-center">
|
|
||||||
<h6 class="m-0 font-weight-bold text-primary">
|
|
||||||
<i class="bi bi-table"></i> Warna Pakaian (C4)
|
|
||||||
</h6>
|
|
||||||
<button type="button" class="btn btn-success" data-bs-toggle="modal" data-bs-target="#modalTambah">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Data
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-center">No</th>
|
|
||||||
<th class="text-center">Nama Sub Kriteria</th>
|
|
||||||
<th class="text-center">Nilai</th>
|
|
||||||
<th class="text-center">Kriteria</th>
|
|
||||||
<th class="text-center">Aksi</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($subkriteria as $key => $item)
|
|
||||||
<tr id="subkriteria_{{ $item->id }}">
|
|
||||||
<td class="text-center">{{ $key + 1 }}</td>
|
|
||||||
<td class="text-center nama">{{ $item->nama_subkriteria }}</td>
|
|
||||||
<td class="text-center nilai">{{ $item->nilai }}</td>
|
|
||||||
<td class="text-center">{{ $item->datakriteria->nama_kriteria ?? $item->kriteria_id }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<div class="d-flex justify-content-center" style="gap: 10px;">
|
|
||||||
<button class="btn btn-warning btn-sm" data-bs-toggle="modal" data-bs-target="#modalEdit"
|
|
||||||
data-id="{{ $item->id }}"
|
|
||||||
data-nama="{{ $item->nama_subkriteria }}"
|
|
||||||
data-nilai="{{ $item->nilai }}"
|
|
||||||
data-kriteria="{{ $item->kriteria_id }}">
|
|
||||||
<i class="bi bi-pencil"></i>
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<form action="{{ route('admin.subkriteria.destroy', $item->id) }}" method="POST" class="delete-form">
|
|
||||||
@csrf
|
|
||||||
@method('DELETE')
|
|
||||||
<button type="submit" class="btn btn-danger btn-sm delete-button">
|
|
||||||
<i class="bi bi-trash"></i>
|
|
||||||
</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Tambah Data -->
|
|
||||||
<div class="modal fade" id="modalTambah" tabindex="-1" aria-labelledby="modalTambahLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalTambahLabel">
|
|
||||||
<i class="bi bi-plus-circle"></i> Tambah Sub Kriteria
|
|
||||||
</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('admin.subkriteria.warnapakaian.store') }}" method="POST">
|
|
||||||
@csrf
|
|
||||||
<!-- Nama Sub Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Nilai -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="nilai" name="nilai" min="1" max="5" required>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Kriteria -->
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="kriteria_id" class="form-label fw-bold">Kriteria</label>
|
|
||||||
<select class="form-select" id="kriteria_id" name="kriteria_id" required>
|
|
||||||
<option value="" disabled selected>--- Pilih Kriteria ---</option>
|
|
||||||
@foreach($datakriteria as $kriteria)
|
|
||||||
<option value="{{ $kriteria->id }}">{{ $kriteria->nama_kriteria }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Tombol Simpan & Batal -->
|
|
||||||
<div class="d-flex justify-content-end" style="gap: 10px;">
|
|
||||||
<button type="button" class="btn btn-warning" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-success">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Modal Edit -->
|
|
||||||
<div class="modal fade" id="modalEdit" tabindex="-1" aria-labelledby="modalEditLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="modalEditLabel">Edit Sub Kriteria</h5>
|
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
||||||
</div>
|
|
||||||
<form id="formEdit" method="POST">
|
|
||||||
@csrf
|
|
||||||
@method('PUT')
|
|
||||||
<div class="modal-body">
|
|
||||||
<input type="hidden" id="edit_id" name="id">
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nama_subkriteria" class="form-label">Nama Sub Kriteria</label>
|
|
||||||
<input type="text" class="form-control" id="edit_nama_subkriteria" name="nama_subkriteria" required>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label for="edit_nilai" class="form-label">Nilai</label>
|
|
||||||
<input type="number" class="form-control" id="edit_nilai" name="nilai" required>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Batal</button>
|
|
||||||
<button type="submit" class="btn btn-primary">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
$(document).on('click', '.btn-edit', function() {
|
|
||||||
var id = $(this).data('id');
|
|
||||||
$.get("/admin/subkriteria/" + id + "/edit", function(data) {
|
|
||||||
$('#edit_id').val(data.id);
|
|
||||||
$('#edit_nama_subkriteria').val(data.nama_subkriteria);
|
|
||||||
$('#edit_nilai').val(data.nilai);
|
|
||||||
|
|
||||||
// Update form action
|
|
||||||
$('#formEdit').attr('action', '/admin/subkriteria/' + id);
|
|
||||||
|
|
||||||
// Tampilkan modal
|
|
||||||
$('#modalEdit').modal('show');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.querySelectorAll('button[data-bs-target="#modalEdit"]').forEach(button => {
|
|
||||||
button.addEventListener('click', function () {
|
|
||||||
const id = this.getAttribute('data-id');
|
|
||||||
const nama = this.getAttribute('data-nama');
|
|
||||||
const nilai = this.getAttribute('data-nilai');
|
|
||||||
const kriteria = this.getAttribute('data-kriteria');
|
|
||||||
|
|
||||||
document.getElementById('edit_id').value = id;
|
|
||||||
document.getElementById('edit_nama_subkriteria').value = nama;
|
|
||||||
document.getElementById('edit_nilai').value = nilai;
|
|
||||||
document.getElementById('formEdit').action = `/admin/subkriteria/${id}`;
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Tambahkan SweetAlert2 -->
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
// Fungsi untuk menampilkan SweetAlert sukses
|
|
||||||
function showSuccessMessage(message) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: message,
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Fungsi untuk memperbarui nomor urut setelah penghapusan
|
|
||||||
function updateRowNumbers() {
|
|
||||||
let rows = document.querySelectorAll("#dataTable tbody tr");
|
|
||||||
rows.forEach((row, index) => {
|
|
||||||
let numberCell = row.querySelector("td:first-child");
|
|
||||||
if (numberCell) {
|
|
||||||
numberCell.textContent = index + 1; // Perbarui nomor urut
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// SweetAlert untuk konfirmasi hapus data
|
|
||||||
document.querySelectorAll('.delete-button').forEach(button => {
|
|
||||||
button.addEventListener('click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
title: "Apakah Anda yakin?",
|
|
||||||
text: "Data yang dihapus tidak dapat dikembalikan!",
|
|
||||||
icon: "warning",
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: "#d33",
|
|
||||||
cancelButtonColor: "#3085d6",
|
|
||||||
confirmButtonText: "Ya, hapus!",
|
|
||||||
cancelButtonText: "Batal"
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
let form = this.closest('form');
|
|
||||||
let url = form.action;
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'DELETE',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'Accept': 'application/json'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
if (data.success) {
|
|
||||||
document.getElementById(`subkriteria_${data.id}`)?.remove();
|
|
||||||
updateRowNumbers();
|
|
||||||
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Data Terhapus!',
|
|
||||||
text: 'Data berhasil dihapus.',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat dihapus.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat menghapus data.", "error");
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah menambah data
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
const successMessage = "{{ session('success') }}";
|
|
||||||
if (successMessage.trim() !== "") {
|
|
||||||
showSuccessMessage(successMessage);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// SweetAlert setelah edit data
|
|
||||||
document.getElementById('formEdit')?.addEventListener('submit', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
let form = this;
|
|
||||||
let url = form.action;
|
|
||||||
let formData = new FormData(form);
|
|
||||||
|
|
||||||
fetch(url, {
|
|
||||||
method: 'POST', // atau 'PUT' jika pakai PUT
|
|
||||||
body: formData,
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content,
|
|
||||||
'X-Requested-With': 'XMLHttpRequest'
|
|
||||||
},
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
console.log(data);
|
|
||||||
if (data.success) {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'success',
|
|
||||||
title: 'Berhasil!',
|
|
||||||
text: 'Data berhasil diperbarui!',
|
|
||||||
showConfirmButton: false,
|
|
||||||
timer: 1500
|
|
||||||
}).then(() => {
|
|
||||||
location.reload();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Swal.fire("Gagal!", data.message || "Data tidak dapat diperbarui.", "error");
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.log("Error di fetch:", error);
|
|
||||||
Swal.fire("Error!", "Terjadi kesalahan saat mengupdate data.", "error");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
112
routes/web.php
112
routes/web.php
|
@ -1,22 +1,15 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Http\Controllers\Admin\AlternatifController;
|
|
||||||
use App\Http\Controllers\Admin\AuthController;
|
|
||||||
use App\Http\Controllers\Admin\DashboardController;
|
|
||||||
use App\Http\Controllers\Admin\DataKriteriaController;
|
|
||||||
use App\Http\Controllers\Admin\HasilAkhirController;
|
|
||||||
use App\Http\Controllers\Admin\PenilaianController;
|
|
||||||
use App\Http\Controllers\Admin\PerhitunganController;
|
|
||||||
use App\Http\Controllers\Admin\ResetPasswordController;
|
|
||||||
use App\Http\Controllers\Admin\RiwayatController;
|
|
||||||
use App\Http\Controllers\Admin\SubkriteriaController;
|
|
||||||
use App\Http\Controllers\Admin\UserController;
|
|
||||||
use App\Http\Controllers\ForgotPasswordController;
|
|
||||||
use App\Http\Controllers\Landingpage\DressController;
|
|
||||||
use App\Http\Controllers\Landingpage\HomeController;
|
|
||||||
use App\Http\Controllers\QuizController;
|
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
|
use App\Http\Controllers\KriteriaController;
|
||||||
|
use App\Http\Controllers\Admin\AuthController;
|
||||||
|
use App\Http\Controllers\Admin\DashboardController;
|
||||||
|
use App\Http\Controllers\Landingpage\HomeController;
|
||||||
|
use App\Http\Controllers\SubKriteriaController;
|
||||||
|
use App\Http\Controllers\Admin\ResetPasswordController;
|
||||||
|
use App\Http\Controllers\PakaianController;
|
||||||
|
use App\Http\Controllers\SubKriteriaShowController;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|--------------------------------------------------------------------------
|
|--------------------------------------------------------------------------
|
||||||
|
@ -65,51 +58,58 @@ Route::post('/logout', function () {
|
||||||
})->name('logout');
|
})->name('logout');
|
||||||
|
|
||||||
// Dashboard
|
// Dashboard
|
||||||
Route::get('/dashboard', [DashboardController::class, 'indexPage'])->name('dashboard');
|
Route::prefix('admin')->middleware(['auth'])->as('admin.')->group(function () {
|
||||||
|
Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
||||||
|
Route::resource('kriteria', KriteriaController::class);
|
||||||
|
Route::resource('subkriteria', SubkriteriaController::class);
|
||||||
|
Route::get('kriteria/subkriteria/{nama_kriteria}', [SubKriteriaShowController::class, 'indexShow'])->name('kriteria.subkriteria.index');
|
||||||
|
|
||||||
// Kriteria
|
Route::resource('pakaian', PakaianController::class);
|
||||||
Route::get('/kriteria', [DataKriteriaController::class, 'indexPage'])->name('admin.kriteria.index');
|
});
|
||||||
Route::get('/kriteria/create', [DataKriteriaController::class, 'create'])->name('admin.kriteria.create');
|
|
||||||
Route::post('/kriteria/store', [DataKriteriaController::class, 'store'])->name('admin.kriteria.store');
|
|
||||||
Route::get('/kriteria/{id}/edit', [DataKriteriaController::class, 'edit'])->name('admin.kriteria.edit');
|
|
||||||
Route::put('/kriteria/{id}/update', [DataKriteriaController::class, 'update'])->name('admin.kriteria.update');
|
|
||||||
Route::delete('/kriteria/{id}/delete', [DataKriteriaController::class, 'destroy'])->name('admin.kriteria.destroy');
|
|
||||||
|
|
||||||
// Sub Kriteria
|
// // Kriteria
|
||||||
Route::get('/admin/subkriteria/kriteria/{id}', [SubkriteriaController::class, 'showByKriteria'])->name('admin.pages.subkriteria.kriteria');
|
// Route::get('/kriteria', [DataKriteriaController::class, 'indexPage'])->name('admin.kriteria.index');
|
||||||
Route::get('/admin/subkriteria/kriteria/{id}/create', [SubkriteriaController::class, 'create'])->name('admin.subkriteria.create');
|
// Route::get('/kriteria/create', [DataKriteriaController::class, 'create'])->name('admin.kriteria.create');
|
||||||
Route::post('/admin/subkriteria/store', [SubKriteriaController::class, 'store'])->name('admin.subkriteria.store');
|
// Route::post('/kriteria/store', [DataKriteriaController::class, 'store'])->name('admin.kriteria.store');
|
||||||
Route::get('/admin/subkriteria/{id}/edit', [SubkriteriaController::class, 'edit'])->name('admin.subkriteria.edit');
|
// Route::get('/kriteria/{id}/edit', [DataKriteriaController::class, 'edit'])->name('admin.kriteria.edit');
|
||||||
Route::put('/admin/subkriteria/{id}', [SubkriteriaController::class, 'update'])->name('admin.pages.subkriteria.update');
|
// Route::put('/kriteria/{id}/update', [DataKriteriaController::class, 'update'])->name('admin.kriteria.update');
|
||||||
Route::delete('/admin/subkriteria/{id}', [SubkriteriaController::class, 'destroy'])->name('subkriteria.destroy');
|
// Route::delete('/kriteria/{id}/delete', [DataKriteriaController::class, 'destroy'])->name('admin.kriteria.destroy');
|
||||||
|
|
||||||
// Data alternatif
|
// // Sub Kriteria
|
||||||
Route::get('/alternatif', [AlternatifController::class, 'indexPage'])->name('admin.alternatif.index');
|
// Route::get('/admin/subkriteria/kriteria/{id}', [SubkriteriaController::class, 'showByKriteria'])->name('admin.pages.subkriteria.kriteria');
|
||||||
Route::post('/admin/alternatif', [AlternatifController::class, 'store'])->name('admin.alternatif.store');
|
// Route::get('/admin/subkriteria/kriteria/{id}/create', [SubkriteriaController::class, 'create'])->name('admin.subkriteria.create');
|
||||||
Route::get('/alternatif/{id}/edit', [AlternatifController::class, 'edit'])->name('admin.alternatif.edit');
|
// Route::post('/admin/subkriteria/store', [SubKriteriaController::class, 'store'])->name('admin.subkriteria.store');
|
||||||
Route::put('/alternatif/{id}', [AlternatifController::class, 'update'])->name('admin.alternatif.update');
|
// Route::get('/admin/subkriteria/{id}/edit', [SubkriteriaController::class, 'edit'])->name('admin.subkriteria.edit');
|
||||||
Route::delete('/alternatif/{id}', [AlternatifController::class, 'destroy'])->name('admin.alternatif.destroy');
|
// Route::put('/admin/subkriteria/{id}', [SubkriteriaController::class, 'update'])->name('admin.pages.subkriteria.update');
|
||||||
|
// Route::delete('/admin/subkriteria/{id}', [SubkriteriaController::class, 'destroy'])->name('subkriteria.destroy');
|
||||||
|
|
||||||
// Penilaian alternatif
|
// // Data alternatif
|
||||||
Route::get('/penilaian', [PenilaianController::class, 'indexPage'])->name('admin.penilaian.index');
|
// Route::get('/alternatif', [AlternatifController::class, 'indexPage'])->name('admin.alternatif.index');
|
||||||
Route::get('/penilaian/create', [PenilaianController::class, 'create'])->name('admin.penilaian.create');
|
// Route::post('/admin/alternatif', [AlternatifController::class, 'store'])->name('admin.alternatif.store');
|
||||||
Route::get('/penilaian/{id}/edit', [PenilaianController::class, 'edit'])->name('admin.penilaian.edit');
|
// Route::get('/alternatif/{id}/edit', [AlternatifController::class, 'edit'])->name('admin.alternatif.edit');
|
||||||
Route::put('/penilaian/{id}', [PenilaianController::class, 'update'])->name('admin.penilaian.update');
|
// Route::put('/alternatif/{id}', [AlternatifController::class, 'update'])->name('admin.alternatif.update');
|
||||||
|
// Route::delete('/alternatif/{id}', [AlternatifController::class, 'destroy'])->name('admin.alternatif.destroy');
|
||||||
|
|
||||||
// Data user
|
// // Penilaian alternatif
|
||||||
// Route::get('/user', [UserController::class, 'index'])->name('users.index');
|
// Route::get('/penilaian', [PenilaianController::class, 'indexPage'])->name('admin.penilaian.index');
|
||||||
Route::get('/user/{id}', [UserController::class, 'show'])->name('user.show');
|
// Route::get('/penilaian/create', [PenilaianController::class, 'create'])->name('admin.penilaian.create');
|
||||||
Route::get('/user/{id}/edit', [UserController::class, 'edit'])->name('user.edit');
|
// Route::get('/penilaian/{id}/edit', [PenilaianController::class, 'edit'])->name('admin.penilaian.edit');
|
||||||
Route::put('/user/{id}', [UserController::class, 'update'])->name('user.update');
|
// Route::put('/penilaian/{id}', [PenilaianController::class, 'update'])->name('admin.penilaian.update');
|
||||||
// Route::delete('/user/{id}', [UserController::class, 'destroy'])->name('user.destroy');
|
|
||||||
|
|
||||||
// Data perhitungan
|
// // Data user
|
||||||
Route::get('/perhitungan/dress', [PerhitunganController::class, 'dress'])->name('admin.perhitungan.dress');
|
// // Route::get('/user', [UserController::class, 'index'])->name('users.index');
|
||||||
Route::get('/perhitungan/blouse', [PerhitunganController::class, 'blouse'])->name('admin.perhitungan.blouse');
|
// Route::get('/user/{id}', [UserController::class, 'show'])->name('user.show');
|
||||||
Route::get('/perhitungan/cardigan', [PerhitunganController::class, 'cardigan'])->name('admin.perhitungan.cardigan');
|
// Route::get('/user/{id}/edit', [UserController::class, 'edit'])->name('user.edit');
|
||||||
Route::get('/perhitungan/rok', [PerhitunganController::class, 'rok'])->name('admin.perhitungan.rok');
|
// Route::put('/user/{id}', [UserController::class, 'update'])->name('user.update');
|
||||||
Route::get('/perhitungan/celana', [PerhitunganController::class, 'celana'])->name('admin.perhitungan.celana');
|
// // Route::delete('/user/{id}', [UserController::class, 'destroy'])->name('user.destroy');
|
||||||
|
|
||||||
// Riwayat
|
// // Data perhitungan
|
||||||
Route::get('/riwayat', [RiwayatController::class, 'index'])->name('admin.riwayat.index');
|
// Route::get('/perhitungan/dress', [PerhitunganController::class, 'dress'])->name('admin.perhitungan.dress');
|
||||||
Route::delete('/riwayat/{id}', [RiwayatController::class, 'destroy'])->name('admin.riwayat.destroy');
|
// Route::get('/perhitungan/blouse', [PerhitunganController::class, 'blouse'])->name('admin.perhitungan.blouse');
|
||||||
|
// Route::get('/perhitungan/cardigan', [PerhitunganController::class, 'cardigan'])->name('admin.perhitungan.cardigan');
|
||||||
|
// Route::get('/perhitungan/rok', [PerhitunganController::class, 'rok'])->name('admin.perhitungan.rok');
|
||||||
|
// Route::get('/perhitungan/celana', [PerhitunganController::class, 'celana'])->name('admin.perhitungan.celana');
|
||||||
|
|
||||||
|
// // Riwayat
|
||||||
|
// Route::get('/riwayat', [RiwayatController::class, 'index'])->name('admin.riwayat.index');
|
||||||
|
// Route::delete('/riwayat/{id}', [RiwayatController::class, 'destroy'])->name('admin.riwayat.destroy');
|
||||||
|
|
Loading…
Reference in New Issue