MIF_E31230596_SimpaudKartoh.../app/Http/Controllers/Api/WaliController.php

188 lines
6.0 KiB
PHP

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\Siswa;
use App\Models\WaliMurid;
use App\Models\Pengumuman;
use App\Models\PenilaianCeklis;
class WaliController extends Controller
{
public function getDashboard(Request $request)
{
$user = Auth::user();
// 1. Dapatkan Profil Wali
$wali = WaliMurid::where('user_id', $user->id)->first();
if (!$wali) {
return response()->json([
'success' => false,
'message' => 'Profil Wali Murid tidak ditemukan',
], 404);
}
// 2. Dapatkan Data Siswa (Asumsi: 1 Wali -> 1 Siswa utama)
$siswa = Siswa::with('kelompok')
->where('wali_murid_id', $wali->id)
->first();
if (!$siswa) {
return response()->json([
'success' => false,
'message' => 'Data Anak tidak ditemukan untuk wali ini',
], 404);
}
// 3. Pengumuman Aktif Terbaru
$pengumuman = Pengumuman::where('status', true)
->where('tanggal_mulai', '<=', now())
->where('tanggal_selesai', '>=', now())
->latest()
->first();
// 4. Hitung Rekapan 6 Aspek Perkembangan dari Ceklis
$ceklis = PenilaianCeklis::where('siswa_id', $siswa->id)->get();
$aspekList = [
'Nilai Agama & Moral',
'Fisik Motorik',
'Kognitif',
'Bahasa',
'Sosial Emosional',
'Seni',
];
$progressPerkembangan = [];
foreach ($aspekList as $aspek) {
// Murni kalkulasi berdasarkan data riil yang match aspeknya
$ceklisAspek = $ceklis->where('aspek_perkembangan', $aspek);
$totalScore = 0;
$count = 0;
foreach ($ceklisAspek as $c) {
if ($c->hasil == 'BM') $totalScore += 25;
elseif ($c->hasil == 'MB') $totalScore += 50;
elseif ($c->hasil == 'BSH') $totalScore += 75;
elseif ($c->hasil == 'BSB') $totalScore += 100;
$count++;
}
// Murni kalkulasi berdasarkan data riil, 0 jika kosong
$percentage = $count > 0 ? round($totalScore / $count) : 0;
$progressPerkembangan[] = [
'aspek' => $aspek,
'nilai' => $percentage
];
}
// 5. Relasi data penjemputan terakhir
$penjemputanTerakhir = \App\Models\Penjemputan::where('siswa_id', $siswa->id)
->latest()
->first();
// Return Data
return response()->json([
'success' => true,
'data' => [
'siswa' => [
'id' => $siswa->id,
'nis' => $siswa->nis,
'nama' => $siswa->nama_siswa,
'kelas' => $siswa->kelompok->nama_kelompok ?? '-',
'foto' => $siswa->foto ?? null,
],
'pengumuman' => $pengumuman,
'progress' => $progressPerkembangan,
'penjemputan_terakhir' => $penjemputanTerakhir
]
], 200);
}
// --- KHUSUS WALI MURID: Riwayat Penilaian Anak Spesifik (PRIVASI) ---
public function getRiwayatAnak($id)
{
$user = Auth::user();
// 1. Dapatkan Profil Wali
$wali = WaliMurid::where('user_id', $user->id)->first();
if (!$wali) {
return response()->json(['success' => false, 'message' => 'Profil Wali Murid tidak ditemukan'], 404);
}
// 2. Pastikan Siswa yang diminta benar-benar anak dari wali ini (Keamanan Privasi)
$siswa = Siswa::where('id', $id)->where('wali_murid_id', $wali->id)->first();
if (!$siswa) {
return response()->json(['success' => false, 'message' => 'Anda tidak memiliki akses ke data siswa ini'], 403);
}
// 3. Ambil Semua Data Riwayat Khusus Anak Ini Saja
$anekdot = \App\Models\Anekdot::with('siswa')
->where('siswa_id', $siswa->id)
->latest()
->get();
$ceklis = PenilaianCeklis::with('siswa')
->where('siswa_id', $siswa->id)
->latest()
->get();
$karya = \App\Models\HasilKarya::with('siswa')
->where('siswa_id', $siswa->id)
->latest()
->get()
->map(function ($item) {
if ($item->foto) {
$item->foto_url = url('storage/' . $item->foto);
}
return $item;
});
return response()->json([
'status' => 'success',
'data' => [
'anekdot' => $anekdot,
'ceklis' => $ceklis,
'karya' => $karya
]
], 200);
}
// --- KHUSUS WALI MURID: Rapot Penilaian Anak (Semester) ---
public function getRapotAnak($id)
{
$user = Auth::user();
$wali = WaliMurid::where('user_id', $user->id)->first();
if (!$wali) {
return response()->json(['success' => false, 'message' => 'Profil Wali Murid tidak ditemukan'], 404);
}
$siswa = Siswa::where('id', $id)->where('wali_murid_id', $wali->id)->first();
if (!$siswa) {
return response()->json(['success' => false, 'message' => 'Anda tidak memiliki akses ke data siswa ini'], 403);
}
// Ambil SEMUA riwayat rapot untuk siswa ini
$rapots = \App\Models\Rapot::with('siswa')
->where('siswa_id', $siswa->id)
->orderBy('created_at', 'desc')
->get();
if ($rapots->isEmpty()) {
return response()->json(['status' => 'error', 'message' => 'Rapot belum tersedia'], 404);
}
return response()->json([
'status' => 'success',
'data' => $rapots
], 200);
}
}