From e99b88d950dce9dfc6111e28dbfac1af288c6283 Mon Sep 17 00:00:00 2001 From: yulianadewi18 Date: Thu, 14 Mar 2024 22:42:53 +0800 Subject: [PATCH 1/2] add admin --- app/Http/Controllers/Auth/LoginController.php | 18 +- app/Http/Controllers/DashboardController.php | 19 + .../HasilPerhitunganController copy 2.php | 80 +++++ .../HasilPerhitunganController.php | 77 +++- .../PenilaianAlternatifController.php | 86 ++++- .../PerhitunganController copy 2.php | 69 ++++ .../Controllers/PerhitunganController.php | 55 +-- app/Models/Penilaian.php | 2 +- .../2014_10_12_000000_create_users_table.php | 2 +- ...5344_create_penilaian_alternatif_table.php | 1 + database/seeders/DatabaseSeeder.php | 3 +- database/seeders/UsersSeeder.php | 8 +- resources/views/component/sidebar.blade.php | 37 +- resources/views/pages/dashboard.blade.php | 337 ++---------------- .../pages/hasil_perhitungan/index.blade.php | 86 +++++ .../views/pages/penilaian/action.blade.php | 8 + .../views/pages/penilaian/edit.blade.php | 90 +++++ .../views/pages/penilaian/form.blade.php | 62 +++- .../views/pages/penilaian/index.blade.php | 130 +++++-- .../pages/proses_penilaian/index.blade.php | 30 +- routes/web.php | 24 +- 21 files changed, 777 insertions(+), 447 deletions(-) create mode 100644 app/Http/Controllers/DashboardController.php create mode 100644 app/Http/Controllers/HasilPerhitunganController copy 2.php create mode 100644 app/Http/Controllers/PerhitunganController copy 2.php create mode 100644 resources/views/pages/hasil_perhitungan/index.blade.php create mode 100644 resources/views/pages/penilaian/action.blade.php create mode 100644 resources/views/pages/penilaian/edit.blade.php diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php index 0434163..a69f06b 100644 --- a/app/Http/Controllers/Auth/LoginController.php +++ b/app/Http/Controllers/Auth/LoginController.php @@ -8,27 +8,35 @@ use Illuminate\Support\Facades\Auth; class LoginController extends Controller { - public function index(){ + public function index() + { return view('pages.auth.login'); } - public function authenticate(Request $request){ + public function authenticate(Request $request) + { $credentials = $request->validate([ 'username' => ['required'], 'password' => ['required'], ]); - + if (Auth::attempt($credentials)) { $request->session()->regenerate(); - + + // Simpan ID pengguna di sesi + $request->session()->put('user_id', Auth::id()); + return redirect()->intended('dashboard'); } + return back()->with([ 'message' => 'Username atau Password salah.', ]); } - public function logout(Request $request){ + + public function logout(Request $request) + { Auth::logout(); $request->session()->invalidate(); diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php new file mode 100644 index 0000000..376bee2 --- /dev/null +++ b/app/Http/Controllers/DashboardController.php @@ -0,0 +1,19 @@ +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'])); + } +} diff --git a/app/Http/Controllers/HasilPerhitunganController.php b/app/Http/Controllers/HasilPerhitunganController.php index b8df1a9..7c32930 100644 --- a/app/Http/Controllers/HasilPerhitunganController.php +++ b/app/Http/Controllers/HasilPerhitunganController.php @@ -1,10 +1,81 @@ orderBy('kode_alternatif', 'ASC')->get(); + $kriteria = Kriteria::get(); + $penilaian = Penilaian::with('subKriteria')->where('id_admin', $user_id)->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')); + } } diff --git a/app/Http/Controllers/PenilaianAlternatifController.php b/app/Http/Controllers/PenilaianAlternatifController.php index 0243b95..0ef1ec5 100644 --- a/app/Http/Controllers/PenilaianAlternatifController.php +++ b/app/Http/Controllers/PenilaianAlternatifController.php @@ -10,29 +10,91 @@ use App\Models\SubKriteria; class PenilaianAlternatifController extends Controller { - function index() { - $penilaian = Penilaian::with(['alternatif','kriteria','subKriteria'])->get(); - return view('pages.penilaian.index',compact('penilaian')); + function index() + { + $penilaian = Penilaian::with(['alternatif', 'kriteria', 'subKriteria'])->get(); + // dd($penilaian); + return view('pages.penilaian.index', compact('penilaian')); } - function create() { + function create() + { $alternatif = Alternatif::with('guru')->get(); $kriteria = Kriteria::get(); $subKriteria = SubKriteria::get(); - return view('pages.penilaian.form', compact(['alternatif','kriteria','subKriteria'])); + return view('pages.penilaian.form', compact(['alternatif', 'kriteria', 'subKriteria'])); } - function store(Request $request) { - $kriteria = $request->id_kriteria; - $subKriteria = $request->id_sub; + public function store(Request $request) + { + $kriteria = $request->id_kriteria; + $subKriteria = $request->id_sub; - for ($i=0; $i < count($kriteria); $i++) { + for ($i = 0; $i < count($kriteria); $i++) { $penilaian = new Penilaian; - $penilaian->periode = $request->periode; + $penilaian->periode = $request->periode; $penilaian->id_alternatif = $request->id_alternatif; - $penilaian->id_kriteria = $kriteria[$i]; - $penilaian->id_sub = $subKriteria[$i]; + $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'); + } + + public function edit($id) + { + $penilaian = Penilaian::findOrFail($id); + + // Retrieve all alternatif, kriteria, and subkriteria + $alternatif = Alternatif::with('guru')->get(); + $kriteria = Kriteria::get(); + $subKriteria = SubKriteria::get(); + + // Get the selected kriteria's id from the penilaian + $selectedKriteriaId = $penilaian->id_kriteria; + + // If a specific kriteria is selected, filter the kriteria and subkriteria + if ($selectedKriteriaId) { + $kriteria = Kriteria::where('id', $selectedKriteriaId)->get(); + } + // dd($penilaian); + return view('pages.penilaian.edit', compact('penilaian', 'alternatif', 'kriteria', 'subKriteria')); + } + + public function delete($id) + { + try { + $penilaian = Penilaian::find($id); + + if (!$penilaian) { + return response()->json(['message' => 'Penilaian not found'], 404); + } + + $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, $id) + { + // Validate the incoming request + $request->validate([ + 'id_sub' => 'required', + ]); + + // Mendapatkan nilai id_sub dari array pertama + $idSub = $request->input('id_sub.0'); + + // Update the PenilaianKriteria record + Penilaian::where('id', $id) + ->update(['id_sub' => $idSub]); + + // Redirect or respond accordingly + return redirect()->route('penilaian_alternatif')->with('success', 'Penilaian updated successfully'); } } diff --git a/app/Http/Controllers/PerhitunganController copy 2.php b/app/Http/Controllers/PerhitunganController copy 2.php new file mode 100644 index 0000000..bbc4ec8 --- /dev/null +++ b/app/Http/Controllers/PerhitunganController copy 2.php @@ -0,0 +1,69 @@ +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'])); + } +} diff --git a/app/Http/Controllers/PerhitunganController.php b/app/Http/Controllers/PerhitunganController.php index 450e13b..4b896f8 100644 --- a/app/Http/Controllers/PerhitunganController.php +++ b/app/Http/Controllers/PerhitunganController.php @@ -6,19 +6,25 @@ use Illuminate\Http\Request; use App\Models\Kriteria; use App\Models\Alternatif; use App\Models\Penilaian; +use Illuminate\Support\Facades\Auth; class PerhitunganController extends Controller { - function index() + public function index() { - $alternatif = Alternatif::with('penilaian.kriteria')->orderBy('kode_alternatif', 'ASC')->get(); - $kriteria = Kriteria::get(); - $penilaian = Penilaian::with('subKriteria')->get(); - // return response()->json($alternatif); + $user_id = Auth::id(); - // mencari min max - foreach ($kriteria as $key => $vkriteria) { - foreach ($penilaian as $key_1 => $vpenilaian) { + // Mendapatkan data dari database + $alternatif = Alternatif::with(['penilaian' => function ($query) use ($user_id) { + $query->where('id_admin', $user_id); + }])->orderBy('kode_alternatif', 'ASC')->get(); + $kriteria = Kriteria::get(); + $penilaian = Penilaian::with('subKriteria')->where('id_admin', $user_id)->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']; @@ -29,41 +35,42 @@ class PerhitunganController extends Controller } } - // normalisasi - foreach ($penilaian as $key_1 => $vpenilaian) { - foreach ($kriteria as $key => $vkriteria) { + // Perform normalization + $normalisasi = []; + foreach ($penilaian as $vpenilaian) { + foreach ($kriteria as $vkriteria) { 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]); - } 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']; } } } } - // perangkingan + // Perform ranking + $rank = []; 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])) { $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 + // Calculate total ranking for each alternative + foreach ($normalisasi as $key => $value) { $rank[$key][] = array_sum($rank[$key]); } - // asort($rank); //sortir $rank + // dd($kriteria); + // Sort the ranking + arsort($rank); - // dd($minMax); - return view('pages.proses_penilaian.index', compact(['kriteria', 'alternatif', 'penilaian', 'minMax', 'normalisasi', 'rank'])); + // Pass data to the view + return view('pages.proses_penilaian.index', compact('kriteria', 'alternatif', 'penilaian', 'minMax', 'normalisasi', 'rank')); } } diff --git a/app/Models/Penilaian.php b/app/Models/Penilaian.php index 11d4ae1..3ece205 100644 --- a/app/Models/Penilaian.php +++ b/app/Models/Penilaian.php @@ -12,7 +12,7 @@ class Penilaian extends Model protected $table = 'penilaian_alternatif'; protected $fillable = [ - 'periode', 'id_alternatif', 'id_kriteria', 'id_sub', + 'periode', 'id_alternatif', 'id_kriteria', 'id_sub','id_admin' ]; public function alternatif(){ diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 0442eb1..90589ec 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -18,7 +18,7 @@ class CreateUsersTable extends Migration $table->string('name'); $table->string('username')->unique(); $table->string('password'); - $table->enum('roles', ['admin', 'penguji'])->default('penguji'); + $table->enum('roles', ['admin', 'penilai'])->default('penilai'); $table->timestamps(); }); } diff --git a/database/migrations/2024_01_03_005344_create_penilaian_alternatif_table.php b/database/migrations/2024_01_03_005344_create_penilaian_alternatif_table.php index 5ddfb89..9d08590 100644 --- a/database/migrations/2024_01_03_005344_create_penilaian_alternatif_table.php +++ b/database/migrations/2024_01_03_005344_create_penilaian_alternatif_table.php @@ -22,6 +22,7 @@ class CreatePenilaianAlternatifTable extends Migration $table->foreign('id_kriteria')->references('id')->on('mst_kriteria')->onDelete('restrict')->onUpdate('cascade'); $table->unsignedBigInteger('id_sub'); $table->foreign('id_sub')->references('id')->on('mst_sub_kriteria')->onDelete('restrict')->onUpdate('cascade'); + $table->integer('id_admin'); $table->timestamps(); }); } diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index a01afc1..74f49ec 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -15,7 +15,8 @@ class DatabaseSeeder extends Seeder $this->call([ UsersSeeder::class, KriteriaSeeder::class, - SubKriteriaSeeder::class + SubKriteriaSeeder::class, + GuruSeeder::class ]); } } diff --git a/database/seeders/UsersSeeder.php b/database/seeders/UsersSeeder.php index 2841816..ae96785 100644 --- a/database/seeders/UsersSeeder.php +++ b/database/seeders/UsersSeeder.php @@ -22,10 +22,10 @@ class UsersSeeder extends Seeder 'roles' => 'admin', ], [ - 'name' => 'Penguji 1', - 'username' => 'penguji1', - 'password' => bcrypt('penguji01'), - 'roles' => 'penguji', + 'name' => 'penilai 1', + 'username' => 'penilai1', + 'password' => bcrypt('penilai01'), + 'roles' => 'penilai', ], ]; diff --git a/resources/views/component/sidebar.blade.php b/resources/views/component/sidebar.blade.php index de0eeaf..7b86d19 100644 --- a/resources/views/component/sidebar.blade.php +++ b/resources/views/component/sidebar.blade.php @@ -19,8 +19,7 @@ + request()->segment(1) == 'data-sub-kriteria' ? '' : 'collapsed'}}" href="#" data-toggle="collapse" data-target="#collapse2" aria-expanded="true" aria-controls="collapse2"> Data @@ -29,19 +28,21 @@ request()->segment(1) == 'data-kriteria' || request()->segment(1) == 'data-sub-kriteria' ? 'show' : ''}}" aria-labelledby="heading2" data-parent="#accordionSidebar">
- @if (Auth::user()->roles =="admin") - Guru - @endif + Guru + Alternatif + + @if (Auth::user()->roles =="admin") Kriteria Sub Kriteria + @endif
{{-- + + + @if (Auth::user()->roles == "admin") - - + + @endif \ No newline at end of file diff --git a/resources/views/pages/dashboard.blade.php b/resources/views/pages/dashboard.blade.php index edc0919..bc3df65 100644 --- a/resources/views/pages/dashboard.blade.php +++ b/resources/views/pages/dashboard.blade.php @@ -1,324 +1,63 @@ @extends('layout.master') @section('title', 'Dashboard') - + @section('content') - -
- -
-
-
-
-
-
- Earnings (Monthly)
-
$40,000
-
-
- -
+ +
+ +
+
+
+
+
+
+ Jumlah Guru
+
{{ $countdataguru }}
-
-
-
- - -
-
-
-
-
-
- Earnings (Annual)
-
$215,000
-
-
- -
-
-
-
-
- - -
-
-
-
-
-
Tasks -
-
-
-
50%
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
- - -
-
-
-
-
-
- Pending Requests
-
18
-
-
- -
+
+
- - -
- - -
-
- -
-
Earnings Overview
-