MIF_E31212322/app/Http/Controllers/DataAlternatifController.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.');
}
}