add hasil

This commit is contained in:
yulianadewi18 2024-03-19 00:46:57 +08:00
parent 08662080df
commit 0c53d38278
23 changed files with 1081 additions and 483 deletions

View File

@ -8,11 +8,13 @@ use Illuminate\Support\Facades\Auth;
class LoginController extends Controller class LoginController extends Controller
{ {
public function index(){ public function index()
{
return view('pages.auth.login'); return view('pages.auth.login');
} }
public function authenticate(Request $request){ public function authenticate(Request $request)
{
$credentials = $request->validate([ $credentials = $request->validate([
'username' => ['required'], 'username' => ['required'],
'password' => ['required'], 'password' => ['required'],
@ -21,14 +23,20 @@ class LoginController extends Controller
if (Auth::attempt($credentials)) { if (Auth::attempt($credentials)) {
$request->session()->regenerate(); $request->session()->regenerate();
// Simpan ID pengguna di sesi
$request->session()->put('user_id', Auth::id());
return redirect()->intended('dashboard'); return redirect()->intended('dashboard');
} }
return back()->with([ return back()->with([
'message' => 'Username atau Password salah.', 'message' => 'Username atau Password salah.',
]); ]);
} }
public function logout(Request $request){
public function logout(Request $request)
{
Auth::logout(); Auth::logout();
$request->session()->invalidate(); $request->session()->invalidate();

View File

@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers;
use App\Models\Alternatif;
use App\Models\Guru;
use App\Models\Penilaian;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
public function index()
{
$countdataguru = Guru::count();
$countdatapenilaian = Penilaian::count();
$countdataalternative = Alternatif::count();
return view('pages.dashboard', compact('countdataguru', 'countdatapenilaian','countdataalternative'));
}
}

View File

@ -2,9 +2,95 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use App\Models\Alternatif;
use App\Models\Kriteria;
use App\Models\Penilaian;
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'));
}
} }

View File

@ -7,32 +7,162 @@ use App\Models\Penilaian;
use App\Models\Alternatif; use App\Models\Alternatif;
use App\Models\Kriteria; use App\Models\Kriteria;
use App\Models\SubKriteria; use App\Models\SubKriteria;
use Illuminate\Support\Facades\Auth;
class PenilaianAlternatifController extends Controller class PenilaianAlternatifController extends Controller
{ {
function index() { function index(Request $request)
$penilaian = Penilaian::with(['alternatif','kriteria','subKriteria'])->get(); {
return view('pages.penilaian.index',compact('penilaian')); $selectedPeriode = $request->periode;
$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'));
} }
function create() {
function create()
{
$alternatif = Alternatif::with('guru')->get(); $alternatif = Alternatif::with('guru')->get();
$kriteria = Kriteria::get(); $kriteria = Kriteria::get();
$subKriteria = SubKriteria::get(); $subKriteria = SubKriteria::get();
return view('pages.penilaian.form', compact(['alternatif','kriteria','subKriteria'])); // dd($alternatif);
return view('pages.penilaian.form', compact(['alternatif', 'kriteria', 'subKriteria']));
} }
function store(Request $request) { public 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;
$penilaian->id_kriteria = $kriteria[$i]; $penilaian->id_kriteria = $kriteria[$i];
$penilaian->id_sub = $subKriteria[$i]; $penilaian->id_sub = $subKriteria[$i];
$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');
} }
} }

View File

@ -6,19 +6,49 @@ use Illuminate\Http\Request;
use App\Models\Kriteria; use App\Models\Kriteria;
use App\Models\Alternatif; use App\Models\Alternatif;
use App\Models\Penilaian; use App\Models\Penilaian;
use Illuminate\Support\Facades\Auth;
class PerhitunganController extends Controller class PerhitunganController extends Controller
{ {
function index() public function index()
{ {
$alternatif = Alternatif::with('penilaian.kriteria')->orderBy('kode_alternatif', 'ASC')->get(); $user_id = Auth::id();
$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();
$penilaian = Penilaian::with('subKriteria')->get(); if ($penguji == null) {
// return response()->json($alternatif); $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)
->get();
}
// mencari min max
foreach ($kriteria as $key => $vkriteria) { // Calculate min and max values for each criteria
foreach ($penilaian as $key_1 => $vpenilaian) { $minMax = [];
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'];
@ -29,41 +59,42 @@ class PerhitunganController extends Controller
} }
} }
// normalisasi // Perform normalization
foreach ($penilaian as $key_1 => $vpenilaian) { $normalisasi = [];
foreach ($kriteria as $key => $vkriteria) { foreach ($penilaian as $vpenilaian) {
foreach ($kriteria as $vkriteria) {
if ($vkriteria->id == $vpenilaian->id_kriteria) { if ($vkriteria->id == $vpenilaian->id_kriteria) {
if ($vkriteria->sifat == "benefit") { //nilai sub_kriteria : nilai maksimal if ($vkriteria->sifat == "benefit") {
$normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = $vpenilaian->subKriteria['bobot'] / max($minMax[$vkriteria->id]); $normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = $vpenilaian->subKriteria['bobot'] / max($minMax[$vkriteria->id]);
} elseif ($vkriteria->sifat == "cost") { //nilai minimal : nilai sub_kriteria } elseif ($vkriteria->sifat == "cost") {
$normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = min($minMax[$vkriteria->id]) / $vpenilaian->subKriteria['bobot']; $normalisasi[$vpenilaian->alternatif->guru['nama_guru']][$vkriteria->id] = min($minMax[$vkriteria->id]) / $vpenilaian->subKriteria['bobot'];
} }
} }
} }
} }
// perangkingan // Perform ranking
$rank = [];
foreach ($normalisasi as $key => $vnormalisasi) { 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 foreach ($kriteria as $vkriteria) {
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 {
// 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 $rank[$key][] = 0; // Assign a default value
// or
// log_message('error', 'Key not found: ' . $vkriteria->id);
} }
} }
} }
foreach ($normalisasi as $key => $value) { //total hasil perangkingan // Calculate total ranking for each alternative
foreach ($normalisasi as $key => $value) {
$rank[$key][] = array_sum($rank[$key]); $rank[$key][] = array_sum($rank[$key]);
} }
// asort($rank); //sortir $rank // dd($kriteria);
// Sort the ranking
// arsort($rank);
// dd($minMax); // 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'));
} }
} }

View File

@ -63,5 +63,6 @@ class Kernel extends HttpKernel
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
'admin' => \App\Http\Middleware\IsAdmin::class, 'admin' => \App\Http\Middleware\IsAdmin::class,
'penguji' => \App\Http\Middleware\PengujiMiddleware::class,
]; ];
} }

View File

@ -0,0 +1,19 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class PengujiMiddleware
{
public function handle(Request $request, Closure $next)
{
if (Auth::check() && Auth::user()->roles == "penguji" || Auth::user() && Auth::user()->roles == "admin") {
return $next($request);
}
return redirect()->route('login')->with('error', 'Silahkan login sebagai penguji terlebih dahulu!');
}
}

View File

@ -12,7 +12,7 @@ class Penilaian extends Model
protected $table = 'penilaian_alternatif'; protected $table = 'penilaian_alternatif';
protected $fillable = [ protected $fillable = [
'periode', 'id_alternatif', 'id_kriteria', 'id_sub', 'periode', 'id_alternatif', 'id_kriteria', 'id_sub','id_admin'
]; ];
public function alternatif(){ public function alternatif(){

View File

@ -26,5 +26,6 @@ class AppServiceProvider extends ServiceProvider
{ {
config(['app.locale' => 'id']); config(['app.locale' => 'id']);
Carbon::setLocale('id'); Carbon::setLocale('id');
$this->app->register(SidebarComposerServiceProvider::class);
} }
} }

View File

@ -0,0 +1,37 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
use App\Models\Penilaian;
use App\Models\User;
class SidebarComposerServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
View::composer('component.sidebar', function ($view) {
$periode = Penilaian::distinct()->pluck('periode');
$penguji = User::get();
$view->with('periode', $periode)->with('penguji', $penguji);
});
}
}

View File

@ -22,6 +22,7 @@ class CreatePenilaianAlternatifTable extends Migration
$table->foreign('id_kriteria')->references('id')->on('mst_kriteria')->onDelete('restrict')->onUpdate('cascade'); $table->foreign('id_kriteria')->references('id')->on('mst_kriteria')->onDelete('restrict')->onUpdate('cascade');
$table->unsignedBigInteger('id_sub'); $table->unsignedBigInteger('id_sub');
$table->foreign('id_sub')->references('id')->on('mst_sub_kriteria')->onDelete('restrict')->onUpdate('cascade'); $table->foreign('id_sub')->references('id')->on('mst_sub_kriteria')->onDelete('restrict')->onUpdate('cascade');
$table->integer('id_admin');
$table->timestamps(); $table->timestamps();
}); });
} }

View File

@ -15,7 +15,8 @@ class DatabaseSeeder extends Seeder
$this->call([ $this->call([
UsersSeeder::class, UsersSeeder::class,
KriteriaSeeder::class, KriteriaSeeder::class,
SubKriteriaSeeder::class SubKriteriaSeeder::class,
GuruSeeder::class
]); ]);
} }
} }

View File

@ -0,0 +1,57 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class GuruSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// Generate dummy data for mst_guru table
$data = [];
for ($i = 0; $i < 10; $i++) {
$data[] = [
'nama_guru' => 'Guru ' . ($i + 1),
'gender' => $i % 2 == 0 ? 'Laki-laki' : 'Perempuan',
'nipa' => Str::random(10),
'tempat_lahir' => 'Tempat Lahir ' . ($i + 1),
'tanggal_lahir' => now()->subYears(rand(20, 50)),
'nuptk' => Str::random(16),
'nrg' => Str::random(16),
'jns_guru' => 'Jenis Guru ' . ($i + 1),
'tugas' => 'Tugas Guru ' . ($i + 1),
'tambahan' => 'Tambahan Guru ' . ($i + 1),
'ijazah' => 'IJAZAH ' . ($i + 1),
'tahun_lulus' => rand(1990, 2020),
'pt' => 'PT ' . ($i + 1),
'fakultas' => 'Fakultas ' . ($i + 1),
'jurusan' => 'Jurusan ' . ($i + 1),
'prodi' => 'Prodi ' . ($i + 1),
'akta_mengajar' => 'Akta Mengajar ' . ($i + 1),
'jalan' => 'Jalan ' . ($i + 1),
'rt' => rand(1, 10),
'rw' => rand(1, 10),
'dusun' => 'Dusun ' . ($i + 1),
'kelurahan' => 'Kelurahan ' . ($i + 1),
'kecamatan' => 'Kecamatan ' . ($i + 1),
'kabupaten' => 'Kabupaten ' . ($i + 1),
'kodepos' => 'Kodepos ' . ($i + 1),
'nohp' => '08123456789',
'nohp2' => '08123456789',
'created_at' => now(),
'updated_at' => now(),
];
}
// Insert dummy data into mst_guru table
DB::table('mst_guru')->insert($data);
}
}

View File

@ -1,4 +1,3 @@
<nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow"> <nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">
<!-- Sidebar Toggle (Topbar) --> <!-- Sidebar Toggle (Topbar) -->
<button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3"> <button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
@ -11,23 +10,15 @@
<ul class="navbar-nav ml-auto"> <ul class="navbar-nav ml-auto">
<!-- Nav Item - User Information --> <!-- Nav Item - User Information -->
<li class="nav-item dropdown no-arrow"> <li class="nav-item dropdown no-arrow">
<a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> @auth
<span class=" d-none d-lg-inline text-gray-600 small">{{ Auth::user()->name }}</span> <span class="d-none d-lg-inline text-gray-600 small">{{ Auth::user()->name }}</span>
@endauth
<div class="topbar-divider d-none d-sm-block" style="height: 20px"></div> <div class="topbar-divider d-none d-sm-block" style="height: 20px"></div>
<i class="fas fa-user fa-sm "></i> <i class="fas fa-user fa-sm "></i>
</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">
<a class="dropdown-item" href="#">
<i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400"></i>
Profile
</a>
<a class="dropdown-item" href="#">
<i class="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400"></i>
Settings
</a>
<div class="dropdown-divider"></div> <div class="dropdown-divider"></div>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal"> <a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
<i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i> <i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400"></i>

View File

