From 2c9bf3307d57cb4e10bf31f9732d3d27a46c2cbc Mon Sep 17 00:00:00 2001 From: Savema <158044968+SavemaAureliandaru@users.noreply.github.com> Date: Tue, 24 Mar 2026 21:26:01 +0700 Subject: [PATCH] fix pdf dan perhitungan balita --- .../PengukuranBalitaController.php | 90 +++++++-- ...2_144257_create_template_edukasi_table.php | 4 +- .../views/pdf/hasil_balita.blade.php | 95 +++++++++ .../views/pdf/hasil_ibu_hamil.blade.php | 182 ++++++++---------- .../views/pengukuran_balita/data.blade.php | 37 ++-- .../views/pengukuran_balita/detail.blade.php | 153 +++++++++++++++ .../pengukuran_ibuhamil/create.blade.php | 4 +- .../pengukuran_ibuhamil/detail.blade.php | 54 +++--- project/routes/web.php | 7 + 9 files changed, 466 insertions(+), 160 deletions(-) create mode 100644 project/resources/views/pdf/hasil_balita.blade.php create mode 100644 project/resources/views/pengukuran_balita/detail.blade.php diff --git a/project/app/Http/Controllers/PengukuranBalitaController.php b/project/app/Http/Controllers/PengukuranBalitaController.php index 48843ea..281e7a8 100644 --- a/project/app/Http/Controllers/PengukuranBalitaController.php +++ b/project/app/Http/Controllers/PengukuranBalitaController.php @@ -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'); + } } diff --git a/project/database/migrations/2026_03_02_144257_create_template_edukasi_table.php b/project/database/migrations/2026_03_02_144257_create_template_edukasi_table.php index 6de4b9a..250accf 100644 --- a/project/database/migrations/2026_03_02_144257_create_template_edukasi_table.php +++ b/project/database/migrations/2026_03_02_144257_create_template_edukasi_table.php @@ -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(); }); diff --git a/project/resources/views/pdf/hasil_balita.blade.php b/project/resources/views/pdf/hasil_balita.blade.php new file mode 100644 index 0000000..cde3bed --- /dev/null +++ b/project/resources/views/pdf/hasil_balita.blade.php @@ -0,0 +1,95 @@ + + + + Laporan Hasil Pengukuran Balita + + + +
+

LAPORAN HASIL PENGUKURAN STUNTING

+

Aplikasi Possehat - Balita

+
+ +
+ Panduan Rentang Z-Score (TB/U):
+ Z-Score adalah nilai standar WHO untuk mengukur tinggi badan anak dibanding anak seusianya:
+ • Normal: Berada di antara -2 SD sampai +3 SD.
+ • Risiko Stunting: Berada di bawah -2 SD (Kategori Pendek).
+ • Stunting: Berada di bawah -3 SD (Kategori Sangat Pendek). +
+ + + + + + + + + + + + + + + +
Nama Balita{{ $pengukuran->balita->nama }}
Jenis Kelamin + @if($pengukuran->balita->jenis_kelamin == 'L' || $pengukuran->balita->jenis_kelamin == '1') + Laki-laki + @else + Perempuan + @endif +
Usia{{ $pengukuran->usia_saat_ukur }} Bulan
Tanggal Periksa{{ $pengukuran->tanggal }}
Tinggi / Berat{{ $pengukuran->tinggi_badan }} cm / {{ $pengukuran->berat_badan }} kg
Z-Score TB/U{{ number_format($pengukuran->zs_tbu, 2) }}
Status Hasil{{ $pengukuran->hasil }}
+ +

Grafik Perkembangan

+
+ @if($chartImage) + + @else +

Grafik tidak tersedia

+ @endif +
+ +

Edukasi Kesehatan

+ @foreach($edukasi as $item) +
+ {{ $item->judul }} +

{{ $item->konten }}

