query("SELECT * FROM shipments ORDER BY created_at DESC LIMIT 10"); $shipments = $stmt->fetchAll(); } catch (Throwable $e) { $shipments = []; } $stats = [ 'total_shipments' => 0, 'active_shipments' => 0, 'total_shippers' => 0, 'total_truck_owners' => 0, 'total_revenue' => 0.0, ]; $chartData = [ 'labels' => [], 'data' => [] ]; try { $pdo = db(); $stats['total_shipments'] = (int)$pdo->query("SELECT COUNT(*) FROM shipments")->fetchColumn(); $stats['active_shipments'] = (int)$pdo->query("SELECT COUNT(*) FROM shipments WHERE status != 'delivered'")->fetchColumn(); $stats['total_shippers'] = (int)$pdo->query("SELECT COUNT(*) FROM users WHERE role = 'shipper'")->fetchColumn(); $stats['total_truck_owners'] = (int)$pdo->query("SELECT COUNT(*) FROM users WHERE role = 'truck_owner'")->fetchColumn(); $stats['total_revenue'] = (float)$pdo->query("SELECT SUM(total_price) FROM shipments WHERE payment_status = 'paid'")->fetchColumn(); // Chart Data: Last 30 days $stmt = $pdo->query(" SELECT DATE(created_at) as date, COUNT(*) as count FROM shipments WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) GROUP BY DATE(created_at) ORDER BY date ASC "); $dailyStats = $stmt->fetchAll(PDO::FETCH_KEY_PAIR); // Fill in missing days $period = new DatePeriod( new DateTime('-30 days'), new DateInterval('P1D'), new DateTime('+1 day') ); foreach ($period as $date) { $d = $date->format('Y-m-d'); $chartData['labels'][] = $date->format('d M'); $chartData['data'][] = $dailyStats[$d] ?? 0; } } catch (Throwable $e) { // Silent fail for stats, defaults are 0 } $flash = get_flash(); render_header(t('admin_dashboard'), 'admin', true); ?>
= e(t('overview_performance')) ?>
= e(t('total_shipments')) ?>
= e(t('active_shipments')) ?>
= e(t('total_shippers')) ?>
= e(t('total_truck_owners')) ?>
= e(t('total_revenue')) ?>
= e(t('no_shipments')) ?>