This commit is contained in:
commit
afe2ff3705
|
@ -0,0 +1,80 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Alternatif;
|
||||||
|
use App\Models\Kriteria;
|
||||||
|
use App\Models\Penilaian;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
|
class HasilPerhitunganController extends Controller
|
||||||
|
{
|
||||||
|
function index()
|
||||||
|
{
|
||||||
|
$alternatif = Alternatif::with('penilaian.kriteria')->orderBy('kode_alternatif', 'ASC')->get();
|
||||||
|
$kriteria = Kriteria::get();
|
||||||
|
$penilaian = Penilaian::with('subKriteria')->get();
|
||||||
|
// return response()->json($alternatif);
|
||||||
|
|
||||||
|
// mencari min max
|
||||||
|
foreach ($kriteria as $key => $vkriteria) {
|
||||||
|
foreach ($penilaian as $key_1 => $vpenilaian) {
|
||||||
|
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
||||||
|
if ($vkriteria->sifat == "benefit") {
|
||||||
|
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
||||||
|
} elseif ($vkriteria->sifat == "cost") {
|
||||||
|
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// normalisasi
|
||||||
|
foreach ($penilaian as $key_1 => $vpenilaian) {
|
||||||
|
foreach ($kriteria as $key => $vkriteria) {
|
||||||
|
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
||||||
|
if ($vkriteria->sifat == "benefit") { //nilai sub_kriteria : nilai maksimal
|
||||||
|
$normalisasi[$vpenilaian->alternatif->guru['id']][$vkriteria->id] = $vpenilaian->subKriteria['bobot'] / max($minMax[$vkriteria->id]);
|
||||||
|
} elseif ($vkriteria->sifat == "cost") { //nilai minimal : nilai sub_kriteria
|
||||||
|
$normalisasi[$vpenilaian->alternatif->guru['id']][$vkriteria->id] = min($minMax[$vkriteria->id]) / $vpenilaian->subKriteria['bobot'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// perangkingan
|
||||||
|
foreach ($normalisasi as $key => $vnormalisasi) {
|
||||||
|
foreach ($kriteria as $key_1 => $vkriteria) { // hasil normalisasi x bobot_kriteria
|
||||||
|
// Check if the key exists in the $vnormalisasi array
|
||||||
|
if (isset($vnormalisasi[$vkriteria->id])) {
|
||||||
|
$rank[$key][] = $vnormalisasi[$vkriteria->id] * $vkriteria->bobot_kriteria;
|
||||||
|
} else {
|
||||||
|
// Handle the case when the key is not found (you can skip it or handle it accordingly)
|
||||||
|
// For example, you might want to assign a default value or log a message.
|
||||||
|
$rank[$key][] = 0; // Assign a default value
|
||||||
|
// or
|
||||||
|
// log_message('error', 'Key not found: ' . $vkriteria->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($normalisasi as $key => $value) { //total hasil perangkingan
|
||||||
|
$rank[$key][] = array_sum($rank[$key]);
|
||||||
|
// Tambahkan logika untuk menentukan status keterangan
|
||||||
|
if ($rank[$key] >= 100) {
|
||||||
|
$statusKeterangan[$key] = 'Sangat Baik';
|
||||||
|
} elseif ($rank[$key] >= 70 && $rank[$key] < 100) {
|
||||||
|
$statusKeterangan[$key] = 'Baik';
|
||||||
|
} elseif ($rank[$key] >= 20 && $rank[$key] < 70) {
|
||||||
|
$statusKeterangan[$key] = 'Cukup';
|
||||||
|
} else {
|
||||||
|
$statusKeterangan[$key] = 'Kurang';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
arsort($rank); //sortir $rank
|
||||||
|
|
||||||
|
// dd($rank);
|
||||||
|
return view('pages.hasil_perhitungan.index', compact(['kriteria', 'alternatif', 'penilaian', 'minMax', 'normalisasi', 'rank']));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,4 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\Alternatif;
|
use App\Models\Alternatif;
|
||||||
|
@ -9,88 +8,5 @@ use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
class HasilPerhitunganController extends Controller
|
class HasilPerhitunganController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
//
|
||||||
{
|
|
||||||
$user_id = Auth::id(); // Get the current user's ID
|
|
||||||
|
|
||||||
$periode = request()->input('periode');
|
|
||||||
$penguji = request()->input('penguji');
|
|
||||||
// Retrieve data from the database
|
|
||||||
$alternatif = Alternatif::with('penilaian.kriteria')->orderBy('kode_alternatif', 'ASC')->get();
|
|
||||||
$kriteria = Kriteria::get();
|
|
||||||
if ($penguji == null) {
|
|
||||||
$penilaian = Penilaian::with('subKriteria')
|
|
||||||
->when(Auth::user()->roles != "admin", function ($query) use ($user_id) {
|
|
||||||
return $query->where('id_admin', $user_id);
|
|
||||||
})
|
|
||||||
->where('periode', $periode) // Tambahkan kondisi where untuk periode
|
|
||||||
->get();
|
|
||||||
} else {
|
|
||||||
$penilaian = Penilaian::with('subKriteria')
|
|
||||||
->where('id_admin', $penguji)
|
|
||||||
->where('periode', $periode) // Tambahkan kondisi where untuk periode
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Calculate min and max values for each criteria
|
|
||||||
$minMax = [];
|
|
||||||
foreach ($kriteria as $vkriteria) {
|
|
||||||
foreach ($penilaian as $vpenilaian) {
|
|
||||||
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
|
||||||
if ($vkriteria->sifat == "benefit") {
|
|
||||||
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
|
||||||
} elseif ($vkriteria->sifat == "cost") {
|
|
||||||
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform normalization
|
|
||||||
$normalisasi = [];
|
|
||||||
foreach ($penilaian as $vpenilaian) {
|
|
||||||
foreach ($kriteria as $vkriteria) {
|
|
||||||
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
|
||||||
if ($vkriteria->sifat == "benefit") {
|
|
||||||
$normalisasi[$vpenilaian->alternatif->guru['id']][$vkriteria->id] = $vpenilaian->subKriteria['bobot'] / max($minMax[$vkriteria->id]);
|
|
||||||
} elseif ($vkriteria->sifat == "cost") {
|
|
||||||
$normalisasi[$vpenilaian->alternatif->guru['id']][$vkriteria->id] = min($minMax[$vkriteria->id]) / $vpenilaian->subKriteria['bobot'];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Perform ranking
|
|
||||||
$rank = [];
|
|
||||||
foreach ($normalisasi as $key => $vnormalisasi) {
|
|
||||||
foreach ($kriteria as $vkriteria) {
|
|
||||||
if (isset($vnormalisasi[$vkriteria->id])) {
|
|
||||||
$rank[$key][] = $vnormalisasi[$vkriteria->id] * $vkriteria->bobot_kriteria;
|
|
||||||
} else {
|
|
||||||
$rank[$key][] = 0; // Assign a default value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sum up the ranks and determine the status keterangan
|
|
||||||
$statusKeterangan = [];
|
|
||||||
foreach ($normalisasi as $key => $value) {
|
|
||||||
$rank[$key][] = array_sum($rank[$key]);
|
|
||||||
if ($rank[$key] >= 100) {
|
|
||||||
$statusKeterangan[$key] = 'Sangat Baik';
|
|
||||||
} elseif ($rank[$key] >= 70 && $rank[$key] < 100) {
|
|
||||||
$statusKeterangan[$key] = 'Baik';
|
|
||||||
} elseif ($rank[$key] >= 20 && $rank[$key] < 70) {
|
|
||||||
$statusKeterangan[$key] = 'Cukup';
|
|
||||||
} else {
|
|
||||||
$statusKeterangan[$key] = 'Kurang';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort the ranks
|
|
||||||
arsort($rank);
|
|
||||||
|
|
||||||
// Pass data to the view
|
|
||||||
return view('pages.hasil_perhitungan.index', compact('kriteria', 'alternatif', 'penilaian', 'minMax', 'normalisasi', 'rank'));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,34 +11,9 @@ use Illuminate\Support\Facades\Auth;
|
||||||
|
|
||||||
class PenilaianAlternatifController extends Controller
|
class PenilaianAlternatifController extends Controller
|
||||||
{
|
{
|
||||||
function index(Request $request)
|
function index() {
|
||||||
{
|
$penilaian = Penilaian::with(['alternatif','kriteria','subKriteria'])->get();
|
||||||
$selectedPeriode = $request->periode;
|
return view('pages.penilaian.index',compact('penilaian'));
|
||||||
$user_id = Auth::id(); // Get the current user's ID
|
|
||||||
$penguji = request()->input('penguji');
|
|
||||||
if ($penguji == null) {
|
|
||||||
$query = Penilaian::with(['alternatif', 'kriteria', 'subKriteria'])
|
|
||||||
->when(Auth::user()->roles != "admin", function ($query) use ($user_id) {
|
|
||||||
return $query->where('id_admin', $user_id);
|
|
||||||
})
|
|
||||||
->groupBy('periode', 'id_alternatif')
|
|
||||||
->selectRaw('MAX(id) as id, periode, id_alternatif');
|
|
||||||
} else {
|
|
||||||
$query = Penilaian::with(['alternatif', 'kriteria', 'subKriteria'])
|
|
||||||
->where('id_admin', $penguji)
|
|
||||||
->groupBy('periode', 'id_alternatif')
|
|
||||||
->selectRaw('MAX(id) as id, periode, id_alternatif');
|
|
||||||
}
|
|
||||||
if ($selectedPeriode) {
|
|
||||||
$query->where('periode', $selectedPeriode);
|
|
||||||
}
|
|
||||||
|
|
||||||
$penilaian = $query->orderBy('periode', 'asc') // Mengurutkan berdasarkan periode secara ascending
|
|
||||||
->get();
|
|
||||||
|
|
||||||
$periode = Penilaian::distinct()->pluck('periode');
|
|
||||||
|
|
||||||
return view('pages.penilaian.index', compact('penilaian', 'periode', 'selectedPeriode'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,40 +22,14 @@ class PenilaianAlternatifController extends Controller
|
||||||
$alternatif = Alternatif::with('guru')->get();
|
$alternatif = Alternatif::with('guru')->get();
|
||||||
$kriteria = Kriteria::get();
|
$kriteria = Kriteria::get();
|
||||||
$subKriteria = SubKriteria::get();
|
$subKriteria = SubKriteria::get();
|
||||||
// dd($alternatif);
|
return view('pages.penilaian.form', compact(['alternatif','kriteria','subKriteria']));
|
||||||
return view('pages.penilaian.form', compact(['alternatif', 'kriteria', 'subKriteria']));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function store(Request $request)
|
function store(Request $request) {
|
||||||
{
|
$kriteria = $request->id_kriteria;
|
||||||
|
$subKriteria = $request->id_sub;
|
||||||
if (!$request->filled(['periode', 'id_alternatif', 'id_kriteria', 'id_sub'])) {
|
|
||||||
if (session()->get('user_id') == 1) {
|
|
||||||
return redirect()->route('penilaian_alternatif', ['penguji' => 1])->with('error', 'Ada data yang masih kosong!');
|
|
||||||
} else {
|
|
||||||
return redirect()->route('penilaian_alternatif')->with('error', 'Ada data yang masih kosong!');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Menguji apakah ada penilaian yang sudah ada untuk id_alternatif dan periode yang sama
|
|
||||||
$existingPenilaian = Penilaian::where('id_alternatif', $request->id_alternatif)
|
|
||||||
->where('periode', $request->periode)
|
|
||||||
->where('id_admin', session()->get('user_id'))
|
|
||||||
->exists();
|
|
||||||
|
|
||||||
// Jika penilaian sudah ada untuk id_alternatif dan periode yang sama, berikan pesan kesalahan
|
|
||||||
if ($existingPenilaian) {
|
|
||||||
return redirect()->route('penilaian_alternatif')->with('error', 'Penilaian untuk id_alternatif dan periode yang sama sudah ada.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$kriteria = $request->id_kriteria;
|
|
||||||
$subKriteria = $request->id_sub;
|
|
||||||
|
|
||||||
for ($i = 0; $i < count($kriteria); $i++) {
|
|
||||||
// Memeriksa apakah ada data yang kosong di dalam array kriteria dan subkriteria
|
|
||||||
if (empty($kriteria[$i]) || empty($subKriteria[$i])) {
|
|
||||||
return redirect()->route('penilaian_alternatif')->with('error', 'Ada data kriteria atau subkriteria yang masih kosong!');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
for ($i=0; $i < count($kriteria); $i++) {
|
||||||
$penilaian = new Penilaian;
|
$penilaian = new Penilaian;
|
||||||
$penilaian->periode = $request->periode;
|
$penilaian->periode = $request->periode;
|
||||||
$penilaian->id_alternatif = $request->id_alternatif;
|
$penilaian->id_alternatif = $request->id_alternatif;
|
||||||
|
@ -89,80 +38,5 @@ class PenilaianAlternatifController extends Controller
|
||||||
$penilaian->id_admin = session()->get('user_id');
|
$penilaian->id_admin = session()->get('user_id');
|
||||||
$penilaian->save();
|
$penilaian->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Redirect to a view or route after saving the data
|
|
||||||
if (session()->get('user_id') == 1) {
|
|
||||||
return redirect()->route('penilaian_alternatif', ['penguji' => 1])->with('success', 'Penilaian updated successfully');
|
|
||||||
} else {
|
|
||||||
return redirect()->route('penilaian_alternatif')->with('success', 'Penilaian updated successfully');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function edit($kode_alternatif, $periode)
|
|
||||||
{
|
|
||||||
// Find the Penilaian record based on the kode_alternatif and periode
|
|
||||||
$penilaian = Penilaian::whereHas('alternatif', function ($query) use ($kode_alternatif) {
|
|
||||||
$query->where('kode_alternatif', $kode_alternatif);
|
|
||||||
})
|
|
||||||
->where('periode', $periode)
|
|
||||||
->get();
|
|
||||||
|
|
||||||
// Retrieve all alternatif, kriteria, and subkriteria
|
|
||||||
$alternatif = Alternatif::with('guru')->get();
|
|
||||||
$kriteria = Kriteria::get();
|
|
||||||
$subKriteria = SubKriteria::get();
|
|
||||||
// dd($penilaian);
|
|
||||||
return view('pages.penilaian.edit', compact('penilaian', 'alternatif', 'kriteria', 'subKriteria'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function delete($kode_alternatif, $periode)
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
// Find all Penilaian records based on kode_alternatif and periode
|
|
||||||
$penilaians = Penilaian::whereHas('alternatif', function ($query) use ($kode_alternatif) {
|
|
||||||
$query->where('kode_alternatif', $kode_alternatif);
|
|
||||||
})
|
|
||||||
->where('periode', $periode)
|
|
||||||
->get();
|
|
||||||
|
|
||||||
if ($penilaians->isEmpty()) {
|
|
||||||
return response()->json(['message' => 'No Penilaian found for the provided kode_alternatif and periode'], 404);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete all found records
|
|
||||||
foreach ($penilaians as $penilaian) {
|
|
||||||
$penilaian->delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json(['message' => 'Penilaian deleted successfully']);
|
|
||||||
} catch (\Exception $e) {
|
|
||||||
return response()->json(['message' => 'Error deleting penilaian', 'error' => $e->getMessage()], 500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function update(Request $request, $kode_alternatif, $periode)
|
|
||||||
{
|
|
||||||
$kriteria = $request->id_kriteria;
|
|
||||||
$subKriteria = $request->id_sub;
|
|
||||||
|
|
||||||
// Pastikan untuk menambahkan klausa where pada metode where di bawah ini
|
|
||||||
Penilaian::where('id_alternatif', $kode_alternatif)
|
|
||||||
->where('periode', $periode)
|
|
||||||
->delete(); // Hapus penilaian sebelumnya
|
|
||||||
|
|
||||||
for ($i = 0; $i < count($kriteria); $i++) {
|
|
||||||
$penilaian = new Penilaian;
|
|
||||||
$penilaian->periode = $request->periode;
|
|
||||||
$penilaian->id_alternatif = $request->id_alternatif;
|
|
||||||
$penilaian->id_kriteria = $kriteria[$i];
|
|
||||||
$penilaian->id_sub = $subKriteria[$i];
|
|
||||||
$penilaian->id_admin = session()->get('user_id');
|
|
||||||
$penilaian->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Redirect to a view or route after saving the data
|
|
||||||
return redirect()->route('penilaian_alternatif')->with('success', 'Penilaian updated successfully');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,69 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Models\Kriteria;
|
||||||
|
use App\Models\Alternatif;
|
||||||
|
use App\Models\Penilaian;
|
||||||
|
|
||||||
|
class PerhitunganController extends Controller
|
||||||
|
{
|
||||||
|
function index()
|
||||||
|
{
|
||||||
|
$alternatif = Alternatif::with('penilaian.kriteria')->orderBy('kode_alternatif', 'ASC')->get();
|
||||||
|
$kriteria = Kriteria::get();
|
||||||
|
$penilaian = Penilaian::with('subKriteria')->get();
|
||||||
|
// return response()->json($alternatif);
|
||||||
|
|
||||||
|
// mencari min max
|
||||||
|
foreach ($kriteria as $key => $vkriteria) {
|
||||||
|
foreach ($penilaian as $key_1 => $vpenilaian) {
|
||||||
|
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
||||||
|
if ($vkriteria->sifat == "benefit") {
|
||||||
|
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
||||||
|
} elseif ($vkriteria->sifat == "cost") {
|
||||||
|
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// normalisasi
|
||||||
|
foreach ($penilaian as $key_1 => $vpenilaian) {
|
||||||
|
foreach ($kriteria as $key => $vkriteria) {
|
||||||
|
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
||||||
|
if ($vkriteria->sifat == "benefit") { //nilai sub_kriteria : nilai maksimal
|
||||||
|
$normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = $vpenilaian->subKriteria['bobot'] / max($minMax[$vkriteria->id]);
|
||||||
|
} elseif ($vkriteria->sifat == "cost") { //nilai minimal : nilai sub_kriteria
|
||||||
|
$normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = min($minMax[$vkriteria->id]) / $vpenilaian->subKriteria['bobot'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// perangkingan
|
||||||
|
foreach ($normalisasi as $key => $vnormalisasi) {
|
||||||
|
foreach ($kriteria as $key_1 => $vkriteria) { // hasil normalisasi x bobot_kriteria
|
||||||
|
// Check if the key exists in the $vnormalisasi array
|
||||||
|
if (isset($vnormalisasi[$vkriteria->id])) {
|
||||||
|
$rank[$key][] = $vnormalisasi[$vkriteria->id] * $vkriteria->bobot_kriteria;
|
||||||
|
} else {
|
||||||
|
// Handle the case when the key is not found (you can skip it or handle it accordingly)
|
||||||
|
// For example, you might want to assign a default value or log a message.
|
||||||
|
$rank[$key][] = 0; // Assign a default value
|
||||||
|
// or
|
||||||
|
// log_message('error', 'Key not found: ' . $vkriteria->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($normalisasi as $key => $value) { //total hasil perangkingan
|
||||||
|
$rank[$key][] = array_sum($rank[$key]);
|
||||||
|
}
|
||||||
|
arsort($rank); //sortir $rank
|
||||||
|
|
||||||
|
// dd($rank);
|
||||||
|
return view('pages.proses_penilaian.index', compact(['kriteria', 'alternatif', 'penilaian', 'minMax', 'normalisasi', 'rank']));
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,43 +12,14 @@ class PerhitunganController extends Controller
|
||||||
{
|
{
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$user_id = Auth::id();
|
$alternatif = Alternatif::with('penilaian.kriteria')->orderBy('kode_alternatif', 'ASC')->get();
|
||||||
$periode = request()->input('periode');
|
|
||||||
$penguji = request()->input('penguji');
|
|
||||||
if ($penguji == null) {
|
|
||||||
$alternatif = Alternatif::with(['penilaian' => function ($query) use ($user_id, $periode) {
|
|
||||||
$query->when(Auth::user()->roles != "admin", function ($query) use ($user_id) {
|
|
||||||
$query->where('id_admin', $user_id);
|
|
||||||
});
|
|
||||||
$query->where('periode', $periode); // Kondisi where untuk periode
|
|
||||||
}])->orderBy('kode_alternatif', 'ASC')->get();
|
|
||||||
} else {
|
|
||||||
$alternatif = Alternatif::with(['penilaian' => function ($query) use ($penguji, $periode) {
|
|
||||||
$query->where('id_admin', $penguji);
|
|
||||||
$query->where('periode', $periode); // Kondisi where untuk periode
|
|
||||||
}])->orderBy('kode_alternatif', 'ASC')->get();
|
|
||||||
}
|
|
||||||
// dd($alternatif);
|
|
||||||
$kriteria = Kriteria::get();
|
$kriteria = Kriteria::get();
|
||||||
if ($penguji == null) {
|
$penilaian = Penilaian::with('subKriteria')->get();
|
||||||
$penilaian = Penilaian::with('subKriteria')
|
// return response()->json($alternatif);
|
||||||
->when(Auth::user()->roles != "admin", function ($query) use ($user_id) {
|
|
||||||
return $query->where('id_admin', $user_id);
|
|
||||||
})
|
|
||||||
->where('periode', $periode) // Tambahkan kondisi where untuk periode
|
|
||||||
->get();
|
|
||||||
} else {
|
|
||||||
$penilaian = Penilaian::with('subKriteria')
|
|
||||||
->where('id_admin', $penguji)
|
|
||||||
->where('periode', $periode)
|
|
||||||
->get();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// mencari min max
|
||||||
// Calculate min and max values for each criteria
|
foreach ($kriteria as $key => $vkriteria) {
|
||||||
$minMax = [];
|
foreach ($penilaian as $key_1 => $vpenilaian) {
|
||||||
foreach ($kriteria as $vkriteria) {
|
|
||||||
foreach ($penilaian as $vpenilaian) {
|
|
||||||
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
if ($vkriteria->id == $vpenilaian->id_kriteria) {
|
||||||
if ($vkriteria->sifat == "benefit") {
|
if ($vkriteria->sifat == "benefit") {
|
||||||
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
$minMax[$vkriteria->id][] = $vpenilaian->subKriteria['bobot'];
|
||||||
|
@ -76,8 +47,8 @@ class PerhitunganController extends Controller
|
||||||
// Perform ranking
|
// Perform ranking
|
||||||
$rank = [];
|
$rank = [];
|
||||||
foreach ($normalisasi as $key => $vnormalisasi) {
|
foreach ($normalisasi as $key => $vnormalisasi) {
|
||||||
|
foreach ($kriteria as $key_1 => $vkriteria) { // hasil normalisasi x bobot_kriteria
|
||||||
foreach ($kriteria as $vkriteria) {
|
// Check if the key exists in the $vnormalisasi array
|
||||||
if (isset($vnormalisasi[$vkriteria->id])) {
|
if (isset($vnormalisasi[$vkriteria->id])) {
|
||||||
$rank[$key][] = $vnormalisasi[$vkriteria->id] * $vkriteria->bobot_kriteria;
|
$rank[$key][] = $vnormalisasi[$vkriteria->id] * $vkriteria->bobot_kriteria;
|
||||||
} else {
|
} else {
|
||||||
|
@ -90,9 +61,7 @@ class PerhitunganController extends Controller
|
||||||
foreach ($normalisasi as $key => $value) {
|
foreach ($normalisasi as $key => $value) {
|
||||||
$rank[$key][] = array_sum($rank[$key]);
|
$rank[$key][] = array_sum($rank[$key]);
|
||||||
}
|
}
|
||||||
// dd($kriteria);
|
// asort($rank); //sortir $rank
|
||||||
// Sort the ranking
|
|
||||||
// arsort($rank);
|
|
||||||
|
|
||||||
// Pass data to the view
|
// Pass data to the view
|
||||||
return view('pages.proses_penilaian.index', compact('kriteria', 'alternatif', 'penilaian', 'minMax', 'normalisasi', 'rank'));
|
return view('pages.proses_penilaian.index', compact('kriteria', 'alternatif', 'penilaian', 'minMax', 'normalisasi', 'rank'));
|
||||||
|
|
|
@ -18,7 +18,7 @@ class CreateUsersTable extends Migration
|
||||||
$table->string('name');
|
$table->string('name');
|
||||||
$table->string('username')->unique();
|
$table->string('username')->unique();
|
||||||
$table->string('password');
|
$table->string('password');
|
||||||
$table->enum('roles', ['admin', 'penguji'])->default('penguji');
|
$table->enum('roles', ['admin', 'penilai'])->default('penilai');
|
||||||
$table->timestamps();
|
$table->timestamps();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,10 +22,10 @@ class UsersSeeder extends Seeder
|
||||||
'roles' => 'admin',
|
'roles' => 'admin',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'name' => 'Penguji 1',
|
'name' => 'penilai 1',
|
||||||
'username' => 'penguji1',
|
'username' => 'penilai1',
|
||||||
'password' => bcrypt('penguji01'),
|
'password' => bcrypt('penilai01'),
|
||||||
'roles' => 'penguji',
|
'roles' => 'penilai',
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
<a class="collapse-item {{ request()->segment(1) == 'data-guru' ? 'active' : ''}}" href="{{ route('data_guru') }}">Guru</a>
|
<a class="collapse-item {{ request()->segment(1) == 'data-guru' ? 'active' : ''}}" href="{{ route('data_guru') }}">Guru</a>
|
||||||
|
|
||||||
<a class="collapse-item {{ request()->segment(1) == 'data-alternatif' ? 'active' : ''}}" href="{{ route('data_alternatif') }}">Alternatif</a>
|
<a class="collapse-item {{ request()->segment(1) == 'data-alternatif' ? 'active' : ''}}" href="{{ route('data_alternatif') }}">Alternatif</a>
|
||||||
@if (Auth::user()->roles =="admin")
|
|
||||||
<a class="collapse-item {{ request()->segment(1) == 'data-kriteria' ? 'active' : ''}}" href="{{ route('data_kriteria') }}">Kriteria</a>
|
<a class="collapse-item {{ request()->segment(1) == 'data-kriteria' ? 'active' : ''}}" href="{{ route('data_kriteria') }}">Kriteria</a>
|
||||||
<a class="collapse-item {{ request()->segment(1) == 'data-sub-kriteria' ? 'active' : ''}}" href="{{ route('data_sub_kriteria') }}">Sub Kriteria</a>
|
<a class="collapse-item {{ request()->segment(1) == 'data-sub-kriteria' ? 'active' : ''}}" href="{{ route('data_sub_kriteria') }}">Sub Kriteria</a>
|
||||||
@endif
|
@endif
|
||||||
|
@ -57,209 +56,18 @@
|
||||||
<span>Penilaian Alternatif</span>
|
<span>Penilaian Alternatif</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@endif
|
|
||||||
@if (Auth::user()->roles == "admin")
|
|
||||||
<li class="nav-item {{ request()->segment(1) == 'penilaian-alternatif' ? 'active' : ''}}">
|
|
||||||
<a class="nav-link" href="#" data-toggle="modal" data-target="#alternatif">
|
|
||||||
<i class="fas fa-fw fa-arrow-right"></i>
|
|
||||||
<span>Penilaian Alternatif</span>
|
|
||||||
</a>
|
|
||||||
</li>
|
|
||||||
@endif
|
|
||||||
<div class="modal fade" id="alternatif" tabindex="-1" role="dialog" aria-labelledby="alternatifLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="alternatifLabel">Penilaian Alternatif</h5>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('penilaian_alternatif') }}" method="GET" id="formPeriodePenguji3">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="penguji">Penguji:</label>
|
|
||||||
<select name="penguji" id="penguji3" class="form-control">
|
|
||||||
<option value="">Pilih Penguji</option>
|
|
||||||
@foreach ($penguji as $item)
|
|
||||||
<option value="{{ $item->id }}">{{ $item->name }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<button type="submit" class="btn btn-primary" id="submitBtn3" disabled>Submit</button>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
var pengujiSelect = document.getElementById("penguji3");
|
|
||||||
var submitBtn = document.getElementById("submitBtn3");
|
|
||||||
|
|
||||||
pengujiSelect.addEventListener("change", toggleSubmitBtn);
|
|
||||||
|
|
||||||
function toggleSubmitBtn() {
|
|
||||||
if (pengujiSelect.value) {
|
|
||||||
submitBtn.disabled = false;
|
|
||||||
} else {
|
|
||||||
submitBtn.disabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
document.getElementById("formPeriodePenguji3").addEventListener("submitBtn3", function() {
|
|
||||||
// Membersihkan nilai input periode
|
|
||||||
document.getElementById("periode3").value = "";
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Link untuk memicu Modal 1 -->
|
|
||||||
<li class="nav-item {{ request()->segment(1) == 'proses-saw' ? 'active' : ''}}">
|
<li class="nav-item {{ request()->segment(1) == 'proses-saw' ? 'active' : ''}}">
|
||||||
<a class="nav-link" href="#" data-toggle="modal" data-target="#periodeModal">
|
<a class="nav-link" href="#" data-toggle="modal" data-target="#periodeModal">
|
||||||
<i class="fas fa-fw fa-arrow-right"></i>
|
<i class="fas fa-fw fa-arrow-right"></i>
|
||||||
<span>Proses Perhitungan</span>
|
<span>Proses Perhitungan</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Modal 1 -->
|
|
||||||
<div class="modal fade" id="periodeModal" tabindex="-1" role="dialog" aria-labelledby="periodeModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="periodeModalLabel">Proses Perhitungan</h5>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('proses_saw') }}" method="GET" id="formPeriodePenguji">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="periode">Periode:</label>
|
|
||||||
<select name="periode" id="periode" class="form-control">
|
|
||||||
<option value="">Pilih Periode</option>
|
|
||||||
@foreach ($periode as $item)
|
|
||||||
<option value="{{ $item }}">{{ $item }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
@if (Auth::user()->roles == "admin")
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="penguji">Penguji:</label>
|
|
||||||
<select name="penguji" id="penguji" class="form-control">
|
|
||||||
<option value="">Pilih Penguji</option>
|
|
||||||
@foreach ($penguji as $item)
|
|
||||||
<option value="{{ $item->id }}">{{ $item->name }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
<button type="submit" class="btn btn-primary" id="submitBtn" disabled>Submit</button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
var periodeSelect = document.getElementById("periode");
|
|
||||||
var pengujiSelect = document.getElementById("penguji");
|
|
||||||
var submitBtn = document.getElementById("submitBtn");
|
|
||||||
|
|
||||||
periodeSelect.addEventListener("change", toggleSubmitBtn);
|
|
||||||
if (pengujiSelect) {
|
|
||||||
pengujiSelect.addEventListener("change", toggleSubmitBtn);
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleSubmitBtn() {
|
|
||||||
if (periodeSelect.value && (!pengujiSelect || pengujiSelect.value)) {
|
|
||||||
submitBtn.disabled = false;
|
|
||||||
} else {
|
|
||||||
submitBtn.disabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
document.getElementById("formPeriodePenguji").addEventListener("submitBtn", function() {
|
|
||||||
// Membersihkan nilai input periode
|
|
||||||
document.getElementById("periode").value = "";
|
|
||||||
|
|
||||||
// Jika opsi penguji ada, membersihkan nilai input penguji
|
|
||||||
var pengujiSelect = document.getElementById("penguji");
|
|
||||||
if (pengujiSelect) {
|
|
||||||
pengujiSelect.value = "";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- Link untuk memicu Modal 2 -->
|
|
||||||
<li class="nav-item {{ request()->segment(1) == 'laporan-hasil' ? 'active' : ''}}">
|
<li class="nav-item {{ request()->segment(1) == 'laporan-hasil' ? 'active' : ''}}">
|
||||||
<a class="nav-link" href="#" data-toggle="modal" data-target="#periodeModal2">
|
<a class="nav-link" href="#" data-toggle="modal" data-target="#periodeModal2">
|
||||||
<i class="fas fa-fw fa-arrow-right"></i>
|
<i class="fas fa-fw fa-arrow-right"></i>
|
||||||
<span>Data Hasil Keputusan</span>
|
<span>Data Hasil Keputusan</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Modal 2 -->
|
|
||||||
<div class="modal fade" id="periodeModal2" tabindex="-1" role="dialog" aria-labelledby="periodeModalLabel2" aria-hidden="true">
|
|
||||||
<div class="modal-dialog" role="document">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-header">
|
|
||||||
<h5 class="modal-title" id="periodeModalLabel2">Data Hasil Keputusan</h5>
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
|
|
||||||
<span aria-hidden="true">×</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<form action="{{ route('laporan_hasil') }}" method="GET" id="formPeriodePenguji2">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="periode">Periode:</label>
|
|
||||||
<select name="periode" id="periode2" class="form-control">
|
|
||||||
<option value="">Pilih Periode</option>
|
|
||||||
@foreach ($periode as $item)
|
|
||||||
<option value="{{ $item }}">{{ $item }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
@if (Auth::user()->roles == "admin")
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="penguji">Penguji:</label>
|
|
||||||
<select name="penguji" id="penguji2" class="form-control">
|
|
||||||
<option value="">Pilih Penguji</option>
|
|
||||||
@foreach ($penguji as $item)
|
|
||||||
<option value="{{ $item->id }}">{{ $item->name }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
@endif
|
|
||||||
<button type="submit" class="btn btn-primary" id="submitBtn2" disabled>Submit</button>
|
|
||||||
</form>
|
|
||||||
<script>
|
|
||||||
document.addEventListener("DOMContentLoaded", function() {
|
|
||||||
var periodeSelect = document.getElementById("periode2");
|
|
||||||
var pengujiSelect = document.getElementById("penguji2");
|
|
||||||
var submitBtn = document.getElementById("submitBtn2");
|
|
||||||
|
|
||||||
periodeSelect.addEventListener("change", toggleSubmitBtn);
|
|
||||||
if (pengujiSelect) {
|
|
||||||
pengujiSelect.addEventListener("change", toggleSubmitBtn);
|
|
||||||
}
|
|
||||||
|
|
||||||
function toggleSubmitBtn() {
|
|
||||||
if (periodeSelect.value && (!pengujiSelect || pengujiSelect.value)) {
|
|
||||||
submitBtn.disabled = false;
|
|
||||||
} else {
|
|
||||||
submitBtn.disabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
@if (Auth::user()->roles == "admin")
|
@if (Auth::user()->roles == "admin")
|
||||||
<hr class="sidebar-divider m-0">
|
<hr class="sidebar-divider m-0">
|
||||||
<li class="nav-item {{ request()->segment(1) == 'data-pengguna' ? 'active' : ''}}">
|
<li class="nav-item {{ request()->segment(1) == 'data-pengguna' ? 'active' : ''}}">
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
@extends('layout.master')
|
|
||||||
|
|
||||||
@section('title', 'Ranking')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
<div class="card border-top-primary shadow mb-4">
|
|
||||||
<div class="card-body pt-3">
|
|
||||||
<div class="table-responsive">
|
|
||||||
<table class="table table-striped text-center" id="tabel" width="100%">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th class="text-left">Rank</th>
|
|
||||||
<th width="18%">Nama Guru</th>
|
|
||||||
<th width="8%">Jenis Kelamin</th>
|
|
||||||
<th width="10%">NIPA</th>
|
|
||||||
<th class="text-left">Nilai</th>
|
|
||||||
<th class="text-left">Status Keterangan</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($rank as $key => $value)
|
|
||||||
@php
|
|
||||||
$guru = App\Models\Guru::find($key);
|
|
||||||
@endphp
|
|
||||||
<tr>
|
|
||||||
<td class="text-left">{{ $loop->iteration }}</td>
|
|
||||||
<!-- <td class="text-left">{{ $key }}</td> -->
|
|
||||||
<td class="text-left">{{$guru->nama_guru}}</td>
|
|
||||||
<td class="text-left">{{$guru->gender}}</td>
|
|
||||||
<td class="text-left">{{$guru->nipa}}</td>
|
|
||||||
@foreach ($value as $key_1 => $value_1)
|
|
||||||
@if ($loop->last)
|
|
||||||
<td class="text-left">{{ number_format($value_1, 2) }}</td>
|
|
||||||
<td class="text-left">
|
|
||||||
@if($value_1 > 70)
|
|
||||||
Guru berprestasi
|
|
||||||
@else
|
|
||||||
Bimbingan
|
|
||||||
@endif
|
|
||||||
</td>
|
|
||||||
@endif
|
|
||||||
@endforeach
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
@endsection
|
|
||||||
|
|
||||||
@push('js')
|
|
||||||
<!-- Page level plugins -->
|
|
||||||
<link href="https://cdn.datatables.net/v/bs5/jszip-3.10.1/dt-2.0.2/b-3.0.1/b-html5-3.0.1/b-print-3.0.1/datatables.min.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/pdfmake.min.js"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.2.7/vfs_fonts.js"></script>
|
|
||||||
<script src="https://cdn.datatables.net/v/bs5/jszip-3.10.1/dt-2.0.2/b-3.0.1/b-html5-3.0.1/b-print-3.0.1/datatables.min.js"></script>
|
|
||||||
|
|
||||||
<!-- Page level custom scripts -->
|
|
||||||
<script>
|
|
||||||
$(document).ready(function() {
|
|
||||||
$('#tabel').DataTable({
|
|
||||||
dom: 'Bfrtip',
|
|
||||||
buttons: [{
|
|
||||||
extend: 'print',
|
|
||||||
text: '<i class="fas fa-print"></i> Print',
|
|
||||||
className: 'btn btn-primary',
|
|
||||||
titleAttr: 'Print Data',
|
|
||||||
customize: function(win) {
|
|
||||||
$(win.document.body).css('font-size', '10pt');
|
|
||||||
$(win.document.body).find('table').addClass('compact').css('font-size', 'inherit');
|
|
||||||
$(win.document.body).find('h1').css('text-align', 'center');
|
|
||||||
|
|
||||||
// Menambahkan kelas text-left ke setiap sel dalam tbody
|
|
||||||
$(win.document.body).find('tbody td').addClass('text-left');
|
|
||||||
}
|
|
||||||
}]
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@endpush
|
|
|
@ -1,122 +0,0 @@
|
||||||
@extends('layout.master')
|
|
||||||
|
|
||||||
@section('title', 'Update Klasifikasi')
|
|
||||||
|
|
||||||
@section('content')
|
|
||||||
<div class="card border-top-primary shadow mb-4">
|
|
||||||
<form action="{{ route('update_penilaian', ['kode_alternatif' => $penilaian[0]->id_alternatif, 'periode' => $penilaian[0]->periode]) }}" method="POST" id="penilaianForm">
|
|
||||||
@csrf
|
|
||||||
<div class="card-body pt-3">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="periode">Periode</label>
|
|
||||||
<select class="form-control" id="periode" name="periode">
|
|
||||||
@php
|
|
||||||
$tahunAkhir = date('Y');
|
|
||||||
$tahunAwal = $tahunAkhir - 10;
|
|
||||||
$periodeFirst = $penilaian->first()->periode;
|
|
||||||
@endphp
|
|
||||||
@for ($tahun = $tahunAkhir; $tahun >= $tahunAwal; $tahun--)
|
|
||||||
@php
|
|
||||||
$periode = $tahun . '-' . ($tahun + 1);
|
|
||||||
@endphp
|
|
||||||
<option value="{{ $periode }}" {{ $periode == $periodeFirst ? 'selected' : '' }}>{{ $periode }}</option>
|
|
||||||
@endfor
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-6">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="">Alternatif</label>
|
|
||||||
<select name="id_alternatif" class="form-control">
|
|
||||||
<option value="">Pilih</option>
|
|
||||||
@foreach ($alternatif as $alt)
|
|
||||||
<option value="{{ $alt->id }}" {{ $alt->id == $penilaian->first()->id_alternatif ? 'selected' : '' }}>{{ $alt->guru['nama_guru'] }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-8">
|
|
||||||
<label for=""><b>Penilaian Kriteria</b></label>
|
|
||||||
<hr style="border: 1px solid; margin-top:0px">
|
|
||||||
<table width="100%">
|
|
||||||
<tr>
|
|
||||||
<td><b>Kriteria</b></td>
|
|
||||||
<td width="30%"><b>Sub Kriteria</b></td>
|
|
||||||
</tr>
|
|
||||||
@foreach ($kriteria as $key => $item)
|
|
||||||
<tr>
|
|
||||||
<td scope="row">
|
|
||||||
<input type="hidden" value="{{ $item->id }}" name="id_kriteria[]">
|
|
||||||
{{ $loop->iteration }}. {{ $item->nama_kriteria }}
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<select name="id_sub[]" class="form-control mb-2">
|
|
||||||
<option value="">Pilih</option>
|
|
||||||
@foreach ($subKriteria as $sub)
|
|
||||||
<option value="{{ $sub->id }}" {{ $sub->id == $penilaian[$key]->id_sub ? 'selected' : '' }}>{{ $sub->id }}</option>
|
|
||||||
@endforeach
|
|
||||||
</select>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div class="col-lg-4">
|
|
||||||
<label for="" class="mt-3"><b>Keterangan Nilai</b></label>
|
|
||||||
<p class="mb-0">*Bobot pada setiap Sub Kriteria</p>
|
|
||||||
@foreach ($subKriteria as $subs)
|
|
||||||
<label for="" class="ml-4 mb-0">{{ $subs->bobot }} = {{ $subs->sub_kriteria }}</label><br>
|
|
||||||
@endforeach
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card-footer" style="display: flex; justify-content: space-between!important;">
|
|
||||||
<button type="button" class="btn btn-sm btn-warning" onclick="goBack()">Kembali</button>
|
|
||||||
<button type="button" class="btn btn-sm btn-primary" onclick="validateAndSubmit()">Simpan</button>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function goBack() {
|
|
||||||
window.history.back();
|
|
||||||
}
|
|
||||||
|
|
||||||
function validateAndSubmit() {
|
|
||||||
var isValid = validateForm();
|
|
||||||
|
|
||||||
if (isValid) {
|
|
||||||
document.getElementById('penilaianForm').submit();
|
|
||||||
} else {
|
|
||||||
Swal.fire({
|
|
||||||
icon: 'error',
|
|
||||||
title: 'Oops...',
|
|
||||||
text: 'Ada data yang masih kosong! Silakan isi semua field.',
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function validateForm() {
|
|
||||||
var periode = document.getElementsByName('periode')[0].value;
|
|
||||||
var idAlternatif = document.getElementsByName('id_alternatif')[0].value;
|
|
||||||
var idSubValues = document.getElementsByName('id_sub[]');
|
|
||||||
|
|
||||||
// Check if periode and idAlternatif are not empty
|
|
||||||
if (periode.trim() === '' || idAlternatif.trim() === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if at least one id_sub is selected for each kriteria
|
|
||||||
for (var i = 0; i < idSubValues.length; i++) {
|
|
||||||
if (idSubValues[i].value.trim() === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
|
|
@ -72,16 +72,9 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-footer" style="display: flex; justify-content: space-between!important;">
|
<div class="card-footer" style="display: flex; justify-content: space-between!important;">
|
||||||
<button type="button" class="btn btn-sm btn-warning" onclick="goBack()">Kembali</button>
|
<button class="btn btn-sm btn-warning">Kembali</button>
|
||||||
<button type="submit" class="btn btn-sm btn-primary">Simpan</button>
|
<button class="btn btn-sm btn-primary">Simpan</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script>
|
|
||||||
function goBack() {
|
|
||||||
window.history.back();
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
|
@ -7,108 +7,47 @@
|
||||||
@endpush
|
@endpush
|
||||||
|
|
||||||
@section('content')
|
@section('content')
|
||||||
@if (session('success'))
|
<div class="card border-top-primary shadow mb-4">
|
||||||
<div class="alert alert-success">
|
<div class="card-body pt-3">
|
||||||
{{ session('success') }}
|
<div class="mb-2">
|
||||||
</div>
|
<a href="{{ route('create_penilaian') }}" class="btn btn-sm btn-primary">Tambah Nilai Alternatif</a>
|
||||||
@endif
|
</div>
|
||||||
|
<div class="table-responsive">
|
||||||
@if (session('error'))
|
<table class="table table-bordered table-sm" width="100%" cellspacing="0">
|
||||||
<div class="alert alert-danger">
|
<thead>
|
||||||
{{ session('error') }}
|
<tr>
|
||||||
</div>
|
<th class="text-center" width="5%">No</th>
|
||||||
@endif
|
<th class="text-center">Alternatif</th>
|
||||||
<div class="mb-2">
|
<th class="text-center" width="50%">Kriteria</th>
|
||||||
<form action="{{ route('penilaian_alternatif') }}" method="GET">
|
<th class="text-center">Nilai</th>
|
||||||
<div class="form-group">
|
<th class="text-center">Action</th>
|
||||||
<label for="periodeFilter">Pilih Periode:</label>
|
</tr>
|
||||||
<select name="periode" id="periodeFilter" class="form-control" onchange="this.form.submit()">
|
</thead>
|
||||||
<option value="">Pilih Periode</option>
|
<tbody>
|
||||||
@foreach ($periode as $p)
|
@foreach ($penilaian as $item)
|
||||||
<option value="{{ $p }}">{{ $p }}</option>
|
<tr>
|
||||||
@endforeach
|
<td class="text-center">{{ $loop->iteration }}</td>
|
||||||
</select>
|
<td>{{ $item->alternatif->guru['nama_guru'] }}</td>
|
||||||
</div>
|
<td>{{ $item->kriteria['nama_kriteria'] }}</td>
|
||||||
</form>
|
<td class="text-center">{{ $item->subKriteria['sub_kriteria'] }}</td>
|
||||||
</div>
|
<td class="text-center">
|
||||||
<div class="card border-top-primary shadow mb-4">
|
<button class="btn btn-sm btn-warning">Edit</button>
|
||||||
<div class="card-body pt-3">
|
<button class="btn btn-sm btn-danger">Hapus</button>
|
||||||
<div class="mb-2">
|
</td>
|
||||||
<a href="{{ route('create_penilaian') }}" class="btn btn-sm btn-primary">Tambah Nilai Alternatif</a>
|
</tr>
|
||||||
</div>
|
@endforeach
|
||||||
<div class="table-responsive">
|
</tbody>
|
||||||
<table class="table table-bordered table-sm" id="dataTable" width="100%" cellspacing="0">
|
</table>
|
||||||
<thead>
|
</div>
|
||||||
<tr>
|
|
||||||
<th class="text-center" width="5%">No</th>
|
|
||||||
<th class="text-center">Alternatif</th>
|
|
||||||
<th class="text-center" width="50%">Kriteria</th>
|
|
||||||
<th class="text-center">Action</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
@foreach ($penilaian as $item)
|
|
||||||
<tr>
|
|
||||||
<td class="text-center">{{ $loop->iteration }}</td>
|
|
||||||
<td>{{ $item->alternatif->kode_alternatif }}</td>
|
|
||||||
<td>{{ $item->periode }}</td>
|
|
||||||
<td class="text-center">
|
|
||||||
<a href="{{ route('edit_penilaian', ['kode_alternatif' => $item->alternatif->kode_alternatif, 'periode' => $item->periode]) }}" class="btn btn-sm btn-warning">Edit</a>
|
|
||||||
<button class="btn btn-sm btn-danger" onclick="deletePenilaian('{{ $item->alternatif->kode_alternatif }}', '{{ $item->periode }}')">Hapus</button>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
@endforeach
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
@endsection
|
@endsection
|
||||||
|
|
||||||
@push('js')
|
@push('js')
|
||||||
<script>
|
<!-- Page level plugins -->
|
||||||
$(document).ready(function() {
|
<script src="{{ url('sbAdmin/vendor/datatables/jquery.dataTables.min.js') }}"></script>
|
||||||
$('#dataTable').DataTable();
|
<script src="{{ url('sbAdmin/vendor/datatables/dataTables.bootstrap4.min.js') }}"></script>
|
||||||
});
|
|
||||||
|
|
||||||
function deletePenilaian(kodeAlternatif, periode) {
|
|
||||||
Swal.fire({
|
|
||||||
title: 'Apakah Anda yakin?',
|
|
||||||
text: 'Data penilaian akan dihapus permanen!',
|
|
||||||
icon: 'warning',
|
|
||||||
showCancelButton: true,
|
|
||||||
confirmButtonColor: '#d33',
|
|
||||||
cancelButtonColor: '#3085d6',
|
|
||||||
confirmButtonText: 'Ya, hapus!',
|
|
||||||
}).then((result) => {
|
|
||||||
if (result.isConfirmed) {
|
|
||||||
// Make an AJAX request to delete the record
|
|
||||||
deletePenilaianAjax(kodeAlternatif, periode);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function deletePenilaianAjax(kodeAlternatif, periode) {
|
|
||||||
$.ajax({
|
|
||||||
url: '{{ route("delete_penilaian", ["kode_alternatif" => ":kode_alternatif", "periode" => ":periode"]) }}'.replace(':kode_alternatif', kodeAlternatif).replace(':periode', periode),
|
|
||||||
type: 'DELETE',
|
|
||||||
headers: {
|
|
||||||
'X-CSRF-TOKEN': '{{ csrf_token() }}'
|
|
||||||
},
|
|
||||||
success: function(data) {
|
|
||||||
// Reload the page or update the table as needed
|
|
||||||
location.reload();
|
|
||||||
},
|
|
||||||
error: function(error) {
|
|
||||||
console.error('Error:', error);
|
|
||||||
// Handle error if needed
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<!-- Page level plugins -->
|
|
||||||
<script src="{{ url('sbAdmin/vendor/datatables/jquery.dataTables.min.js') }}"></script>
|
|
||||||
<script src="{{ url('sbAdmin/vendor/datatables/dataTables.bootstrap4.min.js') }}"></script>
|
|
||||||
|
|
||||||
|
<!-- Page level custom scripts -->
|
||||||
|
<script src="{{ url('sbAdmin/js/demo/datatables-demo.js') }}"></script>
|
||||||
@endpush
|
@endpush
|
||||||
|
|
|
@ -35,7 +35,17 @@ Route::post('/logout', [LoginController::class, 'logout'])->name('logout');
|
||||||
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
|
||||||
|
|
||||||
Route::middleware(['auth'])->group(function () {
|
Route::middleware(['auth'])->group(function () {
|
||||||
|
// Admin Role
|
||||||
Route::middleware('admin')->group(function () {
|
Route::middleware('admin')->group(function () {
|
||||||
|
Route::prefix('data-guru')->group(function () {
|
||||||
|
Route::get('/', [DataGuruController::class, 'index'])->name('data_guru');
|
||||||
|
Route::get('/tambah', [DataGuruController::class, 'create'])->name('create_guru');
|
||||||
|
Route::post('/store', [DataGuruController::class, 'store'])->name('store_guru');
|
||||||
|
Route::get('/edit{id}', [DataGuruController::class, 'edit'])->name('edit_guru');
|
||||||
|
Route::get('/detail{id}', [DataGuruController::class, 'detail'])->name('detail_guru');
|
||||||
|
Route::post('/update{id}', [DataGuruController::class, 'update'])->name('update_guru');
|
||||||
|
Route::delete('/hapus/{id}', [DataGuruController::class, 'destroy'])->name('destroy_guru');
|
||||||
|
});
|
||||||
Route::prefix('data-kriteria')->group(function () {
|
Route::prefix('data-kriteria')->group(function () {
|
||||||
Route::get('/', [DataKriteriaController::class, 'index'])->name('data_kriteria');
|
Route::get('/', [DataKriteriaController::class, 'index'])->name('data_kriteria');
|
||||||
Route::get('/tambah', [DataKriteriaController::class, 'create'])->name('create_kriteria');
|
Route::get('/tambah', [DataKriteriaController::class, 'create'])->name('create_kriteria');
|
||||||
|
@ -81,23 +91,31 @@ Route::middleware(['auth'])->group(function () {
|
||||||
Route::delete('/hapus/{id}', [DataAlternatifController::class, 'destroy'])->name('destroy_alternatif');
|
Route::delete('/hapus/{id}', [DataAlternatifController::class, 'destroy'])->name('destroy_alternatif');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Route::prefix('data-pengguna')->group(function () {
|
||||||
Route::prefix('penilaian-alternatif')->group(function () {
|
Route::get('/', [UsersController::class, 'index'])->name('data_pengguna');
|
||||||
Route::get('/', [PenilaianAlternatifController::class, 'index'])->name('penilaian_alternatif');
|
Route::get('/tambah', [UsersController::class, 'create'])->name('create_pengguna');
|
||||||
Route::get('/tambah', [PenilaianAlternatifController::class, 'create'])->name('create_penilaian');
|
Route::post('/store', [UsersController::class, 'store'])->name('store_pengguna');
|
||||||
Route::post('/store', [PenilaianAlternatifController::class, 'store'])->name('store_penilaian');
|
Route::delete('/hapus/{id}', [UsersController::class, 'destroy'])->name('destroy_pengguna');
|
||||||
Route::delete('/delete/{kode_alternatif}/{periode}', [PenilaianAlternatifController::class, 'delete'])->name('delete_penilaian');
|
|
||||||
Route::get('/edit/{kode_alternatif}/{periode}', [PenilaianAlternatifController::class, 'edit'])->name('edit_penilaian');
|
|
||||||
Route::post('/update/{kode_alternatif}/{periode}', [PenilaianAlternatifController::class, 'update'])
|
|
||||||
->name('update_penilaian');
|
|
||||||
});
|
|
||||||
|
|
||||||
Route::prefix('proses-saw')->group(function () {
|
|
||||||
Route::get('/', [PerhitunganController::class, 'index'])->name('proses_saw');
|
|
||||||
});
|
|
||||||
|
|
||||||
Route::prefix('hasil-perhitungan')->group(function () {
|
|
||||||
Route::get('/', [HasilPerhitunganController::class, 'index'])->name('laporan_hasil');
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
// Admin & Penguji role
|
||||||
|
Route::get('/dashboard', function () {
|
||||||
|
return view('pages.dashboard');
|
||||||
|
})->name('dashboard');
|
||||||
|
|
||||||
|
Route::prefix('penilaian-alternatif')->group(function () {
|
||||||
|
Route::get('/', [PenilaianAlternatifController::class, 'index'])->name('penilaian_alternatif');
|
||||||
|
Route::get('/tambah', [PenilaianAlternatifController::class, 'create'])->name('create_penilaian');
|
||||||
|
Route::post('/store', [PenilaianAlternatifController::class, 'store'])->name('store_penilaian');
|
||||||
|
});
|
||||||
|
Route::prefix('proses-saw')->group(function () {
|
||||||
|
Route::get('/', [PerhitunganController::class, 'index'])->name('proses_saw');
|
||||||
|
});
|
||||||
|
|
||||||
|
Route::get('/laporan-hasil', function () {
|
||||||
|
return view('pages.dashboard');
|
||||||
|
})->name('laporan_hasil');
|
||||||
|
Route::get('/hapus-hasil', function () {
|
||||||
|
return view('pages.dashboard');
|
||||||
|
})->name('hapus_hasil');
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue