@if (session()->has('message'))
{{ session('message') }}
@endif
{{ __('Application') }} #{{ $application->id }}
{{ $application->jobPosting->title }} @if($application->jobPosting->warehouse) · {{ $application->jobPosting->warehouse->name }} @endif · {{ __('Applied') }} {{ $application->created_at?->format('M j, Y') }}
{{ \App\Models\RecruitmentJobApplication::statusLabel($application->status) }}
@if($cvUrl) {{ __('Download CV') }} @endif
{{-- Pipeline stepper --}}
@php $mainSteps = ['applied', 'shortlisted', 'interview', 'offered', 'hired']; $currentIdx = array_search($application->status, $mainSteps, true); @endphp
@foreach($mainSteps as $idx => $stepKey) @php $stepLabel = \App\Models\RecruitmentJobApplication::statusLabel($stepKey); $isCurrent = $application->status === $stepKey; $isPast = $currentIdx !== false && $idx < $currentIdx; @endphp
@if($isPast)@else{{ $idx + 1 }}@endif
{{ $stepLabel }}
@if(!$loop->last)
@endif @endforeach
@if($application->status === 'rejected')
{{ __('Application rejected') }} @if($application->rejection_reason) — {{ \App\Models\RecruitmentJobApplication::rejectionReasonLabel($application->rejection_reason) }} @endif
@endif
@include('recruitment.partials.letter-actions', ['application' => $application])
{{ __('Candidate') }}

{{ $application->candidate->name }}

{{ $application->candidate->email }}

{{ $application->candidate->phone ?? '—' }}

@if($application->cover_letter)

{{ __('Cover letter') }}

{{ $application->cover_letter }}
@endif @if($application->answers->isNotEmpty())

{{ __('Screening answers') }}

@foreach($application->answers as $ans)
{{ $ans->question?->label ?? '—' }}: {{ $ans->answer }}
@endforeach @endif @if($application->candidate->staff_id)

Linked staff ID: {{ $application->candidate->staff_id }}

@endif
{{ __('Pipeline') }}
@can('Recruitment-edit')
@error('status') {{ $message }} @enderror
@if($status === 'rejected')
@error('rejection_reason') {{ $message }} @enderror
@endif
@else

{{ \App\Models\RecruitmentJobApplication::statusLabel($application->status) }}

@endcan
@can('Recruitment-edit')
Offer
Interviews

@foreach($application->interviews as $int)
{{ $int->scheduled_at->format('M j, Y H:i') }} @if($int->interviewer) · {{ $int->interviewer->name }} @endif
@if(!$int->completed_at) @else Completed @endif
@if($int->location_or_link)
{{ $int->location_or_link }}
@endif @foreach($int->evaluations as $ev)
{{ $ev->evaluator?->name ?? __('Evaluator') }}: {{ __('Score') }} {{ $ev->weighted_score ?? $ev->overall_rating }}/5 — {{ $ev->recommendation }} @if(is_array($ev->criteria_scores))
@foreach($ev->criteria_scores as $key => $score) {{ ucfirst(str_replace('_', ' ', $key)) }}: {{ $score }}/5 @endforeach
@endif
@endforeach @php $canEval = auth()->user()->can('Recruitment-edit') || (auth()->user()->can('Interview-evaluate') && (int)$int->interviewer_user_id === (int)auth()->id()); @endphp @if($canEval) Open evaluation form @endif
@endforeach
@endcan @if($application->status === \App\Models\RecruitmentJobApplication::STATUS_HIRED && $application->candidate->staff_id)
Onboarding checklist
@forelse($onboardingTasks as $task)
$task->is_completed])>{{ $task->task_name }}
@empty

No onboarding tasks.

@endforelse
@can('Recruitment-edit')
Employee lifecycle (HR)
@endcan @endif @if($application->status === \App\Models\RecruitmentJobApplication::STATUS_OFFERED) @can('Recruitment-edit')
Hire — draft to live

Staff SID is generated at hire time using joining year + branch (warehouse) id + sequence (e.g. 2026-04-001).

@endcan @endif
{{ __('HR notes & activity') }}
@can('Recruitment-edit')
@error('new_note') {{ $message }} @enderror
@endcan
    @forelse($application->notes as $note)
  • {{ $note->author?->name ?? __('System') }} · {{ $note->created_at?->format('M j, Y H:i') }}
    {{ $note->body }}
  • @empty
  • {{ __('No team notes yet.') }}
  • @endforelse
{{ __('Lifecycle timeline') }}
    @forelse($application->lifecycleEvents as $ev)
  • {{ $ev->created_at->format('Y-m-d H:i') }} {{ $ev->to_phase }} @if($ev->from_phase)from {{ $ev->from_phase }}@endif @if($ev->actor)· {{ $ev->actor->name }}@endif
  • @empty
  • No events yet.
  • @endforelse