{{-- Kasir Admin Dashboard (Future Clean) --}} @php use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Route; use Illuminate\Support\Carbon; $today = Carbon::today(); /* |-------------------------------------------------------------------------- | Notifikasi Jatuh Tempo Pembelian |-------------------------------------------------------------------------- | Dashboard administrasi kamu ada di: | resources/views/pages/dashboard/partials/administrasi.blade.php | | Patch sebelumnya belum kelihatan karena dashboard ini masih membaca due_date | dari tabel orders. Bagian ini sekarang membaca dari tabel purchases. */ $dueSoonOrders = collect(); $overdueOrders = collect(); $purchaseHasDueDate = class_exists(\App\Models\Purchase::class) && Schema::hasTable('purchases') && Schema::hasColumn('purchases', 'due_date'); if ($purchaseHasDueDate) { $baseDueQuery = \App\Models\Purchase::query() ->whereNotNull('due_date'); if (Schema::hasColumn('purchases', 'payment_status')) { $baseDueQuery->where(function ($q) { $q->whereNull('payment_status') ->orWhereNotIn('payment_status', ['paid', 'lunas', 'completed']); }); } if (Schema::hasColumn('purchases', 'status')) { $baseDueQuery->where(function ($q) { $q->whereNull('status') ->orWhereNotIn('status', ['cancelled', 'canceled', 'batal']); }); } $overdueOrders = (clone $baseDueQuery) ->whereDate('due_date', '<', $today) ->orderBy('due_date') ->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(); $purchaseInvoiceText = function ($purchase) { return $purchase->invoice_number ?? $purchase->invoice_no ?? $purchase->faktur_number ?? $purchase->no_faktur ?? ('PO-' . ($purchase->id ?? '-')); }; $purchaseSupplierText = function ($purchase) { if (isset($purchase->supplierRelation) && $purchase->supplierRelation) { return $purchase->supplierRelation->name ?? '-'; } if (isset($purchase->supplierModel) && $purchase->supplierModel) { return $purchase->supplierModel->name ?? '-'; } if (isset($purchase->supplier) && is_object($purchase->supplier)) { return $purchase->supplier->name ?? '-'; } return $purchase->supplier_name ?? $purchase->supplier ?? '-'; }; $purchaseRemainingAmount = function ($purchase) { if (isset($purchase->remaining)) { return (float) $purchase->remaining; } if (isset($purchase->remaining_amount)) { return (float) $purchase->remaining_amount; } if (isset($purchase->remaining_balance)) { return (float) $purchase->remaining_balance; } $total = (float) ( $purchase->grand_total ?? $purchase->total_price ?? $purchase->total_amount ?? $purchase->total ?? 0 ); $paid = (float) ( $purchase->paid_amount ?? $purchase->total_paid ?? $purchase->paid ?? 0 ); return max(0, $total - $paid); }; $purchaseDetailUrl = function ($purchase) { if (Route::has('purchases.show')) { return route('purchases.show', $purchase); } if (Route::has('purchases.index')) { return route('purchases.index'); } return '#'; }; $purchaseIndexUrl = Route::has('purchases.index') ? route('purchases.index') : '#'; @endphp