@php $selectedOrderIds = collect((array) request('order_ids', [])) ->map(fn ($id) => (int) $id) ->filter() ->values(); $ordersCollection = $orders instanceof \Illuminate\Contracts\Pagination\Paginator ? collect($orders->items()) : collect($orders); $filteredOrders = $selectedOrderIds->isNotEmpty() ? $ordersCollection->whereIn('id', $selectedOrderIds)->values() : $ordersCollection->values(); $totalOrders = $filteredOrders->count(); $totalTagihan = $filteredOrders->sum('total_price'); $totalDibayar = $filteredOrders->sum(fn($o) => (float) $o->getTotalPaid()); $totalPiutang = $filteredOrders->sum(fn($o) => (float) $o->getRemainingBalance()); $printMode = $selectedOrderIds->isNotEmpty() ? 'Transaksi Terpilih' : 'Semua Transaksi Customer'; @endphp
@if(env('APP_DEMO', false))
DEMO MODE
@endif
@if($shopLogo ?? false) {{ $shopName }} @endif

{{ $shopName }}

@if(!empty($shopAddress))

{{ $shopAddress }}

@endif

SURAT PENAGIHAN PIUTANG

Customer: {{ $customer }}
@if(!empty($month)) Periode: {{ \Carbon\Carbon::createFromFormat('Y-m', $month)->translatedFormat('F Y') }} @else Periode: Semua Piutang (s/d {{ now()->format('d M Y') }}) @endif
Mode Cetak: {{ $printMode }}
@if(env('APP_DEMO', false))
Mode Demo
@endif
@if(env('APP_DEMO', false))
Dokumen Simulasi / Percobaan
Surat penagihan ini dibuat dalam DEMO MODE. Seluruh data customer, nominal, invoice, piutang, dan status pembayaran pada dokumen ini merupakan simulasi / transaksi palsu / percobaan sistem dan bukan surat penagihan sah, bukan dokumen penagihan resmi, bukan dasar audit, dan tidak boleh digunakan untuk penagihan nyata kepada pelanggan.
@endif @if($selectedOrderIds->isNotEmpty())
Transaksi yang dicetak dipilih manual dari daftar customer.
@foreach($filteredOrders as $order) {{ $order->invoice_number }} @endforeach
@endif
Total Order
{{ $totalOrders }}
Total Tagihan
Rp {{ number_format($totalTagihan, 0, ',', '.') }}
Sudah Dibayar
Rp {{ number_format($totalDibayar, 0, ',', '.') }}
Total Piutang
Rp {{ number_format($totalPiutang, 0, ',', '.') }}
@forelse($filteredOrders as $idx => $order) @php $paid = (float) $order->getTotalPaid(); $remaining = (float) $order->getRemainingBalance(); $badgeClass = $order->payment_status === 'partial' ? 'badge-partial' : 'badge-unpaid'; $badgeText = $order->payment_status === 'partial' ? 'Sebagian' : 'Belum Bayar'; @endphp
{{ $idx + 1 }}. Invoice: {{ $order->invoice_number }} {{ $badgeText }} @if($selectedOrderIds->isNotEmpty()) Dipilih @endif @if(env('APP_DEMO', false)) Demo @endif | Tanggal: {{ $order->created_at->format('d/m/Y') }}
Total Dibayar Sisa Catatan
Rp {{ number_format($order->total_price, 0, ',', '.') }} {{ $paid > 0 ? 'Rp ' . number_format($paid, 0, ',', '.') : '-' }} Rp {{ number_format($remaining, 0, ',', '.') }} {{ $order->notes ?? '-' }}
@foreach($order->items as $i => $item) @php $unitRaw = strtolower(trim( $item->size_unit ?? $item->unit ?? $item->qty_unit ?? $item->unit_label ?? '' )); $isMeter = $unitRaw !== '' && ( str_contains($unitRaw, 'meter') || $unitRaw === 'm' || str_contains($unitRaw, 'm2') || str_contains($unitRaw, 'm²') ); $qtyUnit = trim($item->qty_unit ?? 'Lembar'); @endphp @endforeach
No Item / Produk File Ukuran Qty Keterangan
{{ $i + 1 }} {{ $item->product_name ?? '-' }} @if(!empty($item->material_name))
Bahan: {{ $item->material_name }}
@endif @if(!empty($item->finishing_note))
Finishing: {{ $item->finishing_note }}
@endif
{{ $item->file_name ?? '-' }} @if($isMeter) {{ $item->size_description ?? '-' }} @else - @endif {{ $item->qty ?? 0 }} {{ $qtyUnit }} {{ $item->notes ?? '-' }}
@empty

Tidak ada piutang untuk customer ini.

@endforelse @if(env('APP_DEMO', false)) @endif