@extends('admin.layouts.app') @section('title',$job->reference) @section('page-title',$job->title) @section('page-subtitle',$job->reference.' · '.ucwords(str_replace('_', ' ', $job->status))) @section('content') @php $money = fn ($min, $max) => ($min || $max) ? $job->currency.' '.number_format($min ?? 0, 2).' – '.number_format($max ?? 0, 2) : '—'; @endphp
@include('admin.partials.icon', ['name' => 'edit']) Edit
@csrf @method('DELETE')
@include('admin.partials.icon', ['name' => 'back']) Back

Details

Reference
{{ $job->reference }}
Employer
@if($job->employer) {{ $job->employer->name }} @else — @endif
Category
{{ $job->category?->name ?: '—' }}
Skill
{{ $job->skill?->name ?: '—' }}
Hire mode
{{ $hireModes[$job->hire_mode] ?? $job->hire_mode }}
Work mode
{{ $workModes[$job->work_mode] ?? $job->work_mode }}
Urgency
{{ $urgencies[$job->urgency] ?? $job->urgency }}
Budget
{{ $money($job->budget_min, $job->budget_max) }}
Estimate
{{ $money($job->estimated_cost_min, $job->estimated_cost_max) }}
Required at
{{ $job->required_at?->format('d M Y, H:i') ?: '—' }}
Duration
{{ $job->estimated_duration_minutes ? $job->estimated_duration_minutes.' min' : '—' }}
Assigned
{{ $job->assignedProfessional?->display_name ?: 'Unassigned' }}
Created
{{ $job->created_at?->format('d M Y, H:i') }}

Matching requirements

Radius
{{ $job->preferred_radius_km }} km preferred · {{ $job->max_radius_km }} km max
Min KYC level
Level {{ $job->min_kyc_level }}
Min trust score
{{ $job->min_trust_score }}
Min experience
{{ $job->min_experience_years }} years

Location

@if($job->location)
Label
{{ $job->location->label ?: '—' }}
Approx. area
{{ $job->location->approx_area ?: '—' }}
City / State
{{ collect([$job->location->city, $job->location->state])->filter()->join(', ') ?: '—' }}
Coordinates
{{ $job->location->latitude && $job->location->longitude ? $job->location->latitude.', '.$job->location->longitude : '—' }}
@else

No location set.

@endif

Update status

@csrf @method('PATCH')

Description

@if($job->description)

{{ $job->description }}

@else

No description.

@endif

Contract

@unless($job->contract) @include('admin.partials.icon', ['name' => 'plus']) Draft contract @endunless
@if($job->contract)
Reference
{{ $job->contract->reference }}
Total
{{ $job->contract->currency }} {{ number_format($job->contract->total_amount, 2) }}
Milestones
{{ $job->contract->milestones->count() }}
Status
{{ \Illuminate\Support\Str::headline($job->contract->status) }}
@else

No contract yet.

@endif

GeoMatch candidates

@csrf
@csrf
@if($job->candidates->isEmpty())

No candidates yet — run GeoMatch to rank nearby verified professionals.

@else
@foreach($job->candidates->sortByDesc('match_score') as $c) @endforeach
ProfessionalScoreDistanceWaveStatus
@if($c->professional){{ $c->professional->display_name }}@else — @endif {{ $c->match_score }} {{ $c->distance_km !== null ? $c->distance_km.' km' : '—' }} {{ $c->wave ?? '—' }} {{ \Illuminate\Support\Str::headline($c->status) }} @include('admin.partials.icon', ['name' => 'eye']) View
@endif
@php $related = [ ['Bids', $job->bids, 'job-bids', fn ($b) => ($b->professional?->display_name ?? '—').' · '.($b->currency ?? $job->currency).' '.number_format($b->amount ?? 0, 2)], ['Escrow', $job->escrows, 'escrows', fn ($e) => $e->reference.' · '.($e->currency ?? 'NGN').' '.number_format($e->amount, 2)], ['Disputes', $job->disputes, 'disputes', fn ($d) => $d->reference.' · '.\Illuminate\Support\Str::headline($d->reason)], ['Change orders', $job->changeOrders, 'change-orders', fn ($c) => \Illuminate\Support\Str::limit($c->reason ?? 'Change order', 40).' · +'.number_format($c->additional_amount ?? 0, 2)], ['Evidence', $job->evidence, 'job-evidence', fn ($e) => \Illuminate\Support\Str::headline($e->type ?? 'evidence').' · '.$e->created_at?->format('d M Y')], ['Material requests', $job->materialRequests, 'material-requests', fn ($m) => $m->reference.' · '.number_format($m->amount, 2)], ['Warranty claims', $job->warrantyClaims, 'warranty-claims', fn ($w) => $w->reference], ]; @endphp
@foreach($related as [$title, $items, $slug, $label])

{{ $title }}

@if(Route::has('admin.'.$slug.'.create')) @include('admin.partials.icon', ['name' => 'plus']) Add @endif
@forelse($items as $item)
{{ $label($item) }} @if($item->status){{ \Illuminate\Support\Str::headline($item->status) }}@endif
@empty

None.

@endforelse
@endforeach
@endsection