+
+ @endforeach + +
+ Rekomendasi Petugas:
+ @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 +
+ + + + diff --git a/project/resources/views/pdf/hasil_ibu_hamil.blade.php b/project/resources/views/pdf/hasil_ibu_hamil.blade.php index 7dced4d..82e4c1d 100644 --- a/project/resources/views/pdf/hasil_ibu_hamil.blade.php +++ b/project/resources/views/pdf/hasil_ibu_hamil.blade.php @@ -1,123 +1,103 @@ - - Laporan Edukasi Ibu Hamil - + Laporan Hasil Pengukuran Ibu Hamil - +
+

LAPORAN HASIL PENGUKURAN IBU HAMIL

+

Aplikasi PosSehat - Kesehatan Ibu & Anak

+
-

Laporan Hasil dan Edukasi Ibu Hamil

-

Keterangan:

-

BB: Berat Badan

-

TB: Tinggi Badan

-

LILA: Lingkar Lengan

-

Hasil Pengukuran

+
+ Panduan Indeks Massa Tubuh (IMT):
+ IMT digunakan untuk memantau apakah status gizi Ibu selama kehamilan berada dalam kondisi ideal.
+ • Gizi Kurang: < 18.5 | + Gizi Normal: 18.5 - 24.9 | + Gizi Lebih: 24.9 - 29.9 | + Obesitas: > 29.9 +
- - - +
- - - - - - - - - - - - - - - - - + - - - - - - - - -
PetugasTanggalNamaUsiaBBTBLILAUsia KehamilanIMTStatus Gizi
{{ $pengukuran->petugas->nama ?? '-' }}{{ $pengukuran->tanggal }}Nama Ibu {{ $pengukuran->ibuHamil->nama ?? '-' }}{{ \Carbon\Carbon::parse($pengukuran->ibuHamil->tgl_lahir)->age ?? '-' }}{{ $pengukuran->berat_badan }}{{ $pengukuran->tinggi_badan }}{{ $pengukuran->lila }}{{ $pengukuran->usia_kehamilan }}{{ $pengukuran->imt }}{{ $pengukuran->status_gizi }}
+ + Tanggal Periksa + {{ $pengukuran->tanggal }} + + + Usia Kehamilan + {{ $pengukuran->usia_kehamilan }} Minggu + + + Berat / Tinggi Badan + {{ $pengukuran->berat_badan }} kg / {{ $pengukuran->tinggi_badan }} cm + + + Lingkar Lengan Atas (LiLA) + {{ $pengukuran->lila }} cm + + + Nilai IMT + {{ number_format($pengukuran->imt, 2) }} + + + Status Gizi + {{ $pengukuran->status_gizi }} + + +

Grafik Perkembangan (BB & IMT)

+
+ @if($chartImage) + + @else +

Grafik tidak tersedia. Pastikan grafik muncul di layar sebelum mencetak.

+ @endif +
-
-

Grafik Perkembangan Pengukuran

- @if(!empty($chartImage)) - - @else -

Grafik tidak tersedia

- @endif -
- - -
-

Edukasi dan Informasi

- +

Edukasi & Informasi Kesehatan

@forelse($edukasi as $item) - -
- {{ $item->judul }} -

{{ $item->konten }}

+
+ {{ $item->judul }} +

{{ $item->konten }}

- @empty -

Edukasi belum tersedia

+

Edukasi belum tersedia.

