180) { $windowDays = 30; } try { // ‏الصفوف الموجبة وحدها. السالبة خصومات (عمولة، التزامات) وعدّها // ‏هنا كان سيجعل سائقاً يُخصم منه كثيراً يبدو ذا قناة نشطة. // // ‏وباستثناء صفوف الالتزامات صراحةً: 'obligation' مرجعها هذا المحرك // ‏نفسه، ولو ظهرت يوماً بمبلغ موجب (تصحيح، استرداد) لصارت البوابة // ‏تقيس أثر نفسها. $st = $con->prepare(" SELECT COUNT(DISTINCT DATE(dateCreated)) AS days_with_income, COALESCE(SUM(amount), 0) AS total_income, MAX(DATE(dateCreated)) AS last_income_date FROM driverWallet WHERE driverID = ? AND amount > 0 AND paymentMethod <> 'obligation' AND dateCreated >= DATE_SUB(CURDATE(), INTERVAL ? DAY) "); $st->execute([$driverID, $windowDays]); $row = $st->fetch(PDO::FETCH_ASSOC) ?: []; printSuccess([ 'driver_id' => $driverID, 'window_days' => $windowDays, 'days_with_income' => (int) ($row['days_with_income'] ?? 0), 'total_income' => (float) ($row['total_income'] ?? 0), 'last_income_date' => $row['last_income_date'] ?? null, ]); } catch (PDOException $e) { error_log('[obligation/income_summary] ' . $e->getMessage()); http_response_code(500); printFailure('Failed to read income summary'); }