This commit is contained in:
Hamza-Ayed
2024-07-15 11:37:06 +03:00
parent 65a8084c92
commit 4ffaa591fa
22 changed files with 739 additions and 42 deletions

View File

@@ -0,0 +1,119 @@
import 'dart:convert';
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/links.dart';
import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../main.dart';
import '../../functions/launch.dart';
import '../../notification/notification_captain_controller.dart';
class InviteController extends GetxController {
final TextEditingController invitePhoneController = TextEditingController();
List driverInvitationData = [];
@override
void onInit() {
super.onInit();
// fetchDriverStats();
}
void fetchDriverStats() async {
try {
var response = await CRUD().get(link: AppLink.getInviteDriver, payload: {
"driverId": box.read(BoxName.driverID),
});
if (response != 'failure') {
var data = jsonDecode(response);
driverInvitationData = data['message'];
update();
// print('driverInitationData: $driverInitationData');
}
} catch (e) {
print('Error fetching driver stats: $e');
}
}
void onSelectDriverInvitation(int index) async {
MyDialog().getDialog(
driverInvitationData[index]['countOfInvitDriver'] < 100
? '${'When'.tr} ${driverInvitationData[index]['invitorName']} ${"complete, you can claim your gift".tr} '
: 'You deserve the gift'.tr,
'${driverInvitationData[index]['invitorName']} ${driverInvitationData[index]['countOfInvitDriver']} / 100 ${'Trip'.tr}',
() async {
if (driverInvitationData[index]['countOfInvitDriver'] < 100) {
Get.back();
} else {
//claim your gift
if (driverInvitationData[index]['isGiftToken'].toString() == '0') {
Get.back();
await Get.find<CaptainWalletController>()
.addDriverWallet('paymentMethod', '500');
// add for invitor too
await Get.find<CaptainWalletController>().addDriverWalletToInvitor(
'paymentMethod',
driverInvitationData[index]['driverInviterId'],
'500');
await CRUD().post(
link: AppLink.updateInviteDriver,
payload: {'id': driverInvitationData[index]['id']});
NotificationCaptainController().addNotificationCaptain(
driverInvitationData[index]['driverInviterId'].toString(),
"You have got a gift for invitation".tr,
'${"You have 500".tr} ${'LE'}',
false);
} else {
Get.back();
MyDialog().getDialog("You have got a gift".tr,
"Share the app with another new driver".tr, () {
Get.back();
});
}
}
},
);
}
void sendInvite() async {
if (invitePhoneController.text.isEmpty) {
Get.snackbar('Error', 'Please enter an phone address'.tr);
return;
}
// try {
var response = await CRUD().post(link: AppLink.addInviteDriver, payload: {
"driverId": box.read(BoxName.driverID),
"inviterDriverPhone": '+2${invitePhoneController.text}'
});
if (response != 'failure') {
var d = jsonDecode(response);
Get.snackbar('Success', 'Invite sent successfully'.tr);
String message = '${'*SEFER DRIVER CODE*'.tr}\n\n'
'${"Use this code in registration".tr}\n'
'${"To get a gift for both".tr}\n\n'
'${"The period of this code is 1 hour".tr}\n\n'
'${'before'.tr} *${d['message']['expirationTime'].toString()}*\n\n'
'_*${d['message']['inviteCode'].toString()}*_\n\n'
'${"Install our app:".tr}\n'
'Android: https://play.google.com/store/apps/details?id=com.sefer_driver\n'
'iOS: https://apps.apple.com/ae/app/sefer-driver/id6502189302';
launchCommunication(
'whatsapp', '+2${invitePhoneController.text}', message);
invitePhoneController.clear();
} else {
Get.snackbar('Error', 'Failed to send invite'.tr);
}
// } catch (e) {
// print('Error sending invite: $e');
// Get.snackbar('Error', 'An error occurred'.tr);
// }
}
}

View File

