add admin
This commit is contained in:
parent
08662080df
commit
e99b88d950
|
@ -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();
|
||||
|
|
|
@ -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'));
|
||||
}
|
||||
}
|
|
@ -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,10 +1,81 @@
|
|||
<?php
|
||||
|
||||
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
|
||||
{
|
||||
//
|
||||
public function index()
|
||||
{
|
||||
$user_id = Auth::id(); // Get the current user's ID
|
||||
|
||||
// Retrieve data from the database
|
||||
$alternatif = Alternatif::with('penilaian.kriteria')->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'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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');
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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']));
|
||||
}
|
||||
}
|
|
@ -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'));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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(){
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -15,7 +15,8 @@ class DatabaseSeeder extends Seeder
|
|||
$this->call([
|
||||
UsersSeeder::class,
|
||||
KriteriaSeeder::class,
|
||||
SubKriteriaSeeder::class
|
||||
SubKriteriaSeeder::class,
|
||||
GuruSeeder::class
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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',
|
||||
],
|
||||
];
|
||||
|
||||
|
|
|
@ -19,8 +19,7 @@
|
|||
<a class="nav-link {{ request()->segment(1) == 'data-guru' ||
|
||||
request()->segment(1) == 'data-alternatif' ||
|
||||
request()->segment(1) == 'data-kriteria' ||
|
||||
request()->segment(1) == 'data-sub-kriteria' ? '' : 'collapsed'}}" href="#" data-toggle="collapse" data-target="#collapse2"
|
||||
aria-expanded="true" aria-controls="collapse2">
|
||||
request()->segment(1) == 'data-sub-kriteria' ? '' : 'collapsed'}}" href="#" data-toggle="collapse" data-target="#collapse2" aria-expanded="true" aria-controls="collapse2">
|
||||
<i class="fas fa-fw fa-list"></i>
|
||||
<span>Data</span>
|
||||
</a>
|
||||
|
@ -29,19 +28,21 @@
|
|||
request()->segment(1) == 'data-kriteria' ||
|
||||
request()->segment(1) == 'data-sub-kriteria' ? 'show' : ''}}" aria-labelledby="heading2" data-parent="#accordionSidebar">
|
||||
<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>
|
||||
@endif
|
||||
<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>
|
||||
|
||||
@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-sub-kriteria' ? 'active' : ''}}" href="{{ route('data_sub_kriteria') }}">Sub Kriteria</a>
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
{{-- <li class="nav-item {{ request()->segment(1) == 'bobot-kriteria' ? 'active' : ''}}">
|
||||
<a class="nav-link" href="{{ route('data_bobot') }}">
|
||||
<i class="fas fa-fw fa-balance-scale"></i>
|
||||
<span>Data Bobot Kriteria</span></a>
|
||||
<a class="nav-link" href="{{ route('data_bobot') }}">
|
||||
<i class="fas fa-fw fa-balance-scale"></i>
|
||||
<span>Data Bobot Kriteria</span></a>
|
||||
</li>
|
||||
<li class="nav-item {{ request()->segment(1) == 'data-kriteria' ? 'active' : ''}}">
|
||||
<a class="nav-link" href="{{ route('data_kriteria') }}">
|
||||
|
@ -55,26 +56,26 @@
|
|||
<i class="fas fa-fw fa-arrow-right"></i>
|
||||
<span>Penilaian Alternatif</span>
|
||||
</a>
|
||||
</li>
|
||||
</li>
|
||||
<li class="nav-item {{ request()->segment(1) == 'proses-saw' ? 'active' : ''}}">
|
||||
<a class="nav-link" href="{{ route('proses_saw') }}">
|
||||
<i class="fas fa-fw fa-arrow-right"></i>
|
||||
<span>Proses Perhitungan</span>
|
||||
</a>
|
||||
</li>
|
||||
</li>
|
||||
<li class="nav-item {{ request()->segment(1) == 'laporan-hasil' ? 'active' : ''}}">
|
||||
<a class="nav-link" href="{{ route('laporan_hasil') }}">
|
||||
<i class="fas fa-fw fa-arrow-right"></i>
|
||||
<span>Data Hasil Keputusan</span>
|
||||
</a>
|
||||
</li>
|
||||
</li>
|
||||
@if (Auth::user()->roles == "admin")
|
||||
<hr class="sidebar-divider m-0">
|
||||
<li class="nav-item {{ request()->segment(1) == 'data-pengguna' ? 'active' : ''}}">
|
||||
<a class="nav-link" href="{{ route('data_pengguna') }}">
|
||||
<i class="fas fa-fw fa-users"></i>
|
||||
<span>Manajemen Pengguna</span>
|
||||
</a>
|
||||
</li>
|
||||
<hr class="sidebar-divider m-0">
|
||||
<li class="nav-item {{ request()->segment(1) == 'data-pengguna' ? 'active' : ''}}">
|
||||
<a class="nav-link" href="{{ route('data_pengguna') }}">
|
||||
<i class="fas fa-fw fa-users"></i>
|
||||
<span>Manajemen Pengguna</span>
|
||||
</a>
|
||||
</li>
|
||||
@endif
|
||||
</ul>
|
|
@ -1,324 +1,63 @@
|
|||
@extends('layout.master')
|
||||
|
||||
@section('title', 'Dashboard')
|
||||
|
||||
|
||||
@section('content')
|
||||
<!-- Content Row -->
|
||||
<div class="row">
|
||||
<!-- Earnings (Monthly) Card Example -->
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card border-left-primary 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-primary text-uppercase mb-1">
|
||||
Earnings (Monthly)</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">$40,000</div>
|
||||
</div>
|
||||
<div class="col-auto">
|
||||
<i class="fas fa-calendar fa-2x text-gray-300"></i>
|
||||
</div>
|
||||
<!-- Content Row -->
|
||||
<div class="row">
|
||||
<!-- Earnings (Monthly) Card Example -->
|
||||
<div class="col-xl-3 col-md-6 mb-4">
|
||||
<div class="card border-left-primary 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-primary text-uppercase mb-1">
|
||||
Jumlah Guru</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ $countdataguru }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</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 class="col-auto">
|
||||
<i class="fas fa-calendar fa-2x text-gray-300"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Content Row -->
|
||||
|
||||
<div class="row">
|
||||
|
||||
<!-- Area Chart -->
|
||||
<div class="col-xl-8 col-lg-7">
|
||||
<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">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>
|
||||
<!-- 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">
|
||||
Jumlah Penilaian</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ $countdataguru }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Card Body -->
|
||||
<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 class="col-auto">
|
||||
<i class="fas fa-dollar-sign fa-2x text-gray-300"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Content Row -->
|
||||
<div class="row">
|
||||
|
||||
<!-- Content Column -->
|
||||
<div class="col-lg-6 mb-4">
|
||||
|
||||
<!-- Project Card Example -->
|
||||
<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 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">
|
||||
Jumlah Alternatif</div>
|
||||
<div class="h5 mb-0 font-weight-bold text-gray-800">{{ $countdataalternative }}</div>
|
||||
</div>
|
||||
<h4 class="small font-weight-bold">Sales Tracking <span
|
||||
class="float-right">40%</span></h4>
|
||||
<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 class="col-auto">
|
||||
<i class="fas fa-dollar-sign fa-2x text-gray-300"></i>
|
||||
</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 →</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>
|
||||
<!-- End Content Row -->
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
|
@ -328,5 +67,5 @@
|
|||
<!-- Page level custom scripts -->
|
||||
<script src="{{ url('sbAdmin/js/demo/chart-area-demo.js') }}"></script>
|
||||
<script src="{{ url('sbAdmin/js/demo/chart-pie-demo.js') }}"></script>
|
||||
|
||||
|
||||
@endpush
|
|
@ -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>
|
||||
|
||||
<!-- Print -->
|
||||
<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
|
|
@ -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>
|
|
@ -0,0 +1,90 @@
|
|||
@extends('layout.master')
|
||||
|
||||
@section('title', 'Edit Penilaian Alternatif')
|
||||
|
||||
@section('content')
|
||||
<div class="card border-top-primary shadow mb-4">
|
||||
<form action="{{ route('update_penilaian', ['id' => $penilaian->id]) }}" method="POST" id="penilaianForm">
|
||||
@csrf
|
||||
@if(isset($edit))
|
||||
@method('PUT') {{-- Use 'PUT' for updating --}}
|
||||
@endif
|
||||
|
||||
<div class="card-body pt-3">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label for="periode">Periode</label>
|
||||
<input type="text" class="form-control" name="periode" value="{{ isset($penilaian) ? $penilaian->periode : '' }}" readonly>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label for="id_alternatif">Alternatif</label>
|
||||
<select name="id_alternatif" class="form-control" readonly>
|
||||
<option value="{{ isset($penilaian) ? $penilaian->id_alternatif : '' }}" selected>{{ isset($penilaian) ? $penilaian->alternatif->guru->nama_guru : 'Pilih' }}</option>
|
||||
</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 $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 }}" {{ isset($penilaian) && $sub->id == $penilaian->id_sub ? 'selected' : '' }}>{{ $sub->sub_kriteria }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card-footer" style="display: flex; justify-content: space-between!important;">
|
||||
<a href="{{ route('penilaian_alternatif') }}" class="btn btn-sm btn-warning">Kembali</a>
|
||||
<button type="button" class="btn btn-sm btn-primary" onclick="validateAndSubmit()">Simpan</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
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() {
|
||||
// Add any additional validation logic as needed
|
||||
|
||||
var periode = document.getElementsByName('periode')[0].value;
|
||||
var idAlternatif = document.getElementsByName('id_alternatif')[0].value;
|
||||
|
||||
return periode.trim() !== '' && idAlternatif.trim() !== '';
|
||||
}
|
||||
</script>
|
||||
|
||||
@endsection
|
|
@ -4,14 +4,25 @@
|
|||
|
||||
@section('content')
|
||||
<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
|
||||
<div class="card-body pt-3">
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
<div class="form-group">
|
||||
<label for="">Periode</label>
|
||||
<input type="text" class="form-control" name="periode">
|
||||
<label for="periode">Periode</label>
|
||||
<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 class="col-lg-6">
|
||||
|
@ -61,9 +72,50 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="card-footer" style="display: flex; justify-content: space-between!important;">
|
||||
<button class="btn btn-sm btn-warning">Kembali</button>
|
||||
<button class="btn btn-sm btn-primary">Simpan</button>
|
||||
<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
|
|
@ -3,51 +3,103 @@
|
|||
@section('title', 'Data Nilai Alternatif')
|
||||
|
||||
@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
|
||||
|
||||
|
||||
@section('content')
|
||||
<div class="card border-top-primary shadow mb-4">
|
||||
<div class="card-body pt-3">
|
||||
<div class="mb-2">
|
||||
<a href="{{ route('create_penilaian') }}" class="btn btn-sm btn-primary">Tambah Nilai Alternatif</a>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-sm" width="100%" cellspacing="0">
|
||||
<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">Nilai</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->guru['nama_guru'] }}</td>
|
||||
<td>{{ $item->kriteria['nama_kriteria'] }}</td>
|
||||
<td class="text-center">{{ $item->subKriteria['sub_kriteria'] }}</td>
|
||||
<td class="text-center">
|
||||
<button class="btn btn-sm btn-warning">Edit</button>
|
||||
<button class="btn btn-sm btn-danger">Hapus</button>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="card border-top-primary shadow mb-4">
|
||||
<div class="card-body pt-3">
|
||||
<div class="mb-2">
|
||||
<a href="{{ route('create_penilaian') }}" class="btn btn-sm btn-primary">Tambah Nilai Alternatif</a>
|
||||
</div>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-sm" width="100%" cellspacing="0">
|
||||
<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">Nilai</th>
|
||||
<th class="text-center">Action</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach ($penilaian as $item)
|
||||
@if(session('user_id') != 1)
|
||||
@if(session('user_id') == $item->id_admin)
|
||||
<tr>
|
||||
<td class="text-center">{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->alternatif->guru['nama_guru'] }}</td>
|
||||
<td>{{ $item->kriteria['nama_kriteria'] }}</td>
|
||||
<td class="text-center">{{ $item->subKriteria['sub_kriteria'] }}</td>
|
||||
<td class="text-center">
|
||||
<a href="{{ route('edit_penilaian', $item->id) }}" class="btn btn-sm btn-warning">Edit</a>
|
||||
<button class="btn btn-sm btn-danger" onclick="deletePenilaian({{ $item->id }})">Hapus</button>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@else
|
||||
<tr>
|
||||
<td class="text-center">{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->alternatif->guru['nama_guru'] }}</td>
|
||||
<td>{{ $item->kriteria['nama_kriteria'] }}</td>
|
||||
<td class="text-center">{{ $item->subKriteria['sub_kriteria'] }}</td>
|
||||
<td class="text-center">
|
||||
<a href="{{ route('edit_penilaian', $item->id) }}" class="btn btn-sm btn-warning">Edit</a>
|
||||
<button class="btn btn-sm btn-danger" onclick="deletePenilaian({{ $item->id }})">Hapus</button>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<!-- 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>
|
||||
<script>
|
||||
function deletePenilaian(penilaianId) {
|
||||
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(penilaianId);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
<!-- Page level custom scripts -->
|
||||
<script src="{{ url('sbAdmin/js/demo/datatables-demo.js') }}"></script>
|
||||
function deletePenilaianAjax(penilaianId) {
|
||||
$.ajax({
|
||||
url: '{{ route("delete_penilaian", ":id") }}'.replace(':id', penilaianId),
|
||||
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
|
|
@ -23,23 +23,6 @@
|
|||
@endforeach
|
||||
</tr>
|
||||
</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>
|
||||
@forelse ($alternatif as $alt => $valt)
|
||||
@if(count($valt->penilaian) > 0)
|
||||
|
@ -47,7 +30,11 @@
|
|||
<td class="text-center">{{ $valt->kode_alternatif }}</td>
|
||||
<td>{{ $valt->guru['nama_guru'] }}</td>
|
||||
@foreach ($valt->penilaian as $nilai)
|
||||
@if($nilai->subKriteria)
|
||||
<td class="text-center">{{ $nilai->subKriteria['bobot'] }}</td>
|
||||
@else
|
||||
<td class="text-center">Nilai Kosong</td>
|
||||
@endif
|
||||
@endforeach
|
||||
</tr>
|
||||
@endif
|
||||
|
@ -102,7 +89,7 @@
|
|||
<tr>
|
||||
<td width="20%">{{ $key }}</td>
|
||||
@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
|
||||
</tr>
|
||||
@endforeach
|
||||
|
@ -120,7 +107,7 @@
|
|||
<th class="text-center">{{ $item->kode_kriteria }}</th>
|
||||
@endforeach
|
||||
<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>
|
||||
<th>Bobot</th>
|
||||
|
@ -134,9 +121,8 @@
|
|||
<tr>
|
||||
<td width="20%">{{ $key }}</td>
|
||||
@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
|
||||
<!-- <td>{{ $loop->iteration }}</td> -->
|
||||
</tr>
|
||||
@endforeach
|
||||
</tbody>
|
||||
|
@ -147,4 +133,4 @@
|
|||
@endsection
|
||||
|
||||
@push('js')
|
||||
@endpush
|
||||
@endpush
|
||||
|
|
|
@ -5,10 +5,12 @@ use App\Http\Controllers\Auth\{
|
|||
LoginController,
|
||||
};
|
||||
use App\Http\Controllers\{
|
||||
DashboardController,
|
||||
DataGuruController,
|
||||
DataAlternatifController,
|
||||
DataKriteriaController,
|
||||
DataSubKriteriaController,
|
||||
HasilPerhitunganController,
|
||||
PenilaianAlternatifController,
|
||||
PerhitunganController,
|
||||
UsersController
|
||||
|
@ -31,8 +33,6 @@ Route::post('/logout', [LoginController::class, 'logout'])->name('logout');
|
|||
|
||||
|
||||
Route::middleware(['auth'])->group(function () {
|
||||
// Admin Role
|
||||
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');
|
||||
|
@ -76,24 +76,22 @@ Route::middleware(['auth'])->group(function () {
|
|||
Route::delete('/hapus/{id}', [UsersController::class, 'destroy'])->name('destroy_pengguna');
|
||||
});
|
||||
});
|
||||
// Admin & Penguji role
|
||||
Route::get('/dashboard', function () {
|
||||
return view('pages.dashboard');
|
||||
})->name('dashboard');
|
||||
// Admin & Penilai role
|
||||
Route::get('/dashboard', [DashboardController::class, 'index'])->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::delete('/delete/{id}', [PenilaianAlternatifController::class, 'delete'])->name('delete_penilaian');
|
||||
Route::get('/edit/{id}', [PenilaianAlternatifController::class, 'edit'])->name('edit_penilaian');
|
||||
Route::post('/update/{id}', [PenilaianAlternatifController::class, 'update'])->name('update_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');
|
||||
});
|
||||
Route::prefix('hasil-perhitungan')->group(function () {
|
||||
Route::get('/', [HasilPerhitunganController::class, 'index'])->name('laporan_hasil');
|
||||
});
|
Loading…
Reference in New Issue