fix pdf dan perhitungan balita

This commit is contained in:
Savema 2026-03-24 21:26:01 +07:00
parent 7dd6f9cb08
commit 2c9bf3307d
9 changed files with 466 additions and 160 deletions

View File

@ -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');
}
}

View File

@ -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();
});

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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>

View File

@ -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);

View File

@ -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']);