@extends('layouts.admin') @section('title', setting('school_name', 'ShulePoint') . ' | ' . $learner->first_name . ' ' . $learner->last_name) @section('page-title', 'Learner Profile') @section('content') @php $initials = strtoupper(substr($learner->first_name ?? '?', 0, 1) . substr($learner->last_name ?? '', 0, 1)); $hue = ($learner->id * 47) % 360; $pill = $learner->status === 'active' ? 'ok' : ($learner->status === 'alumni' ? 'muted' : 'warn'); $canFinance = in_array(auth()->user()->role ?? '', ['admin', 'bursar'], true); $canExams = in_array(auth()->user()->role ?? '', ['admin', 'teacher'], true); @endphp {{-- Profile header card --}}
@if($learner->photo) {{ $learner->first_name }} {{ $learner->last_name }} @else {{ $initials }} @endif

{{ $learner->first_name }} {{ $learner->last_name }}

{{ $learner->admission_no }} @if($learner->schoolClass){{ $learner->schoolClass->name }}@endif {{ ucfirst($learner->status) }}
{{ $learner->gradeLevel->name ?? 'No grade' }}@if($learner->house) · {{ $learner->house }}@endif
@if(in_array(auth()->user()->role ?? '', ['admin', 'secretary'])) Edit @endif Back
{{-- Detail grid --}}

Learner details

@if(($siblings ?? collect())->count()) @endif
UPI{{ $learner->upi ?? '—' }}
NEMIS{{ $learner->nemis ?? '—' }}
Gender{{ $learner->gender ?? '—' }}
Date of birth{{ $learner->dob?->format('Y-m-d') ?? '—' }}
Grade level{{ $learner->gradeLevel->name ?? '—' }}
Class@if($learner->schoolClass){{ $learner->schoolClass->name }}@else — @endif
House{{ $learner->house ?? '—' }}
Transport@if($learner->transportRoute){{ $learner->transportRoute->name }} KES {{ number_format($learner->transportRoute->price, 0) }}{{ $learner->transportRoute->term ? ' · '.$learner->transportRoute->term : '' }}@else — @endif
Guardian{{ $learner->guardian_name ?? '—' }}
Guardian phone{{ $learner->guardian_phone ? \App\Support\PhoneNumbers::national($learner->guardian_phone) : '—' }}
Siblings (same guardian phone) @foreach($siblings as $sib) {{ $sib->first_name }} {{ $sib->last_name }} · {{ $sib->admission_no }} @endforeach
Guardian email{{ $learner->guardian_email ?? '—' }}
Address{{ $learner->address ?? '—' }}
Admission date{{ $learner->admission_date?->format('Y-m-d') ?? '—' }}
Record updated{{ $learner->updated_at?->format('Y-m-d H:i') ?? '—' }}
{{-- Fees (live) --}}

Fees Billed KES {{ number_format($feeTotals['invoiced'], 0) }} · Paid KES {{ number_format($feeTotals['paid'], 0) }} · Bal KES {{ number_format($feeTotals['balance'], 0) }}

@if($canFinance)Invoices@endif
@forelse($invoices as $inv) @empty @endforelse
InvoiceTotalPaidBalanceStatus
@if($canFinance){{ $inv->invoice_no }}@else{{ $inv->invoice_no }}@endif KES {{ number_format($inv->total, 0) }} KES {{ number_format($inv->paid, 0) }} KES {{ number_format($inv->balance, 0) }} {{ ucfirst($inv->status) }}
No invoices yet for this learner.
{{-- Recent payments (live) --}}

Recent payments

@forelse($recentPayments as $pay) @empty @endforelse
ReceiptAmountMethodDate
@if($canFinance)#{{ $pay->id }}@else#{{ $pay->id }}@endif KES {{ number_format($pay->amount, 0) }} {{ $pay->method }} {{ $pay->paid_at }}
No payments recorded yet.
{{-- Attendance (live) --}}

Attendance @foreach(['present' => 'ok', 'absent' => 'bad', 'late' => 'warn', 'excused' => 'info'] as $st => $pill) {{ ucfirst($st) }}: {{ $attendanceSummary[$st] ?? 0 }} @endforeach

@forelse($recentAttendance as $a) @empty @endforelse
DateClassStatus
{{ $a->date instanceof \Carbon\Carbon ? $a->date->format('Y-m-d') : $a->date }} @if($a->schoolClass){{ $a->schoolClass->name }}@else — @endif {{ ucfirst($a->status) }}
No attendance marked yet.
{{-- Exams (live) --}}

Exams

@if($canExams)Exams@endif
@forelse($examResults as $examId => $rows) @php $exam = $rows->first()->exam; $avg = $rows->avg('score'); $lvl = $avg !== null ? \App\Models\ExamResult::levelForScore((float) $avg) : null; @endphp @empty @endforelse
ExamAverageLevel
{{ $exam->name ?? 'Exam #'.$examId }} {{ $avg !== null ? number_format($avg, 1).'%' : '–' }} @if($lvl){{ $lvl }}@else—@endif @if($canExams)Card@endif
No exam results yet for this learner.
@if(in_array(auth()->user()->role ?? '', ['admin', 'secretary'])) {{-- Promote card (controller passes only $learner/$feesSummary/$examsSummary: use ID inputs) --}}

Promote learner

@csrf
@error('grade_level_id'){{ $message }}@enderror @error('school_class_id'){{ $message }}@enderror Confirm grade/class IDs from the Classes & CBE page.
{{-- Quick actions --}}

Quick actions

@if(in_array(auth()->user()->role ?? '', ['admin', 'secretary'])) Edit @endif Register @if(in_array(auth()->user()->role ?? '', ['admin', 'secretary'])) @endif
@endif
@if(in_array(auth()->user()->role ?? '', ['admin', 'secretary'])) {{-- Delete confirmation --}} @endif @endsection