@extends('layouts.app') @section('title', $client->name) @section('content') @php $hasOutstanding = !empty($outstandingByCurrency); @endphp
{{-- Flash messages --}} @if (session('success'))
{{ session('success') }}
@endif @if (session('error'))
{{ session('error') }}
@endif {{-- Delete error --}} @if ($errors->has('delete'))
{{ $errors->first('delete') }}
@endif {{-- Page header --}}

{{ $client->name }}

{{ $client->email }}

@can('clients.manage') Edit
@csrf @method('DELETE')
@endcan @can('proposals.create') New Proposal @endcan
{{-- Stat cards --}}

Proposals

{{ $totalProposals }}

Total Billed

@if (empty($totalBilledByCurrency))

@else @foreach ($totalBilledByCurrency as $cur => $amount)

{{ $currencySymbols[$cur] ?? $cur }} {{ number_format($amount, 2) }}

@endforeach @endif

Total Paid

@if (empty($totalPaidByCurrency))

@else @foreach ($totalPaidByCurrency as $cur => $amount)

{{ $currencySymbols[$cur] ?? $cur }} {{ number_format($amount, 2) }}

@endforeach @endif

Outstanding

@if (!$hasOutstanding)

Settled

@else @foreach ($outstandingByCurrency as $cur => $amount)

{{ $currencySymbols[$cur] ?? $cur }} {{ number_format($amount, 2) }}

@endforeach @endif
{{-- Three-column grid --}}
{{-- LEFT: col-span-2 --}}
{{-- Recent Proposals card --}}

Recent Proposals

View all →
@if ($recentProposals->isEmpty())

No proposals yet

@else @foreach ($recentProposals as $proposal) @php $propCur = $proposal->currency instanceof \App\Enums\Currency ? $proposal->currency->value : $proposal->currency; $propSv = $proposal->status instanceof \App\Enums\ProposalStatus ? $proposal->status->value : $proposal->status; $propBadge = match($propSv) { 'draft' => 'bg-slate-100 text-slate-600', 'sent' => 'bg-sky-50 text-sky-700', 'approved' => 'bg-emerald-50 text-emerald-700', 'rejected' => 'bg-red-50 text-red-600', 'expired' => 'bg-amber-50 text-amber-600', default => 'bg-slate-100 text-slate-600', }; @endphp @endforeach
Title / Project Amount Status Valid Until
{{ $proposal->title ?? $proposal->project->title ?? '—' }} {{ $currencySymbols[$propCur] ?? $propCur }} {{ number_format($proposal->amount, 2) }} {{ ucfirst($propSv) }} {{ $proposal->valid_until->format('d M Y') }} View →
@endif
{{-- Recent Invoices card --}}

Recent Invoices

View all →
@if ($recentInvoices->isEmpty())

No invoices yet

@else @foreach ($recentInvoices as $invoice) @php $invSv = $invoice->status instanceof \App\Enums\InvoiceStatus ? $invoice->status->value : $invoice->status; $invSymbol = $invoice->currency instanceof \App\Enums\Currency ? $invoice->currency->symbol() : (string) $invoice->currency; $invBadge = match($invSv) { 'unpaid' => 'bg-amber-50 text-amber-700', 'partial' => 'bg-sky-50 text-sky-700', 'paid' => 'bg-emerald-50 text-emerald-700', default => 'bg-slate-100 text-slate-600', }; $invLabel = match($invSv) { 'unpaid' => 'Unpaid', 'partial' => 'Partial', 'paid' => 'Paid', default => ucfirst($invSv), }; $invOverdue = $invoice->due_date->isPast() && $invSv === 'unpaid'; @endphp @endforeach
Invoice # Amount Status Due Date
{{ $invoice->invoice_number }} {{ $invSymbol }} {{ number_format($invoice->amount, 2) }} {{ $invLabel }} {{ $invoice->due_date->format('d M Y') }} View →
@endif
{{-- RIGHT: col-span-1 --}}
{{-- Contact Information card --}}

Contact Information

Name

{{ $client->name }}

Phone

{{ $client->phone ?? '—' }}

Address

@if ($client->address)

{{ $client->address }}

@else

@endif
@if ($client->notes)

Internal Notes

{{ $client->notes }}

@endif
{{-- Projects card --}}

Projects

@if ($client->projects->isEmpty())

No projects yet

@else
@foreach ($client->projects as $project) @php $projectSv = $project->status instanceof \App\Enums\ProjectStatus ? $project->status->value : $project->status; $projectBadge = match($projectSv) { 'active' => 'bg-emerald-50 text-emerald-700', 'completed' => 'bg-sky-50 text-sky-700', 'on_hold' => 'bg-amber-50 text-amber-600', 'cancelled' => 'bg-red-50 text-red-600', default => 'bg-slate-100 text-slate-600', }; @endphp

{{ $project->title }}

{{ ucfirst(str_replace('_', ' ', $projectSv)) }}
@endforeach
@endif
{{-- Activity card --}}

Activity

Member since

{{ $client->created_at->format('d M Y') }}

Proposals

{{ $totalProposals }} {{ $totalProposals !== 1 ? 'proposals' : 'proposal' }}

Invoices

{{ $totalInvoices }} {{ $totalInvoices !== 1 ? 'invoices' : 'invoice' }}

Last proposal

{{ $client->proposals->sortByDesc('created_at')->first()?->created_at?->diffForHumans() ?? '—' }}

Last payment

{{ $client->invoices->flatMap->payments->sortByDesc('paid_at')->first()?->paid_at?->diffForHumans() ?? '—' }}

@endsection