From 3be2254b7081104708ccd7a01e3e9d0b9928617e Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Sat, 1 Aug 2026 03:46:46 +0300 Subject: [PATCH] Fix wallet: safe parsing in Flutter + LEFT JOIN always returns balance --- .../controller/payment/payment_controller.dart | 9 +++++++-- .../passengerWallet/getWalletByPassenger.php | 18 +++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/intaleq_rider/lib/controller/payment/payment_controller.dart b/intaleq_rider/lib/controller/payment/payment_controller.dart index 7a2208e..1eeb41f 100644 --- a/intaleq_rider/lib/controller/payment/payment_controller.dart +++ b/intaleq_rider/lib/controller/payment/payment_controller.dart @@ -53,8 +53,13 @@ class PaymentController extends GetxController { await CRUD().getWallet( link: AppLink.getWalletByPassenger, payload: {'passenger_id': box.read(BoxName.passengerID)}).then((value) { - box.write(BoxName.passengerWalletTotal, - value['message'][0]['total'].toString()); + final msg = value['message']; + if (msg is List && msg.isNotEmpty) { + box.write(BoxName.passengerWalletTotal, + (msg[0]['total'] ?? '0').toString()); + } else { + box.write(BoxName.passengerWalletTotal, '0'); + } }); isLoading = false; update(); diff --git a/payment_server/v2/main/ride/passengerWallet/getWalletByPassenger.php b/payment_server/v2/main/ride/passengerWallet/getWalletByPassenger.php index 4d74f73..e81caf1 100755 --- a/payment_server/v2/main/ride/passengerWallet/getWalletByPassenger.php +++ b/payment_server/v2/main/ride/passengerWallet/getWalletByPassenger.php @@ -4,7 +4,7 @@ $passenger_id = filterRequest("passenger_id"); $sql = "SELECT COALESCE(dummy.passenger_id, :passenger_id) AS passenger_id, - COALESCE(SUM(pw.balance), 0) AS total, -- Adjust column to represent payments + COALESCE(SUM(pw.balance), 0) AS total, COALESCE(p.first_name, '') AS first_name, COALESCE(p.last_name, '') AS last_name, COALESCE(p.phone, '') AS phone @@ -19,15 +19,11 @@ LIMIT 0, 25; $stmt = $con->prepare($sql); $stmt->execute(['passenger_id' => $passenger_id, 'passenger_id2' => $passenger_id]); -if ($stmt->rowCount() > 0) { - // Fetch the record - $row = $stmt->fetchAll(PDO::FETCH_ASSOC); - - printSuccess( $row); - -} - else{ - // Print a failure message - printFailure($message = "No wallet record found"); +// LEFT JOIN يُرجع دائماً صفاً واحداً على الأقل (balance=0 إذا لم توجد محفظة) +$row = $stmt->fetchAll(PDO::FETCH_ASSOC); +if (!empty($row)) { + printSuccess($row); +} else { + printFailure("No wallet record found"); } ?> \ No newline at end of file