Files
tripz-llc/payment_server/v2/main/ride/payment/getAllPayment.php
T
2026-08-09 16:56:13 +03:00

72 lines
3.4 KiB
PHP
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
include "../../connect.php";
include_once "../../db_primary.php";
$driverID = filterRequest("driverID");
/**
* ‏كان استعلاماً واحداً يقرأ `payments` و`ride` معاً — و`ride` ليس في قاعدة
* ‏الدفع. النتيجة `SQLSTATE[42S02]: Table 'payment.ride' doesn't exist`، وبلا
* ‏try/catch صار خطأً قاتلاً يُسقط النقطة بـ 500 فتعلق شاشة رصيد الكابتن.
* ‏(وقبل إطفاء display_errors كان الخطأ يُطبع داخل الردّ فيصل التطبيق كـ
* ‏FormatException على `<br />` — نفس العلّة بوجه آخر.)
*
* ‏الفصل المعتمد: الرصيد أولاً ومستقلاً، والإحصاءات ثانياً وقابلة للفشل.
* ‏الرصيد رقم مالي من `payments` في قاعدة الدفع ولا عذر لسقوطه، أما عدّ
* ‏الرحلات فمعلومة مساعدة من قاعدة أخرى — تعذّرها يُعيد أصفاراً ولا يحجب
* ‏عن الكابتن رصيده.
*
* ‏و`ride` تُقرأ عبر اتصال مستقل لا عبر إشارة مؤهَّلة: القاعدتان قد تكونان
* ‏على خادمين مختلفين — انظر db_primary.php.
*/
// ── ١. الرصيد — من قاعدة الدفع، لا يعتمد على شيء خارجها ──
$balanceStmt = $con->prepare(
"SELECT COALESCE(SUM(amount), 0) AS total_amount
FROM payments
WHERE isGiven = 'waiting' AND `driverID` = :driverID"
);
$balanceStmt->bindValue(':driverID', $driverID);
$balanceStmt->execute();
$totalAmount = $balanceStmt->fetchColumn();
$result = [
'total_amount' => $totalAmount !== false ? $totalAmount : 0,
'morning_count' => 0,
'afternoon_count' => 0,
'total_amount_last_week' => 0,
];
// ── ٢. إحصاءات الرحلات — اتصال مستقل بالقاعدة الأساسية ──
$primary = primaryDbConnection();
if ($primary !== null) {
try {
$statsStmt = $primary->prepare(
"SELECT
COALESCE(SUM(`created_at` BETWEEN CURRENT_DATE() + INTERVAL 7 HOUR
AND CURRENT_DATE() + INTERVAL 10 HOUR), 0) AS morning_count,
COALESCE(SUM(`created_at` BETWEEN CURRENT_DATE() + INTERVAL 15 HOUR
AND CURRENT_DATE() + INTERVAL 18 HOUR), 0) AS afternoon_count,
COALESCE(SUM(CASE WHEN `created_at` > CURRENT_DATE() - INTERVAL 1 WEEK
THEN `price` ELSE 0 END), 0) AS total_amount_last_week
FROM `ride`
WHERE `driver_id` = :driverID
AND LOWER(`status`) IN ('finished','completed')"
);
$statsStmt->bindValue(':driverID', $driverID);
$statsStmt->execute();
if ($stats = $statsStmt->fetch(PDO::FETCH_ASSOC)) {
$result['morning_count'] = (int) $stats['morning_count'];
$result['afternoon_count'] = (int) $stats['afternoon_count'];
$result['total_amount_last_week'] = $stats['total_amount_last_week'];
}
} catch (PDOException $e) {
error_log('[getAllPayment] ride stats unavailable: ' . $e->getMessage());
}
}
// ‏الشكل كما كان: مصفوفة من صفّ واحد، والتطبيق يقرأ message[0]['total_amount'].
printSuccess([$result]);