@@ -76,6 +76,7 @@ class LoginDriverController extends GetxController {
box.write(BoxName.phoneVerified,
jsonDecoeded['data'][0]['is_verified'].toString());
box.write(BoxName.phoneDriver, jsonDecoeded['data'][0]['phone']);
box.write(BoxName.nameArabic, jsonDecoeded['data'][0]['name_arabic']);
box.write(
BoxName.bankCodeDriver, jsonDecoeded['data'][0]['bankCode']);
box.write(BoxName.accountBankNumberDriver,

View File

@@ -106,7 +106,8 @@ class RegisterCaptainController extends GetxController {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
'phone_number': '+2${phoneController.text}',
'token_code': randomNumber.toString(),
"driverId": box.read(BoxName.driverID)
"driverId": box.read(BoxName.driverID),
"email": box.read(BoxName.emailDriver),
});
await smsEgyptController.sendSmsEgypt(
@@ -120,7 +121,8 @@ class RegisterCaptainController extends GetxController {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
'phone_number': '+2${phoneController.text}',
'token_code': randomNumber.toString(),
"driverId": box.read(BoxName.driverID)
"driverId": box.read(BoxName.driverID),
"email": box.read(BoxName.emailDriver),
});
await smsEgyptController.sendSmsEgypt(

View File

@@ -13,6 +13,7 @@ import '../../constant/box_name.dart';
import '../../constant/colors.dart';
import '../../constant/style.dart';
import '../../main.dart';
import '../../views/auth/captin/criminal_documents_page.dart';
import '../../views/home/Captin/home_captain/home_captin.dart';
import '../../views/home/Captin/orderCaptin/order_speed_request.dart';
import '../../views/home/Captin/orderCaptin/order_request_page.dart';
@@ -167,6 +168,13 @@ class FirebaseMessagesController extends GetxController {
// // remoteID: driverList[2].toString(),
// ));
} catch (e) {}
} else if (message.notification!.title! == "Criminal Document Required") {
NotificationController().showNotification(
"Criminal Document Required".tr,
message.notification!.body!,
'tone2',
);
Get.to(() => const CriminalDocumemtPage());
} else if (message.notification!.title! == 'Call End'.tr) {
try {
var myListString = message.data['passengerList'];

View File

@@ -27,6 +27,7 @@ class CRUD {
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}',
},
);
print(response);
// if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body);
if (jsonData['status'] == 'success') {

View File

@@ -1,6 +1,7 @@
import 'dart:convert';
import 'dart:io';
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/constant/info.dart';
import 'package:SEFER/constant/links.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/functions/crud.dart';
@@ -283,6 +284,7 @@ class AI extends GetxController {
// backgroundColor: Colors.red);
// }
}
// Future<void> addDriverEgypt() async {
// // try {
// // Extract values from box or set defaults
@@ -367,6 +369,16 @@ class AI extends GetxController {
// // backgroundColor: Colors.red);
// // }
// }
addCriminalDeocuments() async {
var res = await CRUD().post(link: AppLink.addCriminalDocuments, payload: {
"driverId": box.read(BoxName.driverID),
"IssueDate": responseCriminalRecordEgypt['IssueDate'],
"InspectionResult": responseCriminalRecordEgypt['InspectionResult'],
});
if (res != 'failure') {
Get.snackbar('uploaded sucssefuly'.tr, '');
}
}
Future addRegistrationCarEgypt() async {
try {
@@ -407,6 +419,7 @@ class AI extends GetxController {
Map<String, dynamic> responseBackCarLicenseMap = {};
Map<String, dynamic> responseIdCardMap = {};
Map<String, dynamic> responseIdCardDriverEgyptBack = {};
Map<String, dynamic> responseForComplaint = {};
Map<String, dynamic> responseIdCardDriverEgyptFront = {};
Map<String, dynamic> responseIdEgyptFront = {};
Map<String, dynamic> responseCriminalRecordEgypt = {};
@@ -560,6 +573,59 @@ class AI extends GetxController {
} else {}
}
Future getComplaintDataToAI() async {
var res = await CRUD().get(
link: AppLink.getComplaintAllDataForDriver,
payload: {'driver_id': box.read(BoxName.driverID).toString()},
);
if (res != 'failure') {
var d = jsonDecode(res)['message'];
return d;
} else {
return [
{'data': 'no data'}
];
}
}
Future<dynamic> anthropicAIForComplaint() async {
var dataComplaint = await getComplaintDataToAI();
var messagesData = [
{
"role": "user",
"content": [
{
"type": "text",
"text": "$dataComplaint ${AppInformation.complaintPrompt} "
}
]
}
];
var requestBody = jsonEncode({
"model": "claude-3-haiku-20240307",
"max_tokens": 1024,
"temperature": 0,
"system": "Json output only without any additional ",
"messages": messagesData,
});
final response = await http.post(
Uri.parse('https://api.anthropic.com/v1/messages'),
headers: {
'x-api-key': AK.anthropicAIkeySeferNew,
'anthropic-version': '2023-06-01',
'content-type': 'application/json'
},
body: requestBody,
);
if (response.statusCode == 200) {
var responseData = jsonDecode(utf8.decode(response.bodyBytes));
// Process the responseData as needed
print(responseData);
responseForComplaint = jsonDecode(responseData['content'][0]['text']);
}
}
Future<dynamic> anthropicAI(
String payload, String prompt, String idType) async {
var messagesData = [

View File

@@ -181,6 +181,17 @@ class CaptainWalletController extends GetxController {
});
}
Future addDriverWalletToInvitor(String paymentMethod, driverID, point) async {
paymentToken = await generateToken(point);
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
'driverID': driverID,
'paymentID': paymentID.toString(),
'amount': point,
'token': paymentToken,
'paymentMethod': paymentMethod.toString(),
});
}
Future addSeferWallet(String paymentMethod, String point) async {
var seferToken = await generateToken(point.toString());
await CRUD().post(link: AppLink.addSeferWallet, payload: {

View File

@@ -8,7 +8,6 @@ import 'package:package_info_plus/package_info_plus.dart';
import '../../constant/box_name.dart';
import '../../main.dart';
import '../../onbording_page.dart';
import '../../views/auth/captin/login_captin.dart';
class SplashScreenController extends GetxController

View File

@@ -249,6 +249,42 @@ class MyTranslation extends Translations {
"Occupation": "المهنة",
"Gender": "الجنس",
"Religion": "الدين",
"You have 500": "لديك 500",
"You have got a gift for invitation": "لقد حصلت على هدية للدعوة",
"You have got a gift": "لقد حصلت على هدية",
"Share the app with another new driver":
"شارك التطبيق مع سائق جديد آخر",
"for your first registration!": "للتسجيل الأول!",
"Get it Now!": "احصل عليه الآن!",
"before": "قبل",
"3000 LE": "3000 جنيه مصري",
"Install our app:": "قم بتثبيت تطبيقنا:",
"Invite another driver and both get a gift after he completes 100 trips!":
"ادع صديقًا ليكون سائقًا واحصلا على هدية بعد إكماله 100 مشوار!",
"Share App": "شارك التطبيق",
'You deserve the gift': "أنت تستحق الهدية",
"complete, you can claim your gift": " يمكنك المطالبة بهديتك",
"When": "‏عندما يكمل",
"Enter driver's phone": "أدخل رقم هاتف السائق",
"Send Invite": "أرسل الدعوة", "Show Invitations": "عرض الدعوات",
"Trip": "مشوار",
"No invitation found yet!": "لم يتم العثور على أي دعوات حتى الآن!",
"The period of this code is 1 hour":
"فترة صلاحية هذا الكود هي ساعة واحدة",
"SEFER DRIVER CODE": "كود سائق سفر",
"Use this code in registration": "استخدم هذا الكود عند التسجيل",
"To get a gift for both": "للحصول على هدية لكليكما",
"Invite a Driver": "ادع سائقًا",
// 'Invite another driver and both get a gift after he complete 100 trips!':""
"As a new driver, you're eligible for a special offer!":
"بصفتك سائقًا جديدًا، فأنت مؤهل للحصول على عرض خاص!",
"Welcome Offer!": "عرض ترحيبي!",
"Please enter a phone number": "من فضلك أدخل رقم هاتف",
"Invite sent successfully": "تم إرسال الدعوة بنجاح",
"Failed to send invite": "فشل إرسال الدعوة",
"An error occurred": "حدث خطأ",
"Criminal Document Required": "الفيش الجنائي مطلوب",
"Criminal Document": "الفيش الجنائي",
"Marital Status": "الحالة الاجتماعية",
"Full Name (Marital)": "الاسم الكامل (الزوجي)",
"Expiration Date": "تاريخ الانتهاء",

View File

@@ -2,7 +2,6 @@ import 'dart:convert';
import 'package:SEFER/constant/api_key.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/functions/tts.dart';
import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
import 'package:SEFER/controller/payment/paymob/paymob_response.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:http/http.dart' as http;