@extends('admin.layout.master') @section('open-pemasaran', 'open') @section('menu-pemasaran', 'bg-gradient-to-r from-[#53BF6A] to-[#275931] text-white') @section('menu-pemasaran-laporan-penjualan', 'bg-gradient-to-r from-[#53BF6A] to-[#275931] text-white') @section('content') @php $statusClass = $sale->status === 'Terhutang' ? 'bg-red-100 text-red-700 border-red-200' : 'bg-green-100 text-green-700 border-green-200'; $statusDot = $sale->status === 'Terhutang' ? 'bg-red-500' : 'bg-green-500'; $saleNumber = 'SALE-' . str_pad($sale->id, 5, '0', STR_PAD_LEFT); $totalItems = $sale->items->sum('quantity'); $totalFulfilled = $sale->items->sum('fulfilled_quantity'); $paymentCount = $sale->paymentHistories->count(); $isPo = $sale->stock_type === 'po'; $stockTypeLabel = $isPo ? 'Pre-Order (PO)' : 'Ready Stock'; @endphp {{-- breadcrumb --}}
Pemasaran › Laporan Penjualan › History Pembayaran
{{-- hero summary --}}
Payment History

{{ $saleNumber }}

Riwayat pembayaran untuk transaksi penjualan {{ $sale->customer_name }}

{{ $sale->status }} {{ $stockTypeLabel }} Sunting Penjualan Kembali
Total Pesanan
Rp {{ number_format($sale->total_amount, 0, ',', '.') }}
Total Dibayar
Rp {{ number_format($sale->paid_amount, 0, ',', '.') }}
Sisa Tagihan
Rp {{ number_format($sale->debt_amount, 0, ',', '.') }}
Pembayaran Tercatat
{{ $paymentCount }}
Penanggung Jawab Create
{{ $sale->personResponsible?->name ?? '-' }}
Penanggung Jawab Edit
{{ $sale->updatedBy?->name ?? '-' }}
{{-- LEFT COLUMN --}}
{{-- Detail Transaksi --}}

Detail Transaksi

Informasi utama penjualan dan customer

Nomor Penjualan
{{ $saleNumber }}
Tanggal Laporan
{{ \Carbon\Carbon::parse($sale->report_date)->format('d/m/Y') }}
Tanggal Penjualan
{{ \Carbon\Carbon::parse($sale->sale_date)->format('d/m/Y') }}
Penanggung Jawab
{{ $sale->personResponsible?->name ?? '-' }}
Jenis Penjualan
{{ $sale->sale_type }}
Tipe Stok
{{ $stockTypeLabel }}
Provinsi
{{ $sale->customer_province }}
Daerah
{{ $sale->customer_city }}
Nama Pembeli
{{ $sale->customer_name }}
Kontak Pembeli
{{ $sale->customer_contact }}
Alamat Lengkap
{{ $sale->customer_address ?: '-' }}
Catatan
{{ $sale->notes ?: '-' }}
{{-- Item yang Dijual --}}

Item yang Dijual

Rincian barang pada transaksi ini

Total Qty: {{ $totalItems }}
@if ($isPo)
Dipenuhi: {{ $totalFulfilled }}
Sisa PO: {{ max(0, $totalItems - $totalFulfilled) }}
@endif
@if ($isPo) @endif @forelse ($sale->items as $item) @php $remainingPo = max(0, $item->quantity - $item->fulfilled_quantity); @endphp @if ($isPo) @endif @empty @endforelse
Kode Produk SKU Nama Produk Qty OrderedQty Dipenuhi Sisa POHarga Diskon Subtotal
{{ $item->productStock?->productVariant?->product?->code ?? '-' }} {{ $item->productStock?->productVariant?->sku ?? '-' }} {{ $item->productStock?->productVariant?->name ?? '-' }} {{ $item->quantity }}{{ $item->fulfilled_quantity }} {{ $remainingPo }} Rp {{ number_format($item->price, 0, ',', '.') }} Rp {{ number_format($item->discount, 0, ',', '.') }} Rp {{ number_format($item->subtotal, 0, ',', '.') }}
Belum ada item pada transaksi ini
{{-- Riwayat Pemenuhan PO --}} @if ($isPo)

Riwayat Pemenuhan / Penyerahan Stok PO