@ -19,8 +19,7 @@
<a class="nav-link {{ request()->segment(1) == 'data-guru' || <a class="nav-link {{ request()->segment(1) == 'data-guru' ||
request()->segment(1) == 'data-alternatif' || request()->segment(1) == 'data-alternatif' ||
request()->segment(1) == 'data-kriteria' || request()->segment(1) == 'data-kriteria' ||
request()->segment(1) == 'data-sub-kriteria' ? '' : 'collapsed'}}" href="#" data-toggle="collapse" data-target="#collapse2" request()->segment(1) == 'data-sub-kriteria' ? '' : 'collapsed'}}" href="#" data-toggle="collapse" data-target="#collapse2" aria-expanded="true" aria-controls="collapse2">
aria-expanded="true" aria-controls="collapse2">
<i class="fas fa-fw fa-list"></i> <i class="fas fa-fw fa-list"></i>
<span>Data</span> <span>Data</span>
</a> </a>
@ -29,19 +28,20 @@
request()->segment(1) == 'data-kriteria' || request()->segment(1) == 'data-kriteria' ||
request()->segment(1) == 'data-sub-kriteria' ? 'show' : ''}}" aria-labelledby="heading2" data-parent="#accordionSidebar"> request()->segment(1) == 'data-sub-kriteria' ? 'show' : ''}}" aria-labelledby="heading2" data-parent="#accordionSidebar">
<div class="bg-white py-2 collapse-inner rounded"> <div class="bg-white py-2 collapse-inner rounded">
@if (Auth::user()->roles =="admin") <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>
@endif
<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
</div> </div>
</div> </div>
</li> </li>
{{-- <li class="nav-item {{ request()->segment(1) == 'bobot-kriteria' ? 'active' : ''}}"> {{-- <li class="nav-item {{ request()->segment(1) == 'bobot-kriteria' ? 'active' : ''}}">
<a class="nav-link" href="{{ route('data_bobot') }}"> <a class="nav-link" href="{{ route('data_bobot') }}">
<i class="fas fa-fw fa-balance-scale"></i> <i class="fas fa-fw fa-balance-scale"></i>
<span>Data Bobot Kriteria</span></a> <span>Data Bobot Kriteria</span></a>
</li> </li>
<li class="nav-item {{ request()->segment(1) == 'data-kriteria' ? 'active' : ''}}"> <li class="nav-item {{ request()->segment(1) == 'data-kriteria' ? 'active' : ''}}">
<a class="nav-link" href="{{ route('data_kriteria') }}"> <a class="nav-link" href="{{ route('data_kriteria') }}">
@ -50,31 +50,223 @@
</li> --}} </li> --}}
<hr class="sidebar-divider"> <hr class="sidebar-divider">
<div class="sidebar-heading">Main Navigation</div> <div class="sidebar-heading">Main Navigation</div>
@if (Auth::user()->roles == "penguji")
<li class="nav-item {{ request()->segment(1) == 'penilaian-alternatif' ? 'active' : ''}}"> <li class="nav-item {{ request()->segment(1) == 'penilaian-alternatif' ? 'active' : ''}}">
<a class="nav-link" href="{{ route('penilaian_alternatif') }}"> <a class="nav-link" href="{{ route('penilaian_alternatif') }}">
<i class="fas fa-fw fa-arrow-right"></i> <i class="fas fa-fw fa-arrow-right"></i>
<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">&times;</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="{{ route('proses_saw') }}"> <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">&times;</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="{{ route('laporan_hasil') }}"> <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">&times;</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' : ''}}">
<a class="nav-link" href="{{ route('data_pengguna') }}"> <a class="nav-link" href="{{ route('data_pengguna') }}">
<i class="fas fa-fw fa-users"></i> <i class="fas fa-fw fa-users"></i>
<span>Manajemen Pengguna</span> <span>Manajemen Pengguna</span>
</a> </a>
</li> </li>
@endif @endif
</ul> </ul>

View File

