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 @@ + + +
+Aplikasi Possehat - Balita
+| 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 tidak tersedia
+ @endif +{{ $item->konten }}
+Aplikasi PosSehat - Kesehatan Ibu & Anak
+Keterangan:
-BB: Berat Badan
-TB: Tinggi Badan
-LILA: Lingkar Lengan
-| Petugas | -Tanggal | -Nama | -Usia | -BB | -TB | -LILA | -Usia Kehamilan | -IMT | -Status 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 }} |
Grafik tidak tersedia. Pastikan grafik muncul di layar sebelum mencetak.
+ @endif +Grafik tidak tersedia
- @endif -{{ $item->konten }}
+{{ $item->konten }}
Edukasi belum tersedia
+Edukasi belum tersedia.
@endforelse -| Petugas | +Tanggal | +Nama Balita | +Usia (Bulan) | +Berat Badan | +Tinggi Badan | +Z-Score TBU | +Hasil | +
|---|---|---|---|---|---|---|---|
| {{ $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 }} + + | +
{{ $item->konten }}
+Edukasi belum tersedia untuk kategori ini.
+ @endforelse +