@php use App\Support\LoanServiceCharge; $repaid = max(0, (float) $loan->principal - (float) $loan->outstanding); $paidCount = $loan->installments->where('status', 'paid')->count(); $totalInst = $loan->installments->count(); $loanRepayments = $repayments->where('loan_id', $loan->id); $today = \Carbon\Carbon::today(); $yearlyChargePct = (float) ($loanServiceChargeYearlyPercent ?? LoanServiceCharge::DEFAULT_YEARLY_PERCENT); @endphp
{{ __('Principal') }}
{{ number_format((float) $loan->principal, 2) }}
{{ __('Repaid') }}
{{ number_format($repaid, 2) }}
{{ __('Outstanding') }}
{{ number_format((float) $loan->outstanding, 2) }}
{{ __('Installments') }}
@if($totalInst > 0) {{ $paidCount }}/{{ $totalInst }} {{ __('paid') }} @else — @endif
{{ __('Status') }}
{{ ucfirst($loan->status) }}
{{ __('Repayment') }}
{{ ucfirst($loan->repayment_mode) }}
{{ __('Period') }}
{{ $loan->loan_period_months ? $loan->loan_period_months.' '.__('months') : '—' }}
{{ __('Monthly') }}
{{ $loan->monthly_installment ? number_format((float) $loan->monthly_installment, 2) : '—' }}
{{ __('Requested') }}
{{ $loan->requested_at?->format('d M Y') ?? '—' }}
{{ __('Issued') }}
{{ $loan->issued_at?->format('d M Y') ?? '—' }}
@if($loan->reason)
{{ __('Reason') }}
{{ $loan->reason }}
@endif @if($loan->guarantors->isNotEmpty())
{{ __('Guarantors') }}
@foreach($loan->guarantors as $g) @if($g->user) {{ $g->user->name }}({{ $g->user->id }}) @endif @endforeach
@endif
{{ __('Installment Schedule') }}
@forelse($loan->installments as $inst) @php $dueDate = \Carbon\Carbon::create($inst->due_year, $inst->due_month, 1)->endOfMonth(); $dueLabel = \Carbon\Carbon::create($inst->due_year, $inst->due_month, 1)->format('M Y'); if ($inst->status === 'paid') { $instStatus = __('Paid'); $instBadge = 'badge-success'; } elseif ($dueDate->lt($today)) { $instStatus = __('Overdue'); $instBadge = 'badge-danger'; } else { $instStatus = __('Due'); $instBadge = 'badge-warning'; } @endphp @php $svc = $inst->status === 'paid' ? (float) $inst->service_charge : LoanServiceCharge::monthlyChargeAmount((float) $inst->amount, $yearlyChargePct); $svcNote = $inst->status === 'paid' ? '' : ' ('.__('if paid after 15th').')'; @endphp @empty @endforelse
# {{ __('Due') }} {{ __('Principal') }} {{ __('S/Charge') }} {{ __('Total') }} {{ __('Status') }} {{ __('Paid on') }}
{{ $inst->installment_no }} {{ $dueLabel }} {{ number_format((float) $inst->amount, 2) }} @if($inst->status === 'paid') {{ number_format((float) $inst->service_charge, 2) }} @else {{ number_format($svc, 2) }}{{ $svcNote }} @endif {{ number_format((float) $inst->amount + ($inst->status === 'paid' ? (float) $inst->service_charge : 0), 2) }} {{ $instStatus }} {{ $inst->paid_at?->format('Y-m-d') ?? '—' }}
{{ __('No installment schedule yet.') }}
{{ __('Payment History') }}
@forelse($loanRepayments as $repayment) @empty @endforelse @if($loanRepayments->isNotEmpty()) @endif
{{ __('Date') }} {{ __('Type') }} {{ __('Installment') }} {{ __('Amount') }} {{ __('Source') }}
{{ $repayment->entry->entry_date?->format('Y-m-d') }} {{ $repayment->entry->type === 'LOAN_SERVICE_CHARGE' ? __('S/Charge') : __('Principal') }} @if($repayment->installment_no) #{{ $repayment->installment_no }} @else — @endif {{ number_format((float) $repayment->entry->amount, 2) }} {{ $repayment->source }}
{{ __('No payments recorded for this loan.') }}
{{ __('Total') }} {{ number_format((float) $loanRepayments->sum(fn ($r) => (float) $r->entry->amount), 2) }}