Update: 2026-06-25 01:37:22

This commit is contained in:
Hamza-Ayed
2026-06-25 01:37:23 +03:00
parent 014b9a78da
commit 1ff13f09ac
8 changed files with 89 additions and 25 deletions

View File

@@ -6,6 +6,8 @@ if (!$user_id || $role != 'passenger') {
jsonError("Invalid parameters or unauthorized token"); jsonError("Invalid parameters or unauthorized token");
} }
$country_code = $_POST['country_code'] ?? 'Jordan';
// 1. Get the passenger's referral code // 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 = $con->prepare("SELECT referral_code FROM user_referral_codes WHERE user_id = ? AND user_type = 'passenger'");
$stmtCode->execute([$user_id]); $stmtCode->execute([$user_id]);
@@ -36,18 +38,41 @@ $referrals = $stmtRefs->fetchAll(PDO::FETCH_ASSOC);
$totalDrivers = 0; $totalDrivers = 0;
$totalPassengers = 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 // Format data and calculate stats
foreach ($referrals as &$ref) { foreach ($referrals as &$ref) {
if ($ref['invited_user_type'] == 'driver') { if ($ref['invited_user_type'] == 'driver') {
$totalDrivers++; $totalDrivers++;
$ref['target_trips'] = 50; $ref['target_trips'] = $driverTargetTrips;
$ref['reward_syp'] = 500; $ref['reward_syp'] = $driverReward;
$ref['can_claim'] = ($ref['trip_count'] >= 50 && $ref['is_reward_claimed'] == 0) ? true : false; $ref['can_claim'] = ($ref['trip_count'] >= $driverTargetTrips && $ref['is_reward_claimed'] == 0) ? true : false;
} else { } else {
$totalPassengers++; $totalPassengers++;
$ref['target_trips'] = 1; $ref['target_trips'] = $passengerTargetTrips;
$ref['reward_syp'] = 30; // Just illustrative, rewards are automatic $ref['reward_syp'] = $passengerReward;
$ref['can_claim'] = ($ref['trip_count'] >= 1 && $ref['is_reward_claimed'] == 0) ? true : false; $ref['can_claim'] = ($ref['trip_count'] >= $passengerTargetTrips && $ref['is_reward_claimed'] == 0) ? true : false;
} }
} }

View File

@@ -4339,8 +4339,7 @@ class RideLifecycleController extends GetxController {
link: AppLink.getPassengerRate, link: AppLink.getPassengerRate,
payload: {'passenger_id': box.read(BoxName.passengerID)}); payload: {'passenger_id': box.read(BoxName.passengerID)});
if (res != 'failure') { if (res != 'failure') {
var json = jsonDecode(res); var message = res['data'] ?? res['message'];
var message = json['data'] ?? json['message'];
if (message['rating'] == null) { if (message['rating'] == null) {
passengerRate = 5.0; // Default rating passengerRate = 5.0; // Default rating
} else { } else {

View File

@@ -1,8 +1,9 @@
import 'dart:convert';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.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/constant/links.dart';
import 'package:siro_rider/controller/functions/crud.dart'; import 'package:siro_rider/controller/functions/crud.dart';
import 'package:siro_rider/main.dart';
class InvitesRewardsController extends GetxController { class InvitesRewardsController extends GetxController {
bool isLoading = false; bool isLoading = false;
@@ -22,18 +23,29 @@ class InvitesRewardsController extends GetxController {
update(); update();
try { 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( var response = await CRUD().post(
link: AppLink.getPassengerReferrals, link: AppLink.getPassengerReferrals,
payload: {} // Token is automatically handled by CRUD() payload: {
'country_code': box.read(BoxName.countryCode) ?? 'Jordan',
},
); );
if (response != 'failure') { if (response != 'failure') {
var data = jsonDecode(response); if (response['status'] == 'success') {
if (data['status'] == 'success') { referralCode ??= response['message']['referral_code'];
referralCode = data['message']['referral_code']; totalInvitedDrivers = response['message']['total_invited_drivers'] ?? 0;
totalInvitedDrivers = data['message']['total_invited_drivers'] ?? 0; totalInvitedPassengers = response['message']['total_invited_passengers'] ?? 0;
totalInvitedPassengers = data['message']['total_invited_passengers'] ?? 0; referrals = response['message']['referrals'] ?? [];
referrals = data['message']['referrals'] ?? [];
} else { } else {
referrals = []; referrals = [];
} }
@@ -61,11 +73,10 @@ class InvitesRewardsController extends GetxController {
Get.back(); // close loading Get.back(); // close loading
if (response != 'failure') { if (response != 'failure') {
var data = jsonDecode(response); if (response['status'] == 'success') {
if (data['status'] == 'success') {
Get.snackbar("Success".tr, "You have been successfully referred!".tr, backgroundColor: Colors.green, colorText: Colors.white); Get.snackbar("Success".tr, "You have been successfully referred!".tr, backgroundColor: Colors.green, colorText: Colors.white);
} else { } else {
Get.snackbar("Notice".tr, data['message'] ?? "Could not add invite".tr); Get.snackbar("Notice".tr, response['message'] ?? "Could not add invite".tr);
} }
} else { } else {
Get.snackbar("Error".tr, "Network error occurred".tr); Get.snackbar("Error".tr, "Network error occurred".tr);

View File

@@ -1,5 +1,3 @@
import 'dart:convert';
import 'package:siro_rider/constant/box_name.dart'; import 'package:siro_rider/constant/box_name.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:siro_rider/constant/links.dart'; import 'package:siro_rider/constant/links.dart';
@@ -35,9 +33,7 @@ class PromosController extends GetxController {
isLoading = false; isLoading = false;
update(); update();
} else { } else {
var jsonDecoded = jsonDecode(res); promoList = res['message'];
promoList = jsonDecoded['message'];
isLoading = false; isLoading = false;
update(); update();
} }

View File

@@ -1712,4 +1712,15 @@ final Map<String, String> ar_eg = {
"⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!",
"💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💰 Pay with Wallet": "💰 ادفع بالمحفظة",
"💳 Pay with Credit Card": "💳 ادفع بالبطاقة", "💳 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": "من فضلك أدخل كود الإحالة",
}; };

View File

@@ -1712,4 +1712,15 @@ final Map<String, String> ar_jo = {
"⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!",
"💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💰 Pay with Wallet": "💰 ادفع بالمحفظة",
"💳 Pay with Credit Card": "💳 ادفع بالبطاقة", "💳 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": "يرجى إدخال رمز الإحالة",
}; };

View File

@@ -1712,4 +1712,15 @@ final Map<String, String> ar_sy = {
"⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!", "⚠️ You need to choose an amount!": "⚠️ لازم تختار مبلغ!",
"💰 Pay with Wallet": "💰 ادفع بالمحفظة", "💰 Pay with Wallet": "💰 ادفع بالمحفظة",
"💳 Pay with Credit Card": "💳 ادفع بالبطاقة", "💳 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": "دخل رمز الإحالة",
}; };

View File

@@ -53,7 +53,7 @@ class PaymentController extends GetxController {
link: AppLink.getWalletByPassenger, link: AppLink.getWalletByPassenger,
payload: {'passenger_id': box.read(BoxName.passengerID)}).then((value) { payload: {'passenger_id': box.read(BoxName.passengerID)}).then((value) {
box.write(BoxName.passengerWalletTotal, box.write(BoxName.passengerWalletTotal,
jsonDecode(value)['message'][0]['total'].toString()); value['message'][0]['total'].toString());
}); });
isLoading = false; isLoading = false;
update(); update();