418 lines
12 KiB
Dart
418 lines
12 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:service/constant/box_name.dart';
|
|
import 'package:service/constant/colors.dart';
|
|
import 'package:service/constant/links.dart';
|
|
import 'package:service/controller/functions/crud.dart';
|
|
import 'package:service/controller/mainController/pages/driver_page.dart';
|
|
import 'package:service/main.dart';
|
|
import 'package:service/views/widgets/my_dialog.dart';
|
|
import 'package:url_launcher/url_launcher.dart';
|
|
|
|
import '../../print.dart';
|
|
import 'pages/passengers_page.dart';
|
|
|
|
class MainController extends GetxController {
|
|
final formKey = GlobalKey<FormState>();
|
|
bool isLoading = false;
|
|
final passengerPhoneController = TextEditingController();
|
|
final driverPhoneController = TextEditingController();
|
|
final notesController = TextEditingController();
|
|
final carplateController = TextEditingController();
|
|
TextEditingController colorController = TextEditingController();
|
|
TextEditingController makeController = TextEditingController();
|
|
TextEditingController modelController = TextEditingController();
|
|
TextEditingController expirationDateController = TextEditingController();
|
|
TextEditingController yearController = TextEditingController();
|
|
TextEditingController ownerController = TextEditingController();
|
|
TextEditingController carOwnerWorkController = TextEditingController();
|
|
TextEditingController driverNameController = TextEditingController();
|
|
TextEditingController nationalIdController = TextEditingController();
|
|
TextEditingController birthDateController = TextEditingController();
|
|
TextEditingController licenseTypeController = TextEditingController();
|
|
TextEditingController phoneController = TextEditingController();
|
|
TextEditingController phoneCarController = TextEditingController();
|
|
TextEditingController carNumberController = TextEditingController();
|
|
TextEditingController manufactureYearController = TextEditingController();
|
|
TextEditingController carModelController = TextEditingController();
|
|
TextEditingController carTypeController = TextEditingController();
|
|
TextEditingController siteCarController = TextEditingController();
|
|
TextEditingController siteDriverController = TextEditingController();
|
|
TextEditingController registrationDateController = TextEditingController();
|
|
Map passengerData = {};
|
|
Map driverData = {};
|
|
List filteredDrivers = [];
|
|
var color = ''.obs;
|
|
var colorHex = ''.obs;
|
|
|
|
searchPassengerByPhone() async {
|
|
if (formKey.currentState!.validate()) {
|
|
await getPassengersByPhone();
|
|
Get.back();
|
|
Get.to(() => PassengersPage());
|
|
}
|
|
}
|
|
|
|
void searchDrivers(String query) {
|
|
if (query.isEmpty) {
|
|
filteredDrivers = driverNotCompleteRegistration;
|
|
update();
|
|
} else {
|
|
filteredDrivers = driverNotCompleteRegistration
|
|
.where((driver) => driver['phone_number']
|
|
.toString()
|
|
.toLowerCase()
|
|
.contains(query.toLowerCase()))
|
|
.toList();
|
|
update();
|
|
}
|
|
}
|
|
|
|
Future<void> makePhoneCall(String phoneNumber) async {
|
|
final Uri launchUri = Uri(
|
|
scheme: 'tel',
|
|
path: phoneNumber,
|
|
);
|
|
await launchUrl(launchUri);
|
|
}
|
|
|
|
void launchCommunication(
|
|
String method, String contactInfo, String message) async {
|
|
String url;
|
|
|
|
if (Platform.isIOS) {
|
|
switch (method) {
|
|
case 'phone':
|
|
url = 'tel:$contactInfo';
|
|
break;
|
|
case 'sms':
|
|
url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}';
|
|
break;
|
|
case 'whatsapp':
|
|
url =
|
|
'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}';
|
|
break;
|
|
case 'email':
|
|
url =
|
|
'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}';
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
} else if (Platform.isAndroid) {
|
|
switch (method) {
|
|
case 'phone':
|
|
url = 'tel:$contactInfo';
|
|
break;
|
|
case 'sms':
|
|
url = 'sms:$contactInfo?body=${Uri.encodeComponent(message)}';
|
|
break;
|
|
case 'whatsapp':
|
|
// Check if WhatsApp is installed
|
|
final bool whatsappInstalled =
|
|
await canLaunchUrl(Uri.parse('whatsapp://'));
|
|
if (whatsappInstalled) {
|
|
url =
|
|
'whatsapp://send?phone=$contactInfo&text=${Uri.encodeComponent(message)}';
|
|
} else {
|
|
// Provide an alternative action, such as opening the WhatsApp Web API
|
|
url =
|
|
'https://api.whatsapp.com/send?phone=$contactInfo&text=${Uri.encodeComponent(message)}';
|
|
}
|
|
break;
|
|
case 'email':
|
|
url =
|
|
'mailto:$contactInfo?subject=Subject&body=${Uri.encodeComponent(message)}';
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
if (await canLaunchUrl(Uri.parse(url))) {
|
|
await launchUrl(Uri.parse(url));
|
|
} else {}
|
|
}
|
|
|
|
List driverNotCompleteRegistration = [];
|
|
getDriverNotCompleteRegistration() async {
|
|
var res = await CRUD()
|
|
.get(link: AppLink.getDriverNotCompleteRegistration, payload: {});
|
|
if (res != 'failure') {
|
|
var d = jsonDecode(res)['message'];
|
|
driverNotCompleteRegistration = d;
|
|
filteredDrivers = driverNotCompleteRegistration;
|
|
update();
|
|
} else {
|
|
Get.snackbar(res, '');
|
|
}
|
|
}
|
|
|
|
List newDriverRegister = [];
|
|
getNewDriverRegister() async {
|
|
var res = await CRUD().get(link: AppLink.getNewDriverRegister, payload: {});
|
|
if (res != 'failure') {
|
|
var d = jsonDecode(res)['message'];
|
|
newDriverRegister = d;
|
|
update();
|
|
} else {
|
|
Get.snackbar(res, '');
|
|
}
|
|
}
|
|
|
|
addWelcomeCall(String driveId) async {
|
|
var res = await CRUD().post(link: AppLink.addWelcomeDriverNote, payload: {
|
|
"driverId": driveId,
|
|
"notes": notesController.text,
|
|
});
|
|
if (res != 'failue') {
|
|
Get.snackbar('Success'.tr, '', backgroundColor: AppColor.greenColor);
|
|
}
|
|
}
|
|
|
|
String selectedStatus = "I'm not ready yet".tr;
|
|
List passengerNotCompleteRegistration = [];
|
|
getPassengerNotCompleteRegistration() async {
|
|
var res = await CRUD()
|
|
.get(link: AppLink.getPassengersNotCompleteRegistration, payload: {});
|
|
if (res != 'failure') {
|
|
var d = jsonDecode(res)['message'];
|
|
passengerNotCompleteRegistration = d;
|
|
update();
|
|
} else {
|
|
Get.snackbar(res, '');
|
|
}
|
|
}
|
|
|
|
void setSelectedStatus(String status) {
|
|
selectedStatus = status;
|
|
update();
|
|
}
|
|
|
|
final List<String> statusOptions = [
|
|
"I'm not ready yet".tr,
|
|
"I don't have a suitable vehicle".tr,
|
|
"I'll register when the app is fully launched".tr,
|
|
"I need more help understanding the app".tr,
|
|
"My documents have expired".tr,
|
|
];
|
|
|
|
List carPlateNotEdit = [];
|
|
|
|
getCarPlateNotEdit() async {
|
|
var res = await CRUD().get(link: AppLink.getCarPlateNotEdit, payload: {});
|
|
if (res != 'failure') {
|
|
var d = jsonDecode(res)['message'];
|
|
carPlateNotEdit = d;
|
|
update();
|
|
} else {
|
|
MyDialog().getDialog('No Car found yet'.tr, 'thanks'.tr, const SizedBox(),
|
|
() {
|
|
Get.back();
|
|
});
|
|
}
|
|
}
|
|
|
|
List driverWithoutCar = [];
|
|
getdriverWithoutCar() async {
|
|
var res = await CRUD().get(link: AppLink.getdriverWithoutCar, payload: {});
|
|
if (res != 'failure') {
|
|
var d = jsonDecode(res)['message'];
|
|
driverWithoutCar = d;
|
|
update();
|
|
} else {
|
|
MyDialog().getDialog('No Car found yet'.tr, 'thanks'.tr, const SizedBox(),
|
|
() {
|
|
Get.back();
|
|
});
|
|
}
|
|
}
|
|
|
|
Future<void> addRegistrationCarEgyptHandling({
|
|
required String driverId,
|
|
required String carPlate,
|
|
required String color,
|
|
required String colorHex,
|
|
required String year,
|
|
required String make,
|
|
required String model,
|
|
required String expirationDate,
|
|
required String owner,
|
|
}) async {
|
|
try {
|
|
isLoading = true;
|
|
update();
|
|
|
|
var payload = {
|
|
'driverID': driverId,
|
|
'vin': 'vin',
|
|
'car_plate': carPlate,
|
|
'make': make,
|
|
'model': model,
|
|
'year': year,
|
|
'expiration_date': expirationDate,
|
|
'color': color,
|
|
'owner': owner,
|
|
'color_hex': colorHex,
|
|
'address': 'addressCar',
|
|
'displacement': 'displacement',
|
|
'fuel': 'fuel',
|
|
'registration_date': '2024-09-06',
|
|
};
|
|
|
|
Log.print('Payload: $payload');
|
|
|
|
var res =
|
|
await CRUD().post(link: AppLink.addCartoDriver, payload: payload);
|
|
|
|
isLoading = false;
|
|
update();
|
|
|
|
var status = jsonDecode(res);
|
|
Log.print('res: $res');
|
|
Log.print('status: $status');
|
|
|
|
if (status['status'] == 'success') {
|
|
await Future.wait([
|
|
CRUD().post(
|
|
link:
|
|
'${AppLink.seferAlexandriaServer}/ride/RegisrationCar/add.php',
|
|
payload: payload),
|
|
CRUD().post(
|
|
link: '${AppLink.seferGizaServer}/ride/RegisrationCar/add.php',
|
|
payload: payload),
|
|
]);
|
|
|
|
Get.snackbar('Success', 'Registration successful',
|
|
backgroundColor: AppColor.greenColor);
|
|
Get.back();
|
|
} else {
|
|
Log.print('Error: Unexpected status: ${status['status']}');
|
|
Get.snackbar('Error', 'Registration failed',
|
|
backgroundColor: Colors.red);
|
|
}
|
|
} catch (e) {
|
|
Log.print('Error: $e');
|
|
Get.snackbar('Error', 'An error occurred during registration',
|
|
backgroundColor: Colors.red);
|
|
}
|
|
}
|
|
|
|
editCarPlateNotEdit(
|
|
String driverId,
|
|
String carPlate,
|
|
String color,
|
|
String colorHex,
|
|
String year,
|
|
String make,
|
|
String model,
|
|
String expirationDate,
|
|
String owner,
|
|
) async {
|
|
var res = await CRUD().post(link: AppLink.editCarPlate, payload: {
|
|
"driverId": driverId,
|
|
"carPlate": carPlate,
|
|
"color": color,
|
|
"color_hex": colorHex,
|
|
"make": make,
|
|
"year": year,
|
|
"model": model,
|
|
"expiration_date": expirationDate.toString(),
|
|
"owner": owner,
|
|
"employee": storage.read(key: 'name').toString(),
|
|
});
|
|
Log.print('res: ${res}');
|
|
if (res != 'failure') {
|
|
// Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
|
|
Get.back();
|
|
carplateController.clear();
|
|
yearController.clear();
|
|
makeController.clear();
|
|
modelController.clear();
|
|
ownerController.clear();
|
|
|
|
await getCarPlateNotEdit();
|
|
update();
|
|
} else {
|
|
Get.snackbar(res, '', backgroundColor: AppColor.redColor);
|
|
}
|
|
}
|
|
|
|
// editCarPlateNotEdit(String driverId, carPlate) async {
|
|
// var res = await CRUD().post(link: AppLink.editCarPlate, payload: {
|
|
// "driverId": driverId,
|
|
// "carPlate": carPlate,
|
|
// });
|
|
// if (res != 'failure') {
|
|
// Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
|
|
// carplateController.clear();
|
|
// await getCarPlateNotEdit();
|
|
// update();
|
|
// } else {
|
|
// Get.snackbar(res, '', backgroundColor: AppColor.redColor);
|
|
// }
|
|
// }
|
|
|
|
saveNoteForDriverNotCompleteRegistration(String phone, editor, note) async {
|
|
var res = await CRUD().post(
|
|
link: AppLink.addNotesDriver,
|
|
payload: {"phone": phone, "editor": editor, "note": note});
|
|
if (res != 'failure') {
|
|
Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
|
|
notesController.clear();
|
|
} else {
|
|
Get.snackbar(res, '', backgroundColor: AppColor.redColor);
|
|
}
|
|
}
|
|
|
|
saveNoteForPassengerNotCompleteRegistration(
|
|
String phone, editor, note) async {
|
|
var res = await CRUD().post(
|
|
link: AppLink.addNotesPassenger,
|
|
payload: {"phone": phone, "editor": editor, "note": note});
|
|
if (res != 'failure') {
|
|
Get.snackbar(res, '', backgroundColor: AppColor.greenColor);
|
|
notesController.clear();
|
|
} else {
|
|
Get.snackbar(res, '', backgroundColor: AppColor.redColor);
|
|
}
|
|
}
|
|
|
|
searchDriverByPhone() async {
|
|
if (formKey.currentState!.validate()) {
|
|
await getDriverByPhone();
|
|
Get.back();
|
|
Get.to(() => DriverPage());
|
|
}
|
|
}
|
|
|
|
getPassengersByPhone() async {
|
|
var res = await CRUD().get(
|
|
link: AppLink.getPassengersByPhone,
|
|
payload: {"phone": '+2${passengerPhoneController.text}'});
|
|
|
|
if (res != 'failure') {
|
|
var d = jsonDecode(res);
|
|
passengerData = d;
|
|
update();
|
|
}
|
|
}
|
|
|
|
getDriverByPhone() async {
|
|
var res = await CRUD().get(
|
|
link: AppLink.getDriverByPhone,
|
|
payload: {"phone": '+2${driverPhoneController.text}'});
|
|
|
|
if (res != 'failure') {
|
|
var d = jsonDecode(res);
|
|
driverData = d;
|
|
update();
|
|
}
|
|
}
|
|
}
|