228 lines
7.1 KiB
PHP
228 lines
7.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Api;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Jadwal;
|
|
use App\Models\Pemeriksaan;
|
|
use App\Models\Posyandu;
|
|
use Illuminate\Http\Request;
|
|
use PhpParser\Node\Expr\Cast\Double;
|
|
|
|
class JadwalController extends Controller
|
|
{
|
|
/**
|
|
* Display a listing of the resource.
|
|
*/
|
|
public function index()
|
|
{
|
|
$user = auth()->user();
|
|
|
|
// Jika pengguna memiliki peran "nakes"
|
|
if ($user->roles === 'nakes') {
|
|
return $this->jadwalByBidan($user->bidan->id);
|
|
}
|
|
|
|
// Jika pengguna memiliki peran "user"
|
|
if ($user->roles === 'user') {
|
|
return $this->jadwalByOrangTua($user->orangtua->id);
|
|
}
|
|
|
|
// Jika pengguna memiliki peran lainnya
|
|
return $this->allJadwal();
|
|
}
|
|
|
|
// // Mendapatkan jadwal berdasarkan bidan yang terkait
|
|
private function jadwalByBidan($bidanId)
|
|
{
|
|
// Ambil semua Posyandu yang memiliki bidan dengan ID tertentu
|
|
$posyandus = Posyandu::whereHas('bidans', function ($query) use ($bidanId) {
|
|
$query->where('bidan_id', $bidanId);
|
|
})->with(['jadwal', 'bidans.user'])->get();
|
|
|
|
// Inisialisasi array untuk menyimpan semua jadwal
|
|
$jadwals = [];
|
|
|
|
// Iterasi setiap Posyandu dan gabungkan jadwal mereka
|
|
foreach ($posyandus as $posyandu) {
|
|
foreach ($posyandu->jadwal as $jadwal) {
|
|
$bidanNames = $posyandu->bidans->map(function ($bidan) {
|
|
return [
|
|
'bidan_id' => $bidan->id,
|
|
'name' => $bidan->user->name
|
|
];
|
|
})->toArray();
|
|
$jadwals[] = [
|
|
'id' => $jadwal->id,
|
|
'posyandu_id' => $posyandu->id,
|
|
'nama_posyandu' => $posyandu->name,
|
|
'tanggal' => $jadwal->tanggal,
|
|
// 'bidans' => $bidanNames
|
|
];
|
|
}
|
|
}
|
|
|
|
// Mengembalikan response JSON dengan semua jadwal yang ditemukan
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Berhasil mengambil data',
|
|
'data' => $jadwals
|
|
]);
|
|
}
|
|
|
|
private function jadwalByOrangTua($orangTuaId)
|
|
{
|
|
$posyandus = Posyandu::with(['bidans.user', 'jadwal'])->whereHas('balita', function ($query) use ($orangTuaId) {
|
|
$query->where('orang_tua_id', $orangTuaId);
|
|
})->get();
|
|
|
|
// Inisialisasi array untuk menyimpan semua jadwal
|
|
$jadwals = [];
|
|
|
|
// Iterasi setiap Posyandu dan gabungkan jadwal mereka
|
|
foreach ($posyandus as $posyandu) {
|
|
foreach ($posyandu->jadwal as $jadwal) {
|
|
$bidanNames = $posyandu->bidans->map(function ($bidan) {
|
|
return [
|
|
'bidan_id' => $bidan->id,
|
|
'name' => $bidan->user->name
|
|
];
|
|
})->toArray();
|
|
$jadwals[] = [
|
|
'id' => $jadwal->id,
|
|
'posyandu_id' => $posyandu->id,
|
|
'nama_posyandu' => $posyandu->name,
|
|
'tanggal' => $jadwal->tanggal,
|
|
// 'bidans' => $bidanNames
|
|
];
|
|
}
|
|
}
|
|
|
|
// Mengembalikan response JSON dengan semua jadwal yang ditemukan
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Berhasil mengambil data',
|
|
'data' => $jadwals
|
|
]);
|
|
}
|
|
|
|
|
|
// Mendapatkan semua jadwal
|
|
private function allJadwal()
|
|
{
|
|
$jadwals = Jadwal::with('posyandu.bidans.user')->get();
|
|
|
|
// Inisialisasi array untuk menyimpan semua jadwal
|
|
$formattedJadwals = [];
|
|
|
|
// Iterasi setiap jadwal dan tambahkan informasi posyandu
|
|
foreach ($jadwals as $jadwal) {
|
|
$bidanNames = $jadwal->posyandu->bidans->map(function ($bidan) {
|
|
return [
|
|
'bidan_id' => $bidan->id,
|
|
'name' => $bidan->user->name
|
|
];
|
|
})->toArray();
|
|
$formattedJadwals[] = [
|
|
'id' => $jadwal->id,
|
|
'posyandu_id' => $jadwal->posyandu->id,
|
|
'nama_posyandu' => $jadwal->posyandu->name,
|
|
'tanggal' => $jadwal->tanggal,
|
|
// 'bidans' => $bidanNames
|
|
];
|
|
}
|
|
|
|
// Mengembalikan response JSON dengan semua jadwal yang ditemukan
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Berhasil mengambil data',
|
|
'data' => $formattedJadwals
|
|
]);
|
|
}
|
|
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*/
|
|
public function show(string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(Request $request, string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*/
|
|
public function destroy(string $id)
|
|
{
|
|
//
|
|
}
|
|
|
|
public function getListPemeriksaanByJadwal(Request $request, $jadwal_id)
|
|
{
|
|
$user = auth()->user();
|
|
|
|
// Jika pengguna memiliki peran "nakes"
|
|
if ($user->roles === 'nakes') {
|
|
|
|
// Validasi jadwal_id
|
|
$jadwal = Jadwal::with('posyandu')->find($jadwal_id);
|
|
if (!$jadwal) {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Jadwal tidak ditemukan',
|
|
], 404);
|
|
}
|
|
|
|
// Ambil pemeriksaan berdasarkan jadwal_id
|
|
$pemeriksaans = Pemeriksaan::with('balita')
|
|
->where('jadwal_id', $jadwal_id)
|
|
->get();
|
|
|
|
// Format data balita dari pemeriksaan
|
|
$balitas = $pemeriksaans->map(function ($pemeriksaan) {
|
|
return [
|
|
'id_pemeriksaan' => $pemeriksaan->id,
|
|
'id_balita' => $pemeriksaan->balita->id,
|
|
'name' => $pemeriksaan->balita->name,
|
|
'tanggal_lahir' => $pemeriksaan->balita->tanggal_lahir,
|
|
'jenis_kelamin' => $pemeriksaan->balita->jenis_kelamin,
|
|
'usia' => $pemeriksaan->usia,
|
|
'berat_badan' => strval($pemeriksaan->berat_badan),
|
|
'tinggi_badan' => strval($pemeriksaan->tinggi_badan),
|
|
'status' => $pemeriksaan->status,
|
|
// 'orang_tua_id' => $pemeriksaan->balita->orang_tua_id,
|
|
// 'posyandu_id' => $pemeriksaan->balita->posyandu_id,
|
|
];
|
|
});
|
|
|
|
// Mengembalikan response JSON dengan data balita yang ditemukan
|
|
return response()->json([
|
|
'success' => true,
|
|
'message' => 'Berhasil mengambil data',
|
|
'data' => $balitas,
|
|
]);
|
|
} else {
|
|
return response()->json([
|
|
'success' => false,
|
|
'message' => 'Unauthorized',
|
|
], 403);
|
|
}
|
|
}
|
|
}
|