@extends('layouts.app') @section('title', 'Laporan') @section('content') @php $reports = [ 'sales' => ['Penjualan', 'Transaksi, produk, kasir, dan metode bayar.'], 'profit' => ['HPP & Laba', 'Omzet, HPP, laba kotor, beban, dan laba bersih.'], 'inventory' => ['Inventory', 'Riwayat stok masuk, keluar, dan penyesuaian.'], 'cash' => ['Kas', 'Arus kas masuk, keluar, dan saldo.'], ]; $moneyColumns = ['subtotal', 'total_hpp', 'gross_profit', 'amount']; $formatQuantity = fn ($value) => rtrim(rtrim(number_format((float) $value, 2, ',', '.'), '0'), ','); $formatUnitTotals = fn ($rows) => collect($rows)->map(fn ($row) => $formatQuantity($row->total).' '.($row->unit ?: 'satuan'))->implode(' · ') ?: '0'; $quantityColumns = ['quantity', 'quantity_before', 'quantity_after']; $columnLabels = [ 'number' => 'Nomor', 'sold_at' => 'Waktu', 'transaction_at' => 'Waktu', 'moved_at' => 'Waktu', 'branch' => 'Cabang', 'cashier' => 'Kasir', 'product' => 'Produk', 'item' => 'Item', 'unit' => 'Satuan', 'quantity' => 'Jumlah', 'quantity_before' => 'Stok sebelum', 'quantity_after' => 'Stok sesudah', 'subtotal' => 'Penjualan', 'total_hpp' => 'HPP', 'gross_profit' => 'Laba kotor', 'payment_method' => 'Pembayaran', 'status' => 'Status', 'type' => 'Jenis', 'event' => 'Jenis baris', 'account' => 'Akun kas', 'category' => 'Kategori', 'amount' => 'Jumlah', 'description' => 'Keterangan', 'notes' => 'Catatan', ]; @endphp
Laporan

{{ $reports[$type][0] }}

{{ $reports[$type][1] }}

Unduh Excel
@if(in_array($type, ['sales', 'profit'])) @endif @if($type === 'inventory') @endif
Reset
except(['date_from', 'date_to', 'branch_id', 'item_id', 'payment_method_id', 'page']))->filter()->isNotEmpty()) open @endif> Filter tambahan
@if(in_array($type, ['sales', 'profit'])) @elseif($type === 'inventory') @else @endif
@if($type === 'inventory')Periode dan filter tambahan hanya berlaku untuk riwayat. Laporan stok selalu menunjukkan saldo saat ini.@endif
@if($type === 'inventory')

Saldo stok saat ini

{{ $stockRows->count() }} item aktif pada cabang yang dipilih.

@forelse($stockRows as $row) @empty @endforelse
CabangItemJenisStok saat iniSatuan
{{ $row->branch }}{{ $row->item }}{{ $row->item_type }}{{ $formatQuantity($row->quantity) }}{{ $row->unit }}
Belum ada bahan BOM atau produk stok langsung aktif.
@endif @if($type === 'inventory')
@endif
@if(in_array($type, ['sales', 'profit']))
Transaksi{{ number_format($summary->transactions) }}
Retur diproses{{ number_format($summary->returns_count) }} · Rp{{ number_format($summary->returned_value, 0, ',', '.') }}
Penjualan bersihRp{{ number_format($summary->sales, 0, ',', '.') }}
DiskonRp{{ number_format($summary->discount, 0, ',', '.') }}
Total HPPRp{{ number_format($summary->hpp, 0, ',', '.') }}
Laba kotorRp{{ number_format($summary->profit, 0, ',', '.') }}
Margin laba kotor{{ number_format($summary->margin, 2, ',', '.') }}%
@if($type === 'profit')
Beban operasionalRp{{ number_format($summary->expenses, 0, ',', '.') }}
Laba bersihRp{{ number_format($summary->net_profit, 0, ',', '.') }}
@endif @elseif($type === 'inventory')
Stok saat ini per satuan{{ $formatUnitTotals($summary->current_stock_by_unit) }}
Stok masuk per satuan{{ $formatUnitTotals($summary->stock_in_by_unit) }}
Stok keluar per satuan{{ $formatUnitTotals($summary->stock_out_by_unit) }}
@else
Saldo awalRp{{ number_format($summary->opening_balance, 0, ',', '.') }}
Kas masukRp{{ number_format($summary->cash_in, 0, ',', '.') }}
Kas keluarRp{{ number_format($summary->cash_out, 0, ',', '.') }}
Saldo akhirRp{{ number_format($summary->ending_balance, 0, ',', '.') }}
@if($summary->unfiltered_notice ?? false)

Saldo awal dan saldo akhir selalu memakai seluruh transaksi kas periode ini, apa pun filternya. Kartu kas masuk dan keluar mengikuti filter metode pembayaran.

@endif @endif

Rincian {{ strtolower($reports[$type][0]) }}

{{ $rows->total() }} baris ditemukan sesuai filter.

@if($rows->count()) @foreach(array_keys((array) $rows->first()) as $column) @endforeach @endif @forelse($rows as $row) @foreach((array) $row as $key => $value) @endforeach @empty @endforelse
{{ $columnLabels[$column] ?? str_replace('_', ' ', ucfirst($column)) }}
@if(in_array($key, $moneyColumns)) Rp{{ number_format($value, 0, ',', '.') }} @elseif(in_array($key, $quantityColumns)) {{ $formatQuantity($value) }} @else {{ $value }} @endif
Belum ada data pada periode dan filter ini.
{{ $rows->links() }}
@if($type === 'inventory')
@endif @endsection