{{-- ===================================================== --}} {{-- OWNER DASHBOARD — Boss Command Center (Final Replace) --}} {{-- File: resources/views/pages/dashboard/partials/owner.blade.php --}} {{-- Data source: DashboardController@getOwnerDashboard() --}} {{-- ===================================================== --}} @php $stats = $stats ?? []; $revenueToday = (float) data_get($stats, 'revenue_today', 0); $revenueMonth = (float) data_get($stats, 'revenue_month', 0); $ordersToday = (int) data_get($stats, 'orders_today', 0); $ordersMonth = (int) data_get($stats, 'orders_month', 0); $completedToday = (int) data_get($stats, 'completed_today', 0); $completedMonth = (int) data_get($stats, 'completed_month', 0); $readyForPickup = (int) data_get($stats, 'ready_for_pickup', 0); $receivablesTotal = (float) data_get($stats, 'receivables_total', 0); $dailyRevenue = $daily_revenue ?? collect(); $fmtRp = fn($n) => 'Rp ' . number_format((float)$n, 0, ',', '.'); $monthLabel = now()->translatedFormat('F Y'); $todayLabel = now()->translatedFormat('d F Y'); $pickupLevel = $readyForPickup >= 15 ? 'high' : ($readyForPickup >= 5 ? 'mid' : 'low'); $piutangLevel = $receivablesTotal >= 5000000 ? 'high' : ($receivablesTotal >= 1000000 ? 'mid' : 'low'); $headline = "Boss Mode aktif • Data terupdate " . now()->format('H:i') . " • Fokus: "; if ($pickupLevel === 'high') $headline .= "banyak order siap diambil."; elseif ($piutangLevel === 'high') $headline .= "piutang perlu dipantau."; else $headline .= "ritme operasional stabil."; $safeRoute = function($name, $params = []) { try { return route($name, $params); } catch (\Throwable $e) { return '#'; } }; $links = [ 'Laporan Omset' => $safeRoute('reports.sales'), 'Rincian Pendapatan' => $safeRoute('reports.revenue'), 'Piutang Penjualan' => $safeRoute('reports.receivables'), 'Hutang Pembelian' => $safeRoute('reports.purchase-debt'), 'Buku Besar' => $safeRoute('reports.cash-ledger'), 'Log Transaksi' => $safeRoute('reports.transactions'), 'Data Keuangan' => $safeRoute('finance.index'), 'Laporan Kas' => $safeRoute('finance.cash'), 'Setoran' => $safeRoute('finance.deposits.index'), 'Orders' => $safeRoute('orders.index'), 'Kasir (Tagihan)' => $safeRoute('kasir.index'), 'Kasir (Riwayat)' => $safeRoute('kasir.history'), 'Stok' => $safeRoute('stock.index'), 'Produk' => $safeRoute('products.items.index'), 'Pembelian' => $safeRoute('purchases.index'), 'Pengeluaran' => $safeRoute('expenses.index'), ]; $ctaDisabledClass = fn($url) => $url === '#' ? 'pointer-events-none opacity-50' : ''; $today = \Carbon\Carbon::today(); $overdueOrders = collect(); $dueSoonOrders = collect(); if (class_exists(\App\Models\Order::class)) { $baseDueQuery = \App\Models\Order::query() ->whereNotNull('due_date'); if (method_exists($baseDueQuery->getModel(), 'notCancelled')) { $baseDueQuery->notCancelled(); } if (method_exists($baseDueQuery->getModel(), 'withReceivables')) { $baseDueQuery->withReceivables(); } $overdueOrders = (clone $baseDueQuery) ->whereDate('created_at', '<=', $today->copy()->subDays(30)) ->orderBy('created_at') ->limit(5) ->get(); $dueSoonOrders = (clone $baseDueQuery) ->whereDate('due_date', '>=', $today) ->whereDate('due_date', '<=', $today->copy()->addDays(3)) ->orderBy('due_date') ->limit(5) ->get(); } $overdueCount = $overdueOrders->count(); $dueSoonCount = $dueSoonOrders->count(); @endphp
{{-- ===== Banner ===== --}}
{{ $headline }}
💬 Bantuan
{{-- ===== Insight Utama (real-time explanation) ===== --}}

Ringkasan Kontrol

Terupdate: {{ now()->format('d/m/Y H:i') }}