@ -3,322 +3,61 @@
@section('title', 'Dashboard') @section('title', 'Dashboard')
@section('content') @section('content')
<!-- Content Row --> <!-- Content Row -->
<div class="row"> <div class="row">
<!-- Earnings (Monthly) Card Example --> <!-- Earnings (Monthly) Card Example -->
<div class="col-xl-3 col-md-6 mb-4"> <div class="col-xl-3 col-md-6 mb-4">
<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="row no-gutters align-items-center"> <div class="row no-gutters align-items-center">
<div class="col mr-2"> <div class="col mr-2">
<div class="text-xs font-weight-bold text-primary text-uppercase mb-1"> <div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
Earnings (Monthly)</div> Jumlah Guru</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">$40,000</div> <div class="h5 mb-0 font-weight-bold text-gray-800">{{ $countdataguru }}</div>
</div>
<div class="col-auto">
<i class="fas fa-calendar fa-2x text-gray-300"></i>
</div>
</div> </div>
</div> <div class="col-auto">
</div> <i class="fas fa-calendar fa-2x text-gray-300"></i>
</div>
<!-- Earnings (Monthly) Card Example -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-success shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-success text-uppercase mb-1">
Earnings (Annual)</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">$215,000</div>
</div>
<div class="col-auto">
<i class="fas fa-dollar-sign fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<!-- Earnings (Monthly) Card Example -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-info shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-info text-uppercase mb-1">Tasks
</div>
<div class="row no-gutters align-items-center">
<div class="col-auto">
<div class="h5 mb-0 mr-3 font-weight-bold text-gray-800">50%</div>
</div>
<div class="col">
<div class="progress progress-sm mr-2">
<div class="progress-bar bg-info" role="progressbar"
style="width: 50%" aria-valuenow="50" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
</div>
</div>
</div>
<div class="col-auto">
<i class="fas fa-clipboard-list fa-2x text-gray-300"></i>
</div>
</div>
</div>
</div>
</div>
<!-- Pending Requests Card Example -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="card border-left-warning shadow h-100 py-2">
<div class="card-body">
<div class="row no-gutters align-items-center">
<div class="col mr-2">
<div class="text-xs font-weight-bold text-warning text-uppercase mb-1">
Pending Requests</div>
<div class="h5 mb-0 font-weight-bold text-gray-800">18</div>
</div>
<div class="col-auto">
<i class="fas fa-comments fa-2x text-gray-300"></i>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- Content Row --> <!-- Earnings (Monthly) Card Example -->
<div class="col-xl-3 col-md-6 mb-4">
<div class="row"> <div class="card border-left-success shadow h-100 py-2">
<div class="card-body">
<!-- Area Chart --> <div class="row no-gutters align-items-center">
<div class="col-xl-8 col-lg-7"> <div class="col mr-2">
<div class="card shadow mb-4"> <div class="text-xs font-weight-bold text-success text-uppercase mb-1">
<!-- Card Header - Dropdown --> Jumlah Penilaian</div>
<div <div class="h5 mb-0 font-weight-bold text-gray-800">{{ $countdataguru }}</div>
class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Earnings Overview</h6>
<div class="dropdown no-arrow">
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in"
aria-labelledby="dropdownMenuLink">
<div class="dropdown-header">Dropdown Header:</div>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div> </div>
</div> <div class="col-auto">
<!-- Card Body --> <i class="fas fa-dollar-sign fa-2x text-gray-300"></i>
<div class="card-body">
<div class="chart-area">
<canvas id="myAreaChart"></canvas>
</div>
</div>
</div>
</div>
<!-- Pie Chart -->
<div class="col-xl-4 col-lg-5">
<div class="card shadow mb-4">
<!-- Card Header - Dropdown -->
<div
class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">Revenue Sources</h6>
<div class="dropdown no-arrow">
<a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400"></i>
</a>
<div class="dropdown-menu dropdown-menu-right shadow animated--fade-in"
aria-labelledby="dropdownMenuLink">
<div class="dropdown-header">Dropdown Header:</div>
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</div>
</div>
<!-- Card Body -->
<div class="card-body">
<div class="chart-pie pt-4 pb-2">
<canvas id="myPieChart"></canvas>
</div>
<div class="mt-4 text-center small">
<span class="mr-2">
<i class="fas fa-circle text-primary"></i> Direct
</span>
<span class="mr-2">
<i class="fas fa-circle text-success"></i> Social
</span>
<span class="mr-2">
<i class="fas fa-circle text-info"></i> Referral
</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="col-xl-3 col-md-6 mb-4">
<!-- Content Row --> <div class="card border-left-success shadow h-100 py-2">
<div class="row"> <div class="card-body">
<div class="row no-gutters align-items-center">
<!-- Content Column --> <div class="col mr-2">
<div class="col-lg-6 mb-4"> <div class="text-xs font-weight-bold text-success text-uppercase mb-1">
Jumlah Alternatif</div>
<!-- Project Card Example --> <div class="h5 mb-0 font-weight-bold text-gray-800">{{ $countdataalternative }}</div>
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Projects</h6>
</div>
<div class="card-body">
<h4 class="small font-weight-bold">Server Migration <span
class="float-right">20%</span></h4>
<div class="progress mb-4">
<div class="progress-bar bg-danger" role="progressbar" style="width: 20%"
aria-valuenow="20" aria-valuemin="0" aria-valuemax="100"></div>
</div> </div>
<h4 class="small font-weight-bold">Sales Tracking <span <div class="col-auto">
class="float-right">40%</span></h4> <i class="fas fa-dollar-sign fa-2x text-gray-300"></i>
<div class="progress mb-4">
<div class="progress-bar bg-warning" role="progressbar" style="width: 40%"
aria-valuenow="40" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<h4 class="small font-weight-bold">Customer Database <span
class="float-right">60%</span></h4>
<div class="progress mb-4">
<div class="progress-bar" role="progressbar" style="width: 60%"
aria-valuenow="60" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<h4 class="small font-weight-bold">Payout Details <span
class="float-right">80%</span></h4>
<div class="progress mb-4">
<div class="progress-bar bg-info" role="progressbar" style="width: 80%"
aria-valuenow="80" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<h4 class="small font-weight-bold">Account Setup <span
class="float-right">Complete!</span></h4>
<div class="progress">
<div class="progress-bar bg-success" role="progressbar" style="width: 100%"
aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
</div> </div>
</div> </div>
</div> </div>
<!-- Color System -->
<div class="row">
<div class="col-lg-6 mb-4">
<div class="card bg-primary text-white shadow">
<div class="card-body">
Primary
<div class="text-white-50 small">#4e73df</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card bg-success text-white shadow">
<div class="card-body">
Success
<div class="text-white-50 small">#1cc88a</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card bg-info text-white shadow">
<div class="card-body">
Info
<div class="text-white-50 small">#36b9cc</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card bg-warning text-white shadow">
<div class="card-body">
Warning
<div class="text-white-50 small">#f6c23e</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card bg-danger text-white shadow">
<div class="card-body">
Danger
<div class="text-white-50 small">#e74a3b</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card bg-secondary text-white shadow">
<div class="card-body">
Secondary
<div class="text-white-50 small">#858796</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card bg-light text-black shadow">
<div class="card-body">
Light
<div class="text-black-50 small">#f8f9fc</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<div class="card bg-dark text-white shadow">
<div class="card-body">
Dark
<div class="text-white-50 small">#5a5c69</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-lg-6 mb-4">
<!-- Illustrations -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Illustrations</h6>
</div>
<div class="card-body">
<div class="text-center">
<img class="img-fluid px-3 px-sm-4 mt-3 mb-4" style="width: 25rem;"
src="{{ url('sbAdmin/img/undraw_posting_photo.svg') }}" alt="...">
</div>
<p>Add some quality, svg illustrations to your project courtesy of <a
target="_blank" rel="nofollow" href="https://undraw.co/">unDraw</a>, a
constantly updated collection of beautiful svg images that you can use
completely free and without attribution!</p>
<a target="_blank" rel="nofollow" href="https://undraw.co/">Browse Illustrations on
unDraw &rarr;</a>
</div>
</div>
<!-- Approach -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Development Approach</h6>
</div>
<div class="card-body">
<p>SB Admin 2 makes extensive use of Bootstrap 4 utility classes in order to reduce
CSS bloat and poor page performance. Custom CSS classes are used to create
custom components and custom utility classes.</p>
<p class="mb-0">Before working with this theme, you should become familiar with the
Bootstrap framework, especially the utility classes.</p>
</div>
</div>
</div> </div>
</div> </div>
</div>
<!-- End Content Row -->
@endsection @endsection
@push('js') @push('js')

