{{-- ===================================================== --}} {{-- 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
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).
{{ number_format($completedToday) }} order selesai hari ini. Ini membantu membaca “kecepatan produksi” dibanding jumlah order masuk.
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')© {{ date('Y') }} aplikasipercetakan.com. All rights reserved.