@extends('layouts.app', [ 'pageTitle' => $title, ]) @section('content') @php $purchaseCollection = $purchases->getCollection(); $summaryTotal = $purchaseCollection->sum('total_price'); $summaryPaid = $purchaseCollection->sum(function ($item) { return $item->paid_amount ?? 0; }); $summaryRemaining = $purchaseCollection->sum(function ($item) { return $item->remaining ?? 0; }); $countPaid = $purchaseCollection->where('payment_status', 'paid')->count(); $countPartial = $purchaseCollection->where('payment_status', 'partial')->count(); $countUnpaid = $purchaseCollection->where('payment_status', 'unpaid')->count(); $totalRows = $purchaseCollection->count(); @endphp
{{-- Hero Header --}}
Purchase Intelligence

{{ $title }}

Monitor pembelian bahan, progres pembayaran, dan sisa hutang supplier dalam satu tampilan yang lebih ringkas dan cepat dibaca.

@include('partials.alerts') {{-- KPI Cards --}}

Total Pembelian

{{ number_format($totalRows, 0, ',', '.') }}

Data pada halaman ini

Nilai Pembelian

Rp {{ number_format($summaryTotal, 0, ',', '.') }}

Akumulasi total tagihan

Sudah Dibayar

Rp {{ number_format($summaryPaid, 0, ',', '.') }}

{{ $countPaid }} lunas, {{ $countPartial }} sebagian

Sisa Hutang

Rp {{ number_format($summaryRemaining, 0, ',', '.') }}

{{ $countUnpaid }} belum dibayar

{{-- Filter Panel --}}

Filter & Segmentasi

Persempit data pembelian berdasarkan bahan, tipe, status, dan rentang tanggal.

@if(request()->filled('material_id') || request()->filled('type') || request()->filled('payment_status') || request()->filled('date_from') || request()->filled('date_to') || request()->filled('due_status'))
Filter aktif
@endif
@foreach($materials as $material) @endforeach
@foreach($types as $key => $label) @endforeach
@foreach($paymentStatuses as $key => $label) @endforeach
Reset
{{-- Purchase Feed --}}

Daftar Pembelian

Tampilan ringkas dengan progress pembayaran dan prioritas hutang.

{{ number_format($purchases->total(), 0, ',', '.') }} total data
@forelse($purchases as $purchase) @php $progress = ($purchase->total_price ?? 0) > 0 ? min(100, (($purchase->paid_amount ?? 0) / $purchase->total_price) * 100) : 0; $statusClasses = match($purchase->payment_status) { 'paid' => 'bg-success-100 text-success-700 dark:bg-success-500/15 dark:text-success-400', 'partial' => 'bg-warning-100 text-warning-700 dark:bg-warning-500/15 dark:text-warning-400', default => 'bg-error-100 text-error-700 dark:bg-error-500/15 dark:text-error-400', }; $statusLabel = match($purchase->payment_status) { 'paid' => 'Lunas', 'partial' => 'Sebagian', default => 'Belum Bayar', }; $purchaseDueDate = !empty($purchase->due_date) ? \Illuminate\Support\Carbon::parse($purchase->due_date) : null; $isOverdue = $purchaseDueDate && $purchase->payment_status !== 'paid' && $purchaseDueDate->isPast() && !$purchaseDueDate->isToday(); $isDueToday = $purchaseDueDate && $purchase->payment_status !== 'paid' && $purchaseDueDate->isToday(); $topLabel = ($purchase->term_of_payment ?? 'due_on_receipt') === 'net_30' ? 'TOP 30 Hari' : 'Due on Receipt'; @endphp
{{ $statusLabel }} @if($purchase->hasDebt()) Perlu Tindak Lanjut @endif

{{ $purchase->material->name ?? '-' }}

{{ $purchase->purchase_date->translatedFormat('d F Y') }} {{ $purchase->type_label ?? '-' }} {{ $purchase->supplierRelation->name ?? $purchase->supplier ?? '-' }} @if(!empty($purchase->no_faktur)) No Faktur: {{ $purchase->no_faktur }} @endif

Total Tagihan

{{ $purchase->formatted_total }}

Sudah Dibayar

{{ $purchase->formatted_paid }}

Sisa Hutang

{{ $purchase->formatted_remaining }}

Progres Pembayaran

{{ number_format($progress, 0) }}%

Jatuh Tempo

{{ $purchaseDueDate ? $purchaseDueDate->format('d/m/Y') : '-' }}

{{ $topLabel }}

Payment Progress {{ number_format($progress, 0) }}%
Lihat Detail @if($purchase->hasDebt()) Bayar Hutang @endif
@empty

Belum ada data pembelian

Data pembelian belum tersedia untuk filter yang dipilih. Tambahkan pembelian baru atau ubah filter pencarian.

Tambah Pembelian
@endforelse
{{-- Pagination --}} @if($purchases->hasPages())
{{ $purchases->links() }}
@endif
@endsection