` — نفس العلّة بوجه آخر.) * * ‏الفصل المعتمد: الرصيد أولاً ومستقلاً، والإحصاءات ثانياً وقابلة للفشل. * ‏الرصيد رقم مالي من `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]);