@php $statusBadge = [ 'DRAFT' => 'slate', 'SENT' => 'sky', 'PARTIAL' => 'amber', 'PAID' => 'emerald', 'OVERDUE' => 'rose', 'VOID' => 'slate', ]; $freqBadge = ['weekly' => 'sky', 'monthly' => 'violet', 'quarterly' => 'amber', 'yearly' => 'emerald']; $kindLabel = ['space' => __('Space rent'), 'wifi' => __('WiFi'), 'service' => __('Service'), 'other' => __('Other')]; $kindBadge = ['space' => 'violet', 'wifi' => 'cyan', 'service' => 'amber', 'other' => 'slate']; // Nav tabs across the different sorts of income. $tabMeta = [ 'all' => ['label' => __('All Income'), 'icon' => 'queue-list'], 'sales' => ['label' => __('Sales Receipts'), 'icon' => 'currency-dollar'], 'invoices' => ['label' => __('Income Invoices'), 'icon' => 'document-currency-dollar'], 'other' => ['label' => __('Other Income'), 'icon' => 'gift'], 'clients' => ['label' => __('Clients & Rentals'), 'icon' => 'building-office'], ]; // Stream badge (used in the unified All-Income ledger). $typeMeta = [ 'sales' => ['label' => __('Sales'), 'color' => 'indigo'], 'income' => ['label' => __('Income invoice'), 'color' => 'cyan'], 'other' => ['label' => __('Other'), 'color' => 'violet'], 'refund' => ['label' => __('Refund'), 'color' => 'rose'], ]; @endphp
{{ __('Reporting period') }}
{{ $pLabel }}
{{ $m['label'] }}
{{ $m['value'] }}
@if ($m['delta'] !== null)| {{ __('Date') }} | {{ __('Stream') }} | {{ __('Party') }} | {{ __('Source') }} | {{ __('Category') }} | {{ __('Amount') }} | {{ __('In :base', ['base' => $baseCode]) }} |
|---|---|---|---|---|---|---|
| {{ optional($row['date'])->format('Y-m-d') ?: '—' }} |
|
{{ $row['party'] }} |
@if ($row['link_url'])
|
{{ $row['category'] ?: '—' }} | {{ $row['sign'] < 0 ? '−' : '' }}{{ $row['currency'] }} {{ number_format($row['amount'], 2) }} | {{ $baseCode }} {{ number_format($row['base'], 2) }} |
|
|
||||||
{{ $row['party'] }}
@if ($row['link_url']) {{ $row['link_label'] }} @else{{ $row['description'] }}
@endif{{ $row['sign'] < 0 ? '−' : '' }}{{ $row['currency'] }} {{ number_format($row['amount'], 2) }}
{{ $baseCode }} {{ number_format($row['base'], 2) }}
| {{ __('Date') }} | {{ __('Customer') }} | {{ __('Invoice') }} | {{ __('Job') }} | {{ __('Channel') }} | {{ __('Account') }} | {{ __('Amount') }} |
|---|---|---|---|---|---|---|
| {{ $p->paid_at?->format('Y-m-d') ?: '—' }} | {{ $inv?->payerName() ?: '—' }} | @if ($inv) {{ $inv->invoice_number }} @else — @endif | @if ($jobs->count() === 1) {{ $jobs->first()->job_number }} @elseif ($jobs->count() > 1) {{ trans_choice(':count jobs', $jobs->count(), ['count' => $jobs->count()]) }} @else — @endif | {{ $p->channel }} | {{ $p->fundAccount?->name ?: '—' }} | {{ $inv?->currency_code }} {{ number_format((float) $p->amount, 2) }} |
|
|
||||||
{{ $inv?->payerName() ?: '—' }}
@if ($inv) {{ $inv->invoice_number }} @endif{{ $p->paid_at?->format('Y-m-d') }} · {{ $p->channel }}
{{ $inv?->currency_code }} {{ number_format((float) $p->amount, 2) }}
{{ __('Billed income.') }} {{ __('Rent, WiFi, services and one-offs raised as a real invoice to a client, with a due date, reminders and a Pay action, just like a sales bill.') }}
| {{ __('Invoice') }} | {{ __('Client') }} | {{ __('Due') }} | {{ __('Status') }} | {{ __('Amount') }} | {{ __('Balance') }} | {{ __('Actions') }} |
|---|---|---|---|---|---|---|
| {{ $invoice->invoice_number }} |
{{ $invoice->payerName() ?: '—' }}
@if ($invoice->incomeCategory)
|
{{ $invoice->due_date?->format('Y-m-d') ?: '—' }} |
|
{{ $invoice->currency_code }} {{ number_format((float) $invoice->total, 2) }} | {{ $invoice->currency_code }} {{ number_format((float) $invoice->balance_due, 2) }} |
|
|
|
||||||
{{ $invoice->payerName() ?: '—' }}
{{ $invoice->currency_code }} {{ number_format((float) $invoice->total, 2) }}
{{ __('Due') }} {{ $invoice->due_date?->format('Y-m-d') ?: '—' }} · {{ __('Bal') }} {{ number_format((float) $invoice->balance_due, 2) }}
{{ __('Unbilled income.') }} {{ __('Money that came in without an invoice, asset-sale proceeds, cash-up surplus and legacy charges. Recorded directly, often system-generated, with no invoice document.') }}
| {{ __('Date') }} | {{ __('Source') }} | {{ __('Description') }} | {{ __('Category') }} | {{ __('Status') }} | {{ __('Amount') }} | {{ __('Notes') }} |
|---|---|---|---|---|---|---|
| {{ optional($o->received_on ?? $o->due_on)->format('Y-m-d') ?: '—' }} |
@if ($srcUrl)
|
{{ $o->description ?: '—' }} | {{ $o->category?->name ?: '—' }} |
@if ($o->isReceived())
|
{{ $o->currency_code }} {{ number_format((float) $o->amount, 2) }} |
|
|
|
||||||
{{ $o->source_label ?: __('Other income') }}
@endif{{ $o->description }}
{{ optional($o->received_on ?? $o->due_on)->format('Y-m-d') }}
@if ($o->isReceived())
{{ $o->currency_code }} {{ number_format((float) $o->amount, 2) }}
{{ __('Recurring clients auto-raise and email their invoice ahead of each due date.') }}
| {{ __('Client') }} | {{ __('Type') }} | {{ __('Amount') }} | {{ __('Next invoice') }} | {{ __('Arrears') }} | {{ __('Status') }} | {{ __('Actions') }} |
|---|---|---|---|---|---|---|
| {{ $tenant->name }} @if ($tenant->space || $tenant->contact_name || $tenant->phone) {{ collect([$tenant->space, $tenant->contact_name, $tenant->phone])->filter()->implode(' · ') }} @endif |
|
{{ $tenant->currency_code }} {{ number_format((float) $tenant->rent_amount, 2) }}
|
{{ $tenant->next_charge_date?->format('Y-m-d') ?: '—' }} @if ($tenant->auto_invoice && $tenant->status === 'active') {{ __('auto · :d days ahead', ['d' => $tenant->invoice_lead_days]) }} @else {{ __('manual') }} @endif | {{ $tenant->base_code }} {{ number_format($tenant->arrears_base, 2) }} |
@if ($tenant->status === 'active')
|
|
|
|
||||||
{{ $tenant->name }}
{{ $tenant->currency_code }} {{ number_format((float) $tenant->rent_amount, 2) }} / {{ $tenant->frequency }}
@if ($tenant->arrears_base > 0){{ __('Arrears') }}: {{ $tenant->base_code }} {{ number_format($tenant->arrears_base, 2) }}
@endif
@if ($tenant->status === 'active')
{{ __('No active account in :c, create one under Treasury.', ['c' => $payInvoice->currency_code]) }}
@endif{{ __('Bank/EcoCash fee this account skims off the deposit. Booked as a bank charge. Leave blank if none.') }}
{{ __('Then a reminder 2 days before the due date and again on the due date if unpaid.') }}
@endif{{ __('First invoice is due on this date, then every period.') }}
{{ $editingCategoryId ? __('Edit Category') : __('Add Category') }}
{{ __('No categories yet. Add one above.') }}
@endif