Update Bobot Sub Kriteria

This commit is contained in:
Zakiaass 2024-03-12 21:34:36 +07:00
parent 6769afb449
commit 26eabd15c0
9 changed files with 111 additions and 78 deletions

View File

@ -1,64 +0,0 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CalculationController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}

View File

@ -12,6 +12,41 @@ class SubCriteriaController extends Controller
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*/ */
public function calculateBobotSubKriteria()
{
$criterias = Criteria::all();
foreach ($criterias as $criteria) {
// Ambil semua sub-kriteria untuk kriteria ini
$subcriterias = SubCriteria::where('criteria_id', $criteria->id)->get();
$totalSubKriteria = $subcriterias->count();
$bobotSubKriteria = [];
// Hitung bobot untuk setiap sub-kriteria
foreach ($subcriterias as $key => $subcriteria) {
$sum = 0;
// Iterasi untuk setiap nilai prioritas pada kriteria
for ($i = $key; $i < $totalSubKriteria; $i++) {
// Hitung nilai SMARTER
$sum += 1 / ($i + 1);
}
// Hitung bobot kriteria menggunakan rumus SMARTER ROC
$bobot = $sum / $totalSubKriteria;
$bobotSubKriteria[$subcriteria->nama] = $bobot;
$subcriteria->update(['bobot' => $bobot]);
$subcriteria->save();
}
}
return redirect()->route('subkriteria.index')->with('success', 'Bobot sub kriteria berhasil dihitung dan disimpan.');
}
public function index() public function index()
{ {
$subcriterias = Subcriteria::all(); $subcriterias = Subcriteria::all();
@ -32,10 +67,12 @@ public function create()
*/ */
public function store(Request $request) public function store(Request $request)
{ {
$validator = Validator::make($request->only('criteria_id','nama', 'prioritas'), [ $validator = Validator::make($request->only('criteria_id','nama', 'deskripsi', 'prioritas','bobot'), [
'criteria_id' => 'required', 'criteria_id' => 'required',
'nama' => 'required', 'nama' => 'required',
'deskripsi' => 'required',
'prioritas' => 'required', 'prioritas' => 'required',
'bobot' => 'nullable|numeric',
]); ]);
if ($validator->fails()) { if ($validator->fails()) {
@ -45,7 +82,9 @@ public function store(Request $request)
SubCriteria::create([ SubCriteria::create([
'criteria_id' =>$request->criteria_id, 'criteria_id' =>$request->criteria_id,
'nama' => $request->nama, 'nama' => $request->nama,
'deskripsi' => $request->deskripsi,
'prioritas' => $request->prioritas, 'prioritas' => $request->prioritas,
'bobot' => $request->bobot,
]); ]);
return redirect()->route('subkriteria.index')->with('success', 'Data Sub Kriteria Berhasil Ditambah!'); return redirect()->route('subkriteria.index')->with('success', 'Data Sub Kriteria Berhasil Ditambah!');
@ -76,7 +115,9 @@ public function update(Request $request, string $id)
$validatedData = $request->validate([ $validatedData = $request->validate([
'criteria_id' => 'required', 'criteria_id' => 'required',
'nama' => 'required', 'nama' => 'required',
'deskripsi' => 'required',
'prioritas' => 'required', 'prioritas' => 'required',
'bobot' => 'nullable|numeric',
]); ]);
$subkriteria = SubCriteria::findOrFail($id); $subkriteria = SubCriteria::findOrFail($id);

View File

@ -7,7 +7,7 @@
class SubCriteria extends Model class SubCriteria extends Model
{ {
protected $fillable = ['criteria_id', 'nama', 'prioritas', 'bobot']; protected $fillable = ['criteria_id', 'nama', 'deskripsi', 'prioritas', 'bobot'];
public function Criteria() public function Criteria()
{ {

View File

@ -15,8 +15,9 @@ public function up(): void
$table->id(); $table->id();
$table->unsignedBigInteger('criteria_id'); $table->unsignedBigInteger('criteria_id');
$table->string('nama'); $table->string('nama');
$table->string('prioritas'); $table->text('deskripsi');
$table->string('bobot')->nullable(); $table->unsignedInteger('prioritas');
$table->float('bobot')->nullable();
$table->timestamps(); $table->timestamps();
$table->foreign('criteria_id')->references('id')->on('criterias'); $table->foreign('criteria_id')->references('id')->on('criterias');

View File

@ -147,7 +147,7 @@ class="badge btn-danger" data-toggle="modal"
<div class="alert alert-danger">{{ $errors->first('kategori') }}</div> <div class="alert alert-danger">{{ $errors->first('kategori') }}</div>
@endif @endif
<div class="form-group row"> <div class="form-group row">
<label class="col-sm-2 col-form-label">Deskipsi</label> <label class="col-sm-2 col-form-label">Deskripsi</label>
<div class="col-sm-10"> <div class="col-sm-10">
<input type="text" class="form-control" id="deskripsi" name="deskripsi" <input type="text" class="form-control" id="deskripsi" name="deskripsi"
required=""> required="">

View File

@ -39,9 +39,6 @@
<!-- Button trigger modal --> <!-- Button trigger modal -->
<button type="button" class="btn btn-primary mx-2" data-toggle="modal" data-target="#add-criteria"> <button type="button" class="btn btn-primary mx-2" data-toggle="modal" data-target="#add-criteria">
<i class="icon dw dw-add"></i> Tambah Kriteria</button> <i class="icon dw dw-add"></i> Tambah Kriteria</button>
{{-- <button type="button" class="btn btn-primary mx-2" data-toggle="modal" data-target="">
<i class="icon dw dw-calculator"></i> Hitung Bobot
</button> --}}
<button type="button" class="btn btn-primary mx-2" id="calculate-bobot"> <button type="button" class="btn btn-primary mx-2" id="calculate-bobot">
<i class="icon dw dw-calculator"></i> Hitung Bobot <i class="icon dw dw-calculator"></i> Hitung Bobot
</button> </button>

View File

@ -55,7 +55,7 @@
@foreach ($criterias as $criteria) @foreach ($criterias as $criteria)
<td> <td>
<select class="form-control" name="subcriteria[{{ $extracuricullar->id }}][{{ $criteria->id }}]"> <select class="form-control" name="subcriteria[{{ $extracuricullar->id }}][{{ $criteria->id }}]">
{{-- <option value="" selected disabled>Pilih Sub Kriteria</option> --}} <option value="" selected disabled>Pilih Sub Kriteria</option>
@foreach ($criteria->subCriteria as $subCriteria) @foreach ($criteria->subCriteria as $subCriteria)
<option value="{{ $subCriteria->id }}">{{ $subCriteria->nama }}</option> <option value="{{ $subCriteria->id }}">{{ $subCriteria->nama }}</option>
@endforeach @endforeach

View File

@ -39,8 +39,9 @@
<!-- Button trigger modal --> <!-- Button trigger modal -->
<button type="button" class="btn btn-primary mx-2" data-toggle="modal" data-target="#add-subcriteria"> <button type="button" class="btn btn-primary mx-2" data-toggle="modal" data-target="#add-subcriteria">
<i class="icon dw dw-add"></i> Tambah Sub Kriteria</button> <i class="icon dw dw-add"></i> Tambah Sub Kriteria</button>
<button type="button" class="btn btn-primary mx-2" data-toggle="modal" data-target=""> <button type="button" class="btn btn-primary mx-2" id="calculate-bobot">
<i class="icon dw dw-calculator"></i> Hitung Bobot</button> <i class="icon dw dw-calculator"></i> Hitung Bobot
</button>
<form class="form-inline ml-auto" action="{{ route('subkriteria.index') }}" method="GET"> <form class="form-inline ml-auto" action="{{ route('subkriteria.index') }}" method="GET">
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" name="search" placeholder="Search"> <input type="text" class="form-control" name="search" placeholder="Search">
@ -60,6 +61,7 @@
<th>No</th> <th>No</th>
<th>Kriteria</th> <th>Kriteria</th>
<th>Sub Kriteria</th> <th>Sub Kriteria</th>
<th>Deskripsi</th>
<th>Prioritas</th> <th>Prioritas</th>
<th>Bobot</th> <th>Bobot</th>
<th>Aksi</th> <th>Aksi</th>
@ -71,8 +73,15 @@
<td>{{ $loop->iteration }}</td> <td>{{ $loop->iteration }}</td>
<td>{{ $subcriteria->criteria->nama }}</td> <td>{{ $subcriteria->criteria->nama }}</td>
<td>{{ $subcriteria->nama }}</td> <td>{{ $subcriteria->nama }}</td>
<td>{{ $subcriteria->deskripsi }}</td>
<td>{{ $subcriteria->prioritas }}</td> <td>{{ $subcriteria->prioritas }}</td>
<td>{{ $subcriteria->bobot }}</td> <td>
@if ($subcriteria->bobot)
{{ $subcriteria->bobot }}
@else
<em>Belum dihitung</em>
@endif
</td>
<td> <td>
<a href="{{ route('subkriteria.edit', $subcriteria->id) }}" <a href="{{ route('subkriteria.edit', $subcriteria->id) }}"
class="badge btn-primary" data-toggle="modal" class="badge btn-primary" data-toggle="modal"
@ -159,8 +168,21 @@ class="badge btn-danger" data-toggle="modal"
</div> </div>
</div> </div>
</div> </div>
@if ($errors->has('prioritas')) @if ($errors->has('nama'))
<div class="alert alert-danger">{{ $errors->first('prioritas') }}</div> <div class="alert alert-danger">{{ $errors->first('nama') }}</div>
@endif
<div class="form-group row">
<label class="col-sm-2 col-form-label">Deskripsi</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="deskripsi" name="deskripsi"
required="">
<div class="valid-feedback">
Lengkap!
</div>
</div>
</div>
@if ($errors->has('deskripsi'))
<div class="alert alert-danger">{{ $errors->first('deskripsi') }}</div>
@endif @endif
<div class="form-group row"> <div class="form-group row">
<label class="col-sm-2 col-form-label">Prioritas</label> <label class="col-sm-2 col-form-label">Prioritas</label>
@ -236,6 +258,19 @@ class="badge btn-danger" data-toggle="modal"
@if ($errors->has('nama')) @if ($errors->has('nama'))
<div class="alert alert-danger">{{ $errors->first('nama') }}</div> <div class="alert alert-danger">{{ $errors->first('nama') }}</div>
@endif @endif
<div class="form-group row">
<label class="col-sm-2 col-form-label">Deskripsi</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="deskripsi" name="deskripsi"
required="" value="{{ $subcriteria->deskripsi }}">
<div class="valid-feedback">
Lengkap!
</div>
</div>
</div>
@if ($errors->has('deskripsi'))
<div class="alert alert-danger">{{ $errors->first('deskripsi') }}</div>
@endif
<div class="form-group row"> <div class="form-group row">
<label class="col-sm-2 col-form-label">Prioritas</label> <label class="col-sm-2 col-form-label">Prioritas</label>
<div class="col-sm-10"> <div class="col-sm-10">
@ -286,4 +321,26 @@ class="badge btn-danger" data-toggle="modal"
</div> </div>
</div> </div>
@endforeach @endforeach
<script>
$(document).ready(function() {
// Event listener for the button click
$('#calculate-bobot').click(function() {
// Send AJAX request to trigger calculation
$.ajax({
type: 'POST',
url: '{{ route('subkriteria.calculate') }}',
data: {
_token: '{{ csrf_token() }}'
},
success: function(response) {
// Reload the page to show updated values
location.reload();
},
error: function(xhr, status, error) {
console.error('Error:', error);
}
});
});
});
</script>
@endsection @endsection

View File

@ -109,6 +109,7 @@
Route::post('/kriteria/calculate', [CriteriaController::class, 'calculateBobotKriteria'])->name('kriteria.calculate'); Route::post('/kriteria/calculate', [CriteriaController::class, 'calculateBobotKriteria'])->name('kriteria.calculate');
Route::resource('subkriteria', SubCriteriaController::class); Route::resource('subkriteria', SubCriteriaController::class);
Route::post('/subkriteria/calculate', [SubCriteriaController::class, 'calculateBobotSubKriteria'])->name('subkriteria.calculate');
Route::resource('user', DataUserController::class); Route::resource('user', DataUserController::class);