View File

@ -0,0 +1,86 @@
@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

View File

@ -0,0 +1,8 @@
<td class="text-center">{{ $loop->iteration }}</td>
<td>{{ $penilaian->alternatif->guru['nama_guru'] }}</td>
<td>{{ $penilaian->kriteria['nama_kriteria'] }}</td>
<td class="text-center">{{ $penilaian->subKriteria['sub_kriteria'] }}</td>
<td class="text-center">
<a href="{{ route('edit_penilaian', $penilaian->id) }}" class="btn btn-sm btn-warning">Edit</a>
<button class="btn btn-sm btn-danger" onclick="deletePenilaian({{ $penilaian->id }})">Hapus</button>
</td>

View File

@ -0,0 +1,122 @@
@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

View File

@ -4,14 +4,25 @@
@section('content') @section('content')
<div class="card border-top-primary shadow mb-4"> <div class="card border-top-primary shadow mb-4">
<form action="{{ url('penilaian-alternatif/store') }}" method="POST"> <form action="{{ url('penilaian-alternatif/store') }}" method="POST" id="penilaianForm">
@csrf @csrf
<div class="card-body pt-3"> <div class="card-body pt-3">
<div class="row"> <div class="row">
<div class="col-lg-6"> <div class="col-lg-6">
<div class="form-group"> <div class="form-group">
<label for="">Periode</label> <label for="periode">Periode</label>
<input type="text" class="form-control" name="periode"> <select class="form-control" id="periode" name="periode">
@php
$tahunAkhir = date('Y');
$tahunAwal = $tahunAkhir - 10;
@endphp
@for ($tahun = $tahunAkhir; $tahun >= $tahunAwal; $tahun--)
@php
$periode = $tahun . '-' . ($tahun + 1);
@endphp
<option value="{{ $periode }}">{{ $periode }}</option>
@endfor
</select>
</div> </div>
</div> </div>
<div class="col-lg-6"> <div class="col-lg-6">
@ -20,7 +31,7 @@
<select name="id_alternatif" class="form-control"> <select name="id_alternatif" class="form-control">
<option value="">Pilih</option> <option value="">Pilih</option>
@foreach ($alternatif as $alt) @foreach ($alternatif as $alt)
<option value="{{ $alt->id }}">{{ $alt->guru['nama_guru'] }}</option> <option value="{{ $alt->id }}">{{$alt->kode_alternatif}} - {{ $alt->guru['nama_guru'] }}</option>
@endforeach @endforeach
</select> </select>
</div> </div>
@ -61,9 +72,16 @@
</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 class="btn btn-sm btn-warning">Kembali</button> <button type="button" class="btn btn-sm btn-warning" onclick="goBack()">Kembali</button>
<button class="btn btn-sm btn-primary">Simpan</button> <button type="submit" class="btn btn-sm btn-primary">Simpan</button>
</div> </div>
</form> </form>
</div> </div>
<script>
function goBack() {
window.history.back();
}
</script>
@endsection @endsection

View File

