diff --git a/backend/ride/invitor/get_passenger_referrals.php b/backend/ride/invitor/get_passenger_referrals.php index 0e2d82e..63e3044 100644 --- a/backend/ride/invitor/get_passenger_referrals.php +++ b/backend/ride/invitor/get_passenger_referrals.php @@ -6,6 +6,8 @@ if (!$user_id || $role != 'passenger') { jsonError("Invalid parameters or unauthorized token"); } +$country_code = $_POST['country_code'] ?? 'Jordan'; + // 1. Get the passenger's referral code $stmtCode = $con->prepare("SELECT referral_code FROM user_referral_codes WHERE user_id = ? AND user_type = 'passenger'"); $stmtCode->execute([$user_id]); @@ -36,18 +38,41 @@ $referrals = $stmtRefs->fetchAll(PDO::FETCH_ASSOC); $totalDrivers = 0; $totalPassengers = 0; +// Country-specific reward thresholds +switch ($country_code) { + case 'Syria': + $driverTargetTrips = 50; + $driverReward = 500; + $passengerTargetTrips = 1; + $passengerReward = 30; + break; + case 'Egypt': + $driverTargetTrips = 30; + $driverReward = 100; + $passengerTargetTrips = 2; + $passengerReward = 20; + break; + case 'Jordan': + default: + $driverTargetTrips = 20; + $driverReward = 5; + $passengerTargetTrips = 2; + $passengerReward = 2; + break; +} + // Format data and calculate stats foreach ($referrals as &$ref) { if ($ref['invited_user_type'] == 'driver') { $totalDrivers++; - $ref['target_trips'] = 50; - $ref['reward_syp'] = 500; - $ref['can_claim'] = ($ref['trip_count'] >= 50 && $ref['is_reward_claimed'] == 0) ? true : false; + $ref['target_trips'] = $driverTargetTrips; + $ref['reward_syp'] = $driverReward; + $ref['can_claim'] = ($ref['trip_count'] >= $driverTargetTrips && $ref['is_reward_claimed'] == 0) ? true : false; } else { $totalPassengers++; - $ref['target_trips'] = 1; - $ref['reward_syp'] = 30; // Just illustrative, rewards are automatic - $ref['can_claim'] = ($ref['trip_count'] >= 1 && $ref['is_reward_claimed'] == 0) ? true : false; + $ref['target_trips'] = $passengerTargetTrips; + $ref['reward_syp'] = $passengerReward; + $ref['can_claim'] = ($ref['trip_count'] >= $passengerTargetTrips && $ref['is_reward_claimed'] == 0) ? true : false; } } diff --git a/siro_rider/lib/controller/home/map/ride_lifecycle_controller.dart b/siro_rider/lib/controller/home/map/ride_lifecycle_controller.dart index 1560731..653d389 100644 --- a/siro_rider/lib/controller/home/map/ride_lifecycle_controller.dart +++ b/siro_rider/lib/controller/home/map/ride_lifecycle_controller.dart @@ -4339,8 +4339,7 @@ class RideLifecycleController extends GetxController { link: AppLink.getPassengerRate, payload: {'passenger_id': box.read(BoxName.passengerID)}); if (res != 'failure') { - var json = jsonDecode(res); - var message = json['data'] ?? json['message']; + var message = res['data'] ?? res['message']; if (message['rating'] == null) { passengerRate = 5.0; // Default rating } else { diff --git a/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart b/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart index 0ebeddf..667c079 100644 --- a/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart +++ b/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart @@ -1,8 +1,9 @@ -import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:siro_rider/constant/box_name.dart'; import 'package:siro_rider/constant/links.dart'; import 'package:siro_rider/controller/functions/crud.dart'; +import 'package:siro_rider/main.dart'; class InvitesRewardsController extends GetxController { bool isLoading = false; @@ -22,18 +23,29 @@ class InvitesRewardsController extends GetxController { update(); try { + // Ensure a referral code exists first (creates one if not) + var codeResponse = await CRUD().post( + link: AppLink.getUnifiedCode, + payload: {}, + ); + + if (codeResponse != 'failure' && codeResponse['status'] == 'success') { + referralCode = codeResponse['message']['referral_code']; + } + var response = await CRUD().post( link: AppLink.getPassengerReferrals, - payload: {} // Token is automatically handled by CRUD() + payload: { + 'country_code': box.read(BoxName.countryCode) ?? 'Jordan', + }, ); if (response != 'failure') { - var data = jsonDecode(response); - if (data['status'] == 'success') { - referralCode = data['message']['referral_code']; - totalInvitedDrivers = data['message']['total_invited_drivers'] ?? 0; - totalInvitedPassengers = data['message']['total_invited_passengers'] ?? 0; - referrals = data['message']['referrals'] ?? []; + if (response['status'] == 'success') { + referralCode ??= response['message']['referral_code']; + totalInvitedDrivers = response['message']['total_invited_drivers'] ?? 0; + totalInvitedPassengers = response['message']['total_invited_passengers'] ?? 0; + referrals = response['message']['referrals'] ?? []; } else { referrals = []; } @@ -61,11 +73,10 @@ class InvitesRewardsController extends GetxController { Get.back(); // close loading if (response != 'failure') { - var data = jsonDecode(response); - if (data['status'] == 'success') { + if (response['status'] == 'success') { Get.snackbar("Success".tr, "You have been successfully referred!".tr, backgroundColor: Colors.green, colorText: Colors.white); } else { - Get.snackbar("Notice".tr, data['message'] ?? "Could not add invite".tr); + Get.snackbar("Notice".tr, response['message'] ?? "Could not add invite".tr); } } else { Get.snackbar("Error".tr, "Network error occurred".tr); diff --git a/siro_rider/lib/controller/home/profile/promos_controller.dart b/siro_rider/lib/controller/home/profile/promos_controller.dart index 4f2c102..841c68a 100644 --- a/siro_rider/lib/controller/home/profile/promos_controller.dart +++ b/siro_rider/lib/controller/home/profile/promos_controller.dart @@ -1,5 +1,3 @@ -import 'dart:convert'; - import 'package:siro_rider/constant/box_name.dart'; import 'package:get/get.dart'; import 'package:siro_rider/constant/links.dart'; @@ -35,9 +33,7 @@ class PromosController extends GetxController { isLoading = false; update(); } else { - var jsonDecoded = jsonDecode(res); - - promoList = jsonDecoded['message']; + promoList = res['message']; isLoading = false; update(); } diff --git a/siro_rider/lib/controller/local/ar_eg.dart b/siro_rider/lib/controller/local/ar_eg.dart index 6c3c334..880cc96 100644 --- a/siro_rider/lib/controller/local/ar_eg.dart +++ b/siro_rider/lib/controller/local/ar_eg.dart @@ -1712,4 +1712,15 @@ final Map ar_eg = { "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💳 Pay with Credit Card": "💳 ادفع بالبطاقة", + + // Invite page translations + "Your Permanent Referral Code": "رمز الإحالة الدائم بتاعك", + "Loading...": "بيتم التحميل...", + "Code copied!": "تم نسخ الكود!", + "Share via WhatsApp Groups": "مشاركة عبر جروبات واتساب", + "Enter Inviter's Code": "أدخل رمز الداعي", + "If someone referred you, enter their code below to link accounts and receive rewards.": "لو حد دعاك، أدخل كوده تحت عشان تربط الحسابات وتاخد مكافآت.", + "Enter Code (e.g. AB1234)": "أدخل الكود (مثل: AB1234)", + "Link": "ربط", + "Please enter a referral code": "من فضلك أدخل كود الإحالة", }; diff --git a/siro_rider/lib/controller/local/ar_jo.dart b/siro_rider/lib/controller/local/ar_jo.dart index ea5112a..1c5a382 100644 --- a/siro_rider/lib/controller/local/ar_jo.dart +++ b/siro_rider/lib/controller/local/ar_jo.dart @@ -1712,4 +1712,15 @@ final Map ar_jo = { "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💳 Pay with Credit Card": "💳 ادفع بالبطاقة", + + // Invite page translations + "Your Permanent Referral Code": "رمز الإحالة الدائم الخاص بك", + "Loading...": "جارٍ التحميل...", + "Code copied!": "تم نسخ الرمز!", + "Share via WhatsApp Groups": "مشاركة عبر مجموعات واتساب", + "Enter Inviter's Code": "أدخل رمز الداعي", + "If someone referred you, enter their code below to link accounts and receive rewards.": "إذا قام شخص بدعوتك، أدخل رمزه أدناه لربط الحسابات والحصول على المكافآت.", + "Enter Code (e.g. AB1234)": "أدخل الرمز (مثال: AB1234)", + "Link": "ربط", + "Please enter a referral code": "يرجى إدخال رمز الإحالة", }; diff --git a/siro_rider/lib/controller/local/ar_sy.dart b/siro_rider/lib/controller/local/ar_sy.dart index 587df88..a149ad9 100644 --- a/siro_rider/lib/controller/local/ar_sy.dart +++ b/siro_rider/lib/controller/local/ar_sy.dart @@ -1712,4 +1712,15 @@ final Map ar_sy = { "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💳 Pay with Credit Card": "💳 ادفع بالبطاقة", + + // Invite page translations + "Your Permanent Referral Code": "رمز الإحالة الدائم", + "Loading...": "جارٍ التحميل...", + "Code copied!": "تم نسخ الرمز!", + "Share via WhatsApp Groups": "مشاركة عبر مجموعات واتساب", + "Enter Inviter's Code": "دخل رمز الداعي", + "If someone referred you, enter their code below to link accounts and receive rewards.": "إذا حدا دعاك، دخل رمزه تحت لربط الحسابات والمكافآت.", + "Enter Code (e.g. AB1234)": "دخل الرمز (مثال: AB1234)", + "Link": "ربط", + "Please enter a referral code": "دخل رمز الإحالة", }; diff --git a/siro_rider/lib/controller/payment/payment_controller.dart b/siro_rider/lib/controller/payment/payment_controller.dart index 1d74eba..92205e5 100644 --- a/siro_rider/lib/controller/payment/payment_controller.dart +++ b/siro_rider/lib/controller/payment/payment_controller.dart @@ -53,7 +53,7 @@ class PaymentController extends GetxController { link: AppLink.getWalletByPassenger, payload: {'passenger_id': box.read(BoxName.passengerID)}).then((value) { box.write(BoxName.passengerWalletTotal, - jsonDecode(value)['message'][0]['total'].toString()); + value['message'][0]['total'].toString()); }); isLoading = false; update();