@endforelse -
+
+ Rekomendasi Medis:
+ @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 +
+ + diff --git a/project/resources/views/pengukuran_balita/data.blade.php b/project/resources/views/pengukuran_balita/data.blade.php index 80dd111..21efd3d 100644 --- a/project/resources/views/pengukuran_balita/data.blade.php +++ b/project/resources/views/pengukuran_balita/data.blade.php @@ -41,29 +41,28 @@ - {{-- @forelse ($p_ibuhamil as $index => $ibu) --}} + @forelse ($p_balita as $index => $balita) - {{-- {{ $index + 1 }} - {{ $ibu->petugas->nama ?? '-' }} - {{ $ibu->tanggal }} - {{ $ibu->ibuHamil->nama ?? '-' }} - {{ \Carbon\Carbon::parse($ibu->ibuHamil->tgl_lahir)->age ?? '-' }} - {{ $ibu->berat_badan }} - {{ $ibu->tinggi_badan }} - {{ $ibu->lila }} - {{ $ibu->usia_kehamilan }} - {{ $ibu->imt }} - {{ $ibu->status_gizi }} --}} - {{-- + {{ $index + 1 }} + {{ $balita->petugas->nama ?? '-' }} + {{ $balita->tanggal }} + {{ $balita->balita->nama ?? '-' }} + {{ \Carbon\Carbon::parse($balita->balita->tgl_lahir)->age ?? '-' }} + {{ $balita->berat_badan }} + {{ $balita->tinggi_badan }} + {{ $balita->lingkar_kepala }} + {{ $balita->hasil }} + {{ $balita->zs_tbu }} + - -
@csrf @@ -75,16 +74,16 @@ class="btn btn-sm btn-info"
- --}} + - {{-- @empty --}} + @empty Belum ada data pengukuran - {{-- @endforelse --}} + @endforelse
@@ -92,4 +91,6 @@ class="btn btn-sm btn-info" + + @endsection diff --git a/project/resources/views/pengukuran_balita/detail.blade.php b/project/resources/views/pengukuran_balita/detail.blade.php new file mode 100644 index 0000000..5ebba9a --- /dev/null +++ b/project/resources/views/pengukuran_balita/detail.blade.php @@ -0,0 +1,153 @@ +@extends('layouts.dashboard') + +@section('title','Detail Edukasi Balita') + +@section('content') + +
+

Detail Edukasi & Perkembangan Balita

+
+ +
+
+
+ +
+
+
+ @csrf + + +
+ +
Hasil Pengukuran Terakhir
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + +
PetugasTanggalNama BalitaUsia (Bulan)Berat BadanTinggi BadanZ-Score TBUHasil
{{ $pengukuran->petugas->nama ?? '-' }}{{ $pengukuran->tanggal }}{{ $pengukuran->balita->nama ?? '-' }}{{ $pengukuran->usia_saat_ukur }} Bulan{{ $pengukuran->berat_badan }} kg{{ $pengukuran->tinggi_badan }} cm{{ number_format($pengukuran->zs_tbu, 2) }} + + {{ $pengukuran->hasil }} + +
+
+ +
+ +
Grafik Perkembangan Antropometri
+
+ +
+ +
Edukasi dan Informasi Kesehatan
+
+ @forelse($edukasi as $item) +
+
{{ $item->judul }}
+

{{ $item->konten }}

+
+ @empty +

Edukasi belum tersedia untuk kategori ini.

+ @endforelse +
+
+
+
+
+ + + + +@endsection diff --git a/project/resources/views/pengukuran_ibuhamil/create.blade.php b/project/resources/views/pengukuran_ibuhamil/create.blade.php index 92d1ac3..5f41151 100644 --- a/project/resources/views/pengukuran_ibuhamil/create.blade.php +++ b/project/resources/views/pengukuran_ibuhamil/create.blade.php @@ -26,12 +26,12 @@ @endif -
+ @csrf
- +
diff --git a/project/resources/views/pengukuran_ibuhamil/detail.blade.php b/project/resources/views/pengukuran_ibuhamil/detail.blade.php index 4acc59a..b46946f 100644 --- a/project/resources/views/pengukuran_ibuhamil/detail.blade.php +++ b/project/resources/views/pengukuran_ibuhamil/detail.blade.php @@ -67,14 +67,18 @@

-
Edukasi dan Informasi
+ +
Edukasi dan Informasi Kesehatan
+
@forelse($edukasi as $item) - {{ $item->judul }} -

{{ $item->konten }}

+
+
{{ $item->judul }}
+

{{ $item->konten }}

+
@empty -

Edukasi belum tersedia

+

Edukasi belum tersedia untuk kategori ini.

@endforelse -
+ @@ -86,42 +90,46 @@