Student Sessions
@php $courseGroups = []; $sortedCourseStudents = $student->courseStudents->sortByDesc(function($courseStudent) { return $courseStudent->created_at ?? $courseStudent->course->created_at ?? now(); }); foreach ($sortedCourseStudents as $courseStudent) { $course = $courseStudent->course; if ($course && $course->scheduledSessions) { $courseKey = $course->id; if (!isset($courseGroups[$courseKey])) { $courseGroups[$courseKey] = [ 'course' => $course, 'levels' => [], 'hasDelayed' => false ]; } foreach ($course->scheduledSessions as $session) { $levelKey = $course->trackLevel->id ?? 'no-level'; $levelName = $course->trackLevel->name_en ?? $course->academyProduct->name_en; if (!isset($courseGroups[$courseKey]['levels'][$levelKey])) { $courseGroups[$courseKey]['levels'][$levelKey] = [ 'level_name' => $levelName, 'sessions' => [], 'hasDelayed' => false ]; } // Check for delayed feedback $sessionEndDateTime = \Carbon\Carbon::parse($session->session_date . ' ' . $session->end_time); $isOverdue = now()->greaterThan($sessionEndDateTime->copy()->addHours(12)); $isDelayed = false; if (in_array($session->session_number, [2, 4, 8]) && $isOverdue) { if ($session->session_number == 2 && $initialFeedbacks->isEmpty()) { $isDelayed = true; } elseif ($session->session_number == 4 && $midFeedbacks->isEmpty()) { $isDelayed = true; } elseif ($session->session_number == 8 && $finalFeedbacks->isEmpty()) { $isDelayed = true; } } $session->isDelayed = $isDelayed; if ($isDelayed) { $courseGroups[$courseKey]['levels'][$levelKey]['hasDelayed'] = true; $courseGroups[$courseKey]['hasDelayed'] = true; } $courseGroups[$courseKey]['levels'][$levelKey]['sessions'][] = $session; } } } @endphp @if(!empty($courseGroups))
@foreach($courseGroups as $courseId => $courseData)
View
@if(!empty($courseData['levels']))
@foreach($courseData['levels'] as $levelId => $levelData)
@php $sortedSessions = collect($levelData['sessions'])->sortBy('session_number'); @endphp @foreach($sortedSessions as $session) @php $sessionEndDateTime = \Carbon\Carbon::parse($session->session_date . ' ' . $session->end_time); $sessionFinished = now()->greaterThan($sessionEndDateTime); $didNotAttend = $session->urgents->where('student_id', $student->id)->whereIn('message', ["Student Didn't Show-Up", "I Can't Attend",])->isNotEmpty(); @endphp @endforeach
# Session No. Date Time Attendance Attached / Extra File Actions
{{ $session->id }} Session {{ $session->session_number }} {{ \Carbon\Carbon::parse($session->session_date)->format('d-M-Y') }} {{ \Carbon\Carbon::parse($session->start_time)->format('h:i A') }} - {{ \Carbon\Carbon::parse($session->end_time)->format('h:i A') }} @if($sessionFinished) @if($didNotAttend) Absent @else Attended @endif @else Pending @endif
@if($session->attached) @endif @if($session->extra_file) @endif
@php $hasInitial = $initialFeedbacks->isNotEmpty(); $hasMid = $midFeedbacks->isNotEmpty(); $hasFinal = $finalFeedbacks->isNotEmpty(); $isPast = \Carbon\Carbon::parse($session->session_date)->lt(\Carbon\Carbon::today()); $sessions = $courseData['course']->scheduledSessions->sortBy('session_number'); $firstSession = $sessions->where('session_number', 1)->first(); $thirdSession = $sessions->where('session_number', 3)->first(); $firstSessionDate = $firstSession ? \Carbon\Carbon::parse($firstSession->session_date) : null; $thirdSessionDate = $thirdSession ? \Carbon\Carbon::parse($thirdSession->session_date) : null; $today = \Carbon\Carbon::today(); $canAddFeedback = false; if ($staff->jobTitle && $staff->jobTitle->slug === 'teacher' && $isPast) { if ($session->session_number == 2 && !$hasInitial && !$hasMid && !$hasFinal) { $canAddFeedback = true; } elseif ($session->session_number == 4 && $hasInitial && !$hasMid) { $canAddFeedback = true; } elseif ($session->session_number == 8 && $hasMid && !$hasFinal) { $canAddFeedback = true; } } $feedbackType = match ($session->session_number) { 2 => 'initial', 4 => 'mid', 8 => 'final', default => null }; $isLate = now()->greaterThan($session['session_date']); $misplaced = \DB::table('hr_requests')->where('student_id', $student->id)->where('level_id', $session->staffScheduled->track_level_id)->where('request_type_id', hrRequestTypeIdByName('Misplaced students') ?? 0)->exists(); $joinUrl = $session->staffScheduled?->hasPaidStudentInvoice() ? route('courses.sessions.bbb.join', ['course' => $session->staff_scheduled_id, 'session' => $session->id]) : null; @endphp
@if (filled($joinUrl)) Join @else @endif @if ($canAddFeedback) Add Feedback @else @if(in_array($session['session_number'], [2, 4, 8])) @endif @endif @if( in_array($session->session_number, [1, 2]) && !$misplaced && $firstSessionDate && $thirdSessionDate && $today->between($firstSessionDate, $thirdSessionDate) )
@csrf
@endif
@endforeach
@else

No levels found for this course.

@endif
@endforeach
@else

No sessions found for this student.

@endif