add new features like realtime 2026-05-11-19

This commit is contained in:
Hamza-Ayed
2026-05-11 19:00:23 +03:00
parent f22d9f6c74
commit 5a4c21cbde
2 changed files with 145 additions and 167 deletions

View File

@@ -1,180 +1,142 @@
<?php
require_once __DIR__ . '/../connect.php';
$sql = "SELECT
cm.`id`,
cm.`ride_id`,
cm.`passenger_id`,
cm.`driver_id`,
cm.`complaint_type`,
cm.`description`,
cm.`date_filed`,
cm.`statusComplaint`,
cm.`resolution`,
cm.`date_resolved`,
p.first_name AS passengerName,
d.name_arabic AS driverName,
$sql = "
SELECT
cm.id, cm.ride_id, cm.passenger_id, cm.driver_id,
cm.complaint_type, cm.description, cm.date_filed,
cm.statusComplaint, cm.resolution, cm.date_resolved,
p.first_name AS passengerName,
d.name_arabic AS driverName,
d.gender,
ride.price AS priceOfRide,
ride.status AS rideStatus,
ride.carType AS carType,
ride.paymentMethod AS ridePaymentMethod,
ride.rideTimeFinish AS rideTimeFinish,
payments.amount as paymentFromPaymentTable,
payments.created_at as timeFromPaymentTable,
(
SELECT
AVG(rd.rating)
FROM
ratingDriver rd
WHERE
rd.driver_id = cm.driver_id COLLATE utf8mb4_general_ci
) AS avgRatingDriverFromPassengers,
(
SELECT
COUNT(*)
FROM
ratingDriver rd
WHERE
rd.driver_id = cm.driver_id COLLATE utf8mb4_general_ci
) AS countratingDriverFromPassengers,
(
SELECT
AVG(rp.rating)
FROM
ratingPassenger rp
WHERE
rp.passenger_id = cm.passenger_id COLLATE utf8mb4_general_ci
) AS avgRatingPassengerFromDrivers,
(
SELECT
COUNT(*)
FROM
ratingPassenger rp
WHERE
rp.passenger_id = cm.passenger_id COLLATE utf8mb4_general_ci
) AS countRatingPassengerFromDrivers,
(
SELECT
COUNT(*)
FROM
ride
WHERE
ride.driver_id = cm.driver_id COLLATE utf8mb4_general_ci
) countDriverRide,
(
SELECT
COUNT(*)
FROM
ride
WHERE
ride.passenger_id = cm.passenger_id COLLATE utf8mb4_general_ci
) countPassengerRide,
(
SELECT
COALESCE(SUM(amount),
0) AS visaDriver
FROM
payments
WHERE
isGiven = 'waiting' AND `payment_method` IN(
'visa-in',
'visa',
'visaRide',
'TransferFrom',
'payout',
'TransferTo'
) AND payments.`driverID` = cm.driver_id COLLATE utf8mb4_general_ci
) AS driverVisa,
(
SELECT
COALESCE(SUM(amount),
0) AS pointDriver
FROM
driverWallet dw
WHERE
dw.paymentMethod IN(
'visa-in',
'visa',
'visaRide',
'TransferFrom',
'payout',
'TransferTo'
) AND dw.`driverID` = cm.driver_id COLLATE utf8mb4_general_ci
) AS driverWallet,
(
SELECT
COALESCE(SUM(pw.balance),
0)
FROM
passengerWallet pw
WHERE
pw.passenger_id = cm.passenger_id COLLATE utf8mb4_general_ci
) AS passengerWallet,
(
SELECT
token
FROM
driverToken
WHERE
driverToken.captain_id = cm.driver_id COLLATE utf8mb4_general_ci
) AS driverToken,
(
SELECT
token
FROM
tokens
WHERE
tokens.passengerID = cm.passenger_id COLLATE utf8mb4_general_ci
) AS passengerToken,
(
SELECT
COUNT(*)
FROM
complaint
WHERE
complaint.passenger_id = cm.passenger_id AND cm.complaint_type = 'Passenger'
) AS countOfComplaintFromPassenger,
(
SELECT
COUNT(*)
FROM
complaint
WHERE
complaint.driver_id = cm.driver_id AND cm.complaint_type = 'Driver'
) AS countOfComplaintFromDriver
FROM
`complaint` cm
LEFT JOIN passengers p ON
p.id = cm.`passenger_id` COLLATE utf8mb4_general_ci
LEFT JOIN driver d ON
d.id = cm.driver_id COLLATE utf8mb4_general_ci
LEFT JOIN ride ON ride.id = cm.ride_id COLLATE utf8mb4_general_ci
left join payments on payments.rideId = cm.ride_id COLLATE utf8mb4_general_ci";
ride.price AS priceOfRide,
ride.status AS rideStatus,
ride.carType,
ride.paymentMethod AS ridePaymentMethod,
ride.rideTimeFinish,
payments.amount AS paymentFromPaymentTable,
payments.created_at AS timeFromPaymentTable,
COALESCE(dr_rating.avgRating, 0) AS avgRatingDriverFromPassengers,
COALESCE(dr_rating.cntRating, 0) AS countratingDriverFromPassengers,
COALESCE(ps_rating.avgRating, 0) AS avgRatingPassengerFromDrivers,
COALESCE(ps_rating.cntRating, 0) AS countRatingPassengerFromDrivers,
COALESCE(dr_rides.cnt, 0) AS countDriverRide,
COALESCE(ps_rides.cnt, 0) AS countPassengerRide,
COALESCE(dr_visa.total, 0) AS driverVisa,
COALESCE(dr_wallet.total, 0) AS driverWallet,
COALESCE(ps_wallet.total, 0) AS passengerWallet,
dt.token AS driverToken,
tk.token AS passengerToken,
COALESCE(ps_complaints.cnt, 0) AS countOfComplaintFromPassenger,
COALESCE(dr_complaints.cnt, 0) AS countOfComplaintFromDriver
FROM complaint cm
LEFT JOIN passengers p
ON p.id = cm.passenger_id COLLATE utf8mb4_general_ci
LEFT JOIN driver d
ON d.id = cm.driver_id COLLATE utf8mb4_general_ci
LEFT JOIN ride
ON ride.id = cm.ride_id COLLATE utf8mb4_general_ci
LEFT JOIN payments
ON payments.rideId = cm.ride_id COLLATE utf8mb4_general_ci
-- تقييمات السائق (مرة واحدة لكل سائق)
LEFT JOIN (
SELECT driver_id, AVG(rating) AS avgRating, COUNT(*) AS cntRating
FROM ratingDriver
GROUP BY driver_id
) dr_rating ON dr_rating.driver_id = cm.driver_id COLLATE utf8mb4_general_ci
-- تقييمات الراكب (مرة واحدة لكل راكب)
LEFT JOIN (
SELECT passenger_id, AVG(rating) AS avgRating, COUNT(*) AS cntRating
FROM ratingPassenger
GROUP BY passenger_id
) ps_rating ON ps_rating.passenger_id = cm.passenger_id COLLATE utf8mb4_general_ci
-- عدد رحلات السائق
LEFT JOIN (
SELECT driver_id, COUNT(*) AS cnt
FROM ride
GROUP BY driver_id
) dr_rides ON dr_rides.driver_id = cm.driver_id COLLATE utf8mb4_general_ci
-- عدد رحلات الراكب
LEFT JOIN (
SELECT passenger_id, COUNT(*) AS cnt
FROM ride
GROUP BY passenger_id
) ps_rides ON ps_rides.passenger_id = cm.passenger_id COLLATE utf8mb4_general_ci
-- رصيد Visa السائق
LEFT JOIN (
SELECT driverID, SUM(amount) AS total
FROM payments
WHERE isGiven = 'waiting'
AND payment_method IN ('visa-in','visa','visaRide','TransferFrom','payout','TransferTo')
GROUP BY driverID
) dr_visa ON dr_visa.driverID = cm.driver_id COLLATE utf8mb4_general_ci
-- محفظة السائق
LEFT JOIN (
SELECT driverID, SUM(amount) AS total
FROM driverWallet
WHERE paymentMethod IN ('visa-in','visa','visaRide','TransferFrom','payout','TransferTo')
GROUP BY driverID
) dr_wallet ON dr_wallet.driverID = cm.driver_id COLLATE utf8mb4_general_ci
-- محفظة الراكب
LEFT JOIN (
SELECT passenger_id, SUM(balance) AS total
FROM passengerWallet
GROUP BY passenger_id
) ps_wallet ON ps_wallet.passenger_id = cm.passenger_id COLLATE utf8mb4_general_ci
-- توكن السائق
LEFT JOIN driverToken dt
ON dt.captain_id = cm.driver_id COLLATE utf8mb4_general_ci
-- توكن الراكب
LEFT JOIN tokens tk
ON tk.passengerID = cm.passenger_id COLLATE utf8mb4_general_ci
-- عدد شكاوى الراكب
LEFT JOIN (
SELECT passenger_id, COUNT(*) AS cnt
FROM complaint
WHERE complaint_type = 'Passenger'
GROUP BY passenger_id
) ps_complaints ON ps_complaints.passenger_id = cm.passenger_id
-- عدد شكاوى السائق
LEFT JOIN (
SELECT driver_id, COUNT(*) AS cnt
FROM complaint
WHERE complaint_type = 'Driver'
GROUP BY driver_id
) dr_complaints ON dr_complaints.driver_id = cm.driver_id
";
try {
$stmt = $con->prepare($sql);
$stmt->execute();
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
if ($row) {
foreach ($row as &$item) {
if (!empty($item['passengerName'])) {
$dec = $encryptionHelper->decryptData($item['passengerName']);
if ($dec) $item['passengerName'] = $dec;
}
if (!empty($item['driverName'])) {
$dec = $encryptionHelper->decryptData($item['driverName']);
if ($dec) $item['driverName'] = $dec;
}
if (!empty($item['driverToken'])) {
$dec = $encryptionHelper->decryptData($item['driverToken']);
if ($dec) $item['driverToken'] = $dec;
}
if (!empty($item['passengerToken'])) {
$dec = $encryptionHelper->decryptData($item['passengerToken']);
if ($dec) $item['passengerToken'] = $dec;
foreach (['passengerName', 'driverName', 'driverToken', 'passengerToken'] as $field) {
if (!empty($item[$field])) {
$dec = $encryptionHelper->decryptData($item[$field]);
if ($dec)
$item[$field] = $dec;
}
}
}
jsonSuccess($row);
@@ -183,5 +145,4 @@ try {
}
} catch (Exception $e) {
jsonError("Database error: " . $e->getMessage());
}
?>
}