@extends('layouts.admin') @section('title','Purchase orders') @section('content') @php $columns = [ 'po' => 'PO', 'supplier' => 'Supplier', 'location' => 'Location', 'units' => 'Units', 'value' => 'Value', 'progress' => 'Progress', 'status' => 'Status', 'created' => 'Created', 'actions' => 'Actions', ]; $label = fn (string $v) => ucwords(str_replace(['_', '-'], ' ', $v)); $statusTone = fn (string $s) => match ($s) { 'draft' => 'muted', 'ordered' => 'info', 'partial' => 'warning', 'received' => 'success', 'canceled' => 'danger', default => 'muted', }; $activeChips = collect([ 'status' => request('status'), 'supplier_id' => request('supplier_id') ? ($suppliers->firstWhere('id', (int) request('supplier_id'))?->name) : null, 'location_id' => request('location_id') ? ($locations->firstWhere('id', (int) request('location_id'))?->code) : null, 'sort' => request('sort') && request('sort') !== 'newest' ? request('sort') : null, ])->filter(); @endphp Inventory Export CSV New PO
Open pipeline {{ number_format($stats['draft'] + $stats['ordered'] + $stats['partial']) }} AUD {{ number_format($stats['open_value_cents'] / 100, 0) }} open value Draft {{ number_format($stats['draft']) }} Ready to order Ordered {{ number_format($stats['ordered']) }} {{ number_format($stats['incoming_units']) }} units incoming Partial {{ number_format($stats['partial']) }} Awaiting remainder Received {{ number_format($stats['received']) }} Closed into stock Overdue {{ number_format($stats['overdue'] ?? 0) }} Past expected delivery
@foreach([ ['label' => 'All', 'params' => []], ['label' => 'Open', 'params' => ['status' => 'open']], ['label' => 'Draft', 'params' => ['status' => 'draft']], ['label' => 'Ordered', 'params' => ['status' => 'ordered']], ['label' => 'Partial', 'params' => ['status' => 'partial']], ['label' => 'Received', 'params' => ['status' => 'received']], ['label' => 'Overdue', 'params' => ['status' => 'overdue']], ['label' => 'Canceled', 'params' => ['status' => 'canceled']], ] as $chip) @php $isActive = empty($chip['params']) ? ! request('status') : request('status') === ($chip['params']['status'] ?? null); @endphp {{ $chip['label'] }} @endforeach
@if($activeChips->isNotEmpty())
Active @foreach($activeChips as $key => $value) {{ $label($key) }}: {{ $label((string) $value) }} @endforeach Clear all
@endif
Cancel selected draft purchase orders. PO Supplier Location Units Value Progress Status Created @forelse($orders as $order) @php $ordered = (int) $order->units_ordered; $received = (int) $order->units_received; $pct = $ordered > 0 ? (int) round(($received / $ordered) * 100) : 0; @endphp
{{ $order->number }}
{{ $order->lines_count }} line{{ $order->lines_count === 1 ? '' : 's' }} · {{ $order->receipts_count }} receipt{{ $order->receipts_count === 1 ? '' : 's' }}
{{ $order->supplier_name ?? $order->supplier?->name ?? '—' }}
@if($order->supplier_reference)
Ref {{ $order->supplier_reference }}
@elseif($order->supplier?->email)
{{ $order->supplier->email }}
@endif
{{ $order->location?->code ?? '—' }}
@if($order->expected_at) ETA {{ $order->expected_at->format('M j') }} @if($order->isOverdue()) · overdue @endif @else {{ $order->location?->name }} @endif
{{ number_format($received) }} / {{ number_format($ordered) }}
received
{{ $order->money() }}
{{ $pct }}%
{{ $label($order->status) }}
{{ $order->created_at?->diffForHumans() }}
{{ $order->createdBy?->name ?? 'System' }}
@if($order->canOrder())
@csrf
@endif @if($order->canReceive()) Receive @endif Open
@empty No purchase orders match these filters. @endforelse
{{ $orders->links() }}
@endsection