MIF_E31221225/app/Http/Controllers/Siswa/DashboardSiswaController.php

117 lines
4.1 KiB
PHP

<?php
namespace App\Http\Controllers\Siswa;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use App\Models\Siswa;
use App\Models\GuruMapel;
use App\Models\Tugas;
use App\Models\Ujian;
use Illuminate\Database\Eloquent\Builder;
use Carbon\Carbon;
class DashboardSiswaController extends Controller
{
public function index()
{
$siswa = Siswa::where('user_id', Auth::id())->firstOrFail();
$guruMapel = GuruMapel::with('mapel')
->where('kelas_id', $siswa->kelas_id)
->get();
$hariIni = Carbon::now()->locale('id')->isoFormat('dddd');
$jadwalHariIni = $guruMapel->filter(fn($item) =>
strtolower($item->hari) === strtolower($hariIni)
);
$hariMap = [
'Senin' => 0,
'Selasa' => 1,
'Rabu' => 2,
'Kamis' => 3,
'Jumat' => 4,
'Sabtu' => 5,
'Minggu' => 6,
];
// Pastikan jadwalHariIni Collection, map hasilnya dan collect ulang supaya pasti Collection
$eventsMapel = collect($jadwalHariIni->map(function ($item) use ($hariMap) {
$hari = $hariMap[ucfirst(strtolower($item->hari))] ?? 0;
$startDate = Carbon::now()->startOfWeek()->addDays($hari)->format('Y-m-d');
return [
'title' => $item->mapel->nama_mapel ?? 'Mata Pelajaran',
'start' => $startDate . 'T' . $item->jam_mulai,
'end' => $startDate . 'T' . $item->jam_selesai,
'color' => '#6f42c1',
];
}));
$tugasHariIni = Tugas::whereHas('kelas', function ($q) use ($siswa) {
$q->where('kelas_id', $siswa->kelas_id);
})
->whereDate('deadline', Carbon::today())
->with('materi')
->get();
// Pastikan eventsTugas juga Collection
$eventsTugas = collect($tugasHariIni->map(function ($tugas) {
$start = $tugas->tanggal ?? Carbon::today()->toDateString();
$deadline = $tugas->deadline ?? $start;
return [
'title' => 'Tugas: ' . $tugas->judul,
'start' => $start . 'T00:00:00',
'end' => $deadline . 'T23:59:59',
'color' => '#ffc107',
'url' => route('siswa.tugas.show', $tugas->id),
];
}));
$ujianHariIni = Ujian::where('terbit', true)
->whereHas('kelas', function (Builder $q) use ($siswa) {
$q->where('kelas.id', $siswa->kelas_id)
->where('kelas_ujian.deadline', '>=', Carbon::today()->toDateString());
})
->with(['kelas' => function ($q) use ($siswa) {
$q->where('kelas.id', $siswa->kelas_id);
}, 'mapel'])
->get();
// Pastikan eventsUjian Collection
$eventsUjian = collect($ujianHariIni->map(function ($ujian) use ($siswa) {
$kelas = $ujian->kelas->firstWhere('id', $siswa->kelas_id);
$start = $ujian->waktu_mulai ?? $ujian->tanggal_ujian ?? Carbon::now();
$end = $ujian->waktu_selesai ?? ($kelas?->pivot?->deadline ?? $start);
return [
'title' => 'Ujian: ' . ($ujian->judul ?? 'Tanpa Judul'),
'start' => Carbon::parse($start)->format('Y-m-d\TH:i:s'),
'end' => Carbon::parse($end)->format('Y-m-d\TH:i:s'),
'color' => '#dc3545',
'url' => route('siswa.ujian.show', $ujian->id),
];
}));
// Sekarang merge aman karena semuanya Collection
$events = $eventsMapel
->merge($eventsTugas)
->merge($eventsUjian);
return view('siswa.dashboard', [
'jumlahMapel' => $guruMapel->count(),
'jumlahTugas' => $tugasHariIni->count(),
'jumlahUjian' => $ujianHariIni->count(),
'guruMapel' => $guruMapel,
'events' => $events,
'tugasHariIni' => $tugasHariIni,
'ujianHariIni' => $ujianHariIni,
'jadwalHariIni' => $jadwalHariIni,
]);
}
}