INFRA: Set Up Project.
This commit is contained in:
237
lib/controllers/rental_home_controller.dart
Normal file
237
lib/controllers/rental_home_controller.dart
Normal file
@@ -0,0 +1,237 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:developer';
|
||||
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||
import 'package:customer/models/rental_order_model.dart';
|
||||
import 'package:customer/models/rental_package_model.dart';
|
||||
import 'package:customer/models/user_model.dart';
|
||||
import 'package:customer/models/vendor_model.dart';
|
||||
import 'package:customer/screen_ui/rental_service/rental_conformation_screen.dart';
|
||||
import 'package:customer/widget/geoflutterfire/src/geoflutterfire.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:geolocator/geolocator.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart' as latlong;
|
||||
import '../constant/constant.dart';
|
||||
import '../models/payment_model/cod_setting_model.dart';
|
||||
import '../models/payment_model/flutter_wave_model.dart';
|
||||
import '../models/payment_model/mercado_pago_model.dart';
|
||||
import '../models/payment_model/mid_trans.dart';
|
||||
import '../models/payment_model/orange_money.dart';
|
||||
import '../models/payment_model/pay_fast_model.dart';
|
||||
import '../models/payment_model/pay_stack_model.dart';
|
||||
import '../models/payment_model/paypal_model.dart';
|
||||
import '../models/payment_model/paytm_model.dart';
|
||||
import '../models/payment_model/razorpay_model.dart';
|
||||
import '../models/payment_model/stripe_model.dart';
|
||||
import '../models/payment_model/wallet_setting_model.dart';
|
||||
import '../models/payment_model/xendit.dart';
|
||||
import '../models/rental_vehicle_type.dart';
|
||||
import '../screen_ui/multi_vendor_service/wallet_screen/wallet_screen.dart';
|
||||
import '../service/fire_store_utils.dart';
|
||||
import '../themes/show_toast_dialog.dart';
|
||||
import '../utils/preferences.dart';
|
||||
import '../utils/utils.dart';
|
||||
import 'package:google_maps_flutter/google_maps_flutter.dart' as gmaps;
|
||||
|
||||
class RentalHomeController extends GetxController {
|
||||
RxBool isLoading = false.obs;
|
||||
|
||||
// Location input
|
||||
final Rx<TextEditingController> sourceTextEditController = TextEditingController().obs;
|
||||
|
||||
// Selected date
|
||||
Rx<DateTime> selectedDate = DateTime.now().obs;
|
||||
|
||||
// Vehicle list + selected vehicle
|
||||
RxList<RentalVehicleType> vehicleTypes = <RentalVehicleType>[].obs;
|
||||
Rx<RentalVehicleType?> selectedVehicleType = Rx<RentalVehicleType?>(null);
|
||||
|
||||
RxList<RentalPackageModel> rentalPackages = <RentalPackageModel>[].obs;
|
||||
Rx<RentalPackageModel?> selectedPackage = Rx<RentalPackageModel?>(null);
|
||||
|
||||
Rx<UserModel> userModel = UserModel().obs;
|
||||
|
||||
final RxString selectedPaymentMethod = ''.obs;
|
||||
|
||||
final Rx<gmaps.LatLng> departureLatLong = gmaps.LatLng(0.0, 0.0).obs;
|
||||
final Rx<latlong.LatLng> departureLatLongOsm = latlong.LatLng(0.0, 0.0).obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
if (Constant.userModel != null) {
|
||||
userModel.value = Constant.userModel!;
|
||||
}
|
||||
getVehicleType();
|
||||
fetchCurrentLocation();
|
||||
}
|
||||
|
||||
void fetchCurrentLocation() async {
|
||||
try {
|
||||
Position? position = await Utils.getCurrentLocation();
|
||||
if (position != null) {
|
||||
Constant.currentLocation = position;
|
||||
|
||||
// Set default coordinates for Google or OSM
|
||||
departureLatLong.value = gmaps.LatLng(position.latitude, position.longitude);
|
||||
departureLatLongOsm.value = latlong.LatLng(position.latitude, position.longitude);
|
||||
|
||||
// Get readable address
|
||||
String address = await Utils.getAddressFromCoordinates(position.latitude, position.longitude);
|
||||
sourceTextEditController.value.text = address;
|
||||
}
|
||||
} catch (e) {
|
||||
ShowToastDialog.showToast("Unable to fetch current location".tr);
|
||||
}
|
||||
}
|
||||
|
||||
/// Fetch Vehicle Types
|
||||
Future<void> getVehicleType() async {
|
||||
isLoading.value = true;
|
||||
await FireStoreUtils.getRentalVehicleType().then((value) async {
|
||||
vehicleTypes.value = value;
|
||||
if (vehicleTypes.isNotEmpty) {
|
||||
selectedVehicleType.value = vehicleTypes[0];
|
||||
await getRentalPackage();
|
||||
}
|
||||
});
|
||||
await getPaymentSettings();
|
||||
isLoading.value = false;
|
||||
}
|
||||
|
||||
/// Date Picker
|
||||
Future<void> pickDate(BuildContext context) async {
|
||||
final DateTime? picked = await showDatePicker(context: context, initialDate: selectedDate.value, firstDate: DateTime.now(), lastDate: DateTime(2100));
|
||||
|
||||
if (picked != null) {
|
||||
selectedDate.value = picked;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> getRentalPackage() async {
|
||||
await FireStoreUtils.getRentalPackage(selectedVehicleType.value!.id.toString()).then((value) {
|
||||
rentalPackages.value = value;
|
||||
if (rentalPackages.isNotEmpty) {
|
||||
selectedPackage.value = rentalPackages[0];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void completeOrder() {
|
||||
DestinationLocation sourceLocation = DestinationLocation(
|
||||
latitude: Constant.selectedMapType == 'osm' ? departureLatLongOsm.value.latitude : departureLatLong.value.latitude,
|
||||
longitude: Constant.selectedMapType == 'osm' ? departureLatLongOsm.value.longitude : departureLatLong.value.longitude,
|
||||
);
|
||||
|
||||
print("=====>");
|
||||
print(sourceTextEditController.value.text);
|
||||
|
||||
RentalOrderModel rentalOrderModel = RentalOrderModel();
|
||||
rentalOrderModel.id = Constant.getUuid();
|
||||
rentalOrderModel.authorID = userModel.value.id;
|
||||
rentalOrderModel.author = userModel.value;
|
||||
rentalOrderModel.rentalVehicleType = selectedVehicleType.value;
|
||||
rentalOrderModel.vehicleId = selectedVehicleType.value!.id;
|
||||
rentalOrderModel.sectionId = Constant.sectionConstantModel!.id;
|
||||
rentalOrderModel.sourceLocationName = sourceTextEditController.value.text;
|
||||
rentalOrderModel.bookingDateTime = Timestamp.fromDate(selectedDate.value);
|
||||
rentalOrderModel.paymentMethod = selectedPaymentMethod.value;
|
||||
rentalOrderModel.paymentStatus = false;
|
||||
rentalOrderModel.status = Constant.orderPlaced;
|
||||
rentalOrderModel.subTotal = selectedPackage.value!.baseFare;
|
||||
rentalOrderModel.rentalPackageModel = selectedPackage.value;
|
||||
rentalOrderModel.taxSetting = Constant.taxList;
|
||||
rentalOrderModel.createdAt = Timestamp.now();
|
||||
rentalOrderModel.sourceLocation = sourceLocation;
|
||||
rentalOrderModel.adminCommission = Constant.sectionConstantModel!.adminCommision!.amount;
|
||||
rentalOrderModel.adminCommissionType = Constant.sectionConstantModel!.adminCommision!.commissionType;
|
||||
rentalOrderModel.sourcePoint = G(
|
||||
geopoint: GeoPoint(sourceLocation.latitude ?? 0.0, sourceLocation.longitude ?? 0.0),
|
||||
geohash: Geoflutterfire().point(latitude: sourceLocation.latitude ?? 0.0, longitude: sourceLocation.longitude ?? 0.0).hash,
|
||||
);
|
||||
rentalOrderModel.zoneId = Constant.getZoneId(sourceLocation.latitude ?? 0.0, sourceLocation.longitude ?? 0.0);
|
||||
log(rentalOrderModel.toJson().toString());
|
||||
Get.back();
|
||||
Get.back();
|
||||
|
||||
Get.to(() => RentalConformationScreen(), arguments: {"rentalOrderModel": rentalOrderModel});
|
||||
}
|
||||
|
||||
void setDepartureMarker(double lat, double lng) {
|
||||
if (Constant.selectedMapType == 'osm') {
|
||||
departureLatLongOsm.value = latlong.LatLng(lat, lng);
|
||||
} else {
|
||||
departureLatLong.value = gmaps.LatLng(lat, lng);
|
||||
}
|
||||
}
|
||||
|
||||
// final Rx<LatLng> departureLatLong = const LatLng(0.0, 0.0).obs;
|
||||
// final Rx<latlong.LatLng> departureLatLongOsm = latlong.LatLng(0.0, 0.0).obs;
|
||||
|
||||
// void setDepartureMarker(double lat, double long) {
|
||||
// if (Constant.selectedMapType == 'osm') {
|
||||
// departureLatLongOsm.value = latlong.LatLng(lat, long);
|
||||
// } else {
|
||||
// departureLatLong.value = LatLng(lat, long);
|
||||
// }
|
||||
// }
|
||||
|
||||
Rx<WalletSettingModel> walletSettingModel = WalletSettingModel().obs;
|
||||
Rx<CodSettingModel> cashOnDeliverySettingModel = CodSettingModel().obs;
|
||||
Rx<PayFastModel> payFastModel = PayFastModel().obs;
|
||||
Rx<MercadoPagoModel> mercadoPagoModel = MercadoPagoModel().obs;
|
||||
Rx<PayPalModel> payPalModel = PayPalModel().obs;
|
||||
Rx<StripeModel> stripeModel = StripeModel().obs;
|
||||
Rx<FlutterWaveModel> flutterWaveModel = FlutterWaveModel().obs;
|
||||
Rx<PayStackModel> payStackModel = PayStackModel().obs;
|
||||
Rx<PaytmModel> paytmModel = PaytmModel().obs;
|
||||
Rx<RazorPayModel> razorPayModel = RazorPayModel().obs;
|
||||
|
||||
Rx<MidTrans> midTransModel = MidTrans().obs;
|
||||
Rx<OrangeMoney> orangeMoneyModel = OrangeMoney().obs;
|
||||
Rx<Xendit> xenditModel = Xendit().obs;
|
||||
|
||||
Future<void> getPaymentSettings() async {
|
||||
await FireStoreUtils.getPaymentSettingsData().then((value) {
|
||||
stripeModel.value = StripeModel.fromJson(jsonDecode(Preferences.getString(Preferences.stripeSettings)));
|
||||
payPalModel.value = PayPalModel.fromJson(jsonDecode(Preferences.getString(Preferences.paypalSettings)));
|
||||
payStackModel.value = PayStackModel.fromJson(jsonDecode(Preferences.getString(Preferences.payStack)));
|
||||
mercadoPagoModel.value = MercadoPagoModel.fromJson(jsonDecode(Preferences.getString(Preferences.mercadoPago)));
|
||||
flutterWaveModel.value = FlutterWaveModel.fromJson(jsonDecode(Preferences.getString(Preferences.flutterWave)));
|
||||
paytmModel.value = PaytmModel.fromJson(jsonDecode(Preferences.getString(Preferences.paytmSettings)));
|
||||
payFastModel.value = PayFastModel.fromJson(jsonDecode(Preferences.getString(Preferences.payFastSettings)));
|
||||
razorPayModel.value = RazorPayModel.fromJson(jsonDecode(Preferences.getString(Preferences.razorpaySettings)));
|
||||
midTransModel.value = MidTrans.fromJson(jsonDecode(Preferences.getString(Preferences.midTransSettings)));
|
||||
orangeMoneyModel.value = OrangeMoney.fromJson(jsonDecode(Preferences.getString(Preferences.orangeMoneySettings)));
|
||||
xenditModel.value = Xendit.fromJson(jsonDecode(Preferences.getString(Preferences.xenditSettings)));
|
||||
walletSettingModel.value = WalletSettingModel.fromJson(jsonDecode(Preferences.getString(Preferences.walletSettings)));
|
||||
cashOnDeliverySettingModel.value = CodSettingModel.fromJson(jsonDecode(Preferences.getString(Preferences.codSettings)));
|
||||
|
||||
if (walletSettingModel.value.isEnabled == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.wallet.name;
|
||||
} else if (cashOnDeliverySettingModel.value.isEnabled == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.cod.name;
|
||||
} else if (stripeModel.value.isEnabled == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.stripe.name;
|
||||
} else if (payPalModel.value.isEnabled == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.paypal.name;
|
||||
} else if (payStackModel.value.isEnable == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.payStack.name;
|
||||
} else if (mercadoPagoModel.value.isEnabled == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.mercadoPago.name;
|
||||
} else if (flutterWaveModel.value.isEnable == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.flutterWave.name;
|
||||
} else if (payFastModel.value.isEnable == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.payFast.name;
|
||||
} else if (razorPayModel.value.isEnabled == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.razorpay.name;
|
||||
} else if (midTransModel.value.enable == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.midTrans.name;
|
||||
} else if (orangeMoneyModel.value.enable == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.orangeMoney.name;
|
||||
} else if (xenditModel.value.enable == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.xendit.name;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user