pengukuran balita
This commit is contained in:
parent
812fdc6e06
commit
7dd6f9cb08
|
|
@ -2,8 +2,10 @@
|
||||||
|
|
||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
|
use App\Models\Anak;
|
||||||
use App\Models\PengukuranBalita;
|
use App\Models\PengukuranBalita;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Http;
|
||||||
|
|
||||||
class PengukuranBalitaController extends Controller
|
class PengukuranBalitaController extends Controller
|
||||||
{
|
{
|
||||||
|
|
@ -16,4 +18,73 @@ public function index()
|
||||||
// return $ibu;
|
// return $ibu;
|
||||||
return view('pengukuran_balita.data', compact('p_balita'));
|
return view('pengukuran_balita.data', compact('p_balita'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function create()
|
||||||
|
{
|
||||||
|
$balita = Anak::all();
|
||||||
|
|
||||||
|
return view('pengukuran_balita.create', compact('balita'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function store(Request $request)
|
||||||
|
{
|
||||||
|
// Cek apakah data dari form sampai
|
||||||
|
// dd($request->all());
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'balita_id' => 'required',
|
||||||
|
'tanggal' => 'required',
|
||||||
|
'usia' => 'required',
|
||||||
|
'jenis_kelamin' => 'required',
|
||||||
|
'berat_badan' => 'required',
|
||||||
|
'tinggi_badan' => 'required',
|
||||||
|
'lingkar_kepala' => 'required',
|
||||||
|
]);
|
||||||
|
|
||||||
|
try {
|
||||||
|
$response = Http::post('http://127.0.0.1:5000/predict', [
|
||||||
|
'JK' => (int) $request->jenis_kelamin,
|
||||||
|
'Usia' => (int) $request->usia,
|
||||||
|
'Berat' => (float) $request->berat_badan,
|
||||||
|
'Tinggi' => (float) $request->tinggi_badan,
|
||||||
|
'LiLA' => (float) $request->lingkar_kepala,
|
||||||
|
]);
|
||||||
|
|
||||||
|
if ($response->successful()) {
|
||||||
|
$hasilML = $response->json();
|
||||||
|
|
||||||
|
$mapHasil = [
|
||||||
|
0 => 'Stunting', // Z < -3 (Sangat Pendek)
|
||||||
|
1 => 'Risiko Stunting', // Z < -2 (Pendek)
|
||||||
|
2 => 'Normal' // Z >= -2 (Normal)
|
||||||
|
];
|
||||||
|
|
||||||
|
// Variabel ini sudah mengambil teks dari array mapHasil
|
||||||
|
$teksHasil = $mapHasil[$hasilML['Status_Stunting']] ?? 'Normal';
|
||||||
|
|
||||||
|
$simpan = PengukuranBalita::create([
|
||||||
|
'balita_id' => $request->balita_id,
|
||||||
|
'user_id' => auth()->id() ?? 1,
|
||||||
|
'berat_badan' => $request->berat_badan,
|
||||||
|
'tinggi_badan' => $request->tinggi_badan,
|
||||||
|
'lingkar_kepala' => $request->lingkar_kepala,
|
||||||
|
'usia_saat_ukur' => $request->usia,
|
||||||
|
'tanggal' => $request->tanggal,
|
||||||
|
'hasil' => $teksHasil, // LANGSUNG PANGGIL VARIABELNYA DI SINI
|
||||||
|
'zs_tbu' => $hasilML['Zscore'],
|
||||||
|
'bmi' => $request->berat_badan / (($request->tinggi_badan/100) ** 2),
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Jika berhasil simpan, pindah ke index
|
||||||
|
return redirect()->route('pengukuran_balita.index')->with('success', 'Berhasil!');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Jika API Flask error 400/500
|
||||||
|
dd("Flask Error: " . $response->body());
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
// Jika ada error database atau koneksi, layar akan jadi hitam dan muncul pesan errornya
|
||||||
|
dd("Laravel Error: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,20 +12,16 @@ class PengukuranBalita extends Model
|
||||||
protected $table = 'pengukuran_balita';
|
protected $table = 'pengukuran_balita';
|
||||||
|
|
||||||
protected $fillable = [
|
protected $fillable = [
|
||||||
'balita_id',
|
'balita_id', 'user_id', 'berat_badan', 'tinggi_badan',
|
||||||
'user_id',
|
'lingkar_kepala', 'usia_saat_ukur', 'tanggal',
|
||||||
'tanggal',
|
'hasil', 'zs_tbu', 'bmi', 'zs_bmi_u', 'status_gizi_bmi'
|
||||||
'berat_badan',
|
|
||||||
'tinggi_badan',
|
|
||||||
'lingkar_kepala',
|
|
||||||
'usia_saat_ukur',
|
|
||||||
'hasil',
|
|
||||||
'zs_tbu'
|
|
||||||
];
|
];
|
||||||
|
|
||||||
public function ibuHamil()
|
// Perbaiki relasi ini
|
||||||
|
public function balita()
|
||||||
{
|
{
|
||||||
return $this->belongsTo(IbuHamil::class, 'ibu_hamil_id');
|
// Sesuaikan 'Anak::class' dengan nama Model Balita kamu
|
||||||
|
return $this->belongsTo(Anak::class, 'balita_id');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function petugas()
|
public function petugas()
|
||||||
|
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
use Illuminate\Database\Migrations\Migration;
|
|
||||||
use Illuminate\Database\Schema\Blueprint;
|
|
||||||
use Illuminate\Support\Facades\Schema;
|
|
||||||
|
|
||||||
return new class extends Migration
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Run the migrations.
|
|
||||||
*/
|
|
||||||
public function up(): void
|
|
||||||
{
|
|
||||||
Schema::table('pengukuran_balita', function (Blueprint $table) {
|
|
||||||
$table->dropColumn([
|
|
||||||
'bmi',
|
|
||||||
'zs_bmi_u',
|
|
||||||
'status_gizi_bmi'
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Reverse the migrations.
|
|
||||||
*/
|
|
||||||
public function down(): void
|
|
||||||
{
|
|
||||||
{
|
|
||||||
Schema::table('pengukuran_balita', function (Blueprint $table) {
|
|
||||||
$table->decimal('bmi', 5, 2)->nullable();
|
|
||||||
$table->decimal('zs_bmi_u', 5, 2)->nullable();
|
|
||||||
$table->string('status_gizi_bmi', 100)->nullable();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
@ -0,0 +1,124 @@
|
||||||
|
@extends('layouts.dashboard')
|
||||||
|
|
||||||
|
@section('title', 'Pengukuran Balita')
|
||||||
|
|
||||||
|
@section('content')
|
||||||
|
<div class="pagetitle mb-4">
|
||||||
|
<h1 style="color: #9c3a5b;">Form Pengukuran Balita</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<section class="section">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-lg-10">
|
||||||
|
<div class="card">
|
||||||
|
<div class="card-body">
|
||||||
|
<h5 class="card-title">Tambah Data Pengukuran</h5>
|
||||||
|
|
||||||
|
@if ($errors->any())
|
||||||
|
<div class="alert alert-danger">
|
||||||
|
<ul>
|
||||||
|
@foreach ($errors->all() as $error)
|
||||||
|
<li>{{ $error }}</li>
|
||||||
|
@endforeach
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
@endif
|
||||||
|
|
||||||
|
<form action="{{ route('pengukuran_balita.store') }}" method="POST">
|
||||||
|
@csrf
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="tanggal" class="col-sm-2 col-form-label">Tanggal Ukur</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="date" class="form-control" name="tanggal" id="tanggal_ukur" value="{{ date('Y-m-d') }}" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-sm-2 col-form-label">Nama Balita</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<select name="balita_id" id="balita_id" class="form-control select2" required>
|
||||||
|
<option value="">-- Pilih Balita --</option>
|
||||||
|
@foreach($balita as $b)
|
||||||
|
<option value="{{ $b->id }}" data-tgl="{{ $b->tgl_lahir }}" data-jk="{{ $b->jenis_kelamin }}">
|
||||||
|
{{ $b->nama }}
|
||||||
|
</option>
|
||||||
|
@endforeach
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label class="col-sm-2 col-form-label">Jenis Kelamin</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" id="jk_display" class="form-control" readonly placeholder="Otomatis">
|
||||||
|
<input type="hidden" name="jenis_kelamin" id="jk_input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="usia" class="col-sm-2 col-form-label">Usia (Bulan)</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="text" id="usia_display" class="form-control" readonly placeholder="Otomatis terisi dalam bulan">
|
||||||
|
<input type="hidden" name="usia" id="usia_input">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="berat_badan" class="col-sm-2 col-form-label">Berat Badan</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="number" step="0.01" class="form-control" name="berat_badan" required placeholder="kg">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="tinggi_badan" class="col-sm-2 col-form-label">Tinggi Badan</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="number" step="0.1" class="form-control" name="tinggi_badan" required placeholder="cm">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<label for="lingkar_kepala" class="col-sm-2 col-form-label">Lingkar Kepala</label>
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<input type="number" step="0.1" class="form-control" name="lingkar_kepala" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row mb-3">
|
||||||
|
<div class="col-sm-10">
|
||||||
|
<button type="submit" class="btn btn-primary">Submit Form</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function updateData() {
|
||||||
|
let sel = document.getElementById("balita_id");
|
||||||
|
let opt = sel.options[sel.selectedIndex];
|
||||||
|
|
||||||
|
if (opt.value) {
|
||||||
|
// Update JK (1=Laki, 0=Perempuan)
|
||||||
|
let jk = opt.getAttribute("data-jk");
|
||||||
|
document.getElementById("jk_display").value = (jk == 1) ? "Laki-laki" : "Perempuan";
|
||||||
|
document.getElementById("jk_input").value = jk;
|
||||||
|
|
||||||
|
// Hitung Usia
|
||||||
|
let tglLahir = new Date(opt.getAttribute("data-tgl"));
|
||||||
|
let tglUkur = new Date(document.getElementById("tanggal_ukur").value);
|
||||||
|
let totalBulan = (tglUkur.getFullYear() - tglLahir.getFullYear()) * 12 + (tglUkur.getMonth() - tglLahir.getMonth());
|
||||||
|
if (tglUkur.getDate() < tglLahir.getDate()) totalBulan--;
|
||||||
|
|
||||||
|
document.getElementById("usia_display").value = (totalBulan < 0 ? 0 : totalBulan) + " Bulan";
|
||||||
|
document.getElementById("usia_input").value = (totalBulan < 0 ? 0 : totalBulan);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.getElementById("balita_id").addEventListener("change", updateData);
|
||||||
|
document.getElementById("tanggal_ukur").addEventListener("change", updateData);
|
||||||
|
</script>
|
||||||
|
@endsection
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
<form action="{{ route('pengukuran_ibu_hamil.store') }}" method="POST">
|
<form action="{{ route('pengukuran_balita.store') }}" method="POST">
|
||||||
@csrf
|
@csrf
|
||||||
<div class="row mb-3">
|
<div class="row mb-3">
|
||||||
<label for="tanggal" class="col-sm-2 col-form-label">Tanggal</label>
|
<label for="tanggal" class="col-sm-2 col-form-label">Tanggal</label>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue