@extends('layouts.app') @section('content') @php $__revenueRound1000 = function ($amount) { $amount = max((float) ($amount ?? 0), 0); return $amount > 0 ? (float) (ceil($amount / 1000) * 1000) : 0; }; $__revenueDisplayNet = function ($row) use ($__revenueRound1000) { return $__revenueRound1000($row->net_amount ?? $row->amount ?? 0); }; $__revenueDisplayChange = function ($row, $displayNet) { $paid = (float) ($row->paid_amount ?? 0); return max($paid - (float) $displayNet, 0); }; $totalRevenue = $__revenueRound1000($summary['total_revenue'] ?? 0); $totalTransactions = (int) ($summary['total_transactions'] ?? 0); $totalQty = (float) ($summary['total_qty'] ?? 0); $totalProducts = (int) ($summary['total_products'] ?? 0); $avgTicket = $totalTransactions > 0 ? ($totalRevenue / $totalTransactions) : 0; $tab = ($currentTab ?? request('tab') ?? 'transaksi'); $machineLabel = 'Semua Mesin'; if (!empty(request('machine_id')) && isset($machines)) { $machineLabel = optional($machines->firstWhere('id', (int) request('machine_id')))->name ?? 'Mesin Terpilih'; } $categoryLabel = 'Semua Kategori'; if (!empty(request('category_id')) && isset($categories)) { $categoryLabel = optional($categories->firstWhere('id', (int) request('category_id')))->name ?? 'Kategori Terpilih'; } $periodLabel = ($startDate ?? '-') . ' s/d ' . ($endDate ?? '-'); $exportUrl = route('reports.revenue.export', array_merge( request()->only(['start_date', 'end_date', 'machine_id', 'category_id', 'tab']), ['start_date' => $startDate, 'end_date' => $endDate, 'tab' => $tab] )); $printUrl = route('print.laporan-pendapatan', array_merge( ['start_date' => $startDate, 'end_date' => $endDate], request()->only(['machine_id', 'category_id']) )); @endphp

Ringkasan Pendapatan

Periode: {{ $periodLabel }} Mesin: {{ $machineLabel }} Kategori: {{ $categoryLabel }} Mode: {{ $tab === 'produk' ? 'Per Produk' : 'Per Pembayaran' }}

Laporan ini membaca pendapatan bersih dari pembayaran, yaitu dibayar dikurangi kembalian. Jadi bila customer bayar lebih besar lalu ada kembalian, yang masuk ke pendapatan hanya nilai bersihnya, bukan nominal uang yang diserahkan. Pada transaksi lunas tunai, nilai ini otomatis akan sama dengan grand total yang benar-benar menjadi pendapatan. Rata-rata pendapatan bersih per pembayaran saat ini sekitar Rp {{ number_format($avgTicket, 0, ',', '.') }}.

Cara baca cepat
  • Total Pendapatan = total pendapatan bersih sesuai filter tanggal.
  • Pembayaran Masuk = jumlah baris pembayaran yang tercatat.
  • Dibayar = uang yang diterima kasir.
  • Kembalian = uang yang dikembalikan ke customer.
  • Pendapatan Bersih = Dibayar - Kembalian.
Catatan penting
  • Untuk pembayaran dengan kembalian, pendapatan tetap mengikuti nilai bersih / grand total transaksi yang benar-benar masuk.
  • Jika satu invoice dibayar beberapa kali, setiap pembayaran tetap tampil sebagai baris terpisah.
  • Total pendapatan tidak akan melebihi sisa tagihan order, jadi transaksi lama tetap aman.
  • Status Cicilan, Pelunasan, atau Lunas hanya membantu pembacaan transaksi.
@foreach($machines as $machine) @endforeach
@foreach($categories as $category) @endforeach
Reset
@if($tab === 'transaksi') @forelse($byTransaction as $row) @php $displayNetAmount = $__revenueDisplayNet($row); $displayChangeAmount = $__revenueDisplayChange($row, $displayNetAmount); $badgeClass = match($row->status_badge ?? 'success') { 'warning' => 'bg-warning-100 text-warning-700 dark:bg-warning-500/20 dark:text-warning-400', 'brand' => 'bg-brand-100 text-brand-700 dark:bg-brand-500/20 dark:text-brand-400', default => 'bg-success-100 text-success-700 dark:bg-success-500/20 dark:text-success-400', }; @endphp @empty @endforelse @if(isset($byTransaction) && method_exists($byTransaction, 'count') && $byTransaction->count() > 0) @endif
Tanggal Bayar Invoice Pelanggan Status Jenis Rekening Kasir Dibayar Kembalian Pendapatan Bersih
{{ optional($row->payment_date)->format('d/m/Y H:i') ?? '-' }} {{ $row->invoice_number }}
{{ $row->customer_name }}
@if(!empty($row->notes))
{{ $row->notes }}
@endif
{{ $row->status_label }} {{ $row->payment_method_label ?? '-' }} {{ $row->payment_account_label ?? '-' }} {{ $row->cashier_name ?? '-' }} Rp {{ number_format((float) ($row->paid_amount ?? 0), 0, ',', '.') }} Rp {{ number_format($displayChangeAmount, 0, ',', '.') }} Rp {{ number_format($displayNetAmount, 0, ',', '.') }}
Tidak ada data
Total {{ number_format($totalTransactions, 0) }} Pembayaran Masuk Rp {{ number_format($totalRevenue, 0, ',', '.') }}
@else @forelse($byProduct as $index => $product) @php $productRevenue = $__revenueRound1000($product->total_revenue ?? 0); $percentage = $totalRevenue > 0 ? ($productRevenue / $totalRevenue) * 100 : 0; @endphp @empty @endforelse @if(isset($byProduct) && method_exists($byProduct, 'count') && $byProduct->count() > 0) @endif
# Produk Order Qty Pendapatan %
{{ $index + 1 }} {{ $product->name }} {{ number_format($product->total_orders) }} {{ number_format($product->total_qty, 0, ',', '.') }} Rp {{ number_format($productRevenue, 0, ',', '.') }} {{ number_format($percentage, 1) }}%
Tidak ada data
Total Rp {{ number_format($totalRevenue, 0, ',', '.') }} 100%
@endif

© {{ date('Y') }} Rio Ardiansyah - aplikasipercetakan.com. All rights reserved.

@endsection