@extends('layouts.finance') @section('title', 'Collectible Detail') @section('subtitle', 'Receivables and pending collections tracker') @section('content') @php $displayCurrency = 'PKR'; $fmt = fn($usd) => $metrics->moneyIn($usd, 'USD', $displayCurrency); $statusPills = [ 'open' => 'pill-blue', 'partial' => 'pill-cyan', 'overdue' => 'pill-rose', 'collected' => 'pill-green', 'written_off' => 'pill-amber', 'cancelled' => '', ]; $statusText = [ 'open' => 'receivable', 'partial' => 'partial receivable', 'overdue' => 'overdue', 'collected' => 'received', 'written_off' => 'written off', 'cancelled' => 'cancelled', ]; $statusLabels = $byStatus->keys()->map(fn ($status) => ucfirst($statusText[$status] ?? str_replace('_', ' ', $status)))->values()->toArray(); $statusValues = $byStatus->values()->toArray(); $palette = ['#0ea5e9', '#06b6d4', '#ef4444', '#10b981', '#f59e0b', '#64748b']; $typeLabels = $byType->keys()->map(fn ($type) => ucfirst(str_replace('_', ' ', $type)))->values()->toArray(); $typeValues = $byType->values()->toArray(); $businessLabels = $byBusiness->keys()->values()->toArray(); $businessValues = $byBusiness->values()->toArray(); $personLabels = $byPerson->keys()->values()->toArray(); $personValues = $byPerson->values()->toArray(); $dateFilter = $dateFilter ?? ['active' => false, 'from' => null, 'to' => null, 'label' => null]; $dashboardRouteParams = ($dateFilter['active'] ?? false) ? ['from' => $dateFilter['from'], 'to' => $dateFilter['to']] : []; @endphp
Back to Dashboard
@include('dashboard.cards._date-filter', ['dateFilter' => $dateFilter, 'filterRoute' => 'dashboard.cards.collectible'])
Total Collectible
{{ $fmt($totalUsd) }}
Open receivables
Overdue
{{ $fmt($byStatus['overdue'] ?? 0) }}
Past due date
Due Soon
{{ number_format($dueSoonCount) }}
Next 7 days
Collected Mo.
{{ $fmt($collectedThisMonthUsd) }}
Closed this month

Collectible Records

Add manual receivables when they are not created from a transaction.

any()) hidden @endif role="dialog" aria-modal="true" aria-labelledby="collectibleFormTitle">

Add Collectible

Enter the receivable details.

@csrf
@if($errors->any())
{{ $errors->first() }}
@endif

By Status

USD eq.
@if(count($statusLabels) > 0)
@else
No open collectibles.
@endif

Open Collectibles

{{ $collectibles->count() }} open
@forelse($collectibles as $item) @php $status = ($item->status !== 'collected' && $item->due_date && $item->due_date->lt(now()->startOfDay())) ? 'overdue' : $item->status; @endphp @empty @endforelse
Name Business Type Reason Description Due Status Outstanding
{{ $item->party_name }} {{ $item->business_name ?: '-' }} {{ str_replace('_', ' ', ucfirst($item->source)) }} {{ $item->reason ?: '-' }} {{ $item->description ?: '-' }} {{ $item->due_date?->format('d M Y') ?? '-' }} {{ $statusText[$status] ?? str_replace('_', ' ', $status) }} {{ $metrics->money($item->outstandingAmount(), $item->currency) }}
No open collectibles.

Personal vs Business

USD eq.
@if(count($typeLabels) > 0)
@else
No open collectibles.
@endif

By Person (Receivable)

USD eq.
@if(count($personLabels) > 0)
@else
No open collectibles.
@endif

Recent Collectible Records

{{ $recentCollectibles->count() }} records
@forelse($recentCollectibles as $item) @php $status = ($item->status !== 'collected' && $item->due_date && $item->due_date->lt(now()->startOfDay())) ? 'overdue' : $item->status; $receipts = $collectibleReceipts[$item->id] ?? collect(); @endphp @empty @endforelse
Name Business Type Reason Description Reference Status Currency Original Collected Outstanding Actions
{{ $item->party_name }} {{ $item->business_name ?: '-' }} {{ str_replace('_', ' ', ucfirst($item->source)) }} {{ $item->reason ?: '-' }} {{ $item->description ?: '-' }} {{ $item->reference ?: '-' }} @if($receipts->isNotEmpty()) @else {{ $statusText[$status] ?? str_replace('_', ' ', $status) }} @endif {{ $item->currency }} {{ $metrics->money($item->amount, $item->currency) }} @if($receipts->isNotEmpty()) @else {{ $metrics->money($item->collected_amount, $item->currency) }} @endif {{ $metrics->money($item->outstandingAmount(), $item->currency) }}
@csrf @method('DELETE')
No collectible records yet.

Insights

Overdue Rate
{{ $totalUsd > 0 ? number_format((($byStatus['overdue'] ?? 0) / $totalUsd) * 100, 1) : '0.0' }}%
Of open collectible value
Avg. Open Size
{{ $collectibles->count() > 0 ? $metrics->money($totalUsd / $collectibles->count()) : '$0.00' }}
USD average
PKR Equivalent
{{ $fmt($totalUsd) }}
At current FX rate
@push('styles') @endpush @push('scripts') @endpush @endsection