Kapan dan berapa qty yang sudah dipenuhi dari stok ready

@forelse ($sale->fulfillments->sortByDesc('fulfillment_date') as $fulfill) @empty @endforelse
No Tanggal Penyerahan Produk SKU Qty Dipenuhi Diinput Oleh Waktu Input
{{ $loop->iteration }} {{ $fulfill->fulfillment_date?->format('d/m/Y') ?? '-' }} {{ $fulfill->saleItem?->productStock?->productVariant?->name ?? '-' }} {{ $fulfill->saleItem?->productStock?->productVariant?->sku ?? '-' }} {{ $fulfill->quantity }} {{ $fulfill->createdBy?->name ?? '-' }} {{ $fulfill->created_at?->format('d/m/Y H:i') ?? '-' }}
Belum ada riwayat pemenuhan PO
@endif {{-- Riwayat Pembayaran --}}

Riwayat Pembayaran

Setiap pembayaran yang pernah masuk untuk transaksi ini

@php $runningPaid = 0; @endphp @forelse ($sale->paymentHistories as $payment) @php $runningPaid += $payment->amount; $remainingAfterPayment = max(0, $sale->total_amount - $runningPaid); $proofUrl = method_exists($payment, 'getFirstMediaUrl') ? $payment->getFirstMediaUrl('payment_proof') : null; @endphp @empty @endforelse
No. Diinput Oleh Waktu Input Tanggal Pembayaran Jumlah Status Setelah Pembayaran Bukti Pembayaran
{{ $loop->iteration }} {{ $payment->createdBy?->name ?? '-' }} {{ $payment->created_at ? $payment->created_at->format('d/m/Y H:i') : '-' }} {{ \Carbon\Carbon::parse($payment->payment_date)->format('d/m/Y') }} Rp {{ number_format($payment->amount, 0, ',', '.') }} @if ($remainingAfterPayment > 0) Masih Terhutang · Rp {{ number_format($remainingAfterPayment, 0, ',', '.') }} @else Lunas @endif @if ($proofUrl) Lihat Bukti @else Tidak ada bukti @endif
Belum ada riwayat pembayaran
{{-- RIGHT COLUMN --}}
{{-- Progress Pembayaran --}}

Progress Pembayaran

Ringkasan progres dari total tagihan

@php $progress = $sale->total_amount > 0 ? min(100, round(($sale->paid_amount / $sale->total_amount) * 100)) : 0; @endphp
Terlunasi {{ $progress }}%
Total Tagihan
Rp {{ number_format($sale->total_amount, 0, ',', '.') }}
Sudah Dibayar
Rp {{ number_format($sale->paid_amount, 0, ',', '.') }}
Sisa Pembayaran
Rp {{ number_format($sale->debt_amount, 0, ',', '.') }}
{{-- Progress Fulfill PO --}} @if ($isPo)

Progress Fulfill PO

Seberapa banyak barang PO yang sudah diambil dari stok

@php $fulfillProgress = $totalItems > 0 ? min(100, round(($totalFulfilled / $totalItems) * 100)) : 0; @endphp
Sudah Dipenuhi {{ $fulfillProgress }}%
Total Ordered {{ $totalItems }}
Sudah Dipenuhi {{ $totalFulfilled }}
Sisa PO {{ max(0, $totalItems - $totalFulfilled) }}
@endif {{-- Ringkasan Cepat --}}

Ringkasan Cepat

Highlight transaksi ini

Jumlah Jenis Barang {{ $sale->items->count() }}
Total Kuantitas {{ $totalItems }}
@if ($isPo)
Qty Sudah Dipenuhi {{ $totalFulfilled }}
@endif
Jumlah Pembayaran {{ $paymentCount }}
Terakhir Diupdate {{ $sale->updated_at?->format('d/m/Y H:i') }}
{{-- Dokumen Transaksi --}}

Dokumen Transaksi

Cetak invoice atau lihat bukti serah terima

Cetak Invoice @php $bstUrl = method_exists($sale, 'getFirstMediaUrl') ? $sale->getFirstMediaUrl('delivery_proof') : null; $hasBst = !empty($bstUrl); @endphp @if ($hasBst) Lihat Laporan BST @else @endif @if ($isPo) Cetak Surat Pemenuhan PO @endif
@endsection