@ -3,51 +3,112 @@
@section('title', 'Data Nilai Alternatif') @section('title', 'Data Nilai Alternatif')
@push('css') @push('css')
<link href="{{ url('sbAdmin/vendor/datatables/dataTables.bootstrap4.min.css') }}" rel="stylesheet"> <link href="{{ url('sbAdmin/vendor/datatables/dataTables.bootstrap4.min.css') }}" rel="stylesheet">
@endpush @endpush
@section('content') @section('content')
<div class="card border-top-primary shadow mb-4"> @if (session('success'))
<div class="card-body pt-3"> <div class="alert alert-success">
<div class="mb-2"> {{ session('success') }}
<a href="{{ route('create_penilaian') }}" class="btn btn-sm btn-primary">Tambah Nilai Alternatif</a> </div>
</div> @endif
<div class="table-responsive">
<table class="table table-bordered table-sm" width="100%" cellspacing="0"> @if (session('error'))
<thead> <div class="alert alert-danger">
<tr> {{ session('error') }}
<th class="text-center" width="5%">No</th> </div>
<th class="text-center">Alternatif</th> @endif
<th class="text-center" width="50%">Kriteria</th> <div class="mb-2">
<th class="text-center">Nilai</th> <form action="{{ route('penilaian_alternatif') }}" method="GET">
<th class="text-center">Action</th> <div class="form-group">
</tr> <label for="periodeFilter">Pilih Periode:</label>
</thead> <select name="periode" id="periodeFilter" class="form-control" onchange="this.form.submit()">
<tbody> <option value="">Pilih Periode</option>
@foreach ($penilaian as $item) @foreach ($periode as $p)
<tr> <option value="{{ $p }}">{{ $p }}</option>
<td class="text-center">{{ $loop->iteration }}</td> @endforeach
<td>{{ $item->alternatif->guru['nama_guru'] }}</td> </select>
<td>{{ $item->kriteria['nama_kriteria'] }}</td> </div>
<td class="text-center">{{ $item->subKriteria['sub_kriteria'] }}</td> </form>
<td class="text-center"> </div>
<button class="btn btn-sm btn-warning">Edit</button> <div class="card border-top-primary shadow mb-4">
<button class="btn btn-sm btn-danger">Hapus</button> <div class="card-body pt-3">
</td> <div class="mb-2">
</tr> <a href="{{ route('create_penilaian') }}" class="btn btn-sm btn-primary">Tambah Nilai Alternatif</a>
@endforeach </div>
</tbody> <div class="table-responsive">
</table> <table class="table table-bordered table-sm" id="dataTable" width="100%" cellspacing="0">
</div> <thead>
<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')
<!-- Page level plugins --> <script>
<script src="{{ url('sbAdmin/vendor/datatables/jquery.dataTables.min.js') }}"></script> $(document).ready(function() {
<script src="{{ url('sbAdmin/vendor/datatables/dataTables.bootstrap4.min.js') }}"></script> $('#dataTable').DataTable();
});
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

View File

@ -23,23 +23,6 @@
@endforeach @endforeach
</tr> </tr>
</thead> </thead>
{{-- <tbody>
@foreach ($alternatif as $alt)
<tr>
<td class="text-center">{{ $alt->kode_alternatif }}</td>
<td>{{ $alt->guru['nama_guru'] }}</td>
@foreach ($alt->penilaian as $nilai)
<td class="text-center">{{ $nilai->id_sub }}</td>
<?php
$minMaxKriteria[$nilai->kriteria->kode_kriteria]['min'] > $nilai->id_sub && $minMaxKriteria[$nilai->kriteria->kode_kriteria]['min'] = $nilai->id_sub;
$minMaxKriteria[$nilai->kriteria->kode_kriteria]['max'] < $nilai->id_sub && $minMaxKriteria[$nilai->kriteria->kode_kriteria]['max'] = $nilai->id_sub
?>
@endforeach
</tr>
@endforeach
</tbody> --}}
<tbody> <tbody>
@forelse ($alternatif as $alt => $valt) @forelse ($alternatif as $alt => $valt)
@if(count($valt->penilaian) > 0) @if(count($valt->penilaian) > 0)
@ -47,7 +30,11 @@
<td class="text-center">{{ $valt->kode_alternatif }}</td> <td class="text-center">{{ $valt->kode_alternatif }}</td>
<td>{{ $valt->guru['nama_guru'] }}</td> <td>{{ $valt->guru['nama_guru'] }}</td>
@foreach ($valt->penilaian as $nilai) @foreach ($valt->penilaian as $nilai)
@if($nilai->subKriteria)
<td class="text-center">{{ $nilai->subKriteria['bobot'] }}</td> <td class="text-center">{{ $nilai->subKriteria['bobot'] }}</td>
@else
<td class="text-center">Nilai Kosong</td>
@endif
@endforeach @endforeach
</tr> </tr>
@endif @endif
@ -102,7 +89,7 @@
<tr> <tr>
<td width="20%">{{ $key }}</td> <td width="20%">{{ $key }}</td>
@foreach ($value as $key_1 => $value_1) @foreach ($value as $key_1 => $value_1)
<td class="text-center">{{ number_format($value_1 ,2) }}</td> <td class="text-center">{{ number_format($value_1 ?? 0, 2) }}</td>
@endforeach @endforeach
</tr> </tr>
@endforeach @endforeach
@ -120,7 +107,7 @@
<th class="text-center">{{ $item->kode_kriteria }}</th> <th class="text-center">{{ $item->kode_kriteria }}</th>
@endforeach @endforeach
<th rowspan="2" style="vertical-align: middle">Total</th> <th rowspan="2" style="vertical-align: middle">Total</th>
<!-- <th rowspan="2" style="vertical-align: middle">Rank</th> --> <th rowspan="2" style="vertical-align: middle">Ranking</th>
</tr> </tr>
<tr> <tr>
<th>Bobot</th> <th>Bobot</th>
@ -134,9 +121,8 @@
<tr> <tr>
<td width="20%">{{ $key }}</td> <td width="20%">{{ $key }}</td>
@foreach ($value as $key_1 => $value_1) @foreach ($value as $key_1 => $value_1)
<td class="text-center">{{ number_format($value_1 ,2) }}</td> <td class="text-center">{{ number_format($value_1 ?? 0, 2) }}</td>
@endforeach @endforeach
<!-- <td>{{ $loop->iteration }}</td> -->
</tr> </tr>
@endforeach @endforeach
</tbody> </tbody>

