fix pdf dan perhitungan balita
This commit is contained in:
parent
7dd6f9cb08
commit
2c9bf3307d
|
|
@ -3,6 +3,8 @@
|
|||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Models\Anak;
|
||||
use App\Models\Edukasi2;
|
||||
use App\Models\Edukasi;
|
||||
use App\Models\PengukuranBalita;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
|
|
@ -28,9 +30,6 @@ public function create()
|
|||
|
||||
public function store(Request $request)
|
||||
{
|
||||
// Cek apakah data dari form sampai
|
||||
// dd($request->all());
|
||||
|
||||
$request->validate([
|
||||
'balita_id' => 'required',
|
||||
'tanggal' => 'required',
|
||||
|
|
@ -54,15 +53,15 @@ public function store(Request $request)
|
|||
$hasilML = $response->json();
|
||||
|
||||
$mapHasil = [
|
||||
0 => 'Stunting', // Z < -3 (Sangat Pendek)
|
||||
1 => 'Risiko Stunting', // Z < -2 (Pendek)
|
||||
2 => 'Normal' // Z >= -2 (Normal)
|
||||
0 => 'Stunting',
|
||||
1 => 'Risiko Stunting',
|
||||
2 => 'Normal'
|
||||
];
|
||||
|
||||
// Variabel ini sudah mengambil teks dari array mapHasil
|
||||
$teksHasil = $mapHasil[$hasilML['Status_Stunting']] ?? 'Normal';
|
||||
|
||||
$simpan = PengukuranBalita::create([
|
||||
// 1. Simpan Pengukuran (Cukup Sekali Saja)
|
||||
$pengukuran = PengukuranBalita::create([
|
||||
'balita_id' => $request->balita_id,
|
||||
'user_id' => auth()->id() ?? 1,
|
||||
'berat_badan' => $request->berat_badan,
|
||||
|
|
@ -70,21 +69,86 @@ public function store(Request $request)
|
|||
'lingkar_kepala' => $request->lingkar_kepala,
|
||||
'usia_saat_ukur' => $request->usia,
|
||||
'tanggal' => $request->tanggal,
|
||||
'hasil' => $teksHasil, // LANGSUNG PANGGIL VARIABELNYA DI SINI
|
||||
'hasil' => $teksHasil,
|
||||
'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!');
|
||||
// 2. Ambil Template Edukasi
|
||||
$templates = Edukasi::where('kategori', $teksHasil)->get();
|
||||
|
||||
// 3. Simpan ke tabel Edukasi2
|
||||
foreach ($templates as $item) {
|
||||
Edukasi2::create([
|
||||
'balita_id' => $request->balita_id,
|
||||
'pengukuran_balita_id' => $pengukuran->id,
|
||||
'judul' => $item->judul,
|
||||
'konten' => $item->konten,
|
||||
'kategori' => $teksHasil
|
||||
]);
|
||||
}
|
||||
|
||||
return redirect()->route('pengukuran_balita.index')->with('success', 'Berhasil menyimpan data dan edukasi!');
|
||||
}
|
||||
|
||||
// Jika API Flask error 400/500
|
||||
// Jika API Flask error
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
public function destroy($id)
|
||||
{
|
||||
$p_balita = PengukuranBalita::findOrFail($id);
|
||||
$p_balita->delete();
|
||||
|
||||
return redirect()->route('pengukuran_balita.index')->with('success','Data berhasil dihapus');
|
||||
|
||||
}
|
||||
|
||||
public function detail($id)
|
||||
{
|
||||
// 1. Ambil data pengukuran utama berdasarkan ID yang diklik
|
||||
// Gunakan findOrFail supaya kalau ID tidak ada, muncul error 404 bukan 'undefined variable'
|
||||
$pengukuran = PengukuranBalita::with(['balita', 'petugas'])->findOrFail($id);
|
||||
|
||||
// 2. Ambil riwayat pertumbuhan balita tersebut untuk grafik
|
||||
$riwayat = PengukuranBalita::where('balita_id', $pengukuran->balita_id)
|
||||
->orderBy('tanggal', 'asc')
|
||||
->get();
|
||||
|
||||
// 3. Siapkan data untuk grafik ApexCharts
|
||||
$tanggal = $riwayat->pluck('tanggal')->toArray();
|
||||
$tb = $riwayat->pluck('tinggi_badan')->toArray();
|
||||
$bb = $riwayat->pluck('berat_badan')->toArray();
|
||||
|
||||
// 4. Ambil edukasi yang tersimpan untuk pengukuran ini
|
||||
$edukasi = Edukasi2::where('pengukuran_balita_id', $id)->get();
|
||||
|
||||
// 5. KIRIM SEMUA KE VIEW (Pastikan 'pengukuran' ada di sini)
|
||||
return view('pengukuran_balita.detail', compact(
|
||||
'pengukuran',
|
||||
'riwayat',
|
||||
'edukasi',
|
||||
'tanggal',
|
||||
'tb',
|
||||
'bb'
|
||||
));
|
||||
}
|
||||
|
||||
public function cetakPdf(Request $request, $id)
|
||||
{
|
||||
$pengukuran = PengukuranBalita::with(['petugas','balita'])->findOrFail($id);
|
||||
$edukasi = Edukasi2::where('pengukuran_balita_id', $id)->get();
|
||||
$chartImage = $request->chartImage;
|
||||
|
||||
$pdf = \Barryvdh\DomPDF\Facade\Pdf::loadView(
|
||||
'pdf.hasil_balita',
|
||||
compact('pengukuran','edukasi','chartImage')
|
||||
);
|
||||
|
||||
return $pdf->download('laporan_balita.pdf');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,15 +16,13 @@ public function up(): void
|
|||
$table->string('judul', 100);
|
||||
$table->text('konten');
|
||||
$table->enum('kategori', [
|
||||
'Resiko tinggi stunting',
|
||||
'Resiko stunting',
|
||||
'Stunting',
|
||||
'Normal',
|
||||
'Resiko gizi lebih',
|
||||
'Ibu hamil gizi kurang',
|
||||
'Ibu hamil gizi normal',
|
||||
'Ibu hamil gizi lebih',
|
||||
'Ibu hamil obesitas',
|
||||
'Ibu hamil risiko kek'
|
||||
])->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
|
|
|
|||
|
|
@ -0,0 +1,95 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Laporan Hasil Pengukuran Balita</title>
|
||||
<style>
|
||||
body { font-family: sans-serif; font-size: 12px; }
|
||||
.header { text-align: center; margin-bottom: 20px; }
|
||||
.table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
|
||||
.table th, .table td { border: 1px solid #ddd; padding: 8px; text-align: left; }
|
||||
.table th { background-color: #f2f2f2; }
|
||||
.chart-container { text-align: center; margin-top: 20px; }
|
||||
.chart-image { width: 100%; max-width: 600px; border: 1px solid #eee; }
|
||||
.footer { margin-top: 30px; font-style: italic; font-size: 10px; }
|
||||
.badge { padding: 5px 10px; border-radius: 5px; color: white; }
|
||||
.bg-danger { background-color: #dc3545; }
|
||||
.bg-warning { background-color: #ffc107; color: black; }
|
||||
.bg-success { background-color: #28a745; }
|
||||
.info-box {
|
||||
background-color: #f8f9fa;
|
||||
border-left: 5px solid #9c3a5b;
|
||||
padding: 10px;
|
||||
margin-bottom: 15px;
|
||||
font-size: 11px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.text-bold { font-weight: bold; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h2>LAPORAN HASIL PENGUKURAN STUNTING</h2>
|
||||
<p>Aplikasi Possehat - Balita</p>
|
||||
</div>
|
||||
|
||||
<div class="info-box">
|
||||
<span class="text-bold">Panduan Rentang Z-Score (TB/U):</span><br>
|
||||
Z-Score adalah nilai standar WHO untuk mengukur tinggi badan anak dibanding anak seusianya:<br>
|
||||
• <span class="text-bold">Normal:</span> Berada di antara -2 SD sampai +3 SD.<br>
|
||||
• <span class="text-bold">Risiko Stunting:</span> Berada di bawah -2 SD (Kategori Pendek).<br>
|
||||
• <span class="text-bold">Stunting:</span> Berada di bawah -3 SD (Kategori Sangat Pendek).
|
||||
</div>
|
||||
|
||||
<table class="table">
|
||||
<tr><th>Nama Balita</th><td>{{ $pengukuran->balita->nama }}</td></tr>
|
||||
<tr>
|
||||
<th>Jenis Kelamin</th>
|
||||
<td>
|
||||
@if($pengukuran->balita->jenis_kelamin == 'L' || $pengukuran->balita->jenis_kelamin == '1')
|
||||
Laki-laki
|
||||
@else
|
||||
Perempuan
|
||||
@endif
|
||||
</td>
|
||||
</tr>
|
||||
<tr><th>Usia</th><td>{{ $pengukuran->usia_saat_ukur }} Bulan</td></tr>
|
||||
<tr><th>Tanggal Periksa</th><td>{{ $pengukuran->tanggal }}</td></tr>
|
||||
<tr><th>Tinggi / Berat</th><td>{{ $pengukuran->tinggi_badan }} cm / {{ $pengukuran->berat_badan }} kg</td></tr>
|
||||
<tr><th>Z-Score TB/U</th><td>{{ number_format($pengukuran->zs_tbu, 2) }}</td></tr>
|
||||
<tr>
|
||||
<th>Status Hasil</th>
|
||||
<td><strong>{{ $pengukuran->hasil }}</strong></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Grafik Perkembangan</h3>
|
||||
<div class="chart-container">
|
||||
@if($chartImage)
|
||||
<img src="{{ $chartImage }}" class="chart-image">
|
||||
@else
|
||||
<p>Grafik tidak tersedia</p>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<h3>Edukasi Kesehatan</h3>
|
||||
@foreach($edukasi as $item)
|
||||
<div style="margin-bottom: 10px;">
|
||||
<strong>{{ $item->judul }}</strong>
|
||||
<p>{{ $item->konten }}</p>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
<div style="margin-top: 20px; border: 1px solid #ccc; padding: 10px;">
|
||||
<span class="text-bold">Rekomendasi Petugas:</span><br>
|
||||
@if($pengukuran->hasil == 'Normal')
|
||||
Pertahankan pola makan bergizi seimbang dan rutin datang ke Posyandu setiap bulan untuk memantau tumbuh kembang.
|
||||
@else
|
||||
Segera konsultasikan hasil ini dengan Tenaga Kesehatan atau Dokter di Puskesmas terdekat untuk penanganan lebih lanjut.
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
Dicetak pada: {{ date('d-m-Y H:i:s') }} oleh Petugas: {{ $pengukuran->petugas->nama ?? 'Sistem' }}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -1,123 +1,103 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Laporan Edukasi Ibu Hamil</title>
|
||||
|
||||
<title>Laporan Hasil Pengukuran Ibu Hamil</title>
|
||||
<style>
|
||||
body{
|
||||
font-family: DejaVu Sans, sans-serif;
|
||||
font-size: 12px;
|
||||
body { font-family: sans-serif; font-size: 12px; }
|
||||
.header { text-align: center; margin-bottom: 20px; }
|
||||
.table { width: 100%; border-collapse: collapse; margin-bottom: 20px; }
|
||||
.table th, .table td { border: 1px solid #ddd; padding: 8px; text-align: left; }
|
||||
.table th { background-color: #f2f2f2; }
|
||||
.chart-container { text-align: center; margin-top: 20px; }
|
||||
.chart-image { width: 100%; max-width: 600px; border: 1px solid #eee; }
|
||||
.footer { margin-top: 30px; font-style: italic; font-size: 10px; }
|
||||
.text-bold { font-weight: bold; }
|
||||
.info-box {
|
||||
background-color: #fdf2f5; /* Pink muda khas Ibu Hamil */
|
||||
border-left: 5px solid #9c3a5b;
|
||||
padding: 10px;
|
||||
margin-bottom: 15px;
|
||||
font-size: 11px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
h2{
|
||||
text-align:center;
|
||||
margin-bottom:5px;
|
||||
}
|
||||
|
||||
.subjudul{
|
||||
text-align:center;
|
||||
margin-bottom:20px;
|
||||
}
|
||||
|
||||
table{
|
||||
width:100%;
|
||||
border-collapse: collapse;
|
||||
margin-top:10px;
|
||||
}
|
||||
|
||||
table th, table td{
|
||||
border:1px solid #000;
|
||||
padding:6px;
|
||||
text-align:center;
|
||||
}
|
||||
|
||||
table th{
|
||||
background:#f2f2f2;
|
||||
}
|
||||
|
||||
.section{
|
||||
margin-top:25px;
|
||||
}
|
||||
|
||||
.edukasi{
|
||||
margin-bottom:10px;
|
||||
}
|
||||
|
||||
.edukasi b{
|
||||
font-size:13px;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="header">
|
||||
<h2 style="color: #9c3a5b;">LAPORAN HASIL PENGUKURAN IBU HAMIL</h2>
|
||||
<p>Aplikasi PosSehat - Kesehatan Ibu & Anak</p>
|
||||
</div>
|
||||
|
||||
<h2>Laporan Hasil dan Edukasi Ibu Hamil</h2>
|
||||
<p class="">Keterangan:</p>
|
||||
<p>BB: Berat Badan</p>
|
||||
<p>TB: Tinggi Badan</p>
|
||||
<p>LILA: Lingkar Lengan</p>
|
||||
<h3>Hasil Pengukuran</h3>
|
||||
<div class="info-box">
|
||||
<span class="text-bold">Panduan Indeks Massa Tubuh (IMT):</span><br>
|
||||
IMT digunakan untuk memantau apakah status gizi Ibu selama kehamilan berada dalam kondisi ideal.<br>
|
||||
• <span class="text-bold">Gizi Kurang:</span> < 18.5 |
|
||||
<span class="text-bold">Gizi Normal:</span> 18.5 - 24.9 |
|
||||
<span class="text-bold">Gizi Lebih:</span> 24.9 - 29.9 |
|
||||
<span class="text-bold">Obesitas:</span> > 29.9
|
||||
</div>
|
||||
|
||||
|
||||
<table>
|
||||
<thead>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th>Petugas</th>
|
||||
<th>Tanggal</th>
|
||||
<th>Nama</th>
|
||||
<th>Usia</th>
|
||||
<th>BB</th>
|
||||
<th>TB</th>
|
||||
<th>LILA</th>
|
||||
<th>Usia Kehamilan</th>
|
||||
<th>IMT</th>
|
||||
<th>Status Gizi</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ $pengukuran->petugas->nama ?? '-' }}</td>
|
||||
<td>{{ $pengukuran->tanggal }}</td>
|
||||
<th style="width: 30%;">Nama Ibu</th>
|
||||
<td>{{ $pengukuran->ibuHamil->nama ?? '-' }}</td>
|
||||
<td>{{ \Carbon\Carbon::parse($pengukuran->ibuHamil->tgl_lahir)->age ?? '-' }}</td>
|
||||
<td>{{ $pengukuran->berat_badan }}</td>
|
||||
<td>{{ $pengukuran->tinggi_badan }}</td>
|
||||
<td>{{ $pengukuran->lila }}</td>
|
||||
<td>{{ $pengukuran->usia_kehamilan }}</td>
|
||||
<td>{{ $pengukuran->imt }}</td>
|
||||
<td>{{ $pengukuran->status_gizi }}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<tr>
|
||||
<th>Tanggal Periksa</th>
|
||||
<td>{{ $pengukuran->tanggal }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Usia Kehamilan</th>
|
||||
<td>{{ $pengukuran->usia_kehamilan }} Minggu</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Berat / Tinggi Badan</th>
|
||||
<td>{{ $pengukuran->berat_badan }} kg / {{ $pengukuran->tinggi_badan }} cm</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Lingkar Lengan Atas (LiLA)</th>
|
||||
<td>{{ $pengukuran->lila }} cm</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Nilai IMT</th>
|
||||
<td>{{ number_format($pengukuran->imt, 2) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>Status Gizi</th>
|
||||
<td><strong style="color: #9c3a5b;">{{ $pengukuran->status_gizi }}</strong></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<h3>Grafik Perkembangan (BB & IMT)</h3>
|
||||
<div class="chart-container">
|
||||
@if($chartImage)
|
||||
<img src="{{ $chartImage }}" class="chart-image">
|
||||
@else
|
||||
<p style="color: red;">Grafik tidak tersedia. Pastikan grafik muncul di layar sebelum mencetak.</p>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="section">
|
||||
<h3>Grafik Perkembangan Pengukuran</h3>
|
||||
@if(!empty($chartImage))
|
||||
<img src="{{ $chartImage }}" style="width:100%;">
|
||||
@else
|
||||
<p>Grafik tidak tersedia</p>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
|
||||
<div class="section">
|
||||
<h3>Edukasi dan Informasi</h3>
|
||||
|
||||
<h3>Edukasi & Informasi Kesehatan</h3>
|
||||
@forelse($edukasi as $item)
|
||||
|
||||
<div class="edukasi">
|
||||
<b>{{ $item->judul }}</b>
|
||||
<p>{{ $item->konten }}</p>
|
||||
<div style="margin-bottom: 12px; border-bottom: 1px solid #eee; padding-bottom: 5px;">
|
||||
<strong style="color: #9c3a5b;">{{ $item->judul }}</strong>
|
||||
<p style="margin-top: 5px;">{{ $item->konten }}</p>
|
||||
</div>
|
||||
|
||||
@empty
|
||||
<p>Edukasi belum tersedia</p>
|
||||
<p>Edukasi belum tersedia.</p>
|
||||
@endforelse
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 20px; border: 1px solid #9c3a5b; padding: 10px; border-radius: 5px;">
|
||||
<span class="text-bold">Rekomendasi Medis:</span><br>
|
||||
@if($pengukuran->status_gizi == 'Normal')
|
||||
Status gizi Ibu terpantau baik. Pertahankan asupan nutrisi seimbang, konsumsi tablet tambah darah, dan rutin lakukan kontrol kehamilan sesuai jadwal.
|
||||
@else
|
||||
Ibu disarankan untuk berkonsultasi lebih lanjut dengan Bidan atau Dokter di Puskesmas mengenai pola makan dan kenaikan berat badan yang ideal selama kehamilan.
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="footer">
|
||||
Dicetak pada: {{ date('d-m-Y H:i:s') }} oleh Petugas: {{ $pengukuran->petugas->nama ?? 'Sistem PosSehat' }}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -41,29 +41,28 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{{-- @forelse ($p_ibuhamil as $index => $ibu) --}}
|
||||
@forelse ($p_balita as $index => $balita)
|
||||
<tr>
|
||||
{{-- <td>{{ $index + 1 }}</td>
|
||||
<td>{{ $ibu->petugas->nama ?? '-' }}</td>
|
||||
<td>{{ $ibu->tanggal }}</td>
|
||||
<td>{{ $ibu->ibuHamil->nama ?? '-' }}</td>
|
||||
<td>{{ \Carbon\Carbon::parse($ibu->ibuHamil->tgl_lahir)->age ?? '-' }}</td>
|
||||
<td>{{ $ibu->berat_badan }}</td>
|
||||
<td>{{ $ibu->tinggi_badan }}</td>
|
||||
<td>{{ $ibu->lila }}</td>
|
||||
<td class="text-center">{{ $ibu->usia_kehamilan }}</td>
|
||||
<td>{{ $ibu->imt }}</td>
|
||||
<td>{{ $ibu->status_gizi }}</td> --}}
|
||||
{{-- <td class="text-center">
|
||||
<td>{{ $index + 1 }}</td>
|
||||
<td>{{ $balita->petugas->nama ?? '-' }}</td>
|
||||
<td>{{ $balita->tanggal }}</td>
|
||||
<td>{{ $balita->balita->nama ?? '-' }}</td>
|
||||
<td>{{ \Carbon\Carbon::parse($balita->balita->tgl_lahir)->age ?? '-' }}</td>
|
||||
<td>{{ $balita->berat_badan }}</td>
|
||||
<td>{{ $balita->tinggi_badan }}</td>
|
||||
<td>{{ $balita->lingkar_kepala }}</td>
|
||||
<td>{{ $balita->hasil }}</td>
|
||||
<td>{{ $balita->zs_tbu }}</td>
|
||||
<td class="text-center">
|
||||
<!-- Detail -->
|
||||
<a href="{{ route('pengukuran_ibu_hamil.detail', $ibu->id) }}"
|
||||
<a href="{{ route('pengukuran_balita.detail', $balita->id) }}"
|
||||
class="btn btn-sm btn-info"
|
||||
title="Detail">
|
||||
<i class="bi bi-eye"></i>
|
||||
</a>
|
||||
|
||||
<!-- Delete -->
|
||||
<form action="{{ route('pengukuran_ibu_hamil.destroy', $ibu->id) }}"
|
||||
<form action="{{ route('pengukuran_balita.destroy', $balita->id) }}"
|
||||
method="POST"
|
||||
style="display:inline;">
|
||||
@csrf
|
||||
|
|
@ -75,16 +74,16 @@ class="btn btn-sm btn-info"
|
|||
</button>
|
||||
</form>
|
||||
|
||||
</td> --}}
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
{{-- @empty --}}
|
||||
@empty
|
||||
<tr>
|
||||
<td colspan="12" class="text-center text-muted">
|
||||
Belum ada data pengukuran
|
||||
</td>
|
||||
</tr>
|
||||
{{-- @endforelse --}}
|
||||
@endforelse
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
|
@ -92,4 +91,6 @@ class="btn btn-sm btn-info"
|
|||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@endsection
|
||||
|
|
|
|||
|
|
@ -0,0 +1,153 @@
|
|||
@extends('layouts.dashboard')
|
||||
|
||||
@section('title','Detail Edukasi Balita')
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="pagetitle">
|
||||
<h1>Detail Edukasi & Perkembangan Balita</h1>
|
||||
</div>
|
||||
|
||||
<section class="section">
|
||||
<div class="row align-items-top">
|
||||
<div class="col-lg-12">
|
||||
|
||||
<div class="card shadow-sm">
|
||||
<div class="card-body">
|
||||
<form id="formPdf" action="/cetak-balita/{{ $pengukuran->id }}" method="POST" class="mt-3">
|
||||
@csrf
|
||||
<input type="hidden" name="chartImage" id="chartImage">
|
||||
<button type="submit" class="btn btn-danger">
|
||||
<i class="bi bi-file-pdf"></i> Cetak PDF
|
||||
</button>
|
||||
</form>
|
||||
|
||||
<h5 class="card-title">Hasil Pengukuran Terakhir</h5>
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table table-hover align-middle">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Petugas</th>
|
||||
<th>Tanggal</th>
|
||||
<th>Nama Balita</th>
|
||||
<th>Usia (Bulan)</th>
|
||||
<th>Berat Badan</th>
|
||||
<th>Tinggi Badan</th>
|
||||
<th>Z-Score TBU</th>
|
||||
<th>Hasil</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>{{ $pengukuran->petugas->nama ?? '-' }}</td>
|
||||
<td>{{ $pengukuran->tanggal }}</td>
|
||||
<td>{{ $pengukuran->balita->nama ?? '-' }}</td>
|
||||
<td>{{ $pengukuran->usia_saat_ukur }} Bulan</td>
|
||||
<td>{{ $pengukuran->berat_badan }} kg</td>
|
||||
<td>{{ $pengukuran->tinggi_badan }} cm</td>
|
||||
<td>{{ number_format($pengukuran->zs_tbu, 2) }}</td>
|
||||
<td>
|
||||
<span class="badge {{ $pengukuran->hasil == 'Normal' ? 'bg-success' : ($pengukuran->hasil == 'Risiko Stunting' ? 'bg-warning' : 'bg-danger') }}">
|
||||
{{ $pengukuran->hasil }}
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
|
||||
<h5 class="card-title">Grafik Perkembangan Antropometri</h5>
|
||||
<div id="grafikBalita" style="min-height:350px;"></div>
|
||||
|
||||
<hr>
|
||||
|
||||
<h5 class="card-title">Edukasi dan Informasi Kesehatan</h5>
|
||||
<div class="edukasi-content p-3 bg-light rounded">
|
||||
@forelse($edukasi as $item)
|
||||
<div class="mb-3">
|
||||
<h6 class="fw-bold text-primary"><i class="bi bi-info-circle-fill me-2"></i>{{ $item->judul }}</h6>
|
||||
<p class="mb-0">{{ $item->konten }}</p>
|
||||
</div>
|
||||
@empty
|
||||
<p class="text-danger">Edukasi belum tersedia untuk kategori ini.</p>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
|
||||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
|
||||
// Ambil data dari Controller
|
||||
var tanggal = @json($tanggal ?? []);
|
||||
var tb = @json($tb ?? []); // Tinggi Badan
|
||||
var bb = @json($bb ?? []); // Berat Badan
|
||||
|
||||
var options = {
|
||||
series: [
|
||||
{
|
||||
name: 'Tinggi Badan (cm)',
|
||||
data: tb
|
||||
},
|
||||
{
|
||||
name: 'Berat Badan (kg)',
|
||||
data: bb
|
||||
}
|
||||
],
|
||||
chart: {
|
||||
type: 'line',
|
||||
height: 350,
|
||||
zoom: { enabled: false }
|
||||
},
|
||||
stroke: {
|
||||
curve: 'smooth',
|
||||
width: [4, 4]
|
||||
},
|
||||
markers: {
|
||||
size: 5
|
||||
},
|
||||
xaxis: {
|
||||
categories: tanggal,
|
||||
title: { text: 'Tanggal Pengukuran' }
|
||||
},
|
||||
yaxis: {
|
||||
title: { text: 'Nilai Pengukuran' }
|
||||
},
|
||||
colors: ['#9c3a5b', '#2ecc71'], // Warna disesuaikan
|
||||
legend: { position: 'top' }
|
||||
};
|
||||
|
||||
// Inisialisasi Chart
|
||||
var chart = new ApexCharts(document.querySelector("#grafikBalita"), options);
|
||||
chart.render();
|
||||
|
||||
// Handle Cetak PDF (Kirim gambar chart ke backend)
|
||||
document.getElementById("formPdf").addEventListener("submit", function(e) {
|
||||
e.preventDefault();
|
||||
chart.dataURI().then(({ imgURI }) => {
|
||||
document.getElementById("chartImage").value = imgURI;
|
||||
e.target.submit();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Di show.blade.php
|
||||
var chart = new ApexCharts(document.querySelector("#grafikBalita"), options);
|
||||
chart.render();
|
||||
|
||||
document.getElementById("formPdf").addEventListener("submit", function(e) {
|
||||
e.preventDefault();
|
||||
chart.dataURI().then(({ imgURI }) => {
|
||||
document.getElementById("chartImage").value = imgURI;
|
||||
e.target.submit();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
@endsection
|
||||
|
|
@ -26,12 +26,12 @@
|
|||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
<form action="{{ route('pengukuran_balita.store') }}" method="POST">
|
||||
<form action="{{ route('pengukuran_ibu_hamil.store') }}" method="POST">
|
||||
@csrf
|
||||
<div class="row mb-3">
|
||||
<label for="tanggal" class="col-sm-2 col-form-label">Tanggal</label>
|
||||
<div class="col-sm-10">
|
||||
<input type="date" class="form-control" name="tanggal" required>
|
||||
<input type="date" class="form-control" name="tanggal" id="tanggal_ukur" value="{{ date('Y-m-d') }}" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -67,14 +67,18 @@
|
|||
|
||||
<div id="grafikIbuHamil" style="min-height:350px;"></div>
|
||||
<hr>
|
||||
<h5 class="card-title">Edukasi dan Informasi</h5>
|
||||
|
||||
<h5 class="card-title">Edukasi dan Informasi Kesehatan</h5>
|
||||
<div class="edukasi-content p-3 bg-light rounded">
|
||||
@forelse($edukasi as $item)
|
||||
<b>{{ $item->judul }}</b>
|
||||
<p>{{ $item->konten }}</p>
|
||||
<div class="mb-3">
|
||||
<h6 class="fw-bold text-primary"><i class="bi bi-info-circle-fill me-2"></i>{{ $item->judul }}</h6>
|
||||
<p class="mb-0">{{ $item->konten }}</p>
|
||||
</div>
|
||||
@empty
|
||||
<p class="text-danger">Edukasi belum tersedia</p>
|
||||
<p class="text-danger">Edukasi belum tersedia untuk kategori ini.</p>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- End Default Card -->
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -86,42 +90,46 @@
|
|||
<script>
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
|
||||
// Ambil data dari Controller
|
||||
var tanggal = @json($tanggal ?? []);
|
||||
var bb = @json($bb ?? []);
|
||||
var imt = @json($imt ?? []);
|
||||
var imt = @json($imt ?? []); // IMT
|
||||
var bb = @json($bb ?? []); // Berat Badan
|
||||
|
||||
var options = {
|
||||
series: [
|
||||
{
|
||||
name: 'Berat Badan',
|
||||
data: bb
|
||||
},
|
||||
{
|
||||
name: 'IMT',
|
||||
data: imt
|
||||
}
|
||||
{
|
||||
name: 'Berat Badan (kg)',
|
||||
data: bb
|
||||
},
|
||||
{
|
||||
name: 'IMT',
|
||||
data: imt
|
||||
}
|
||||
],
|
||||
chart: {
|
||||
type: 'line',
|
||||
height: 350
|
||||
height: 350,
|
||||
zoom: { enabled: false }
|
||||
},
|
||||
stroke: {
|
||||
curve: 'smooth',
|
||||
width: 3
|
||||
width: [4, 4]
|
||||
},
|
||||
markers: {
|
||||
size: 6
|
||||
size: 5
|
||||
},
|
||||
xaxis: {
|
||||
categories: tanggal
|
||||
categories: tanggal,
|
||||
title: { text: 'Tanggal Pengukuran' }
|
||||
},
|
||||
tooltip: {
|
||||
shared: false,
|
||||
intersect: true
|
||||
yaxis: {
|
||||
title: { text: 'Nilai Pengukuran' }
|
||||
},
|
||||
colors: ['#2ecc71','#ff7f32']
|
||||
colors: ['#9c3a5b', '#2ecc71'], // Warna disesuaikan
|
||||
legend: { position: 'top' }
|
||||
};
|
||||
|
||||
|
||||
// ✅ WAJIB: buat chart
|
||||
var chart = new ApexCharts(document.querySelector("#grafikIbuHamil"), options);
|
||||
|
||||
|
|
|
|||
|
|
@ -68,3 +68,10 @@
|
|||
Route::middleware(['auth'])->group(function () {
|
||||
Route::resource('pengukuran_balita', PengukuranBalitaController::class);
|
||||
});
|
||||
|
||||
Route::get('/pengukuran-balita/{id}/detail',
|
||||
[PengukuranBalitaController::class, 'detail'])
|
||||
->name('pengukuran_balita.detail');
|
||||
|
||||
Route::post('/cetak-balita/{id}', [PengukuranBalitaController::class, 'cetakPdf']);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue