From 0a86acf30bf9a63d31982586b02059479889d907 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Sun, 10 May 2026 00:30:55 +0300 Subject: [PATCH] add new featurs like realtime 2026-5-10-4 --- Admin/v2/analytics/driver_ranking.php | 43 ++++++++++++++++++++ Admin/v2/analytics/growth.php | 58 +++++++++++++++++++++++++++ Admin/v2/analytics/revenue.php | 52 ++++++++++++++++++++++++ 3 files changed, 153 insertions(+) create mode 100644 Admin/v2/analytics/driver_ranking.php create mode 100644 Admin/v2/analytics/growth.php create mode 100644 Admin/v2/analytics/revenue.php diff --git a/Admin/v2/analytics/driver_ranking.php b/Admin/v2/analytics/driver_ranking.php new file mode 100644 index 0000000..7700479 --- /dev/null +++ b/Admin/v2/analytics/driver_ranking.php @@ -0,0 +1,43 @@ + 'Unauthorized access.']); + exit; +} + +try { + // أفضل 10 كباتن حسب عدد الرحلات المكتملة + $stmt = $con->prepare(" + SELECT + d.id, d.first_name, d.last_name, d.phone, + COUNT(r.id) as completed_rides, + SUM(r.price_for_passenger) as total_revenue + FROM driver d + JOIN ride r ON d.id = r.driver_id + WHERE r.status = 'Finished' + GROUP BY d.id + ORDER BY completed_rides DESC + LIMIT 10 + "); + $stmt->execute(); + $top_drivers = $stmt->fetchAll(PDO::FETCH_ASSOC); + + // فك تشفير الأسماء + foreach ($top_drivers as &$driver) { + $driver['first_name'] = $encryptionHelper->decryptData($driver['first_name']); + $driver['last_name'] = $encryptionHelper->decryptData($driver['last_name']); + $driver['phone'] = $encryptionHelper->decryptData($driver['phone']); + } + + echo json_encode([ + 'status' => 'success', + 'data' => $top_drivers + ]); +} catch (Exception $e) { + http_response_code(500); + echo json_encode(['status' => 'error', 'message' => $e->getMessage()]); +} +?> diff --git a/Admin/v2/analytics/growth.php b/Admin/v2/analytics/growth.php new file mode 100644 index 0000000..92a3141 --- /dev/null +++ b/Admin/v2/analytics/growth.php @@ -0,0 +1,58 @@ + 'Unauthorized access.']); + exit; +} + +try { + // نمو الركاب لآخر 30 يوم + $stmt = $con->prepare(" + SELECT DATE(created_at) as date, COUNT(*) as new_passengers + FROM passengers + WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) + GROUP BY DATE(created_at) + ORDER BY date ASC + "); + $stmt->execute(); + $passenger_growth = $stmt->fetchAll(PDO::FETCH_ASSOC); + + // نمو السائقين لآخر 30 يوم + $stmt = $con->prepare(" + SELECT DATE(created_at) as date, COUNT(*) as new_drivers + FROM driver + WHERE created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) + GROUP BY DATE(created_at) + ORDER BY date ASC + "); + $stmt->execute(); + $driver_growth = $stmt->fetchAll(PDO::FETCH_ASSOC); + + // إجمالي الأعداد الحالية + $stmt = $con->prepare("SELECT COUNT(*) FROM passengers"); + $stmt->execute(); + $total_passengers = $stmt->fetchColumn(); + + $stmt = $con->prepare("SELECT COUNT(*) FROM driver"); + $stmt->execute(); + $total_drivers = $stmt->fetchColumn(); + + echo json_encode([ + 'status' => 'success', + 'data' => [ + 'passenger_daily' => $passenger_growth, + 'driver_daily' => $driver_growth, + 'totals' => [ + 'passengers' => (int)$total_passengers, + 'drivers' => (int)$total_drivers + ] + ] + ]); +} catch (Exception $e) { + http_response_code(500); + echo json_encode(['status' => 'error', 'message' => $e->getMessage()]); +} +?> diff --git a/Admin/v2/analytics/revenue.php b/Admin/v2/analytics/revenue.php new file mode 100644 index 0000000..a6d8ed7 --- /dev/null +++ b/Admin/v2/analytics/revenue.php @@ -0,0 +1,52 @@ + 'Unauthorized access.']); + exit; +} + +try { + // إحصائيات الإيرادات لآخر 30 يوم + $stmt = $con->prepare(" + SELECT + DATE(created_at) as date, + SUM(price_for_passenger) as total_revenue, + SUM(price_for_passenger - price_for_driver) as company_profit, + COUNT(*) as total_rides + FROM ride + WHERE status = 'Finished' + AND created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) + GROUP BY DATE(created_at) + ORDER BY date ASC + "); + $stmt->execute(); + $daily_stats = $stmt->fetchAll(PDO::FETCH_ASSOC); + + // ملخص عام + $stmt = $con->prepare(" + SELECT + SUM(price_for_passenger) as total_revenue_all, + SUM(price_for_passenger - price_for_driver) as total_profit_all, + AVG(price_for_passenger) as avg_ride_price + FROM ride + WHERE status = 'Finished' + AND created_at >= DATE_SUB(CURDATE(), INTERVAL 30 DAY) + "); + $stmt->execute(); + $summary = $stmt->fetch(PDO::FETCH_ASSOC); + + echo json_encode([ + 'status' => 'success', + 'data' => [ + 'daily' => $daily_stats, + 'summary' => $summary + ] + ]); +} catch (Exception $e) { + http_response_code(500); + echo json_encode(['status' => 'error', 'message' => $e->getMessage()]); +} +?>