Export
Only paid student courses are shown. Consumed value is calculated from the paid amount divided across course sessions, then multiplied by sessions whose scheduled time has already passed.
@foreach ($statCards as $card)
{{ $card['label'] }}
{{ $card['value'] }}
@endforeach
@forelse ($rows as $row)
@php
$collapseId = 'student-courses-' . md5($row['student_key']);
$hasCoursesCollapse = $row['course_count'] > 1;
$singleCourse = $row['courses']->first();
$studentInitials = collect(explode(' ', trim($row['student_name'])))
->filter()
->take(2)
->map(fn ($part) => strtoupper(substr($part, 0, 1)))
->implode('') ?: 'S';
@endphp
@if ($hasCoursesCollapse)
@endif
{{ $studentInitials }}
{{ $row['student_name'] }}
{{ $row['student_ref'] ?: 'No reference' }}
@if ($hasCoursesCollapse)
- {{ $row['course_count'] }} courses
@endif
@if ($hasCoursesCollapse)
Course total
@else
{{ $singleCourse['course_name'] }}
{{ $singleCourse['invoice_number'] }}
@endif
{{ $row['sessions_done'] }}/{{ $row['sessions_total'] }}
{{ $money($row['contract']) }}
{{ $money($row['paid']) }}
{{ $money($row['consumed']) }}
{{ $money($row['unearned']) }}
{{ $percent($row['progress']) }}
@if ($hasCoursesCollapse)
@foreach ($row['courses'] as $course)
{{ $course['course_name'] }}
{{ $course['invoice_number'] }}
{{ $course['sessions_done'] }}/{{ $course['sessions_total'] }}
{{ $money($course['contract']) }}
{{ $money($course['paid']) }}
{{ $money($course['consumed']) }}
{{ $money($course['unearned']) }}
{{ $percent($course['progress']) }}
@endforeach
@endif
@empty
No matching student balances found.
Try changing the search keyword or clearing filters.
@endforelse
Total
{{ $totals['sessions_done'] }}/{{ $totals['sessions_total'] }}
{{ $money($totals['contract']) }}
{{ $money($totals['paid']) }}
{{ $money($totals['consumed']) }}
{{ $money($totals['unearned']) }}
{{ $percent($totals['progress']) }}