@php $fmt = app(\App\Services\Formatter::class); @endphp
{{-- ------------------------------------------------------ the list --}}
@if ($this->hasActiveFilters()) @endif
@if ($rows->isEmpty()) @else
    @foreach ($rows as $row) @php $active = $selectedId === $row->id; @endphp
  • @endforeach
@endif
{{-- ---------------------------------------------------- the decision --}}
@if (! $payment) @else @php $invoice = $payment->invoice; $expected = $invoice ? $invoice->balance() : (float) $payment->subscription?->amount; $shortfall = round($expected - (float) $payment->amount, 2); @endphp {{ $payment->status->label() }} {{-- Warnings first. A reviewer under time pressure reads the top. --}} @if ($duplicates->isNotEmpty())

This transaction ID has been submitted before.

    @foreach ($duplicates as $duplicate)
  • {{ $duplicate->reference }} — {{ $duplicate->tenant?->business_name }} — {{ $fmt->money($duplicate->amount) }} — {{ $duplicate->status->label() }} ({{ $fmt->date($duplicate->created_at) }})
  • @endforeach
@endif @if ($shortfall > 0.009)

Short by {{ $fmt->money($shortfall) }}

The invoice balance is {{ $fmt->money($expected) }} but this payment is {{ $fmt->money($payment->amount) }}. Approving credits the invoice but does not start the term until it is settled in full.

@elseif ($shortfall < -0.009)

Overpaid by {{ $fmt->money(abs($shortfall)) }}

Confirm with the shop whether to credit the surplus to the next term.

@endif
{{-- ------------------------------------- the evidence --}}

Screenshot

@if (! $payment->proof_path)
No file was uploaded
@elseif ($payment->proof_is_pdf) Open the PDF receipt @else {{-- Click to open full size: wallet screenshots are tall and unreadable inline. --}} Payment screenshot Open full size @endif
{{-- ------------------------------------- what they say --}}

They say they sent

{{ $fmt->money($payment->amount) }}

via {{ $payment->gateway->label() }} @if ($payment->account) into {{ $payment->account->title }} @endif

Paid on
{{ $fmt->dateTime($payment->paid_at) }}
Transaction ID
{{ $payment->transaction_id ?: '—' }}
Sender name
{{ $payment->sender_name ?: '—' }}
{{ $payment->gateway->senderFieldLabel() }}
{{ $payment->sender_account ?: '—' }}
Submitted from
{{ $payment->submitted_ip ?: '—' }}
@if ($payment->tenant_note)

Their note

{{ $payment->tenant_note }}

@endif

Against

{{ $payment->subscription?->plan?->name ?? 'No plan' }} ({{ $payment->subscription?->billing_cycle->label() }})

@if ($invoice) Invoice {{ $invoice->invoice_number }} · {{ $fmt->money($invoice->total) }} total · {{ $fmt->money($invoice->paid_amount) }} already credited @else No invoice attached @endif

{{-- ------------------------------------------ the verdict --}}
@if ($payment->isPending())
Verify & activate Reject

Verifying starts the term today, credits the invoice and unlocks the shop immediately.

@else

{{ $payment->status->label() }} on {{ $fmt->dateTime($payment->reviewed_at) }}

@if ($payment->rejection_reason)

Reason given: {{ $payment->rejection_reason }}

@endif @if ($payment->admin_note)

{{ $payment->admin_note }}

@endif
Reopen for review @endif
@endif
{{-- ------------------------------------------------------- reject modal --}}

The shop owner sees this sentence and nothing else, so make it specific enough to act on — "screenshot is for Rs 3,000, invoice is Rs 5,000" rather than "invalid".

Cancel Reject payment
{{-- ------------------------------------------------------- reopen modal --}}

This puts the payment back in the pending queue. It deliberately does not revoke access the shop already has — to take access away, suspend the shop instead.

Cancel Reopen