@section('page-title', 'Client Profile')
Back to Clients List
{{ strtoupper(substr($client->name, 0, 1)) }}

{{ $client->name }}

{{ $client->company_name ?? 'Individual Client' }}

@if ($client->status === 'active') Active @elseif ($client->status === 'inactive') Inactive @else Blacklisted @endif

Contact Details
  • {{ $client->email }}
  • @if($client->phone)
  • {{ $client->phone }}
  • @endif @if($client->whatsapp)
  • {{ $client->whatsapp }}
  • @endif @if($client->tax_number)
  • VRN / Tax No.: {{ $client->tax_number }}
  • @endif
@if($client->address || $client->city)
Billing Address

@if($client->address) {{ $client->address }}
@endif @if($client->city) {{ $client->city }}@endif @if($client->country) , {{ $client->country }}@endif

@endif
Billing Preferences
Default Billing Type: @if($client->service_type === 'both') Domain & Hosting @elseif($client->service_type === 'domain') Domain Only @else Hosting Only @endif
Contract Amount: {{ number_format($client->billing_amount, 2) }} {{ $client->currency }}
@if ($client->notes)
Internal Notes
{{ $client->notes }}
@endif
Edit Profile @if($client->user)
@csrf
@endif
@if(session('success')) @endif
Domains & Services

Domain name is the unique key. Each domain can have Domain Registration + Web Hosting services.

@if($domainServices->isEmpty())

No domains or hosting linked to this client yet.

@else
{{-- Row 1: Section headings --}} {{-- Row 2: Sub-headings --}} @foreach($domainServices as $svc) @php $reg = $svc['registration']; // Domain model or null $hosting = $svc['hosting']; // HostingAccount model or null @endphp {{-- ── DOMAIN NAME ── --}} {{-- ── DOMAIN REGISTRATION ── --}} @if($reg) @else @endif {{-- ── WEB HOSTING ── --}} @if($hosting) @else @endif {{-- ── ACTIONS ── --}} @endforeach
Domain Name Domain Registration Service Web Hosting Service Actions
Expiry Date Renewal Fee Status Expiry Date Package / Fee Status
{{ $svc['domain_name'] }}
@if($reg && $reg->notes)
{{ Str::limit($reg->notes, 45) }}
@endif
@if($reg->expiry_date) @php $regExpired = $reg->expiry_date->isPast(); $regSoon = !$regExpired && $reg->expiry_date->diffInDays(now()) < 30; @endphp {{ $reg->expiry_date->format('d M Y') }} @if($regExpired) Expired @elseif($regSoon) Due Soon @endif @else — @endif {{ number_format($reg->renewal_amount, 2) }} {{ $reg->currency }} @if($reg->status === 'active') Active @elseif($reg->status === 'inactive') Inactive @elseif($reg->status === 'expired') Expired @else {{ ucfirst($reg->status) }} @endif Register Domain @if($hosting->expiry_date) @php $hExpired = $hosting->expiry_date->isPast(); $hSoon = !$hExpired && $hosting->expiry_date->diffInDays(now()) < 30; @endphp {{ $hosting->expiry_date->format('d M Y') }} @if($hExpired) Expired @elseif($hSoon) Due Soon @endif @else — @endif @if($hosting->hosting_package) {{ $hosting->hosting_package }}
@endif {{ number_format($hosting->renewal_amount, 2) }} {{ $hosting->currency }}
@if($hosting->status === 'active') Active @elseif($hosting->status === 'suspended') Suspended @elseif($hosting->status === 'expired') Expired @else {{ ucfirst($hosting->status) }} @endif No Add Hosting
{{-- Summary counts --}}
{{ $client->domains->count() }} domain registration(s) {{ $client->hostingAccounts->count() }} hosting account(s) @php $expiredCount = $client->domains->where('status','expired')->count() + $client->hostingAccounts->where('status','expired')->count(); @endphp @if($expiredCount > 0) {{ $expiredCount }} expired @endif
@endif
Invoice History
Create Invoice
@if($client->invoices->isEmpty())

No invoices generated for this client yet.

@else
@foreach($client->invoices->sortByDesc('invoice_date') as $inv) @endforeach
Invoice No. Type Date Due Total Paid Status Actions
{{ $inv->invoice_number }} @php $type = $inv->invoice_type ?? 'invoice'; @endphp {{ ucfirst(str_replace('_', ' ', $type)) }} {{ $inv->invoice_date->format('d M Y') }} {{ $inv->due_date->format('d M Y') }} {{ number_format($inv->total, 2) }} {{ $inv->currency }} {{ number_format($inv->payments->sum('amount'), 2) }} @if($inv->status === 'paid') Paid @elseif($inv->status === 'pending') Pending @else Cancelled @endif
@endif
Client Activity Timeline
@if($timelineEvents->isEmpty())

No timeline events recorded.

@else
@foreach($timelineEvents as $event)
{{ $event['title'] }} {{ \Carbon\Carbon::parse($event['date'])->diffForHumans() }}

{{ $event['description'] }}

{{ \Carbon\Carbon::parse($event['date'])->format('d M Y, H:i') }}
@endforeach
@endif
Client Documents
@php $docs = $client->custom_fields['documents'] ?? []; @endphp @if(empty($docs))

No contracts or identity documents uploaded yet.

@else
@foreach($docs as $doc) @endforeach
Document Name Uploaded At Actions
{{ $doc['name'] }} {{ \Carbon\Carbon::parse($doc['uploaded_at'])->format('d M Y, H:i') }}
@csrf @method('DELETE')
@endif
Upload Contract / ID
@csrf
Max size: 10MB
Categorization & Tags
@csrf @method('PATCH') {{-- Pass existing fields --}}