{{-- Lokasi File: resources/views/guru/dashboard.blade.php Deskripsi: Dashboard Utama Guru dengan Card Jurnal Interaktif & AI Assistant --}} @php use Illuminate\Support\Facades\Storage; use Carbon\Carbon; use Illuminate\Support\Str; // ======================================================================== // HELPER LOGIC: STATUS SESI MENGAJAR // ======================================================================== if (!function_exists('getStatusAbsensi')) { // PERBAIKAN: Hapus parameter $sesiLookup, cukup terima $jadwal saja function getStatusAbsensi($jadwal) { // Mengambil data sesi hari ini dari relasi (Eager Loaded di Controller) $sesi = $jadwal->sesiJurnalHariIni; $jamSekarang = Carbon::now(); $jamJadwalMulai = Carbon::parse($jadwal->jam_mulai); $jamJadwalSelesai = Carbon::parse($jadwal->jam_selesai); // Default State (Belum Mulai) $data = [ 'status_header' => 'Jadwal', 'badge_class' => 'badge-soft-secondary', 'row_opacity' => '1', 'is_active' => false, 'btn_action' => 'wait', // wait, start, absensi, report, disabled 'btn_text' => 'Belum Mulai', 'btn_class' => 'btn-light text-muted', 'btn_icon' => 'far fa-clock' ]; if ($sesi) { // --- KONDISI 1: SESI SUDAH ADA (GURU SUDAH TAP-IN) --- if ($sesi->status_sesi == 'menunggu_absensi') { // Tahap 1: Absensi $data['status_header'] = 'Menunggu Absensi'; $data['badge_class'] = 'badge-soft-warning'; $data['is_active'] = true; $data['btn_action'] = 'absensi'; $data['btn_text'] = 'Lanjut Absen'; $data['btn_class'] = 'btn-warning text-dark'; $data['btn_icon'] = 'fas fa-user-check'; } elseif ($sesi->status_sesi == 'berlangsung') { // Tahap 2: Mengajar (Sudah Absen) $data['status_header'] = 'Sedang Mengajar'; $data['badge_class'] = 'badge-soft-indigo pulse-animation'; $data['is_active'] = true; $data['btn_action'] = 'report'; $data['btn_text'] = 'Isi Jurnal'; $data['btn_class'] = 'btn-info text-white'; $data['btn_icon'] = 'fas fa-file-signature'; } elseif ($sesi->status_sesi == 'laporan_selesai') { // Tahap 3: Selesai $data['status_header'] = 'Selesai'; $data['badge_class'] = 'badge-soft-success'; $data['btn_action'] = 'detail'; $data['btn_text'] = 'Lihat Detail'; $data['btn_class'] = 'btn-outline-success'; $data['btn_icon'] = 'fas fa-check-circle'; $data['row_opacity'] = '0.7'; } } else { // --- KONDISI 2: SESI BELUM ADA (BELUM TAP-IN) --- if ($jamSekarang->isAfter($jamJadwalSelesai)) { // Telat Parah (Sudah lewat jam selesai) $data['status_header'] = 'Terlewat'; $data['badge_class'] = 'badge-soft-danger'; $data['btn_action'] = 'disabled'; $data['btn_text'] = 'Tidak Hadir'; $data['btn_class'] = 'btn-light text-danger'; $data['btn_icon'] = 'fas fa-times-circle'; $data['row_opacity'] = '0.6'; } elseif ($jamSekarang->between($jamJadwalMulai->subMinutes(30), $jamJadwalSelesai)) { // Siap Dimulai (Range Masuk: 30 menit sebelum s/d jam selesai) $isLate = $jamSekarang->gt($jamJadwalMulai); $data['status_header'] = $isLate ? 'Terlambat Masuk' : 'Siap Dimulai'; $data['badge_class'] = $isLate ? 'badge-soft-warning' : 'badge-soft-primary'; $data['btn_action'] = 'start'; $data['btn_text'] = 'Mulai Sesi'; $data['btn_class'] = 'btn-primary-modern'; $data['btn_icon'] = 'fas fa-play'; } else { // Masih lama (Belum waktunya) $data['status_header'] = 'Menunggu'; $data['badge_class'] = 'badge-soft-secondary'; $data['btn_action'] = 'wait'; } } return $data; } } @endphp @extends('adminlte::page') @section('title', 'Dashboard Guru | SmartSchool') @push('css') @endpush @section('content') {{-- HEADER: GREETING --}}
Dashboard Guru

