{{ __('Attendance session') }} — {{ $lecture->title }} @php $state = $session->currentState(); $stateVariant = match ($state) { 'active', 'reopened' => 'success', 'closed', 'manually_closed' => 'danger', default => 'neutral', }; $rows = [ __('Actual start') => $session->started_at?->format('Y-m-d H:i:s') ?? __('Not started'), __('On-time deadline') => $session->on_time_deadline_at?->format('Y-m-d H:i:s') ?? __('Calculated when started'), __('On-time window') => $session->attendance_window_minutes.' '.__('minutes (zero disables present registration)'), __('Late policy') => __($session->late_policy), __('Late deadline') => $session->lateDeadline()?->format('Y-m-d H:i:s') ?? __('Disabled or not started'), __('Attendance closing time') => $session->closingTime()->format('Y-m-d H:i:s'), __('Closed at') => $session->closed_at?->format('Y-m-d H:i:s') ?? '—', __('Last manually closed at') => $session->manually_closed_at?->format('Y-m-d H:i:s') ?? '—', __('Last reopened at') => $session->reopened_at?->format('Y-m-d H:i:s') ?? '—', ]; @endphp
@if (session('status'))
{{ session('status') }}
@endif @if ($errors->any()) @endif

{{ __('Current attendance status') }}

{{ __(str_replace('_', ' ', ucfirst($state))) }}

{{ __('All dates and deadlines use the server timezone:') }} {{ config('app.timezone') }}

@foreach ($rows as $label => $value)
{{ $label }}
{{ $value }}
@endforeach

{{ __('QR expiration is independent. Refreshing a QR never resets these deadlines. Changes affect future attempts only.') }}

@if ($session->state === \App\Models\AttendanceSession::SCHEDULED)
@csrf

{{ __('Save your settings below before starting. The start time comes from the server.') }}

@elseif ($session->isRunning())
@csrf
{{ __('Display QR') }} @elseif ($session->started_at && $session->closingTime()->gt(now()))
@csrf
@else

{{ __('Extend the closing time into the future, save, then explicitly reopen attendance.') }}

@endif
@csrf @method('PATCH')

{{ __('Leave empty to allow late attendance until closing. Zero allows no time beyond the on-time deadline. Closing always takes precedence.') }}

{{ __('Leave empty to use the scheduled lecture end. Once started, the resolved closing time is saved independently of later lecture schedule edits.') }}

@if ($session->initial_settings)
{{ __('Initial settings snapshot (never changed by later edits)') }}
{{ json_encode($session->initial_settings, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) }}
@endif
@forelse ($audits as $audit) @empty @endforelse
{{ __('Changed at') }} {{ __('Changed by') }} {{ __('Setting') }} {{ __('Old value') }} {{ __('New value') }}
{{ $audit->changed_at->format('Y-m-d H:i:s') }} {{ $audit->changedBy?->name ?? __('System / deleted user') }} {{ $audit->setting_name }} {{ json_encode($audit->old_value, JSON_UNESCAPED_SLASHES) }} {{ json_encode($audit->new_value, JSON_UNESCAPED_SLASHES) }}
@if ($audits->hasPages())
{{ $audits->links() }}
@endif