add new featurs like gamination
This commit is contained in:
@@ -3,40 +3,46 @@ require_once __DIR__ . '/../../connect.php';
|
|||||||
|
|
||||||
$type = isset($_POST['type']) ? filterRequest("type") : 'trips';
|
$type = isset($_POST['type']) ? filterRequest("type") : 'trips';
|
||||||
|
|
||||||
if ($type === 'earnings') {
|
try {
|
||||||
$sql = "
|
if ($type === 'earnings') {
|
||||||
SELECT
|
$sql = "
|
||||||
d.id as driver_id,
|
SELECT
|
||||||
COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name,
|
d.id as driver_id,
|
||||||
d.personal_photo as photoUrl,
|
COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name,
|
||||||
COALESCE(SUM(p.amount), 0) as value
|
d.personal_photo as photoUrl,
|
||||||
FROM `driver` d
|
COALESCE(SUM(r.price_for_driver), 0) as value
|
||||||
JOIN `payments` p ON d.id = p.driverID
|
FROM `driver` d
|
||||||
WHERE p.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
|
JOIN `ride` r ON d.id = r.driver_id
|
||||||
GROUP BY d.id
|
WHERE r.status = 'Finished'
|
||||||
ORDER BY value DESC
|
AND r.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
|
||||||
LIMIT 10
|
GROUP BY d.id
|
||||||
";
|
ORDER BY value DESC
|
||||||
} else {
|
LIMIT 10
|
||||||
// Default to trips
|
";
|
||||||
$sql = "
|
} else {
|
||||||
SELECT
|
// Default to trips
|
||||||
d.id as driver_id,
|
$sql = "
|
||||||
COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name,
|
SELECT
|
||||||
d.personal_photo as photoUrl,
|
d.id as driver_id,
|
||||||
COUNT(r.id) as value
|
COALESCE(d.name, d.nameArabic, d.firstName, 'Driver') as name,
|
||||||
FROM `driver` d
|
d.personal_photo as photoUrl,
|
||||||
JOIN `ride` r ON d.id = r.driver_id
|
COUNT(r.id) as value
|
||||||
WHERE r.status = 'Finished'
|
FROM `driver` d
|
||||||
AND r.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
|
JOIN `ride` r ON d.id = r.driver_id
|
||||||
GROUP BY d.id
|
WHERE r.status = 'Finished'
|
||||||
ORDER BY value DESC
|
AND r.created_at >= DATE(NOW() - INTERVAL WEEKDAY(NOW()) DAY)
|
||||||
LIMIT 10
|
GROUP BY d.id
|
||||||
";
|
ORDER BY value DESC
|
||||||
}
|
LIMIT 10
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
$stmt = $con->prepare($sql);
|
$stmt = $con->prepare($sql);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
error_log("getLeaderboard Error: " . $e->getMessage());
|
||||||
|
jsonError("Database error occurred");
|
||||||
|
}
|
||||||
|
|
||||||
if ($stmt->rowCount() > 0) {
|
if ($stmt->rowCount() > 0) {
|
||||||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|||||||
@@ -3,30 +3,34 @@ require_once __DIR__ . '/../../connect.php';
|
|||||||
|
|
||||||
$driver_id = filterRequest("driver_id");
|
$driver_id = filterRequest("driver_id");
|
||||||
|
|
||||||
$sql = "
|
try {
|
||||||
SELECT
|
$sql = "
|
||||||
DATE(r.created_at) as day,
|
SELECT
|
||||||
COUNT(r.id) as trips,
|
DATE(r.created_at) as day,
|
||||||
COALESCE(SUM(p.amount), 0) as earnings,
|
COUNT(r.id) as trips,
|
||||||
COALESCE(SUM(r.duration)/60, 0) as hours
|
COALESCE(SUM(r.price_for_driver), 0) as earnings,
|
||||||
FROM `ride` r
|
COALESCE(SUM(TIMESTAMPDIFF(MINUTE, r.time, r.endtime))/60, 0) as hours
|
||||||
LEFT JOIN `payments` p ON r.id = p.rideId
|
FROM `ride` r
|
||||||
WHERE r.driver_id = :driver_id
|
WHERE r.driver_id = :driver_id
|
||||||
AND r.status = 'Finished'
|
AND r.status = 'Finished'
|
||||||
AND r.created_at >= DATE(NOW()) - INTERVAL 6 DAY
|
AND r.created_at >= DATE(NOW()) - INTERVAL 6 DAY
|
||||||
GROUP BY DATE(r.created_at)
|
GROUP BY DATE(r.created_at)
|
||||||
ORDER BY DATE(r.created_at) ASC
|
ORDER BY DATE(r.created_at) ASC
|
||||||
";
|
";
|
||||||
|
|
||||||
$stmt = $con->prepare($sql);
|
$stmt = $con->prepare($sql);
|
||||||
$stmt->bindParam(':driver_id', $driver_id, PDO::PARAM_INT);
|
$stmt->bindParam(':driver_id', $driver_id, PDO::PARAM_INT);
|
||||||
$stmt->execute();
|
$stmt->execute();
|
||||||
|
|
||||||
if ($stmt->rowCount() > 0) {
|
if ($stmt->rowCount() > 0) {
|
||||||
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
jsonSuccess($rows);
|
jsonSuccess($rows);
|
||||||
} else {
|
} else {
|
||||||
// Return empty array instead of error so the app doesn't crash
|
jsonSuccess([]);
|
||||||
jsonSuccess([]);
|
}
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
// Return empty but log error
|
||||||
|
error_log("getWeeklyAggregate Error: " . $e->getMessage());
|
||||||
|
jsonError("Database error occurred");
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
require_once __DIR__ . '/../../connect.php';
|
require_once __DIR__ . '/../../connect.php';
|
||||||
|
|
||||||
function generateUniqueCode($con, $length = 7) {
|
function generateUniqueCode($con) {
|
||||||
while (true) {
|
while (true) {
|
||||||
$letters = substr(str_shuffle("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 4);
|
$letters = substr(str_shuffle("ABCDEFGHJKLMNPQRSTUVWXYZ"), 0, 2); // Excluded I, O for clarity
|
||||||
$numbers = substr(str_shuffle("0123456789"), 0, 3);
|
$numbers = substr(str_shuffle("23456789"), 0, 3); // Excluded 0, 1 for clarity
|
||||||
$code = $letters . $numbers;
|
$code = $letters . $numbers;
|
||||||
|
|
||||||
$stmt = $con->prepare("SELECT COUNT(*) FROM invites WHERE inviteCode = ?");
|
$stmt = $con->prepare("SELECT COUNT(*) FROM invites WHERE inviteCode = ?");
|
||||||
@@ -38,7 +38,7 @@ if ($checkStmt->rowCount() > 0) {
|
|||||||
// تحديث الدعوة الحالية
|
// تحديث الدعوة الحالية
|
||||||
$updateSql = "UPDATE `invites` SET `driverId` = :driverId, `expirationTime` = :expirationTime, `createdAt` = NOW() WHERE `id` = :id";
|
$updateSql = "UPDATE `invites` SET `driverId` = :driverId, `expirationTime` = :expirationTime, `createdAt` = NOW() WHERE `id` = :id";
|
||||||
$updateStmt = $con->prepare($updateSql);
|
$updateStmt = $con->prepare($updateSql);
|
||||||
$expirationTime = date('Y-m-d H:i:s', strtotime('+1 hour'));
|
$expirationTime = date('Y-m-d H:i:s', strtotime('+24 hours'));
|
||||||
$updateStmt->bindParam(':driverId', $driverId, PDO::PARAM_INT);
|
$updateStmt->bindParam(':driverId', $driverId, PDO::PARAM_INT);
|
||||||
$updateStmt->bindParam(':expirationTime', $expirationTime);
|
$updateStmt->bindParam(':expirationTime', $expirationTime);
|
||||||
$updateStmt->bindParam(':id', $existingInvite['id'], PDO::PARAM_INT);
|
$updateStmt->bindParam(':id', $existingInvite['id'], PDO::PARAM_INT);
|
||||||
@@ -59,7 +59,7 @@ if ($checkStmt->rowCount() > 0) {
|
|||||||
} else {
|
} else {
|
||||||
// إنشاء دعوة جديدة
|
// إنشاء دعوة جديدة
|
||||||
$inviteCode = generateUniqueCode($con);
|
$inviteCode = generateUniqueCode($con);
|
||||||
$expirationTime = date('Y-m-d H:i:s', strtotime('+1 hour'));
|
$expirationTime = date('Y-m-d H:i:s', strtotime('+24 hours'));
|
||||||
|
|
||||||
$sql = "INSERT INTO `invites` (`driverId`, `inviterDriverPhone`, `inviteCode`, `expirationTime`, `createdAt`, `isInstall`)
|
$sql = "INSERT INTO `invites` (`driverId`, `inviterDriverPhone`, `inviteCode`, `expirationTime`, `createdAt`, `isInstall`)
|
||||||
VALUES (:driverId, :inviterDriverPhone, :inviteCode, :expirationTime, NOW(), 0)";
|
VALUES (:driverId, :inviterDriverPhone, :inviteCode, :expirationTime, NOW(), 0)";
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ $sql = "SELECT
|
|||||||
i.`isInstall`,
|
i.`isInstall`,
|
||||||
d.`id` AS driverInviterId,
|
d.`id` AS driverInviterId,
|
||||||
d.`phone` AS invitorPhone,
|
d.`phone` AS invitorPhone,
|
||||||
d.`name_arabic` AS invitorName,
|
d.`nameArabic` AS invitorName,
|
||||||
COALESCE(r.finishedTrips, 0) AS countOfInvitDriver
|
COALESCE(r.finishedTrips, 0) AS countOfInvitDriver
|
||||||
FROM
|
FROM
|
||||||
`invites` i
|
`invites` i
|
||||||
|
|||||||
Reference in New Issue
Block a user