Halo, {{ explode(' ', Auth::user()->name)[0] }}! 👋

Siap menginspirasi siswa hari ini?

{{ \Carbon\Carbon::now()->isoFormat('dddd, D MMMM Y') }}
{{-- SECTION 1: AI ASSISTANT --}}

AI Assistant

Analisis performa mengajar berbasis data real-time

{{-- Loading --}}

Sedang berpikir...

{{-- Result --}} {{-- Error --}}
{{-- SECTION 2: SCHEDULE & FEED --}}
{{-- LEFT COLUMN: CARD JADWAL (CARD JURNAL) --}}
Jadwal Hari Ini
{{ isset($jadwalHariIni) ? count($jadwalHariIni) : 0 }} Sesi
@forelse ($jadwalHariIni ?? [] as $jadwal) {{-- Menggunakan Helper getStatusAbsensi (TANPA SESILOOKUP) --}} @php $status = getStatusAbsensi($jadwal); @endphp
{{-- 1. Kolom Waktu --}}
{{ \Carbon\Carbon::parse($jadwal->jam_mulai)->format('H:i') }}
s/d
{{ \Carbon\Carbon::parse($jadwal->jam_selesai)->format('H:i') }}
{{-- 2. Kolom Info (Mapel, Kelas, Jumlah Siswa) --}}
{{ $jadwal->mataPelajaran->nama_mapel ?? 'Mapel' }}
{{-- Badge Nama Kelas --}} {{ $jadwal->kelas->nama_kelas ?? '-' }} {{-- Badge Jumlah Siswa --}} {{ $jadwal->jumlah_siswa ?? 0 }} Siswa {{-- Badge Status --}} {{ $status['status_header'] }}
{{-- 3. Kolom Aksi (Tombol Dinamis) --}}
{{-- BUTTON UTAMA --}} @if ($status['btn_action'] == 'wait') @elseif ($status['btn_action'] == 'disabled') @elseif ($status['btn_action'] == 'start' || $status['btn_action'] == 'absensi' || $status['btn_action'] == 'report') {{-- Link Menuju Smart Gateway (AccessSession) --}} {{ $status['btn_text'] }} @elseif ($status['btn_action'] == 'detail') {{ $status['btn_text'] }} @endif
@empty
Jadwal Kosong

Tidak ada jadwal mengajar hari ini.

@endforelse
{{-- RIGHT COLUMN: HISTORY FEED --}}
Riwayat Terbaru
@forelse ($laporanTerkirim ?? [] as $laporan)
{{-- Avatar --}}
{{-- Header Feed --}}
Kelas {{ $laporan->kelas->nama_kelas ?? 'Umum' }}
{{ $laporan->jadwal->mataPelajaran->nama_mapel ?? 'Mapel Umum' }}
{{ $laporan->created_at->diffForHumans() }}
{{-- Content Box --}}
Topik Materi

{!! Str::limit(strip_tags($laporan->materi_pembelajaran), 150) !!}

{{-- Footer Stats --}}
{{ $laporan->hadir_count ?? 0 }} Hadir
@php $absen = ($laporan->alpa_count ?? 0) + ($laporan->izin_count ?? 0) + ($laporan->sakit_count ?? 0); @endphp {{ $absen }} Absen
@empty
Belum ada riwayat

Data jurnal mengajar akan muncul di sini.

@endforelse
@endsection @push('js') @endpush