117 lines
4.1 KiB
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,
|
|
]);
|
|
}
|
|
}
|