diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index bea330c..a461154 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -140,8 +140,9 @@ class CRUD { 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', }, ); - print(response.request); - print(response.body); + Log.print('payload: ${payload}'); + Log.print('response.request: ${response.request}'); + Log.print('response.body: ${response.body}'); // print(response.statusCode); var jsonData = jsonDecode(response.body); if (response.statusCode == 200) { diff --git a/lib/controller/mainController/main_controller.dart b/lib/controller/mainController/main_controller.dart index 5c109c3..23594bc 100644 --- a/lib/controller/mainController/main_controller.dart +++ b/lib/controller/mainController/main_controller.dart @@ -20,9 +20,17 @@ class MainController extends GetxController { 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(); Map passengerData = {}; Map driverData = {}; List filteredDrivers = []; + var color = ''.obs; + var colorHex = ''.obs; searchPassengerByPhone() async { if (formKey.currentState!.validate()) { @@ -194,14 +202,37 @@ class MainController extends GetxController { } } - editCarPlateNotEdit(String driverId, carPlate) async { + 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, }); + Log.print('res: ${res}'); if (res != 'failure') { Get.snackbar(res, '', backgroundColor: AppColor.greenColor); carplateController.clear(); + yearController.clear(); + makeController.clear(); + modelController.clear(); + ownerController.clear(); + Get.back(); await getCarPlateNotEdit(); update(); } else { @@ -209,6 +240,21 @@ class MainController extends GetxController { } } + // 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, diff --git a/lib/controller/mainController/pages/edit_car.dart b/lib/controller/mainController/pages/edit_car.dart new file mode 100644 index 0000000..f0b9a1f --- /dev/null +++ b/lib/controller/mainController/pages/edit_car.dart @@ -0,0 +1,249 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:intl/intl.dart'; +import 'package:service/controller/mainController/main_controller.dart'; +import 'package:service/views/widgets/my_scafold.dart'; + +import '../../../constant/colors.dart'; +import '../../../views/widgets/my_textField.dart'; + +class EditCar extends StatelessWidget { + final Map carData; + const EditCar({super.key, required this.carData}); + @override + Widget build(BuildContext context) { + Get.put(MainController()); + + return GetBuilder(builder: (mainController) { + return MyScaffold(title: 'Edit', isleading: true, body: [ + ListView( + children: [ + Column( + children: [ + Image.network( + 'https://api.sefer.live/sefer/card_image/car_front-${carData['driverID']}.jpg', + height: 200, + width: double.maxFinite, + fit: BoxFit.fill, + ), + Image.network( + 'https://api.sefer.live/sefer/card_image/car_back-${carData['driverID']}.jpg', + height: 200, + width: double.maxFinite, + fit: BoxFit.fill, + ), + ], + ), + const SizedBox(height: 9), + Form( + key: mainController.formKey, + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + SizedBox( + width: Get.width * .6, + child: MyTextForm( + controller: mainController.carplateController, + label: 'car plate'.tr, + hint: 'car plate'.tr, + type: TextInputType.name, + ), + ), + IconButton( + onPressed: () async { + if (mainController.formKey.currentState!.validate()) { + await mainController.editCarPlateNotEdit( + carData['driverID'].toString(), + mainController.carplateController.text, + mainController.colorController.text, + mainController.colorHex.value.toString(), + mainController.yearController.text, + mainController.makeController.text, + mainController.modelController.text, + mainController.expirationDateController.text, + mainController.ownerController.text, + ); + } + }, + icon: const Icon( + Icons.upload_outlined, + color: AppColor.blueColor, + ), + ), + ], + ), + // Other fields + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: Get.width * .4, + child: MyTextForm( + controller: mainController.yearController, + label: 'Year'.tr, + hint: 'Year'.tr, + type: TextInputType.number, + ), + ), + SizedBox( + width: Get.width * .4, + child: DropdownButtonFormField( + decoration: InputDecoration( + labelText: 'Color'.tr, // Localized label + ), + value: mainController.colorHex.value.isEmpty + ? null + : mainController.colorHex + .value, // Use the hex value as the current value + items: [ + {'red'.tr: '#FF0000'}, + {'green'.tr: '#008000'}, + {'blue'.tr: '#0000FF'}, + {'black'.tr: '#000000'}, + {'white'.tr: '#FFFFFF'}, + {'yellow'.tr: '#FFFF00'}, + {'purple'.tr: '#800080'}, + {'orange'.tr: '#FFA500'}, + {'pink'.tr: '#FFC0CB'}, + {'brown'.tr: '#A52A2A'}, + {'gray'.tr: '#808080'}, + {'cyan'.tr: '#00FFFF'}, + {'magenta'.tr: '#FF00FF'}, + {'lime'.tr: '#00FF00'}, + {'indigo'.tr: '#4B0082'}, + {'violet'.tr: '#EE82EE'}, + {'gold'.tr: '#FFD700'}, + {'silver'.tr: '#C0C0C0'}, + {'teal'.tr: '#008080'}, + {'navy'.tr: '#000080'}, + ].map((colorMap) { + String colorName = colorMap.keys.first; + String colorValue = colorMap.values.first; + return DropdownMenuItem( + value: colorValue, + child: Text(colorName), + ); + }).toList(), + onChanged: (value) { + if (value != null) { + // Find the selected color name based on the hex value + String selectedColorName = ''; + for (var colorMap in [ + {'red'.tr: '#FF0000'}, + {'green'.tr: '#008000'}, + {'blue'.tr: '#0000FF'}, + {'black'.tr: '#000000'}, + {'white'.tr: '#FFFFFF'}, + {'yellow'.tr: '#FFFF00'}, + {'purple'.tr: '#800080'}, + {'orange'.tr: '#FFA500'}, + {'pink'.tr: '#FFC0CB'}, + {'brown'.tr: '#A52A2A'}, + {'gray'.tr: '#808080'}, + {'cyan'.tr: '#00FFFF'}, + {'magenta'.tr: '#FF00FF'}, + {'lime'.tr: '#00FF00'}, + {'indigo'.tr: '#4B0082'}, + {'violet'.tr: '#EE82EE'}, + {'gold'.tr: '#FFD700'}, + {'silver'.tr: '#C0C0C0'}, + {'teal'.tr: '#008080'}, + {'navy'.tr: '#000080'}, + ]) { + if (colorMap.values.first == value) { + selectedColorName = colorMap.keys.first; + break; + } + } + + mainController.colorController.text = + selectedColorName; + mainController.colorHex.value = value; + } + }, + ), + ), + ], + ), + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: Get.width * .4, + child: MyTextForm( + controller: mainController.makeController, + label: 'Make'.tr, + hint: 'Make'.tr, + type: TextInputType.name, + ), + ), + SizedBox( + width: Get.width * .4, + child: MyTextForm( + controller: mainController.modelController, + label: 'Model'.tr, + hint: 'Model'.tr, + type: TextInputType.name, + ), + ), + ], + ), + + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + SizedBox( + width: Get.width * .4, + child: SizedBox( + width: Get.width * .4, + child: TextField( + controller: mainController.expirationDateController, + decoration: InputDecoration( + labelText: 'Expiration Date'.tr, + hintText: 'Expiration Date'.tr, + ), + readOnly: + true, // Make the field read-only to prevent manual input + onTap: () async { + DateTime? pickedDate = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: + DateTime(2000), // Set the starting date + lastDate: DateTime(2101), // Set the ending date + ); + + if (pickedDate != null) { + String formattedDate = + DateFormat('yyyy-MM-dd').format(pickedDate); + mainController.expirationDateController.text = + formattedDate.toString(); + } + }, + ), + ), + ), + SizedBox( + width: Get.width * .4, + child: MyTextForm( + controller: mainController.ownerController, + label: 'Owner'.tr, + hint: 'Owner'.tr, + type: TextInputType.name, + ), + ), + ], + ), + ], + ), + ) + ], + ) + ]); + }); + } +} diff --git a/lib/controller/mainController/pages/edit_car_plate.dart b/lib/controller/mainController/pages/edit_car_plate.dart index 3e50af1..6308eae 100644 --- a/lib/controller/mainController/pages/edit_car_plate.dart +++ b/lib/controller/mainController/pages/edit_car_plate.dart @@ -1,7 +1,10 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:intl/intl.dart'; import 'package:service/constant/colors.dart'; import 'package:service/constant/style.dart'; +import 'package:service/controller/mainController/pages/edit_car.dart'; +import 'package:service/views/widgets/elevated_btn.dart'; import 'package:service/views/widgets/my_scafold.dart'; import 'package:service/views/widgets/my_textField.dart'; @@ -18,7 +21,7 @@ class EditCarPlate extends StatelessWidget { return GetBuilder(builder: (mainController) { return MyScaffold( - title: 'Edit car plate'.tr, + title: 'Edit car details'.tr, isleading: true, body: [ Expanded( @@ -30,49 +33,14 @@ class EditCarPlate extends StatelessWidget { var carData = mainController.carPlateNotEdit[index]; return Padding( padding: const EdgeInsets.all(8.0), - child: Container( - decoration: AppStyle.boxDecoration1, - child: Column( - children: [ - Image.network( - 'https://api.sefer.live/sefer/card_image/car_front-${carData['driverID']}.jpg', - height: 200, - width: double.maxFinite, - fit: BoxFit.fill, - ), - const SizedBox( - height: 9, - ), - Form( - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - IconButton( - onPressed: () async { - await mainController.editCarPlateNotEdit( - carData['driverID'].toString(), - mainController.carplateController.text, - ); - }, - icon: const Icon( - Icons.upload_outlined, - color: AppColor.blueColor, - ), - ), - SizedBox( - width: Get.width * .6, - child: MyTextForm( - controller: - mainController.carplateController, - label: 'car plate'.tr, - hint: 'car plate'.tr, - type: TextInputType.name, - ), - ), - ], - )) - ], - )), + child: InkWell( + onTap: () { + Get.to(EditCar(carData: carData)); + }, + child: Container( + decoration: AppStyle.boxDecoration1, + child: Text(carData['owner'])), + ), ); }), ), diff --git a/lib/controller/mainController/pages/registration_captain_page.dart b/lib/controller/mainController/pages/registration_captain_page.dart index 5c3a7d0..6024031 100644 --- a/lib/controller/mainController/pages/registration_captain_page.dart +++ b/lib/controller/mainController/pages/registration_captain_page.dart @@ -1,3 +1,5 @@ +// ignore_for_file: unnecessary_null_comparison + import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:service/views/widgets/my_scafold.dart'; @@ -622,7 +624,6 @@ class RegisterCaptain extends StatelessWidget { .addRegistrationCarEgyptHandling(); // await controller // .getDriverNotCompleteRegistration(); - Get.back(); }, kolor: AppColor.greenColor, ), diff --git a/lib/controller/mainController/registration_captain_controller.dart b/lib/controller/mainController/registration_captain_controller.dart index 5e5247b..7720c63 100644 --- a/lib/controller/mainController/registration_captain_controller.dart +++ b/lib/controller/mainController/registration_captain_controller.dart @@ -324,45 +324,46 @@ class RegisterCaptainController extends GetxController { ), ], ); - } else if (responseIdEgyptDriverLicense['national_number'] - .toString() - .substring(0, 12) != - responseIdEgyptBack['nationalID'].toString().substring(0, 12)) { - Get.defaultDialog( - barrierDismissible: false, - title: 'ID Mismatch', - content: Column( - mainAxisSize: MainAxisSize.min, - children: [ - const Icon(Icons.warning, size: 48, color: Colors.red), - const SizedBox(height: 16), - Text( - "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents." - .tr, - textAlign: TextAlign.center, - style: AppStyle.title, - ), - const SizedBox(height: 16), - IconButton( - onPressed: () async { - // await Get.find().speakText( - // 'The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.', - // ); - }, - icon: const Icon(Icons.volume_up), - ), - ], - ), - actions: [ - TextButton( - onPressed: () { - Get.back(); - }, - child: const Text('OK'), - ), - ], - ); } + // else if (responseIdEgyptDriverLicense['national_number'] + // .toString() + // .substring(0, 12) != + // responseIdEgyptBack['nationalID'].toString().substring(0, 12)) { + // Get.defaultDialog( + // barrierDismissible: false, + // title: 'ID Mismatch', + // content: Column( + // mainAxisSize: MainAxisSize.min, + // children: [ + // const Icon(Icons.warning, size: 48, color: Colors.red), + // const SizedBox(height: 16), + // Text( + // "The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents." + // .tr, + // textAlign: TextAlign.center, + // style: AppStyle.title, + // ), + // const SizedBox(height: 16), + // IconButton( + // onPressed: () async { + // // await Get.find().speakText( + // // 'The national number on your driver’s license does not match the one on your ID document. Please verify and provide the correct documents.', + // // ); + // }, + // icon: const Icon(Icons.volume_up), + // ), + // ], + // ), + // actions: [ + // TextButton( + // onPressed: () { + // Get.back(); + // }, + // child: const Text('OK'), + // ), + // ], + // ); + // } // else if (responseCriminalRecordEgypt['FullName'] != // responseIdEgyptDriverLicense['name_arabic']) { // Get.defaultDialog( @@ -540,7 +541,7 @@ class RegisterCaptainController extends GetxController { : responseIdEgyptDriverLicense['license_type'], 'national_number': nationalNumber.value.isNotEmpty ? nationalNumber.value - : responseIdEgyptBack['nationalID'], + : responseIdEgyptDriverLicense['national_number'], 'name_arabic': nameArabic.value.isNotEmpty ? nameArabic.value : responseIdEgyptDriverLicense['name_arabic'],