@extends('layouts.app') @section('title', $purchaseOrder->po_number) @php use App\Models\PurchaseOrder as PO; $badge = function (string $s): string { return match ($s) { 'Draft' => 's', 'Pending Approval' => 'a', 'Approved' => 'b', 'Ordered' => 'v', 'Partially Delivered' => 'a', 'Delivered' => 'g', 'Billed' => 'b', 'Paid' => 'g', 'Cancelled' => 'r', default => 's', }; }; @endphp @section('content')
← Procurement

{{ $purchaseOrder->po_number }}

{{ $purchaseOrder->supplier?->company_name }}

Project: {{ $purchaseOrder->project?->name ?? '—' }} · PO date {{ $purchaseOrder->po_date?->format('M j, Y') }} · Expected {{ $purchaseOrder->expected_delivery_date?->format('M j, Y') ?? '—' }}

{{ $purchaseOrder->status }}

PDF @if($purchaseOrder->status === PO::STATUS_PENDING_APPROVAL)
@csrf @method('PUT')
@endif @if($purchaseOrder->status === PO::STATUS_APPROVED)
@csrf @method('PUT')
@endif @if($canReceive) @endif @if(in_array($purchaseOrder->status, [PO::STATUS_DELIVERED, PO::STATUS_PARTIALLY_DELIVERED], true) && ! $hasOpenPayableBill) Create bill @elseif(in_array($purchaseOrder->status, [PO::STATUS_DELIVERED, PO::STATUS_PARTIALLY_DELIVERED], true)) Open bill exists — pay from Bills. @endif @php $anyRcv = $purchaseOrder->items->sum(fn ($i) => (float) $i->quantity_received) > 0.0001; @endphp @if(! in_array($purchaseOrder->status, [PO::STATUS_CANCELLED, PO::STATUS_PAID], true) && ! $anyRcv)
@csrf @method('PUT')
@endif @if($purchaseOrder->status === PO::STATUS_DRAFT)
@csrf @method('PUT')
@endif
@if($errors->any())
{{ $errors->first() }}
@endif @if(session('success'))
{{ session('success') }}
@endif @php $qtyOrdered = $purchaseOrder->items->sum(fn($i) => (float)$i->quantity_ordered); $qtyReceived = $purchaseOrder->items->sum(fn($i) => (float)$i->quantity_received); @endphp

Total

{{ \App\Support\Format::mwk($purchaseOrder->total_amount) }}

Ordered qty

{{ rtrim(rtrim(number_format($qtyOrdered, 3), '0'), '.') }}

Received qty

{{ rtrim(rtrim(number_format($qtyReceived, 3), '0'), '.') }}

Outstanding

{{ rtrim(rtrim(number_format(max(0,$qtyOrdered-$qtyReceived), 3), '0'), '.') }}

Supplier

{{ $purchaseOrder->supplier?->company_name }}

{{ $purchaseOrder->supplier?->phone }} · {{ $purchaseOrder->supplier?->email }}

Delivery: {{ $purchaseOrder->delivery_location ?? '—' }}

{{ $purchaseOrder->terms }}

{{ $purchaseOrder->notes }}

Line items

@forelse($purchaseOrder->items as $it) @empty @endforelse
ItemOrdRcvdUnitCostTotal
{{ $it->description }} @if($it->material)({{ $it->material->name }})@endif {{ $it->quantity_ordered }} {{ $it->quantity_received }} {{ $it->unit_of_measure ?? '—' }} {{ \App\Support\Format::mwk($it->unit_cost) }} {{ \App\Support\Format::mwk($it->total_cost) }}
{{ $purchaseOrder->items_description ?? 'No structured lines (legacy PO).' }}

Subtotal {{ \App\Support\Format::mwk($purchaseOrder->subtotal) }} + VAT {{ \App\Support\Format::mwk($purchaseOrder->vat_amount) }}

Deliveries (GRN)

@forelse($purchaseOrder->goodsReceivedNotes as $g) @empty @endforelse
GRNDateStatus
{{ $g->grn_number }}{{ $g->received_date?->format('Y-m-d') }}{{ $g->status }}
No receipts yet.

Supplier bills

@forelse($purchaseOrder->supplierBills as $b) @empty @endforelse
BillBalanceStatus
{{ $b->bill_number }}{{ \App\Support\Format::mwk($b->balance_due) }}{{ $b->status }}
No bills.
@endsection