TIF_E41200115/app/Http/Controllers/RangkingController.php

107 lines
4.5 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Balita;
use App\Models\dataBalita;
use App\Models\Role;
use App\Models\Kriteria;
use App\Models\Nilai;
class RangkingController extends Controller
{
public function index()
{
$balita = Balita::all();
$roles = Role::all();
$kriteria = Kriteria::all();
$nilai = Nilai::all();
$output = [];
// Get the maximum values for each kdKriteria
$maxNilaiByKriteria = $nilai->groupBy('kdKriteria')->map(function ($grouped) {
return $grouped->max('nilai');
});
// Loop to collect values for each balita
foreach ($balita as $b) {
$kdbalita = $b->kdbalita;
$namaBalita = $b->balita;
// dd($balita);
// Get values for the specific balita and convert to an array
$nilaiBalita = $nilai->where('kdbalita', $kdbalita)->toArray();
// Normalize the values based on the maximum value for each kdKriteria
$normalizedNilai = array_map(function ($nilaiItem) use ($kriteria, $maxNilaiByKriteria) {
$matchingKriteria = $kriteria->where('kdKriteria', $nilaiItem['kdKriteria'])->first();
if ($matchingKriteria) {
$kdKriteria = $matchingKriteria->kdKriteria;
// Normalize the value using the corresponding max value for this kdKriteria
$maxValueForKriteria = $maxNilaiByKriteria->get($kdKriteria);
if ($maxValueForKriteria) {
$normalizedValue = $nilaiItem['nilai'] / $maxValueForKriteria;
}
$nilaiItem['bobot'] = $matchingKriteria->bobot;
$nilaiItem['kriteria'] = $matchingKriteria->kriteria;
$nilaiItem['normalized'] = $normalizedValue;
$nilaiItem['nilaimaximum'] = $maxValueForKriteria;
$nilaiItem['nilai_preferensi'] = $normalizedValue * $nilaiItem['bobot'];
}
return $nilaiItem;
}, $nilaiBalita);
// Calculate the total preferensi for this balita
$totalPreferensi = array_sum(array_column($normalizedNilai, 'nilai_preferensi'));
if ($totalPreferensi > 90) {
$kategoriGizi = 'Gizi Baik';
} elseif ($totalPreferensi >= 81 && $totalPreferensi <= 90) {
$kategoriGizi = 'Gizi Sedang';
} elseif ($totalPreferensi >= 71 && $totalPreferensi <= 80) {
$kategoriGizi = 'Gizi Kurang';
} else {
$kategoriGizi = 'Gizi Buruk';
}
$tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang');
$berat_badan = dataBalita::where('nama_balita', $namaBalita)->value('berat_badan');
$tinggi_badan = dataBalita::where('nama_balita', $namaBalita)->value('tinggi_badan');
$nama_orangtua = dataBalita::where('nama_balita', $namaBalita)->value('nama_orangtua');
$nik = dataBalita::where('nama_balita', $namaBalita)->value('nik');
$alamat_rt_rw = dataBalita::where('nama_balita', $namaBalita)->value('alamat_rt_rw');
$jenis_kelamin = dataBalita::where('nama_balita', $namaBalita)->value('jenis_kelamin');
$tanggal_timbang = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_timbang');
$tanggal_lahir = dataBalita::where('nama_balita', $namaBalita)->value('tanggal_lahir');
$umur_bulan = dataBalita::where('nama_balita', $namaBalita)->value('umur_bulan');
$output[] = [
'kdbalita' => $kdbalita,
'nama_balita' => $namaBalita,
'nilai' => $nilaiBalita,
'berat_badan' => $berat_badan,
'tinggi_badan' => $tinggi_badan,
'tanggal_timbang' => $tanggal_timbang,
'normalized_nilai' => $normalizedNilai,
'total_preferensi' => $totalPreferensi,
'kategori_gizi' => $kategoriGizi,
'nik' => $nik,
'alamat' => $alamat_rt_rw,
'jenis_kelamin' => $jenis_kelamin,
'tanggal_lahir' => $tanggal_lahir,
'umur_bulan' => $umur_bulan,
'nama_orangtua'=> $nama_orangtua
];
}
// dd($output);
return view('pages.data_penilaian.index', [
'output' => $output,
]);
}
}