MIF_E31210173/app/Http/Controllers/DataLaporanController.php

977 lines
40 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\DataBalita;
use App\Models\DataIbuHamil;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\DataPeriksaIbuHamil;
use App\Models\DataObat;
use App\Models\DataPeriksaBalita;
use Illuminate\Validation\Rule;
use Carbon\Carbon;
class DataLaporanController extends Controller
{
public function index()
{
// Penggabungan data nama ibu dan nama ayah agar tidak tertumpuk menggunakan groupby
$dataIbuHamil = DataIbuHamil::select('nama_ibu', 'nama_ayah', 'alamat', 'id', 'status_ibu', 'status_ayah')
->orderBy('id', 'desc')
->whereIn('id', function ($query) {
$query->select(DB::raw('MAX(id)'))
->from('data_ibu_hamil')
->groupBy('nama_ibu', 'nama_ayah');
})
->get();
return view('pages.data_laporan.index', [
"title" => "Data Laporan",
"heading" => "Data Laporan",
'dataIbuHamil' => $dataIbuHamil,
]);
}
public function destroy($id)
{
// Mencari data dari tabel data ibu hamil berdasarkan id yang didapat
$data = DataIbuHamil::findOrFail($id);
// Mengambil seluruh data nama ibu dan nama ayah dan disimpan ke variabel sameNameData
$sameNameData = DataIbuHamil::where('nama_ibu', $data->nama_ibu)
->where('nama_ayah', $data->nama_ayah)
->get();
// Memasukkan id yang diambil dari variabel $sameNameData dan dijadikan array
$sameNameIds = $sameNameData->pluck('id')->toArray();
// Menghapus data balita berdasarkan id yang dimasukkan ke array
DataBalita::where('ibu_hamil_id', $sameNameIds)->delete();
// Menghapus data Ibu Hamil berdasarkan nama ibu dan ayah
DataIbuHamil::where([
'nama_ibu' => $data->nama_ibu,
'nama_ayah' => $data->nama_ayah
])->delete();
// Setelah proses penghapusan berhasil maka akan diarahkan ke halaman /data_pasien
return redirect('/data_pasien')->with('success', 'Data Ibu ' . $data->nama_ibu . ' Berhasil Dihapus');
}
public function preview($id)
{
// Mencari data dari model DataIbuHamil berdasarkan id yang didapat
$prev = DataIbuHamil::findOrFail($id);
// Mencari data ibuhamil dari model DataIbuHamil berdasarkan nama ibu dan nama ayah dengan $prev
$status_hamil = DataIbuHamil::where([
'nama_ibu' => $prev->nama_ibu,
'nama_ayah' => $prev->nama_ayah
])->get();
// Mencari data balita dari model DataBalita berdasarkan nama ibu hamil id
$data_balita = DataBalita::where('ibu_hamil_id', $id)->get();
// Cari data dengan nama_ibu dan nama_ayah yang sama dengan $prev
$sameNameData = DataIbuHamil::where('nama_ibu', $prev->nama_ibu)
->where('nama_ayah', $prev->nama_ayah)
->get();
// Ambil ID dari semua data yang memiliki nama_ibu dan nama_ayah yang sama lalu dimasukkan ke array
$sameNameIds = $sameNameData->pluck('id')->toArray();
// Hitung total balita berdasarkan ibu_hamil_id yang ditemukan dan yang tidak memiliki status 'Belum Dilahirkan'
$total_balita = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->whereNotIn('status', ['Belum Dilahirkan'])
->count();
// Hitung total balita meninggal berdasarkan ibu_hamil_id yang ditemukan dan yang memiliki status 'Meninggal'
$total_balita_meninggal = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->where('status', 'Meninggal')
->count();
// Mengambil data nama balita berdasarkan ibu_hamil_id yang ditemukan dan yang tidak memiliki status 'Belum Dilahirkan'
$nama_balita = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->whereNotIn('status', ['Belum Dilahirkan'])
->get();
return view('pages.data_laporan.action.preview', [
"title" => "Data Laporan Preview",
"heading" => "Data Profile",
"data" => $prev,
"heading2" => "Profile Ibu",
"jumlah_anak" => $total_balita,
"data_bayi" => $data_balita,
"data_balita" => $nama_balita,
"jumlah_balita_meninggal" => $total_balita_meninggal,
"status_hamil" => $status_hamil,
]);
}
public function update_ibu_hamil(Request $request, $id)
{
$data = DataIbuHamil::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'min' => 'Kolom :attribute minimal harus :min karakter.',
'max' => 'Kolom :attribute maksimal harus :max karakter.',
'unique' => ':attribute telah terdaftar',
];
$validatedData = $request->validate([
'nik_ibu' => [
'required',
'max:255',
// Rule::unique('data_ibu_hamil')->ignore($id),
],
'nama_ibu' => 'required|max:255',
'tanggal_lahir_ibu' => 'required|max:255',
'tanggal_lahir_ayah' => 'required|max:255',
// 'umur_ibu' => 'required|max:255',
'nama_ayah' => 'required|max:255',
// 'umur_ayah' => 'required|max:255',
'alamat' => 'required|max:255',
'status_ibu' => 'required|max:255',
'status_ayah' => 'required|max:255',
], $customMessages);
if ($request->nik_ibu !== $data->nik_ibu) {
$request->validate([
'nik_ibu' => [
Rule::unique('data_ibu_hamil'),
],
], ['nik_ibu.unique' => 'NIK Ibu telah terdaftar']);
}
$nama_ibu = $data->nama_ibu;
$nama_ayah = $data->nama_ayah;
$tanggalLahirIbu = Carbon::parse($request->input('tanggal_lahir_ibu'));
$usiaIbu = $tanggalLahirIbu->diffInYears(Carbon::now());
$tanggalLahirAyah = Carbon::parse($request->input('tanggal_lahir_ayah'));
$usiaAyah = $tanggalLahirAyah->diffInYears(Carbon::now());
$validatedData['umur_ayah'] = $usiaAyah;
$validatedData['umur_ibu'] = $usiaIbu;
DataIbuHamil::where('nama_ibu', $nama_ibu)
->where('nama_ayah', $nama_ayah)
->update($validatedData);
return redirect('/data_pasien/' . $id)->with('success', 'Biodata Ibu ' . $data->nama_ibu . ' Berhasil di Update');
}
public function destroy_hamil_ke($id)
{
// Mencari data dari tabel data ibu hamil berdasarkan id yang didapat
$data = DataIbuHamil::findOrFail($id);
// Menghapus data balita berdasarkan id yang didapat dari $data
DataBalita::where('ibu_hamil_id', $data->id)->delete();
// Menghapus data Ibu Hamil berdasarkan nama ibu dan ayah yang didapat dari $data
DataIbuHamil::where('id', $data->id)->delete();
// Setelah proses penghapusan berhasil maka akan diarahkan ke halaman /data_pasien
return redirect('/data_pasien/')->with('success', 'Data hamil ke ' . $data->anak_ke . ' dari Ibu ' . $data->nama_ibu . ' Berhasil Dihapus');
}
public function destroy_status_ibu_hamil($id)
{
// Mencari data dari tabel data ibu hamil berdasarkan id yang didapat
$data = DataPeriksaIbuHamil::findOrFail($id);
// Menghapus data balita berdasarkan id yang didapat dari $data
DataPeriksaIbuHamil::where('id', $data->id)->delete();
// Setelah proses penghapusan berhasil maka akan diarahkan ke halaman /data_pasien
return redirect('/data_pasien/' . $data->ibu_hamil_id . '/laporan_ibu_hamil')->with('success', 'Data hamil ke ' . $data->anak_ke . ' dari Ibu ' . $data->nama_ibu . ' Berhasil Dihapus');
}
public function update_ibu_hamilv2(Request $request, $id)
{
$data = DataIbuHamil::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'min' => 'Kolom :attribute minimal harus :min karakter.',
'max' => 'Kolom :attribute maksimal harus :max karakter.',
'unique' => ':attribute telah terdaftar',
];
$validatedData = $request->validate([
'nik_ibu' => [
'required',
'max:255',
// Rule::unique('data_ibu_hamil')->ignore($id),
],
'nama_ibu' => 'required|max:255',
'tanggal_lahir_ibu' => 'required|max:255',
'tanggal_lahir_ayah' => 'required|max:255',
// 'umur_ibu' => 'required|max:255',
'nama_ayah' => 'required|max:255',
// 'umur_ayah' => 'required|max:255',
'alamat' => 'required|max:255',
'status_ibu' => 'required|max:255',
'status_ayah' => 'required|max:255',
], $customMessages);
if ($request->nik_ibu !== $data->nik_ibu) {
$request->validate([
'nik_ibu' => [
Rule::unique('data_ibu_hamil'),
],
], ['nik_ibu.unique' => 'NIK Ibu telah terdaftar']);
}
$nama_ibu = $data->nama_ibu;
$nama_ayah = $data->nama_ayah;
$tanggalLahirIbu = Carbon::parse($request->input('tanggal_lahir_ibu'));
$usiaIbu = $tanggalLahirIbu->diffInYears(Carbon::now());
$tanggalLahirAyah = Carbon::parse($request->input('tanggal_lahir_ayah'));
$usiaAyah = $tanggalLahirAyah->diffInYears(Carbon::now());
$validatedData['umur_ayah'] = $usiaAyah;
$validatedData['umur_ibu'] = $usiaIbu;
DataIbuHamil::where('nama_ibu', $nama_ibu)
->where('nama_ayah', $nama_ayah)
->update($validatedData);
return redirect('/data_pasien/' . $id . '/laporan_ibu_hamil')->with('success', 'Biodata Ibu ' . $data->nama_ibu . ' Berhasil di Update');
}
public function update_ibu_hamilv3(Request $request, $id)
{
$data = DataBalita::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'max' => 'Kolom :attribute maksimal harus :max karakter.',
'unique' => ':attribute telah terdaftar',
];
$validatedData = $request->validate([
'nik_ibu' => [
'required',
'max:255',
// Rule::unique('data_ibu_hamil')->ignore($id),
],
'nama_ibu' => 'required|max:255',
'tanggal_lahir_ibu' => 'required|max:255',
'tanggal_lahir_ayah' => 'required|max:255',
// 'umur_ibu' => 'required|max:255',
'nama_ayah' => 'required|max:255',
// 'umur_ayah' => 'required|max:255',
'alamat' => 'required|max:255',
'status_ibu' => 'required|max:255',
'status_ayah' => 'required|max:255',
], $customMessages);
if ($request->nik_ibu !== $data->details->nik_ibu) {
$request->validate([
'nik_ibu' => [
Rule::unique('data_ibu_hamil'),
],
], ['nik_ibu.unique' => 'NIK Ibu telah terdaftar']);
}
$nama_ibu = $data->details->nama_ibu;
$nama_ayah = $data->details->nama_ayah;
$tanggalLahirIbu = Carbon::parse($request->input('tanggal_lahir_ibu'));
$usiaIbu = $tanggalLahirIbu->diffInYears(Carbon::now());
$tanggalLahirAyah = Carbon::parse($request->input('tanggal_lahir_ayah'));
$usiaAyah = $tanggalLahirAyah->diffInYears(Carbon::now());
$validatedData['umur_ayah'] = $usiaAyah;
$validatedData['umur_ibu'] = $usiaIbu;
DataIbuHamil::where('nama_ibu', $nama_ibu)
->where('nama_ayah', $nama_ayah)
->update($validatedData);
return redirect('/data_pasien/' . $id . '/laporan_data_balita')->with('success', 'Biodata Ibu ' . $data->nama_ibu . ' Berhasil di Update');
}
public function preview_status_ibu_hamil($id)
{
$prev = DataIbuHamil::findOrFail($id);
$status_periksa_ibu_hamil = DataPeriksaIbuHamil::where('ibu_hamil_id', $id)->get();
$data_balita = DataBalita::where('ibu_hamil_id', $id)->get();
// Cari data dengan nama_ibu dan nama_ayah yang sama dengan $prev
$sameNameData = DataIbuHamil::where('nama_ibu', $prev->nama_ibu)
->where('nama_ayah', $prev->nama_ayah)
->get();
// Ambil ID dari semua data yang memiliki nama_ibu dan nama_ayah yang sama
$sameNameIds = $sameNameData->pluck('id')->toArray();
// Hitung total balita berdasarkan ibu_hamil_id yang ditemukan
$total_balita = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->whereNotIn('status', ['Belum Dilahirkan'])
->count();
$total_balita_meninggal = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->where('status', 'Meninggal')
->count();
return view('pages.data_laporan.laporan_status_hamil.index', [
"title" => "Data Laporan Preview",
"heading" => "Data Profile",
"data" => $prev,
"heading2" => "Profile Ibu",
"jumlah_anak" => $total_balita,
"data_bayi" => $data_balita,
"jumlah_balita_meninggal" => $total_balita_meninggal,
"data_vitamin" => DataObat::all(),
"status_ibu_hamil" => $status_periksa_ibu_hamil
]);
}
public function edit_status_hamil($id)
{
$prev = DataPeriksaIbuHamil::findOrFail($id)->first();
$prevv2 = DataPeriksaIbuHamil::findOrFail($id);
return view('pages.data_laporan.laporan_status_hamil.edit', [
"title" => "Edit Status Hamil",
"heading" => "Edit Status Periksa Ibu " . $prev->dataIbuhamil->nama_ibu,
"data" => $prevv2,
"data_vitamin" => DataObat::all(),
]);
}
public function store_status_hamil(Request $request, $id)
{
$data = DataIbuHamil::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'max' => 'Kolom :attribute maksimal harus :max karakter.',
];
$validatedData = $request->validate([
'anak_ke' => [
'required',
'max:255',
function ($attribute, $value, $fail) use ($request, $data) {
$exists = DataIbuHamil::where('nama_ibu', $data->nama_ibu)
->where('nama_ayah', $data->nama_ayah)
->where('anak_ke', $value)
->exists();
if ($exists) {
$fail('Anak ke' . $request->anak_ke . ' telah terdaftar.');
}
},
],
], $customMessages);
$validatedData['nik_ibu'] = $data->nik_ibu;
$validatedData['nama_ibu'] = $data->nama_ibu;
$validatedData['tanggal_lahir_ibu'] = $data->tanggal_lahir_ibu;
$validatedData['umur_ibu'] = $data->umur_ibu;
$validatedData['nama_ayah'] = $data->nama_ayah;
$validatedData['umur_ayah'] = $data->umur_ayah;
$validatedData['alamat'] = $data->alamat;
$validatedData['status_ibu'] = "Hamil";
$validatedData['status_ayah'] = $data->status_ayah;
$newData = DataIbuHamil::create($validatedData);
$newId = $newData->id;
// Menambahkan entri baru ke dalam tabel Data Balita
DataBalita::create([
'status' => 'Belum Dilahirkan',
'ibu_hamil_id' => $newId,
]);
return redirect('/data_pasien/' . $newId)->with('success', 'Berhasil Ditambah');
}
public function store_status_periksa_hamil(Request $request, $id)
{
$data = DataIbuHamil::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'max' => 'Kolom :attribute maksimal harus :max',
'integer' => 'Kolom :attribute harus berupa angka.',
'between' => 'Kolom :attribute harus di antara :min Bulan dan :max Bulan.',
'numeric' => 'Kolom :attribute harus berupa angka.',
'max_value' => 'Kolom :attribute maksimal harus :max. anjay',
'unique' => ':attribute ' . $request->usia_hamil . ' Bulan telah melakukan pemeriksaan'
];
$validatedData = $request->validate([
// 'usia_hamil' => [
// 'required',
// 'integer',
// 'between:1,9',
// 'max:255',
// function ($attribute, $value, $fail) use ($request, $data) {
// $exists = DataPeriksaIbuHamil::where('ibu_hamil_id', $data->id)
// ->where('usia_hamil', $value)
// ->exists();
// if ($exists) {
// $fail('Pada usia hamil ' . $request->usia_hamil . ' bulan telah melakukan pemeriksaan');
// }
// },
// ],
'berat_badan' => 'required|numeric|max:200',
'created_at' => 'required',
'tekanan_darah' => 'required|numeric|max:200',
'keluhan' => 'required|max:255',
'vitamin_id' => 'required',
], $customMessages);
$currentExaminationDate = new \DateTime($validatedData['created_at']);
// Cek apakah ada pemeriksaan lain pada bulan yang sama
$existingExamination = DataPeriksaIbuHamil::where('ibu_hamil_id', $id)
->whereYear('created_at', $currentExaminationDate->format('Y'))
->whereMonth('created_at', $currentExaminationDate->format('m'))
->first();
if ($existingExamination) {
return redirect()->back()->withErrors(['created_at' => 'Anda sudah melakukan pemeriksaan pada bulan ini'])->withInput();
}
$firstExamination = DataPeriksaIbuHamil::where('ibu_hamil_id', $id)
->orderBy('created_at', 'asc')
->first();
$currentExaminationDate = new \DateTime($validatedData['created_at']);
if ($firstExamination) {
$firstExaminationDate = new \DateTime($firstExamination->created_at);
if ($currentExaminationDate < $firstExaminationDate) {
return redirect()->back()->withErrors(['created_at' => 'Tanggal pemeriksaan tidak boleh sebelum tanggal pemeriksaan pertama'])->withInput();
}
$interval = $firstExaminationDate->diff($currentExaminationDate);
$ageOfPregnancy = $interval->m + 1 + ($interval->y * 12);
if ($ageOfPregnancy > 9) {
return redirect()->back()->withErrors(['created_at' => 'Usia kehamilan tidak boleh lebih dari 9 bulan.'])->withInput();
}
} else {
$ageOfPregnancy = 1;
}
$validatedData['ibu_hamil_id'] = $id;
$validatedData['user_id'] = 1;
$validatedData['usia_hamil'] = $ageOfPregnancy;
DataPeriksaIbuHamil::create($validatedData);
return redirect('/data_pasien/' . $id . '/laporan_ibu_hamil')->with('success', 'Data Periksa Ibu ' . $data->nama_ibu . ' Berhasil Ditambah');
}
public function update_status_periksa_hamil(Request $request, $id)
{
$data = DataPeriksaIbuHamil::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'max' => 'Kolom :attribute maksimal harus :max ',
'integer' => 'Kolom :attribute harus berupa angka.',
'between' => 'Kolom :attribute harus di antara :min Bulan dan :max Bulan.',
'numeric' => 'Kolom :attribute harus berupa angka.',
'max_value' => 'Kolom :attribute maksimal harus :max. anjay',
'unique' => ':attribute ' . $request->usia_hamil . ' Bulan telah melakukan pemeriksaan'
];
$validatedData = $request->validate([
// 'usia_hamil' => [
// 'required',
// 'integer',
// 'between:1,9',
// ],
'created_at' => 'required',
'berat_badan' => 'required|numeric|max:200',
'tekanan_darah' => 'required|numeric|max:200',
'keluhan' => 'required|max:255',
'vitamin_id' => 'required',
], $customMessages);
// $exists = DB::table('data_pemeriksaan_ibu_hamil')
// ->where('usia_hamil', $request->usia_hamil)
// ->where('ibu_hamil_id', $data->ibu_hamil_id)
// ->where('id', '!=', $id)
// ->exists();
// if ($exists) {
// return redirect()->back()->withErrors([
// 'usia_hamil' => 'Usia hamil ' . $request->usia_hamil . ' bulan telah melakukan pemeriksaan',
// ])->withInput();
// }
$validatedData['ibu_hamil_id'] = $data->ibu_hamil_id;
DataPeriksaIbuHamil::where('id', $data->id)
->update($validatedData);
return redirect('/data_pasien/' . $data->ibu_hamil_id . '/laporan_ibu_hamil')->with('success', 'Data Periksa Ibu ' . $data->nama_ibu . ' Berhasil Ditambah');
}
public function update_nama_balita(Request $request, $id)
{
$data = DataIbuHamil::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'max' => 'Kolom :attribute maksimal harus :max karakter.',
'unique' => 'NIK sudah digunakan',
];
if ($request->status == 'Meninggal') {
$validatedData = $request->validate([
// 'status_nik_balita' => ['required', 'max:255'],
// 'nik_balita' => [
// 'nullable',
// 'max:255',
// 'required_if:status_nik_balita,Memiliki NIK',
// 'unique:data_balita',
// function ($attribute, $value, $fail) use ($request) {
// if ($request->input('status_nik_balita') === 'Memiliki NIK' && empty($value)) {
// $fail('Kolom NIK Balita wajib diisi jika Status NIK Balita adalah Memiliki NIK.');
// }
// }
// ],
// 'nama_balita' => 'required|max:255',
// 'jenis_kelamin' => 'required|max:255',
// 'tanggal_lahir' => 'required|max:255',
// 'jam_lahir' => 'required|max:255',
'status' => 'required|max:255',
], $customMessages);
// Cek apakah nik_balita null atau kosong, jika ya isi dengan "anjay"
// if (empty($validatedData['nik_balita'])) {
// $validatedData['nik_balita'] = 'Belum Memiliki NIK';
// }
DataBalita::where('ibu_hamil_id', $data->id)
->update($validatedData);
DataIbuHamil::where('id', $data->id)
->update([
'status_ibu' => "Sudah Melahirkan"
]);
return redirect('/data_pasien/' . $id)->with('success', 'Data Anak Berhasil di Update');
} else {
$validatedData = $request->validate([
'status_nik_balita' => ['required', 'max:255'],
'nik_balita' => [
'nullable',
'max:255',
'required_if:status_nik_balita,Memiliki NIK',
'unique:data_balita',
function ($attribute, $value, $fail) use ($request) {
if ($request->input('status_nik_balita') === 'Memiliki NIK' && empty($value)) {
$fail('Kolom NIK Balita wajib diisi jika Status NIK Balita adalah Memiliki NIK.');
}
}
],
'nama_balita' => 'required|max:255',
'jenis_kelamin' => 'required|max:255',
'tanggal_lahir' => 'required|max:255',
'jam_lahir' => 'required|max:255',
'status' => 'required|max:255',
], $customMessages);
// Cek apakah nik_balita null atau kosong, jika ya isi dengan "anjay"
if (empty($validatedData['nik_balita'])) {
$validatedData['nik_balita'] = 'Belum Memiliki NIK';
}
DataBalita::where('ibu_hamil_id', $data->id)
->update($validatedData);
DataIbuHamil::where('id', $data->id)
->update([
'status_ibu' => "Sudah Melahirkan"
]);
return redirect('/data_pasien/' . $id)->with('success', 'Data Anak Berhasil di Update');
}
}
public function update_biodata_balita(Request $request, $id)
{
$data = DataBalita::find($id);
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'min' => 'Kolom :attribute minimal harus :min karakter.',
'max' => 'Kolom :attribute maksimal harus :max karakter.',
'unique' => ':attribute telah terdaftar',
];
$validatedData = $request->validate([
'nik_balita' => [
'required',
'max:255',
Rule::unique('data_balita')->ignore($id),
],
'nama_balita' => 'required|max:255',
'jenis_kelamin' => 'required|max:255',
'tanggal_lahir' => 'required|max:255',
'jam_lahir' => 'required|max:255',
'status' => 'required|max:255',
], $customMessages);
DataBalita::where('id', $data->id)
->update($validatedData);
return redirect('/data_pasien/' . $id . '/laporan_data_balita')->with('success', 'Biodata Balita Berhasil di Update');
}
public function preview_laporan_data_balita($id)
{
$prev = DataBalita::findOrFail($id);
// $biodata_keluarga = DataIbuHamil::where('ibu_hamil_id', $id)->get();
$data_periksa_balita = DataPeriksaBalita::where('balita_id', $prev->id)->get();
$status_periksa_balita = DataPeriksaBalita::where('balita_id', $id)->get();
$data_balita = DataBalita::where('ibu_hamil_id', $id)->get();
// Cari data dengan nama_ibu dan nama_ayah yang sama dengan $prev
$sameNameData = DataIbuHamil::where('nama_ibu', $prev->nama_ibu)
->where('nama_ayah', $prev->nama_ayah)
->get();
// Ambil ID dari semua data yang memiliki nama_ibu dan nama_ayah yang sama
$sameNameIds = $sameNameData->pluck('id')->toArray();
// Hitung total balita berdasarkan ibu_hamil_id yang ditemukan
$total_balita = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->whereNotIn('status', ['Belum Dilahirkan'])
->count();
$total_balita_meninggal = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->where('status', 'Meninggal')
->count();
// chart
$tinggi_balita = [];
$berat_balita = [];
foreach ($data_periksa_balita as $periksa) {
$tanggal_kunjungan = \Carbon\Carbon::parse($periksa->tanggal_kunjungan);
$bulan_kunjungan = $tanggal_kunjungan->format('F Y');
$tinggi_balita[$bulan_kunjungan] = number_format($periksa->tinggi_badan, 0);
$berat_balita[$bulan_kunjungan] = number_format($periksa->berat_badan, 0);
}
return view('pages.data_laporan.laporan_periksa_balita.index', [
"title" => "Data Laporan Preview",
"heading" => "Data Profile",
"data" => $prev,
"heading2" => "Profile Ibu",
"jumlah_anak" => $total_balita,
"data_bayi" => $data_balita,
"jumlah_balita_meninggal" => $total_balita_meninggal,
"data_vitamin" => DataObat::all(),
"status_periksa_balita" => $status_periksa_balita,
"tinggi_badan_balita" => $tinggi_balita,
"berat_badan_balita" => $berat_balita
]);
}
public function store_status_periksa_balita(Request $request, $id)
{
$data = Databalita::find($id);
$tanggalLahir = Carbon::parse($data->tanggal_lahir);
$tgl_balita = $tanggalLahir->format('d F Y');
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'min' => 'Kolom :attribute minimal harus :min',
'max' => 'Kolom :attribute maksimal harus :max.',
'unique' => 'Anak ke' . $request->anak_ke . ' telah terdaftar.',
'usia_balita_tahun.max' => 'Usia balita tidak boleh lebih dari 5 tahun.',
'usia_balita_bulan.max' => 'Bulan tidak boleh lebih dari 11.',
'tanggal_kunjungan.unique' => 'Balita sudah melakukan periksa pada bulan :bulan tahun :tahun.',
'numeric' => 'Kolom :attribute harus berupa angka.',
];
$validatedData = $request->validate([
'tanggal_kunjungan' => [
'required',
'date',
function ($attribute, $value, $fail) use ($data, $tgl_balita) {
// Dapatkan tanggal lahir balita
$tanggalLahir = $data->tanggal_lahir;
// Periksa apakah tanggal kunjungan lebih kecil dari tanggal lahir
if (Carbon::parse($value)->lt($tanggalLahir)) {
$fail("Tanggal kunjungan tidak boleh kurang dari tanggal lahir balita. " . $tgl_balita);
}
},
],
// 'usia_balita_tahun' => 'required|min:0|max:5',
// 'usia_balita_bulan' => 'required|integer|min:0|max:11',
'tinggi_badan' => 'required|numeric|max:100',
'berat_badan' => 'required|numeric|max:100',
'lingkar_kepala_balita' => 'required|numeric|max:60',
'vitamin_id' => 'required|max:255',
'imunisasi_id' => 'required|max:255',
], $customMessages);
// // Custom validation untuk tahun dan tanggal v1 {
// $exists = DB::table('data_pemeriksaan_balita')
// ->where('usia_balita_tahun', $request->usia_balita_tahun)
// ->where('usia_balita_bulan', $request->usia_balita_bulan)
// ->where('balita_id', $data->id)
// ->exists();
// if ($exists) {
// return redirect()->back()->withErrors([
// 'usia_balita_tahun' => 'Usia balita tahun ' . $request->usia_balita_tahun . ' Tahun ' . $request->usia_balita_bulan . ' bulan telah melakukan pemeriksaan',
// 'usia_balita_bulan' => 'Usia balita tahun ' . $request->usia_balita_tahun . ' Tahun ' . $request->usia_balita_bulan . ' bulan telah melakukan pemeriksaan'
// ])->withInput();
// }
// // }
// otomatis tanggal usia periksa balita {
// Dapatkan tanggal kunjungan dari input
$tanggalKunjungan = Carbon::parse($validatedData['tanggal_kunjungan']);
// Hitung usia balita berdasarkan tanggal kunjungan
$usiaBalita = $tanggalKunjungan->diffInMonths($tanggalLahir);
// Jika tanggal kunjungan lebih kecil dari tanggal lahir, set usia balita menjadi 0 tahun dan 1 bulan
if ($tanggalKunjungan->lt($tanggalLahir)) {
$usiaBalitaTahun = 0;
$usiaBalitaBulan = 1;
} else {
// Hitung usia balita dalam tahun dan bulan
$usiaBalitaTahun = floor($usiaBalita / 12);
$usiaBalitaBulan = $usiaBalita % 12;
}
// Masukkan hasil perhitungan usia balita ke dalam data validasi
$validatedData['usia_balita_tahun'] = $usiaBalitaTahun;
$validatedData['usia_balita_bulan'] = $usiaBalitaBulan;
// }
$tanggal_kunjungan = $request->input('tanggal_kunjungan');
$year = date('Y', strtotime($tanggal_kunjungan));
$month = date('m', strtotime($tanggal_kunjungan));
$existingRecord = DataPeriksaBalita::where('balita_id', $data->id)
->whereYear('tanggal_kunjungan', $year)
->whereMonth('tanggal_kunjungan', $month)
->first();
if ($existingRecord) {
return back()->withErrors([
'tanggal_kunjungan' => 'Balita sudah melakukan periksa pada bulan ' . date('F', mktime(0, 0, 0, $month, 10)) . ' tahun ' . $year . '.'
])->withInput();
}
$validatedData['balita_id'] = $data->id;
DataPeriksaBalita::create($validatedData);
return redirect('/data_pasien/' . $data->id . '/laporan_data_balita')->with('success', 'Berhasil Ditambah');
}
public function edit_status_periksa_balita($id)
{
$prev = DataPeriksaBalita::findOrFail($id);
return view('pages.data_laporan.laporan_periksa_balita.edit', [
"title" => "Edit Status Periksa Balita",
"heading" => "Edit Status Periksa Balita",
"data" => $prev,
"data_vitamin" => DataObat::all(),
]);
}
public function update_status_periksa_balita(Request $request, $id)
{
$data = DataPeriksaBalita::find($id);
$tanggalLahir = Carbon::parse($data->tanggal_lahir);
$tgl_balita = $tanggalLahir->format('d F Y');
$customMessages = [
'required' => 'Kolom :attribute wajib diisi.',
'max' => 'Kolom :attribute maksimal harus :max karakter.',
'usia_balita_tahun.max' => 'Usia balita tidak boleh lebih dari 5 tahun.',
'usia_balita_bulan.max' => 'Bulan tidak boleh lebih dari 11.',
'numeric' => 'Kolom :attribute harus berupa angka.',
'tanggal_kunjungan.unique' => 'Balita sudah melakukan periksa pada bulan :bulan tahun :tahun.',
'numeric' => 'Kolom :attribute harus berupa angka.',
];
$validatedData = $request->validate([
'tanggal_kunjungan' => [
'required',
'date',
function ($attribute, $value, $fail) use ($data, $tgl_balita) {
// Dapatkan tanggal lahir balita
$tanggalLahir = $data->tanggal_lahir;
// Periksa apakah tanggal kunjungan lebih kecil dari tanggal lahir
if (Carbon::parse($value)->lt($tanggalLahir)) {
$fail("Tanggal kunjungan tidak boleh kurang dari tanggal lahir balita. " . $tgl_balita);
}
},
],
// 'usia_balita_tahun' => 'required|min:0|max:5',
// 'usia_balita_bulan' => 'required|integer|min:0|max:11',
'tinggi_badan' => 'required|numeric|max:100',
'berat_badan' => 'required|numeric|max:100',
'lingkar_kepala_balita' => 'required|numeric|max:60',
'vitamin_id' => 'required|max:255',
'imunisasi_id' => 'required|max:255',
], $customMessages);
// $exists = DB::table('data_pemeriksaan_balita')
// ->where('usia_balita_tahun', $request->usia_balita_tahun)
// ->where('usia_balita_bulan', $request->usia_balita_bulan)
// ->where('balita_id', $data->balita_id)
// ->where('id', '!=', $id)
// ->exists();
// if ($exists) {
// return redirect()->back()->withErrors([
// 'usia_balita_tahun' => 'Usia balita tahun ' . $request->usia_balita_tahun . ' Tahun ' . $request->usia_balita_bulan . ' bulan telah melakukan pemeriksaan',
// 'usia_balita_bulan' => 'Usia balita tahun ' . $request->usia_balita_tahun . ' Tahun ' . $request->usia_balita_bulan . ' bulan telah melakukan pemeriksaan'
// ])->withInput();
// }
// Dapatkan tanggal kunjungan dari input
$tanggalKunjungan = Carbon::parse($validatedData['tanggal_kunjungan']);
// Hitung usia balita berdasarkan tanggal kunjungan
$usiaBalita = $tanggalKunjungan->diffInMonths($tanggalLahir);
// Jika tanggal kunjungan lebih kecil dari tanggal lahir, set usia balita menjadi 0 tahun dan 1 bulan
if ($tanggalKunjungan->lt($tanggalLahir)) {
$usiaBalitaTahun = 0;
$usiaBalitaBulan = 1;
} else {
// Hitung usia balita dalam tahun dan bulan
$usiaBalitaTahun = floor($usiaBalita / 12);
$usiaBalitaBulan = $usiaBalita % 12;
}
// Masukkan hasil perhitungan usia balita ke dalam data validasi
$validatedData['usia_balita_tahun'] = $usiaBalitaTahun;
$validatedData['usia_balita_bulan'] = $usiaBalitaBulan;
$tanggal_kunjungan = $request->input('tanggal_kunjungan');
$year = date('Y', strtotime($tanggal_kunjungan));
$month = date('m', strtotime($tanggal_kunjungan));
$existingRecord = DataPeriksaBalita::where('balita_id', $data->balita_id)
->whereYear('tanggal_kunjungan', $year)
->whereMonth('tanggal_kunjungan', $month)
->where('id', '!=', $id)
->first();
if ($existingRecord) {
return back()->withErrors([
'tanggal_kunjungan' => 'Balita sudah melakukan periksa pada bulan ' . date('F', mktime(0, 0, 0, $month, 10)) . ' tahun ' . $year . '.'
])->withInput();
}
DataPeriksaBalita::where('id', $data->id)
->update($validatedData);
return redirect('/data_pasien/' . $data->balita_id . '/laporan_data_balita')->with('success', 'Data Periksa Balita Berhasil Di Update');
}
public function destroy_status_periksa_balita($id)
{
// Mencari data dari tabel data ibu hamil berdasarkan id yang didapat
$data = DataPeriksaBalita::findOrFail($id);
// Menghapus data balita berdasarkan id yang didapat dari $data
DataPeriksaBalita::where('id', $data->id)->delete();
// Setelah proses penghapusan berhasil maka akan diarahkan ke halaman /data_pasien
return redirect('/data_pasien/' . $data->balita_id . '/laporan_data_balita')->with('success', 'Data Status Periksa Balita Berhasil Dihapus');
}
public function cetak($id)
{
$prev = DataBalita::findOrFail($id);
// $biodata_keluarga = DataIbuHamil::where('ibu_hamil_id', $id)->get();
$data_periksa_balita = DataPeriksaBalita::where('balita_id', $prev->id)->get();
$status_periksa_balita = DataPeriksaBalita::where('balita_id', $id)->get();
$data_balita = DataBalita::where('ibu_hamil_id', $id)->get();
// Cari data dengan nama_ibu dan nama_ayah yang sama dengan $prev
$sameNameData = DataIbuHamil::where('nama_ibu', $prev->nama_ibu)
->where('nama_ayah', $prev->nama_ayah)
->get();
// Ambil ID dari semua data yang memiliki nama_ibu dan nama_ayah yang sama
$sameNameIds = $sameNameData->pluck('id')->toArray();
// Hitung total balita berdasarkan ibu_hamil_id yang ditemukan
$total_balita = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->whereNotIn('status', ['Belum Dilahirkan'])
->count();
$total_balita_meninggal = DataBalita::whereIn('ibu_hamil_id', $sameNameIds)
->where('status', 'Meninggal')
->count();
// chart
$tinggi_balita = [];
$berat_balita = [];
foreach ($data_periksa_balita as $periksa) {
$tanggal_kunjungan = \Carbon\Carbon::parse($periksa->tanggal_kunjungan);
$bulan_kunjungan = $tanggal_kunjungan->format('F Y');
$tinggi_balita[$bulan_kunjungan] = number_format($periksa->tinggi_badan, 0);
$berat_balita[$bulan_kunjungan] = number_format($periksa->berat_badan, 0);
}
return view('pages.data_laporan.laporan_periksa_balita.cetak', [
"title" => "anjay Data Laporan Preview",
"heading" => "Data Profile",
"data" => $prev,
"heading2" => "Profile Ibu",
"jumlah_anak" => $total_balita,
"data_bayi" => $data_balita,
"jumlah_balita_meninggal" => $total_balita_meninggal,
"data_vitamin" => DataObat::all(),
"status_periksa_balita" => $status_periksa_balita,
"tinggi_badan_balita" => $tinggi_balita,
"berat_badan_balita" => $berat_balita
]);
}
}