Panel ini menjelaskan asal angka dan maknanya untuk keputusan cepat. Semua nilai di bawah dihitung langsung dari transaksi yang tersimpan di sistem (refresh untuk update terbaru).

✅ Pendapatan Hari Ini
{{ $fmtRp($revenueToday) }}
Lihat asal angka
Angka ini adalah total order status Lunas yang dibuat hari ini (berdasarkan tanggal order).
• Jika pembayaran masih cicilan, belum masuk penuh.
• Jika order dibuat kemarin tapi lunas hari ini, itu masuk sesuai aturan sistem yang sekarang (berdasarkan tanggal order).
📊 Pendapatan Bulan Ini
{{ $fmtRp($revenueMonth) }}
Lihat asal angka
Total order Lunas dalam rentang awal–akhir bulan ini (berdasarkan tanggal order). Grafik di bawah mengurai per hari (berdasarkan paid_at yang direkap).
🧾 Total Piutang (Belum Lunas)
{{ $fmtRp($receivablesTotal) }}
Lihat asal angka
Ini akumulasi sisa tagihan dari order yang statusnya Belum Bayar atau Cicilan. Rumus sistem: (total_price - paid_amount) dijumlahkan.
• Makin besar angka ini = makin banyak uang yang masih “menggantung” di customer.
@if($piutangLevel === 'high')
⚠️ Piutang tinggi — pertimbangkan follow-up customer & cek laporan piutang.
@elseif($piutangLevel === 'mid')
🟠 Piutang sedang — pantau rutin, terutama yang sudah lama.
@else
✅ Piutang terkendali — ritme pembayaran aman.
@endif
📦 Operasional Hari Ini
Order: {{ number_format($ordersToday) }}

{{ number_format($completedToday) }} order selesai hari ini. Ini membantu membaca “kecepatan produksi” dibanding jumlah order masuk.

Masuk: {{ number_format($ordersToday) }} Selesai: {{ number_format($completedToday) }}
🚚 Siap Diambil Customer
{{ number_format($readyForPickup) }} order

Ini adalah order yang status produksi Selesai, namun status pickup masih Belum Diambil. Idealnya angka ini dijaga rendah agar cashflow & ruang penyimpanan lebih sehat.

@if($pickupLevel === 'high')
⚠️ Antrian pengambilan tinggi — dorong tim untuk WA customer.
@elseif($pickupLevel === 'mid')
🟠 Perlu monitoring — jadwalkan follow-up pengambilan.
@else
✅ Aman — antrian pengambilan terkendali.
@endif
{{-- ===== Jatuh Tempo Piutang ===== --}}

Order Lama > 30 Hari

🚨 {{ $overdueCount }} invoice
@forelse($overdueOrders as $order)
{{ $order->invoice_number }}
{{ $order->customer_name }}
{{ \Carbon\Carbon::parse($order->due_date)->format('d/m/Y') }}
Sisa: Rp {{ number_format((float) $order->getRemainingBalance(), 0, ',', '.') }}
@empty
Belum ada piutang yang lewat jatuh tempo.
@endforelse

Jatuh Tempo Dekat

⏰ {{ $dueSoonCount }} invoice
@forelse($dueSoonOrders as $order)
{{ $order->invoice_number }}
{{ $order->customer_name }}
{{ \Carbon\Carbon::parse($order->due_date)->format('d/m/Y') }}
Sisa: Rp {{ number_format((float) $order->getRemainingBalance(), 0, ',', '.') }}
@empty
Tidak ada piutang yang akan jatuh tempo dalam 3 hari.
@endforelse
{{-- ===== KPI Cards (tetap pakai komponen existing) ===== --}}
{{-- ===== Chart + Boss Actions ===== --}}
Catatan: Grafik mengambil rekap harian dari data pembayaran (paid_at) yang direkap sistem pada bulan berjalan.

Akses Cepat

⚡ 1 klik
Omset Penjualan
Ringkasan omzet
Rincian Pendapatan
Per transaksi / produk
Piutang Penjualan
Cetak per customer
Buku Besar
Debit / Kredit / Saldo
Log Transaksi
Audit / jejak
Cara membaca cepat
  • • Jika Piutang naik → cek laporan piutang & follow-up.
  • • Jika Siap Diambil naik → dorong WA customer & alur pickup.
  • • Jika Order masuk tinggi tapi selesai rendah → cek kapasitas produksi.
{{-- ===== Footer ===== --}}

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

@if($overdueCount > 0 || $dueSoonCount > 0) @endif