Update: 2026-06-25 01:37:22
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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": "من فضلك أدخل كود الإحالة",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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": "يرجى إدخال رمز الإحالة",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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": "دخل رمز الإحالة",
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user