322 lines
12 KiB
PHP
322 lines
12 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\alternatif;
|
|
use App\Models\datakriteria;
|
|
use App\Models\datasubkriteria;
|
|
use App\Models\penduduk;
|
|
use App\Models\prioritaskriteria;
|
|
use App\Models\prioritassubkriteria;
|
|
use App\Models\rangking;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
class DataAlternatifController extends Controller
|
|
{
|
|
|
|
public function index()
|
|
{
|
|
$alternatifs = alternatif::all();
|
|
$datakriterias = datakriteria::all();
|
|
$datasubkriterias = datasubkriteria::all();
|
|
$penduduks = penduduk::all();
|
|
$datakriterias = Datakriteria::all();
|
|
$prioritaskriterias = Prioritaskriteria::all();
|
|
$prioritassubkriterias = Prioritassubkriteria::all();
|
|
|
|
// Group data by kode_kriteria
|
|
$groupedData = $datakriterias->map(function($datakriteria) use ($prioritaskriterias) {
|
|
// Find corresponding prioritaskriteria based on kode_kriteria
|
|
$prioritasK = $prioritaskriterias->firstWhere('kode_kriteria', $datakriteria->kode_kriteria);
|
|
|
|
return [
|
|
'kode_kriteria' => $datakriteria->kode_kriteria,
|
|
'nama_kriteria' => $datakriteria->nama_kriteria,
|
|
'nilai_prioritas' => $prioritasK->nilai_prioritas ?? null,
|
|
];
|
|
});
|
|
$groupedSubkriterias = $datasubkriterias->map(function($datasubkriteria) use ($prioritassubkriterias) {
|
|
$prioritas = $prioritassubkriterias->firstWhere('kode_subkriteria', $datasubkriteria->kode_subkriteria);
|
|
return [
|
|
'kode_kriteria' => $datasubkriteria->kode_kriteria,
|
|
'kode_subkriteria' => $datasubkriteria->kode_subkriteria,
|
|
'nama_subkriteria' => $datasubkriteria->nama_subkriteria,
|
|
'nilai_prioritas' => $prioritas->nilai_prioritas ?? null,
|
|
];
|
|
});
|
|
return view('pages.dataAlternatif', compact('alternatifs','prioritaskriterias','prioritassubkriterias', 'datakriterias','datasubkriterias', 'penduduks','groupedData', 'groupedSubkriterias'));
|
|
}
|
|
|
|
public function showTable()
|
|
{
|
|
// Fetch criteria data
|
|
$datakriterias = DB::table('datakriterias')->get()->toArray();
|
|
|
|
// Fetch alternatif data
|
|
$alternatifs = DB::table('alternatifs')->get()->toArray();
|
|
$dataSubkriterias = DataSubkriteria::pluck('kode_subkriteria', 'nama_subkriteria')->toArray();
|
|
|
|
// Assuming each alternatif is an associative array with keys corresponding to kode_subkriteria
|
|
return view('pages.dataAlternatif', compact('datakriterias', 'alternatifs','datasubkriterias'));
|
|
}
|
|
|
|
public function showalternatif()
|
|
{
|
|
$alternatifs = alternatif::all();
|
|
$datakriterias = datakriteria::all();
|
|
$datasubkriterias = datasubkriteria::all();
|
|
$penduduks = penduduk::all();
|
|
return view('pages.talternatif', compact('alternatifs', 'datakriterias','datasubkriterias', 'penduduks'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
return view('pages.talternatif');
|
|
}
|
|
public function showkriteria()
|
|
{
|
|
$alternatifs = datakriteria::all();
|
|
|
|
$prioritaskriterias = prioritaskriteria::all();
|
|
$prioritassubkriterias = prioritassubkriteria::all();
|
|
return view('pages.dataAlternatif', compact('alternatifs','prioritassubkriterias','prioritaskriterias'));
|
|
}
|
|
public function showpenduduk()
|
|
{
|
|
$alternatifs = penduduk::all();
|
|
return view('pages.dataAlternatif', compact('alternatifs'));
|
|
}
|
|
public function store(Request $request)
|
|
{
|
|
$validatedData = $request->validate([
|
|
|
|
'kode' => 'required',
|
|
'nama' => 'required',
|
|
'p1' => 'nullable|string|max:255',
|
|
'p2' => 'nullable|string|max:255',
|
|
'p3' => 'nullable|string|max:255',
|
|
'p4' => 'nullable|string|max:255',
|
|
'p5' => 'nullable|string|max:255',
|
|
'p6' => 'nullable|string|max:255',
|
|
'p7' => 'nullable|string|max:255',
|
|
'p8' => 'nullable|string|max:255',
|
|
'p9' => 'nullable|string|max:255',
|
|
'p10' => 'nullable|string|max:255',
|
|
]);
|
|
|
|
$alternatifs = new alternatif();
|
|
$alternatifs->kode = $validatedData['kode'];
|
|
$alternatifs->nama = $validatedData['nama'];
|
|
$alternatifs->p1 = $validatedData['p1'] ?? null;
|
|
$alternatifs->p2 = $validatedData['p2'] ?? null;
|
|
$alternatifs->p3 = $validatedData['p3'] ?? null;
|
|
$alternatifs->p4 = $validatedData['p4'] ?? null;
|
|
$alternatifs->p5 = $validatedData['p5'] ?? null;
|
|
$alternatifs->p6 = $validatedData['p6'] ?? null;
|
|
$alternatifs->p7 = $validatedData['p7'] ?? null;
|
|
$alternatifs->p8 = $validatedData['p8'] ?? null;
|
|
$alternatifs->p9 = $validatedData['p9'] ?? null;
|
|
$alternatifs->p10 = $validatedData['p10'] ?? null;
|
|
|
|
// Menyimpan data ke database
|
|
if ($alternatifs->save()) {
|
|
return redirect('/dataalternatif')->with('success', 'Data Alternatif berhasil disimpan.');
|
|
} else {
|
|
return redirect('/dataalternatif')->with('error', 'Terjadi kesalahan saat menyimpan data Alternatif.');
|
|
}
|
|
}
|
|
|
|
public function edit($id)
|
|
{
|
|
$alternatifs = alternatif::find($id);
|
|
$penduduks = penduduk::all();
|
|
$datakriterias = datakriteria::all();
|
|
$datasubkriterias = datasubkriteria::all();
|
|
|
|
|
|
return view('pages.ealternatif', compact('alternatifs','penduduks','datakriterias','datasubkriterias'));
|
|
}
|
|
public function hapus($id)
|
|
{
|
|
$alternatifs = alternatif::find($id);
|
|
|
|
if ($alternatifs) {
|
|
$alternatifs->delete();
|
|
return redirect()->back()->with('success', 'Data berhasil dihapus.');
|
|
} else {
|
|
return redirect()->back()->with('error', ' Data gagal dihapus');
|
|
}
|
|
}
|
|
public function update(Request $request, $id)
|
|
{
|
|
$validatedData = $request->validate([
|
|
'kode' => 'required|string|max:255',
|
|
'nama' => 'required|string|max:255',
|
|
'p1' => 'nullable|string|max:255',
|
|
'p2' => 'nullable|string|max:255',
|
|
'p3' => 'nullable|string|max:255',
|
|
'p4' => 'nullable|string|max:255',
|
|
'p5' => 'nullable|string|max:255',
|
|
'p6' => 'nullable|string|max:255',
|
|
'p7' => 'nullable|string|max:255',
|
|
'p8' => 'nullable|string|max:255',
|
|
'p9' => 'nullable|string|max:255',
|
|
'p10' => 'nullable|string|max:255',
|
|
]);
|
|
|
|
// Cari Alternatif berdasarkan ID
|
|
$alternatif = Alternatif::findOrFail($id);
|
|
$alternatif->kode = $validatedData['kode'];
|
|
$alternatif->nama = $validatedData['nama'];
|
|
$alternatif->p1 = $validatedData['p1'] ?? null;
|
|
$alternatif->p2 = $validatedData['p2'] ?? null;
|
|
$alternatif->p3 = $validatedData['p3'] ?? null;
|
|
$alternatif->p4 = $validatedData['p4'] ?? null;
|
|
$alternatif->p5 = $validatedData['p5'] ?? null;
|
|
$alternatif->p6 = $validatedData['p6'] ?? null;
|
|
$alternatif->p7 = $validatedData['p7'] ?? null;
|
|
$alternatif->p8 = $validatedData['p8'] ?? null;
|
|
$alternatif->p9 = $validatedData['p9'] ?? null;
|
|
$alternatif->p10 = $validatedData['p10'] ?? null;
|
|
|
|
// Simpan perubahan
|
|
if ($alternatif->save()) {
|
|
return redirect('/dataalternatif')->with('success', 'Data Alternatif berhasil diperbarui.');
|
|
} else {
|
|
return redirect('/dataalternatif')->with('error', 'Terjadi kesalahan saat memperbarui data Alternatif.');
|
|
}
|
|
}
|
|
|
|
public function cetak()
|
|
{
|
|
|
|
$judul = 'Laporan Data Alternatif Penduduk';
|
|
$alternatifs = alternatif::all();
|
|
$datakriterias = datakriteria::all();
|
|
$datasubkriterias = datasubkriteria::all();
|
|
$penduduks = penduduk::all();
|
|
|
|
$prioritaskriterias = prioritaskriteria::all();
|
|
$prioritassubkriterias = prioritassubkriteria::all();
|
|
// Group data by kode_kriteria
|
|
$groupedData = $datakriterias->map(function($datakriteria) use ($prioritaskriterias) {
|
|
// Find corresponding prioritaskriteria based on kode_kriteria
|
|
$prioritasK = $prioritaskriterias->firstWhere('kode_kriteria', $datakriteria->kode_kriteria);
|
|
|
|
return [
|
|
'kode_kriteria' => $datakriteria->kode_kriteria,
|
|
'nama_kriteria' => $datakriteria->nama_kriteria,
|
|
'nilai_prioritas' => $prioritasK->nilai_prioritas ?? null,
|
|
];
|
|
});
|
|
$groupedSubkriterias = $datasubkriterias->map(function($datasubkriteria) use ($prioritassubkriterias) {
|
|
$prioritas = $prioritassubkriterias->firstWhere('kode_subkriteria', $datasubkriteria->kode_subkriteria);
|
|
return [
|
|
'kode_kriteria' => $datasubkriteria->kode_kriteria,
|
|
'kode_subkriteria' => $datasubkriteria->kode_subkriteria,
|
|
'nama_subkriteria' => $datasubkriteria->nama_subkriteria,
|
|
'nilai_prioritas' => $prioritas->nilai_prioritas ?? null,
|
|
];
|
|
});
|
|
return view('pages.print3', compact('judul', 'alternatifs', 'datakriterias', 'datasubkriterias', 'penduduks','prioritassubkriterias','prioritaskriterias','groupedSubkriterias'));
|
|
}
|
|
public function simpanalternatif(Request $request)
|
|
{
|
|
// Validate the request data
|
|
$request->validate([
|
|
'alternatif' => 'required|array',
|
|
]);
|
|
|
|
// Iterate through each alternative and save the data
|
|
foreach ($request->alternatif as $kode => $alternatifData) {
|
|
// Save or update the record in the `rangking` table
|
|
Rangking::updateOrCreate(
|
|
['kode' => $alternatifData['kode']],
|
|
[
|
|
'total' => $alternatifData['total'],
|
|
'keterangan' => $alternatifData['status']
|
|
]
|
|
);
|
|
}
|
|
|
|
return redirect()->back()->with('success', 'Data berhasil disimpan.');
|
|
}
|
|
|
|
|
|
|
|
protected function validateAlternatifData($data)
|
|
{
|
|
return [
|
|
'kode' => $data['kode'],
|
|
'total' => is_numeric($data['total']) ? floatval($data['total']) : 0.0
|
|
];
|
|
}
|
|
public function hitungbobot()
|
|
{
|
|
// Mengambil semua data yang diperlukan
|
|
$alternatifs = alternatif::all();
|
|
$datakriterias = datakriteria::all();
|
|
$datasubkriterias = datasubkriteria::all();
|
|
$penduduks = penduduk::all();
|
|
|
|
// Mengambil prioritaskriteria dan prioritassubkriteria dengan pengurutan yang sesuai
|
|
$prioritask = prioritaskriteria::orderBy('kode_kriteria')
|
|
->orderBy('nilai_prioritas')
|
|
->get();
|
|
|
|
$prioritass = prioritassubkriteria::orderBy('kode_subkriteria')
|
|
->orderBy('nilai_prioritas', 'asc')
|
|
->get();
|
|
|
|
// Mengatur struktur data untuk menyimpan bobot prioritas kriteria dan subkriteria
|
|
$bobotPrioritasKriteria = [];
|
|
foreach ($prioritask as $item) {
|
|
$bobotPrioritasKriteria[$item->kode_kriteria] = $item->nilai_prioritas;
|
|
}
|
|
|
|
$bobotPrioritasSubkriteria = [];
|
|
foreach ($prioritass as $item) {
|
|
// Memisahkan kode_kriteria dari kode_subkriteria
|
|
$kodeKriteria = substr($item->kode_subkriteria, 0, 2); // Mengasumsikan panjang kode_kriteria adalah 2 karakter
|
|
$kodeSubkriteria = substr($item->kode_subkriteria, 2); // Mengambil bagian kode subkriteria setelah kode kriteria
|
|
|
|
// Memastikan hanya memproses data subkriteria yang sesuai dengan kriteria yang ada
|
|
if (isset($bobotPrioritasKriteria[$kodeKriteria])) {
|
|
// Menghitung bobot subkriteria berdasarkan nilai_prioritas subkriteria dan kriteria terkait
|
|
$bobotSubkriteria = $item->nilai_prioritas * $bobotPrioritasKriteria[$kodeKriteria];
|
|
// Menyimpan bobot subkriteria sesuai dengan kode subkriteria
|
|
$bobotPrioritasSubkriteria[$kodeSubkriteria] = $bobotSubkriteria;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return view('pages.talternatif', compact('alternatifs','prioritassubkriterias','prioritaskriterias', 'datakriterias', 'datasubkriterias', 'penduduks', 'prioritask', 'prioritass'));
|
|
}
|
|
|
|
public function tampilkanForm()
|
|
{
|
|
// Memanggil fungsi hitungbobot() untuk mendapatkan nilai bobot
|
|
$bobot = $this->hitungbobot();
|
|
|
|
// Mengirimkan variabel $bobot ke view bersamaan dengan view 'nama_view'
|
|
return view('pages.talternatif', ['bobot' => $bobot]);
|
|
}
|
|
public function deleteAlternatif($id)
|
|
{
|
|
$alternatif = Alternatif::find($id);
|
|
if ($alternatif) {
|
|
// Delete associated rankings
|
|
$alternatif->rangkings()->delete();
|
|
// Delete the alternatif
|
|
$alternatif->delete();
|
|
}
|
|
|
|
return redirect()->back()->with('success', 'Alternatif and its related rankings have been deleted.');
|
|
}
|
|
|
|
}
|