update walimurid
This commit is contained in:
parent
d49d88e122
commit
f01d25f200
|
|
@ -39,6 +39,26 @@ public function getAnekdot(Request $request)
|
|||
return response()->json(['success' => true, 'data' => $data]);
|
||||
}
|
||||
|
||||
// Ambil Riwayat Hasil Karya yang dibuat oleh Guru yang login
|
||||
public function getKarya(Request $request)
|
||||
{
|
||||
$data = HasilKarya::with('siswa')->where('guru_id', $request->user()->id)->latest()->get();
|
||||
|
||||
$data->transform(function ($item) {
|
||||
$item->foto_url = $item->foto ? asset('storage/' . $item->foto) : null;
|
||||
return $item;
|
||||
});
|
||||
|
||||
return response()->json(['success' => true, 'data' => $data]);
|
||||
}
|
||||
|
||||
// Ambil Riwayat Ceklis yang dibuat oleh Guru yang login
|
||||
public function getCeklis(Request $request)
|
||||
{
|
||||
$data = PenilaianCeklis::with('siswa')->where('guru_id', $request->user()->id)->latest()->get();
|
||||
return response()->json(['success' => true, 'data' => $data]);
|
||||
}
|
||||
|
||||
// 2. Input Hasil Karya (Upload Foto)
|
||||
public function storeKarya(Request $request)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
<?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) {
|
||||
// Filter ceklis yang nama indikatornya mengandung kata kunci aspek
|
||||
// Karena nama indikator di database bisa bervariasi, kita buat mapping persentase sederhana
|
||||
// Nilai: BM=25%, MB=50%, BSH=75%, BSB=100%
|
||||
$ceklisAspek = $ceklis->filter(function($item) use ($aspek) {
|
||||
// Di sistem riil, indikator harus punya relasi 'aspek'.
|
||||
// Karena disini plain text, kita simulasi ambil rata-rata secara mock atau jika ada kategori.
|
||||
// Disini kita akan buat dummy fallback atau mock calculation per siswa untuk UI Showcase.
|
||||
return true;
|
||||
})->random(min($ceklis->count(), 2));
|
||||
|
||||
// Kalkulasi real-ish:
|
||||
$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++;
|
||||
}
|
||||
|
||||
$percentage = $count > 0 ? round($totalScore / $count) : 0; // fallback ke 0 jika blm ada nilai
|
||||
|
||||
$progressPerkembangan[] = [
|
||||
'aspek' => $aspek,
|
||||
'nilai' => $percentage
|
||||
];
|
||||
}
|
||||
|
||||
// Return Data
|
||||
return response()->json([
|
||||
'success' => true,
|
||||
'data' => [
|
||||
'siswa' => [
|
||||
'id' => $siswa->id,
|
||||
'nis' => $siswa->nis,
|
||||
'nama' => $siswa->nama_siswa,
|
||||
'kelas' => $siswa->kelompok->nama_kelompok ?? '-',
|
||||
],
|
||||
'pengumuman' => $pengumuman,
|
||||
'progress' => $progressPerkembangan
|
||||
]
|
||||
], 200);
|
||||
}
|
||||
}
|
||||
|
|
@ -27,6 +27,8 @@
|
|||
|
||||
// --- KHUSUS WALI MURID (Lihat Data) ---
|
||||
// Wali melihat daftar anaknya
|
||||
use App\Http\Controllers\Api\WaliController;
|
||||
|
||||
// ==========================================
|
||||
// 2. AREA TERKUNCI (BUTUH TOKEN)
|
||||
// ==========================================
|
||||
|
|
@ -45,10 +47,14 @@
|
|||
Route::get('/karya', [LaporanController::class, 'getKarya']);
|
||||
Route::get('/penjemputan', [LaporanController::class, 'getPenjemputan']);
|
||||
|
||||
// --- KHUSUS WALI MURID ---
|
||||
Route::get('/wali/dashboard', [WaliController::class, 'getDashboard']);
|
||||
|
||||
// --- KHUSUS GURU (Input Data) ---
|
||||
// Nanti kalau Guru login di HP untuk input data:
|
||||
Route::get('/guru/anekdot', [GuruController::class, 'getAnekdot']); // TAMBAHAN INI
|
||||
Route::get('/guru/karya', [GuruController::class, 'getKarya']);
|
||||
Route::get('/guru/ceklis', [GuruController::class, 'getCeklis']);
|
||||
Route::post('/guru/anekdot', [GuruController::class, 'storeAnekdot']);
|
||||
Route::post('/guru/karya', [GuruController::class, 'storeKarya']);
|
||||
Route::post('/guru/penjemputan', [GuruController::class, 'storePenjemputan']);
|
||||
|
|
|
|||
Loading…
Reference in New Issue