View File

@ -5,10 +5,12 @@ use App\Http\Controllers\Auth\{
LoginController, LoginController,
}; };
use App\Http\Controllers\{ use App\Http\Controllers\{
DashboardController,
DataGuruController, DataGuruController,
DataAlternatifController, DataAlternatifController,
DataKriteriaController, DataKriteriaController,
DataSubKriteriaController, DataSubKriteriaController,
HasilPerhitunganController,
PenilaianAlternatifController, PenilaianAlternatifController,
PerhitunganController, PerhitunganController,
UsersController UsersController
@ -29,19 +31,11 @@ Route::get('/', [LoginController::class, 'index'])->middleware('guest')->name('l
Route::post('/process', [LoginController::class, 'authenticate'])->name('login.process'); Route::post('/process', [LoginController::class, 'authenticate'])->name('login.process');
Route::post('/logout', [LoginController::class, 'logout'])->name('logout'); Route::post('/logout', [LoginController::class, 'logout'])->name('logout');
// Admin & Penguji role
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');
@ -59,6 +53,24 @@ Route::middleware(['auth'])->group(function () {
Route::post('/update{id}', [DataSubKriteriaController::class, 'update'])->name('update_sub_kriteria'); Route::post('/update{id}', [DataSubKriteriaController::class, 'update'])->name('update_sub_kriteria');
Route::delete('/hapus/{id}', [DataSubKriteriaController::class, 'destroy'])->name('destroy_sub_kriteria'); Route::delete('/hapus/{id}', [DataSubKriteriaController::class, 'destroy'])->name('destroy_sub_kriteria');
}); });
Route::prefix('data-pengguna')->group(function () {
Route::get('/', [UsersController::class, 'index'])->name('data_pengguna');
Route::get('/tambah', [UsersController::class, 'create'])->name('create_pengguna');
Route::post('/store', [UsersController::class, 'store'])->name('store_pengguna');
Route::delete('/hapus/{id}', [UsersController::class, 'destroy'])->name('destroy_pengguna');
});
});
Route::middleware('penguji')->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-alternatif')->group(function () { Route::prefix('data-alternatif')->group(function () {
Route::get('/', [DataAlternatifController::class, 'index'])->name('data_alternatif'); Route::get('/', [DataAlternatifController::class, 'index'])->name('data_alternatif');
@ -69,31 +81,23 @@ 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::get('/', [UsersController::class, 'index'])->name('data_pengguna'); Route::prefix('penilaian-alternatif')->group(function () {
Route::get('/tambah', [UsersController::class, 'create'])->name('create_pengguna'); Route::get('/', [PenilaianAlternatifController::class, 'index'])->name('penilaian_alternatif');
Route::post('/store', [UsersController::class, 'store'])->name('store_pengguna'); Route::get('/tambah', [PenilaianAlternatifController::class, 'create'])->name('create_penilaian');
Route::delete('/hapus/{id}', [UsersController::class, 'destroy'])->name('destroy_pengguna'); Route::post('/store', [PenilaianAlternatifController::class, 'store'])->name('store_penilaian');
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');
}); });