@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
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
Description
@if($job->description)
{{ $job->description }}
@else
No description.
@endif
@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
@if($job->candidates->isEmpty())
No candidates yet — run GeoMatch to rank nearby verified professionals.
@else
@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])
@forelse($items as $item)
{{ $label($item) }}
@if($item->status)
{{ \Illuminate\Support\Str::headline($item->status) }}@endif
@empty
None.
@endforelse
@endforeach
@endsection