71 lines
2.8 KiB
PHP
71 lines
2.8 KiB
PHP
<?php
|
||
include "../../connect.php";
|
||
include_once "../../db_primary.php";
|
||
|
||
$driverID = filterRequest("driverID");
|
||
|
||
/**
|
||
* `driver_orders` و`ride` كلاهما في القاعدة الأساسية لا في قاعدة الدفع —
|
||
* نفس علّة getAllPayment.php التي كانت تُسقط الرصيد بـ
|
||
* `Table 'payment.ride' doesn't exist`.
|
||
*
|
||
* كل جداول هذا الاستعلام في القاعدة الأساسية، فيُنفَّذ عليها كاملاً عبر
|
||
* اتصال مستقل — لا إشارة مؤهَّلة، لأن القاعدتين قد تكونان على خادمين.
|
||
*/
|
||
$primary = primaryDbConnection();
|
||
if ($primary === null) {
|
||
printFailure("Statistics unavailable");
|
||
exit;
|
||
}
|
||
|
||
$sql = "SELECT
|
||
YEAR(`driver_orders`.`created_at`) AS `year`,
|
||
MONTH(`driver_orders`.`created_at`) AS `month`,
|
||
COUNT(*) AS `total_orders`,
|
||
SUM(CASE WHEN LOWER(`ride`.`status`) IN ('finished','completed') THEN 1 ELSE 0 END) AS `completed_orders`,
|
||
SUM(CASE WHEN `ride`.`status` = 'Apply' THEN 1 ELSE 0 END) AS `pending_orders`,
|
||
SUM(CASE WHEN `ride`.`status` = 'Cancel' THEN 1 ELSE 0 END) AS `canceled_orders`,
|
||
ROUND(SUM(CASE WHEN LOWER(`ride`.`status`) IN ('finished','completed') THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS `percent_completed`,
|
||
ROUND(SUM(CASE WHEN `ride`.`status` = 'Apply' THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS `percent_pending`,
|
||
ROUND(SUM(CASE WHEN `ride`.`status` = 'Cancel' THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS `percent_canceled`,
|
||
SUM(CASE WHEN `ride`.`status` = 'Refused' THEN 1 ELSE 0 END) AS `rejected_orders`,
|
||
ROUND(SUM(CASE WHEN `ride`.`status` = 'Refused' THEN 1 ELSE 0 END) / COUNT(*) * 100, 2) AS `percent_rejected`
|
||
FROM
|
||
`driver_orders`
|
||
LEFT JOIN `ride` ON `ride`.`id` = `driver_orders`.`order_id`
|
||
WHERE
|
||
`driver_orders`.`driver_id` = :driverID
|
||
AND YEAR(`driver_orders`.`created_at`) = YEAR(CURDATE())
|
||
AND MONTH(`driver_orders`.`created_at`) = MONTH(CURDATE())
|
||
GROUP BY
|
||
YEAR(`driver_orders`.`created_at`),
|
||
MONTH(`driver_orders`.`created_at`)
|
||
ORDER BY
|
||
`year`,
|
||
`month`;
|
||
|
||
";
|
||
// كان المعرّف يُدمج في نص الاستعلام مباشرةً — حقن SQL.
|
||
try {
|
||
$stmt = $primary->prepare($sql);
|
||
$stmt->bindValue(':driverID', $driverID);
|
||
$stmt->execute();
|
||
} catch (PDOException $e) {
|
||
// بلا هذا الالتقاط كان أي خلل في القاعدة يصير 500 يُسقط الشاشة كلها.
|
||
error_log('[driverStatistic] ' . $e->getMessage());
|
||
printFailure("Statistics unavailable");
|
||
exit;
|
||
}
|
||
|
||
if ($stmt->rowCount() > 0) {
|
||
// Fetch the record
|
||
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||
|
||
printSuccess( $row);
|
||
|
||
}
|
||
else{
|
||
// Print a failure message
|
||
printFailure($message = "No wallet record found");
|
||
}
|