Files
daily_mobileapp_merchant/lib/Controller/Createorder/Createordercontroller.dart
2026-05-27 10:35:09 +05:30

1277 lines
43 KiB
Dart

import 'dart:async';
import 'dart:convert';
import 'dart:math';
import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:flutter_expanded_tile/flutter_expanded_tile.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
import 'package:get/get.dart'hide Response;
import 'package:flutter/material.dart' hide Notification;
import 'package:get/get.dart';
import 'package:gmaps_by_road_distance_calculator/gmaps_by_road_distance_calculator.dart';
import 'package:intl/intl.dart';
import 'package:rounded_loading_button_plus/rounded_loading_button.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../Data/Repository/Admintoken/Getadmintokenrepository.dart';
import '../../Data/Repository/CreateOrder/CreateOrderRepository.dart';
import '../../Data/Repository/Notification/Notificationrepository.dart';
import '../../Data/Repository/Tenantlocation/Getlocationrepository.dart';
import '../../Data/Repository/Tenantmodulecategory/Categoryrepository.dart';
import '../../Data/Repository/Tenantpricing/Tenantchargesrepository.dart';
import '../../Data/Repository/Tenants/Tenantsrepository.dart';
import '../../Globalwidgets/Googleplaces/Googleplaces.dart';
import '../../Helper/Constants/Colorconstants.dart';
import '../../Helper/Locationservice/app_config_service.dart';
import '../../Helper/Logger.dart';
import '../../Helper/customDio.dart';
import '../../Helper/location_service.dart';
import '../../Helper/toast.dart';
import '../../Model/Request/Createorder/Createorderrequest.dart';
import '../../Model/Request/Notification/Notificationrequest.dart';
import '../../Model/Response/Admintoken/Admintokenresponse.dart';
import '../../Model/Response/Appcategory/Appcategoryresponse.dart';
import '../../Model/Response/Createorder/CreateOrderResponsemodel.dart';
import '../../Model/Response/Notification/Notificationresponse.dart';
import '../../Model/Response/Tenantlocation/Getlocationbyidresponse.dart';
import '../../Model/Response/Tenantlocation/Locationbyid/Locationidresponse.dart';
import '../../Model/Response/Tenantpricing/Tenantpricingresponse.dart';
import '../../Model/Response/Tenants/Tenantinforesponse.dart';
import '../../View/Createorder/Createorderview.dart';
import '../../View/Createorder/Ordersuccess/Ordersuccessview.dart';
import '../../View/Home/Homeview.dart';
import '../Dashboard/Pickup/Tabs/Pickupcustomertabscontroller.dart';
import '../Tenantlocation/Tenantlocationcontroller.dart';
import 'package:intl_phone_number_input/intl_phone_number_input.dart';
import '../../../Data/Repository/Location/GetLocation/getlocationrepository.dart' as TenantLocation;
class CreateOrderController extends GetxController{
String? businessName;
String tenantLocationName = "";
// String? tLatitude;
// String? tLongitude;
// String? tAddress;
String? tenantToken;
String? notificationDate;
String? subcategoryName = "";
String? subCatName;
String? pickUpCustomerName;
String? pickUpCustomerContactNo;
String? pickUpLandMark;
String? pickUpDoorNo;
String? pickUpCustomerContactNoCheck;
String? dropCustomerContactNoCheck;
FocusNode pickupFocusNode = FocusNode();
String? dropCustomerName;
String? dropCustomerContactNo;
String? dropLandMark;
String? dropDoorNo;
TenantLocationDetails? selectedValue;
List<String> adminToken = [];
String? openTime;
String? closeTime;
String? fromAddress;
String? toAddress;
String? fromLatitude;
String? fromLongitude;
String? toLatitude;
String? toLongitude;
String? city;
int? tenantId;
int? moduleId;
int? locationId;
int? roleId;
int? partnerId;
int? appLocationId;
int? configId;
int? userId;
int? appRadius;
int? subCatId;
int? subcategoryId;
int? paymentType;
int? pickupCustomerId;
int? dropCustomerId;
int? pickupLocationId;
int? dropLocationId;
int? pickupTenantLocationId;
int? dropTenantLocationId;
int catSelectedIndex = 0;
int timeSelectIndex = -1;
int paymentSelectedIndex = -1;
int weightSelectedIndex = -1;
int scheduleIndex = -1;
bool pickupSaveAddress = false;
bool dropSaveAddress = false;
bool pikUpSaveChecking =false;
bool dropSaveChecking =false;
List <Applocationadmins> adminDetails = [];
List<TenantLocationDetails> tenantLocations = [];
List<String> timeSlots = [];
List<String> timeSlotsnew = [];
// List<AppCategoryDetails> subCategoryLists = [];
ByRoadDistanceCalculator byRoadDistanceCalculator = ByRoadDistanceCalculator();
OrderResponseDetails deliveryDetails = OrderResponseDetails();
PhoneNumber number = PhoneNumber(isoCode: 'IN',);
final List weightRange = [
{"weight":"1 - 10 Kg"},
{"weight":"11 - 20 Kg"},
{"weight":"21 - 30 Kg"},
];
final List schedule = [
{"scheduleType": "Now"},
{"scheduleType": "Scheduled"}
];
final List paymentMethod = [
// {"Paymentmethod":"Pay now","icon":Icon(Icons.mobile_friendly,size: 35,color: ColorConstants.secondaryColor,)},
{"Paymentmethod":"Pay on delivery","icon":Icon(Icons.currency_rupee,size: 35,color: ColorConstants.secondaryColor,)},
{"Paymentmethod":"Pay later","icon":Icon(Icons.wallet,size: 35,color: ColorConstants.secondaryColor,)},
];
TextEditingController tecNotes = TextEditingController();
TextEditingController pickupContactNameController = TextEditingController();
TextEditingController pickupContactNoController = TextEditingController();
TextEditingController pickupDoorNoController = TextEditingController();
TextEditingController pickupLandMarkController = TextEditingController();
TextEditingController pickupAddressController = TextEditingController();
TextEditingController pickupStateController = TextEditingController();
TextEditingController pickupCityController = TextEditingController();
TextEditingController pickupSuburbController = TextEditingController();
TextEditingController pickupPostcodeController = TextEditingController();
TextEditingController dropContactNameController = TextEditingController();
TextEditingController dropContactNoController = TextEditingController();
TextEditingController dropLandMarkController = TextEditingController();
TextEditingController dropDoorNoController = TextEditingController();
TextEditingController dropAddressController = TextEditingController();
TextEditingController dropStateController = TextEditingController();
TextEditingController dropCityController = TextEditingController();
TextEditingController dropSuburbController = TextEditingController();
TextEditingController dropPostcodeController = TextEditingController();
TenantDetails tenantInfo = TenantDetails();
bool loader = true;
bool isNotes = false;
bool smsSelected = false;
double totalDeliveryAmount = 0.0;
RxDouble distance = 0.0.obs;
CustomDio mCustomDio = CustomDio();
late Timer timer;
var currentTime = DateTime.now().obs;
var amPm = ''.obs;
DateTime selectedDate = DateTime.now();
DateTime datetime = DateTime.now();
TimeOfDay selectedTime = TimeOfDay.now();
DateTime? now;
var orderId;
var pickUpData;
var dropData;
var weight;
var payment;
var distanceKm;
RxDouble distanceKms = 0.0.obs;
var minKm;
var basePrice;
var pricePerKm;
var scheduleType;
//Current Location
Position? resultPosition;
var currentLat;
var currentLong;
var timers;
//Autocomplete
final pickupSearchText = ''.obs;
final dropSearchText = ''.obs;
final pickupPredictions = <Map<String, dynamic>>[].obs;
final pickupSelectedPlace = {}.obs;
final dropPredictions = <Map<String, dynamic>>[].obs;
final dropSelectedPlace = {}.obs;
final GooglePlacesService placesService = GooglePlacesService();
final TextEditingController textEditingController = TextEditingController();
final RoundedLoadingButtonController btnController = RoundedLoadingButtonController();
final RoundedLoadingButtonController createBtnController = RoundedLoadingButtonController();
GetLocationsRepository getLocationsRepository= GetLocationsRepository();
TenantLocation.GetLocationsRepository getTenantLocationsRepository= TenantLocation.GetLocationsRepository();
TenantRepository tenantInfoRepository = TenantRepository();
GetTenantCategoriesRepository getTenantCategoriesRepository= GetTenantCategoriesRepository();
GetAdminTokenRepository getAdminTokenRepository = GetAdminTokenRepository();
TenantPricingRepository tenantPricingRepository= TenantPricingRepository();
CreateOrderRepository createOrderRepository = CreateOrderRepository();
NotificationRepository notificationRepository = NotificationRepository();
AppConfigurationService appConfigurationService = AppConfigurationService();
ExpandedTileController pickupExpandedTileController = ExpandedTileController();
ExpandedTileController dropExpandedTileController = ExpandedTileController();
TenantLocationController tenantLocationController = Get.put(TenantLocationController());
PickupCustomerTabController pickupCustomerTabController = Get.put(PickupCustomerTabController());
get subCategoryLists => null;
// PickupCustomerAddressController pickupCustomerAddressController = Get.put(PickupCustomerAddressController());
getDetails()async{
SharedPreferences prefs = await SharedPreferences.getInstance();
locationId = prefs.getInt('locationId');
print('getDetailslocationId $locationId');
}
void startTimer() {
timer = Timer.periodic(Duration(seconds: 1), (_) {
currentTime.value = DateTime.now();
updateAmPm();
update();
});
}
void updateAmPm() {
if (currentTime.value.hour >= 12) {
amPm.value = 'PM';
} else {
amPm.value = 'AM';
}
}
void main() {
var min = 30;
var currentDate = selectedDate;
String fromdate = DateFormat('yyyy-MM-dd').format(currentDate);
print('fromdatesssssssss$fromdate');
timeSlots.clear();
var format = DateFormat("yyyy-MM-dd HH:mm:ss");
var start = format.parse("$fromdate $openTime");
var end = format.parse("$fromdate $closeTime");
print('starttimesssssssssss$start');
print('endtimesssssssssss$end');
Duration step = Duration(minutes: int.parse(min.toString()));
while(start.isBefore(end)) {
var timeIncrement = start.add(step);
timeSlots.add(DateFormat("yyyy-MM-dd HH:mm:ss").format(timeIncrement));
start = timeIncrement;
}
timeSlotsnew.clear();
for(int i=0;i<timeSlots.length;i++){
var start1 = format.parse(timeSlots[i]);
String endtime = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
var end1 = format.parse(endtime);
if(start1.isAfter(end1)){
timeSlotsnew.add(timeSlots[i]);
}else{
}
}
// timecal();
print('timeSlots................ $timeSlots');
print('timeSlots................ $timeSlots');
}
getLocation()async {
// GetLocationById? result = await getLocationsRepository.getLocationById();
SharedPreferences prefs = await SharedPreferences.getInstance();
GetLocationByLocaionId? result = await getLocationsRepository.getLocationById();
if (result?.code == 200) {
print('tLatitudeinappbarcontrt${result?.details?.locationlatitude}');
businessName =result?.details?.locationname;
roleId = prefs.getInt('roleId');
// openTime = result?.details?.opentime;
// closeTime = result?.details?.closetime;
// tLatitude = roleId == 1?tenantLocationController.latitude:result?.details?.locationlatitude;
// tLongitude = roleId == 1?tenantLocationController.longitude:result?.details?.locationlong;
// tAddress = roleId == 1?tenantLocationController.address:result?.details?.locationaddress;
print('openTimessssssssssss$openTime');
print('closeTimessssssssssss$closeTime');
}
print('resultgetLocation${result?.toJson()}');
}
//Get Current Location
onSearchPickupTextChanged(String text) async {
pickupSearchText.value = text;
if (text.length > 2) {
try {
final places = await placesService.getPlacesPredictions(text);
pickupPredictions.assignAll(places);
update();
} catch (e) {
print('Error fetching predictions: $e');
}
} else {
pickupPredictions.clear();
update();
}
}
onSearchDropTextChanged(String text) async {
dropSearchText.value = text;
if (text.length > 2) {
try {
final places = await placesService.getPlacesPredictions(text);
// final places = await autocompletePlaces(text);
dropPredictions.assignAll(places);
update();
} catch (e) {
print('Error fetching predictions: $e');
}
} else {
dropPredictions.clear();
update();
}
}
getPickupPlaceDetails(String placeId,locationAddress) async {
try {
final details = await placesService.getPlaceDetails(placeId);
pickupSelectedPlace.value = details;
print('getPlaceDetailslatitude ${pickupSelectedPlace['geometry']['location']['lat']}');
print('getPlaceDetailslongitude ${pickupSelectedPlace['geometry']['location']['lng']}');
getPickupAddressFromLatLng(pickupSelectedPlace['geometry']['location']['lat'],pickupSelectedPlace['geometry']['location']['lng'],locationAddress);
} catch (e) {
print('Error fetching place details: $e');
}
}
getPickupAddressFromLatLng(double latitudes, double longitudes,locationAddress) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
Placemark place = placemarks[0];
pickupCityController.text = '${place.locality}' ?? '';
pickupStateController.text = '${place.administrativeArea}' ?? '';
pickupSuburbController.text = '${place.subLocality!.isNotEmpty?place.subLocality:place.street}';
pickupPostcodeController.text ='${place.postalCode}' ?? '';
pickupAddressController.text = locationAddress ?? '';
fromAddress = pickupAddressController.text;
fromLatitude = double.parse(latitudes.toString()).toString();
fromLongitude = double.parse(longitudes.toString()).toString();
pickupPredictions.clear();
if(fromLatitude!= null&&fromLongitude!= null&&toLatitude!= null&&toLongitude != null){
var distanceInMeters = calculateDistance(
double.parse(toLatitude.toString()),
double.parse(toLongitude.toString()),
double.parse(fromLatitude.toString()),
double.parse(fromLongitude.toString()),
);
distanceKm = distanceInMeters.round();
print('distanceKmInPickupAppRadius $distanceKm');
appRadius = prefs.getInt('appRadius')??0;
logger.i(appRadius);
if(appRadius != null &&distanceKm != null) {
try {
int appRadiusInt = int.parse(appRadius.toString());
int distanceKmInt = int.parse(distanceKm);
if(appRadiusInt <= distanceKmInt) {
AwesomeDialog(
context: Get.context!,
dialogType: DialogType.warning,
// animType: AnimType.BOTTOMSLIDE,
descTextStyle: const TextStyle(fontSize: 16,),
desc: 'Service not available at this location.',
dismissOnTouchOutside: false,
btnOkText: 'Ok',
// btnCancelOnPress: () {
// Get.to(OrderDetails(data: data));
// },
btnOkOnPress: () async{
Get.to(()=>CreateOrderView(isDashboard: false,));
},
).show();
}
} catch (e) {
print("Error parsing integers: $e");
}
} else {
print("One or both of the values are null.");
}
}
update();
print('latitude $fromLatitude');
print('longitude $fromLongitude');
}).catchError((e) {
debugPrint(e);
});
}
getDropPlaceDetails(String placeId,locationAddress) async {
try {
final details = await placesService.getPlaceDetails(placeId);
dropSelectedPlace.value = details;
print('getDropPlaceDetailslatitude ${dropSelectedPlace['geometry']['location']['lat']}');
print('getDropPlaceDetailslongitude ${dropSelectedPlace['geometry']['location']['lng']}');
getDropAddressFromLatLng(dropSelectedPlace['geometry']['location']['lat'],dropSelectedPlace['geometry']['location']['lng'],locationAddress);
} catch (e) {
print('Error fetching place details: $e');
}
}
getDropAddressFromLatLng(double latitudes, double longitudes,locationAddress) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
await placemarkFromCoordinates(latitudes, longitudes).then((List<Placemark> placemarks) {
Placemark place = placemarks[0];
dropCityController.text = '${place.locality}' ?? '';
dropStateController.text = '${place.administrativeArea}' ?? '';
dropSuburbController.text = '${place.subLocality!.isNotEmpty?place.subLocality:place.street}';
dropPostcodeController.text ='${place.postalCode}' ?? '';
dropAddressController.text = locationAddress ?? '';
toAddress = dropAddressController.text;
toLatitude = double.parse(latitudes.toString()).toString();
toLongitude = double.parse(longitudes.toString()).toString();
dropPredictions.clear();
if(fromLatitude!= null&&fromLongitude!= null&&toLatitude!= null&&toLongitude != null){
var distanceInMeters = calculateDistance(
double.parse(toLatitude.toString()),
double.parse(toLongitude.toString()),
double.parse(fromLatitude.toString()),
double.parse(fromLongitude.toString()),
);
distanceKm = distanceInMeters.round();
print('distanceKmInAppRadius $distanceKm');
appRadius = prefs.getInt('appRadius')??0;
logger.i(appRadius);
if(appRadius != 0 &&distanceKm != null) {
try {
int appRadiusInt = int.parse(appRadius.toString());
int distanceKmInt = int.parse(distanceKm.toString());
if(appRadiusInt <= distanceKmInt) {
AwesomeDialog(
context: Get.context!,
dialogType: DialogType.warning,
// animType: AnimType.BOTTOMSLIDE,
descTextStyle: const TextStyle(fontSize: 16,),
desc: 'Service not available at this location.',
dismissOnTouchOutside: false,
btnOkText: 'Ok',
// btnCancelOnPress: () {
// Get.to(OrderDetails(data: data));
// },
btnOkOnPress: () async{
Get.to(()=>CreateOrderView(isDashboard: false,));
},
).show();
}
} catch (e) {
print("Error parsing integers: $e");
}
} else {
print('appRadiusindrop $appRadius');
print('distanceKmindrop $distanceKm');
print("One or both of the values are null.");
}
}
update();
print('latitude $fromLatitude');
print('longitude $fromLongitude');
}).catchError((e) {
debugPrint(e);
});
}
getCurrentLocation()async{
resultPosition = await Geolocator.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
currentLat = resultPosition?.latitude.toString();
currentLong = resultPosition?.longitude.toString();
print('currentLatinlocation $currentLat');
print('currentLonglocation $currentLong');
getAddressFromLatLongs(double.parse(currentLat),double.parse(currentLong));
}
Future<void> getAddressFromLatLongs(double latitudes, double longitudes) async {
print('getCurrentLocationAddressssssss');
await placemarkFromCoordinates(
latitudes, longitudes)
.then((List<Placemark> placemarks) {
Placemark place = placemarks[0];
pickupCityController.text = place.locality ?? '';
pickupStateController.text = place.administrativeArea ?? '';
pickupSuburbController.text = '${place.subLocality??place.street}' ;
pickupPostcodeController.text = place.postalCode ?? '';
fromLatitude = double.parse(latitudes.toString()).toString();
fromLongitude = double.parse(longitudes.toString()).toString();
print('latitudegetAddressFromLatLng$fromLatitude');
print('longitudegetAddressFromLatLng$fromLongitude');
pickupAddressController.text = '${place.street}, ${place.subLocality},${place.locality},${place.administrativeArea} ${place.subAdministrativeArea},${place.country},${place.postalCode}.';
update();
}).catchError((e) {
debugPrint(e);
});
}
getTenantInfo() async{
SharedPreferences prefs = await SharedPreferences.getInstance();
TenantInfo? result = await tenantInfoRepository.getTenantInfo();
tenantInfo = result?.details??tenantInfo;
subcategoryName = result?.details?.subcategoryname;
subcategoryId = result?.details?.subcategoryid;
paymentType = result?.details?.paymenttype;
print('subcategoryNamegetTenantInfo $subcategoryName');
print('paymentTypegetTenantInfo $paymentType');
prefs.setInt('locationId', result?.details?.locationid ?? 0);
loader = false;
update();
print('getTenantInfotenantInfo${tenantInfo.toString()}');
print('getTenantInforesults${result?.toJson()}');
}
getTenantLocation() async{
GetLocationByTenantId? result = await getTenantLocationsRepository.getLocationById();
if(result?.status == true){
tenantLocations = result?.details??[];
}
}
// getTenantSubCategories() async{
// AppCategory? result = await getTenantCategoriesRepository.getTenantCategory();
// if(result?.status == true) {
// subCategoryLists = result?.details ?? [];
// update();
// print('subCategoryListssssssss${result?.details}');
//
// }
// }
closeHandler() {
Future.delayed(const Duration(milliseconds: 100), () {
if (tecNotes.text.isEmpty)
isNotes = true;
else
isNotes = false;
Get.back();
update();
});
}
distanceCalculation()async{
SharedPreferences prefs = await SharedPreferences.getInstance();
double tenantLat = double.parse(fromLatitude.toString());
double tenantLong = double.parse( fromLongitude.toString());
print('tenantLatsssssss $tenantLat');
print('tenantLongsssss $tenantLong');
print('customerlatss $toLatitude');
print('custometLongsss $toLongitude');
// var distanceInMeters = calculateDistance(
// double.parse(toLatitude.toString()),
// double.parse(toLongitude.toString()),
// tenantLat,
// tenantLong
// );
// distanceKm = distanceInMeters.round();
final pickupLat = double.tryParse(fromLatitude.toString());
final pickupLong = double.tryParse(fromLongitude.toString());
final dropLat = double.tryParse(toLatitude.toString());
final dropLong = double.tryParse(toLongitude.toString());
if (pickupLat != null && pickupLong != null && dropLat != null && dropLong != null) {
calculateDistanceMatrix(pickupLat, pickupLong, dropLat, dropLong);
} else {
// Handle invalid input
print('Invalid input');
}
// (double.parse(distanceInMeters.toInt().toStringAsFixed(0)) / 1000).round();
print('distanceKmssssssssssssss $distanceKms');
update();
}
void calculateDistanceMatrix(double pickupLat, double pickupLong, double dropLat, double dropLong) async {
try {
final distanceValue = await placesService.getDistance(pickupLat, pickupLong, dropLat, dropLong);
var distanceMatrix = distanceValue.toStringAsFixed(1);
distanceKms.value = double.parse(distanceMatrix.toString());
print('distancecalculateDistanceMatrix $distanceKms');
} catch (e) {
print(e);
}
}
double calculateDistance(double startLat, double startLon, double endLat, double endLon) {
const double earthRadius = 6371; // Radius of the Earth in kilometers
// Convert degrees to radians
startLat = degreesToRadians(startLat);
startLon = degreesToRadians(startLon);
endLat = degreesToRadians(endLat);
endLon = degreesToRadians(endLon);
// Haversine formula
final double dLat = endLat - startLat;
final double dLon = endLon - startLon;
final double a = pow(sin(dLat / 2), 2) +
cos(startLat) * cos(endLat) * pow(sin(dLon / 2), 2);
final double c = 2 * atan2(sqrt(a), sqrt(1 - a));
// Calculate the distance
final double distance = earthRadius * c;
print('distanceinHaversine$distance');
return distance;
}
double degreesToRadians(double degrees) {
return degrees * (pi / 180);
}
getAdminToken()async{
SharedPreferences prefs = await SharedPreferences.getInstance();
GetAdminToken? result = await getAdminTokenRepository.getAdminToken();
openTime = result?.details?.opentime;
closeTime = result?.details?.closetime;
prefs.setString('appLatitude', result?.details?.latitude ?? '');
prefs.setString('appLongitude', result?.details?.longitude ?? '');
prefs.setString('appLocation', result?.details?.locationname ?? '');
prefs.setInt('appRadius', result?.details?.radius ?? 0);
if(result?.status == true) {
adminDetails = result?.details?.applocationadmins??[];
adminToken.clear();
for (var adminDetail in adminDetails) {
adminToken.add(adminDetail.userfcmtokem??'');
}
}
main();
// List<String> parts = adminToken.split(', ');
// List<String> wrappedParts = adminToken.map((part) => '["$part"]').toList();
// String results = wrappedParts.join(', ');
print('adminTokenssssssssssscreateorder $adminToken');
print('applocationadminssssssssssss ${adminToken.length}');
print('openTimesssssssssss $openTime');
print('closeTimessssssssss $closeTime');
}
getTenantPricing()async{
GetTenantPricing? result = await tenantPricingRepository.getTenantPricing();
print('getthirdPartyChargesresult${result?.toJson()}');
getTenantPricingResult(result!);
update();
}
getTenantPricingResult(GetTenantPricing data){
if(data.code == 200){
basePrice = data.details?.baseprice??0;
pricePerKm = data.details?.priceperkm??0;
minKm = data.details?.minkm??0;
// calculateCharges();
update();
print('tenantpricingpriceperkm$pricePerKm');
print('tenantpricingbaseprice$basePrice');
print('tenantpricingminKm $minKm');
}
}
calculateCharges()async{
double tenantLat = double.parse(fromLatitude.toString());
double tenantLong = double.parse( fromLongitude.toString());
print('tenantLongsssssss $tenantLong');
// var distanceInMeters = calculateDistance(
// double.parse(toLatitude.toString()),
// double.parse(toLongitude.toString()),
// tenantLat,
// tenantLong
// );
final pickupLat = double.tryParse(fromLatitude.toString());
final pickupLong = double.tryParse(fromLongitude.toString());
final dropLat = double.tryParse(toLatitude.toString());
final dropLong = double.tryParse(toLongitude.toString());
final distanceValue = await placesService.getDistance(pickupLat??0.0, pickupLong??0.0, dropLat??0.0, dropLong??0.0);
var distanceMatrix = distanceValue.toStringAsFixed(1);
distanceKms.value = double.parse(distanceMatrix.toString());
// (double.parse(distanceInMeters.toInt().toStringAsFixed(0)) / 1000).round();
// var dis = (double.parse(distanceInMeters.toInt().toStringAsFixed(0)));
// var distance = distanceInMeters.round();
print('distancessssssssssssss ${distanceKms.value}');
print('minKmssssssssssssss$minKm');
// thirdPartyCharges.forEach((element) {
// print('forEachthirdPartyCharges');
// print(element.priceperkm);});
if (distanceKms < minKm) {
// double distokm = double.parse(thirdPartyCharges[0].baseprice.toString());
double distokm = double.parse(basePrice.toString());
totalDeliveryAmount = double.parse(distokm.round().toString());
update();
print("asdfasdfasdfdsaf==0_________$totalDeliveryAmount");
} else {
double totaldistance = distanceKms.value - double.parse(minKm.toString());
double distokm = totaldistance *
// double.parse(thirdPartyCharges[0].priceperkm.toString())+
// double.parse(thirdPartyCharges[0].baseprice.toString());
double.parse(pricePerKm.toString())+
double.parse(basePrice.toString());
totalDeliveryAmount = double.parse(distokm.round().toString());
update();
print("oskdoksodksodksokdoskdoskdoskd $totalDeliveryAmount");
}
}
describeValidation() async{
print('scheduleTypedescribeValidation $scheduleType');
print('describeValidationlocationId $locationId');
if(pickupAddressController.text.isEmpty){
btnController.reset();
Toast.showToast('Pickup address should not be empty');
}
else if(pickupContactNameController.text.isEmpty){
btnController.reset();
Toast.showToast('Pickup customer name should not be empty');
}
// else if(pickupContactNameController.text.length!=3){
// btnController.reset();
// Toast.showToast('Pickup customer name should be minimum 3 characters required');
// }
else if(pickupContactNoController.text.isEmpty){
btnController.reset();
Toast.showToast('Pickup customer no should not be empty');
}
else if(pickupContactNoController.text.length!=10){
btnController.reset();
Toast.showToast('Please enter correct pickup customer no');
}
else if(dropAddressController.text.isEmpty){
btnController.reset();
Toast.showToast('Drop address should not be empty');
}
else if(dropContactNameController.text.isEmpty){
btnController.reset();
Toast.showToast('Drop customer name should not be empty');
}
// else if(dropContactNameController.text.length!=3){
// btnController.reset();
// Toast.showToast('Drop customer name should be minimum 3 characters required');
// }
else if(dropContactNoController.text.isEmpty){
btnController.reset();
Toast.showToast('Drop customer no should not be empty');
}
else if(dropContactNoController.text.length!=10){
btnController.reset();
Toast.showToast('Please enter correct drop customer no');
}
else if(scheduleType == null){
btnController.reset();
Toast.showToast('Pickup time should not be empty');
}
else if(weight==null){
btnController.reset();
// print('eeeeeeeeeeeeee');
Toast.showToast('Please add weight');
}
else if(locationId == null){
btnController.reset();
Toast.showToast('Please select business location');
}
// else if(subCatId==null){
// Toast.showToast('Item should not be empty ');
// }
// else if(payment==null){
// btnController.reset();
// Toast.showToast('Please select payment method');
// }
else {
print("OrderSuccessView else");
btnController.reset();
if(fromLatitude!= null&&fromLongitude!= null&&toLatitude!= null&&toLongitude != null){
SharedPreferences prefs = await SharedPreferences.getInstance();
var distanceInMeters = calculateDistance(
double.parse(toLatitude.toString()),
double.parse(toLongitude.toString()),
double.parse(fromLatitude.toString()),
double.parse(fromLongitude.toString()),
);
distanceKm = distanceInMeters.round();
print('distanceKmInCreateOrder $distanceKm');
appRadius = prefs.getInt('appRadius')??0;
logger.i(appRadius);
if(appRadius != 0 &&distanceKm != null) {
try {
int appRadiusInt = int.parse(appRadius.toString());
int distanceKmInt = int.parse(distanceKm.toString());
if(appRadiusInt <= distanceKmInt) {
AwesomeDialog(
context: Get.context!,
dialogType: DialogType.warning,
// animType: AnimType.BOTTOMSLIDE,
descTextStyle: const TextStyle(fontSize: 16,),
desc: 'Service not available at this location',
dismissOnTouchOutside: false,
btnOkText: 'Ok',
// btnCancelOnPress: () {
// Get.to(OrderDetails(data: data));
// },
btnOkOnPress: () async{
Get.to(()=>CreateOrderView(isDashboard: false,));
},
).show();
}
else{
var orderdate = DateFormat("yyyy-MM-dd HH:mm:ss").format(
DateFormat("yyyy-MM-dd HH:mm:ss").parse(datetime.toString()));
deliveryDetails =
OrderResponseDetails(
pickuplat: "$fromLatitude",
pickuplong: "$fromLongitude",
deliverylat: "$toLatitude",
deliverylong: "$toLongitude",
orderdate: "$orderdate",
deliverydate: "$orderdate",
pickupcustomer: "$pickUpCustomerName",
pickupsuburb: "${pickupSuburbController.text}",
deliverycustomer: "$dropCustomerName",
deliverysuburb: "${dropSuburbController.text}",
);
btnController.success();
Get.to(OrderSuccessView(orderResponseDetails: deliveryDetails,));
btnController.reset();
// createOrder();
}
} catch (e) {
print("Error parsing integers: $e");
}
} else {
print('appRadiusindrop $appRadius');
print('distanceKmindrop $distanceKm');
print("One or both of the values are null.");
}
print("location distance");
btnController.reset();
}
// createOrder();
}
}
orderCreateDescribeValidation(){
if(paymentType !=0) {
if (payment == null) {
createBtnController.reset();
Toast.showToast('Please select payment method');
}
else {
createOrder();
}
}
else {
createOrder();
}
}
createOrder()async{
// var orderdate = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
// var deliverydate = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateTime.now());
var orderdate = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateFormat("yyyy-MM-dd HH:mm:ss").parse(datetime.toString()));
var deliverytime = DateFormat("yyyy-MM-dd HH:mm:ss").format(DateFormat("yyyy-MM-dd HH:mm:ss").parse(datetime.toString()));
print('createOrderorderdate$orderdate');
print('createOrderdeliverydate$deliverytime');
print('createOrderdatetime$datetime');
SharedPreferences prefs = await SharedPreferences.getInstance();
tenantId = prefs.getInt('tenantId');
moduleId = prefs.getInt('moduleId');
roleId = prefs.getInt('roleId');
partnerId = prefs.getInt('partnerId');
appLocationId = prefs.getInt('appLocationId');
configId = prefs.getInt('configId');
userId = prefs.getInt('userId');
print('moduleIdcreateOrder $moduleId');
print('userIdcreateOrder $userId');
print('distanceKmssssscreateOrder ${ distanceKm.toString()}');
print('deviceTypetabIndex ${pickupCustomerTabController.tabIndex}');
create(
CreateOrder(
orders:Orders(
orderheaderid: 0,
tenantid: tenantId,
applocationid: appLocationId,
locationid: locationId??0,
// locationid: pickupTenantLocationId==0?dropTenantLocationId??0:pickupTenantLocationId??0,
moduleid: moduleId,
categoryid: 6,
subcategoryid: subcategoryId,
configid: configId,
orderid: "",
orderdate: "$orderdate",
deliverytime: "$deliverytime",
deliverytype:"${pickupTenantLocationId!=0 || dropTenantLocationId != 0 ?'B':'C'}",
orderstatus: "created",
pending: "",
processing: "",
ready: "",
delivered: "",
cancellled: "",
customerid: pikUpSaveChecking?0:pickupCustomerId??0,
pickupcustomer: "${pickupContactNameController.text}",
pickupcontactno: "${pickupContactNoController.text}",
pickuplandmark: "${pickupLandMarkController.text}",
pickuplocation: "${pickupSuburbController.text}",
pickupcity: "${pickupCityController.text}",
pickuplocationid: pickupLocationId??0,
pickupaddress: "${pickupAddressController.text}",
pickuplat: "$fromLatitude",
pickuplong: "$fromLongitude",
deliveryid: dropSaveChecking?0:dropCustomerId??0,
deliverycustomer: "${dropContactNameController.text}",
deliverycontactno: "${dropContactNoController.text}",
deliverylocationid: dropLocationId??0,
deliverylat: "$toLatitude",
deliverylong: "$toLongitude",
deliveryaddress: "${dropAddressController.text}",
deliverylandmark: "${dropLandMarkController.text}",
deliverylocation: "${dropSuburbController.text}",
deliverycity: "${dropCityController.text}",
orderamount: totalDeliveryAmount,
taxamount: 0.0,
ordercharges: 0.0,
ordervalue: totalDeliveryAmount,
itemcount: 1,
paymenttype: paymentSelectedIndex==0?43:64,
paymentstatus: paymentSelectedIndex==0?0:2,
deliverycharge: totalDeliveryAmount,
ordernotes: dropDoorNoController.text.isNotEmpty?"${dropDoorNoController.text} ${tecNotes.text}":tecNotes.text,
kms:distanceKms.toString(),
smsdelivery: smsSelected == true?1:0,
remarks: "",
tenantuserid: userId,
partneruserid: 0,
partnerid: partnerId
),
pickup: Pickup(
customerid: pikUpSaveChecking?0:pickupCustomerId??0,
configid: configId,
locationid: pickupLocationId??0,
firstname: "${pickupContactNameController.text}",
applocationid: appLocationId,
profileimage: "",
dialcode: "+91",
contactno: "${pickupContactNoController.text}",
devicetype: "",
deviceid: "",
customertoken: "",
address: "${pickupAddressController.text}",
suburb: "${pickupSuburbController.text}",
city: "${pickupCityController.text}",
state: "${pickupStateController.text}",
postcode: "${pickupPostcodeController.text}",
landmark: "${pickupLandMarkController.text}",
doorno: "${pickupDoorNoController.text}",
latitude: "$fromLatitude",
longitude: "$fromLongitude",
tenantid: tenantId,
email: "",
primaryaddress: pickupCustomerId==0?1:0
),
drop: Drop(
customerid: dropSaveChecking?0:dropCustomerId??0,
configid: configId,
locationid: dropLocationId??0,
firstname: "${dropContactNameController.text}",
applocationid: appLocationId,
profileimage: "",
dialcode: "+91",
contactno: "${dropContactNoController.text}",
devicetype: "",
deviceid: "",
customertoken: "",
address: "${dropAddressController.text}",
suburb: "${dropSuburbController.text}",
city: "${dropCityController.text}",
state: "${dropStateController.text}",
postcode: "${dropPostcodeController.text}",
landmark: "${dropLandMarkController.text}",
doorno: "${dropDoorNoController.text}",
latitude: "$toLatitude",
longitude: "$toLongitude",
tenantid: tenantId,
email: "",
primaryaddress: dropCustomerId==0?1:0
),
),
);
}
create(CreateOrder data) async {
CreateOrderResponse? result = await createOrderRepository.createOrder(data);
print('CreateOrderresultincontroller${result?.toJson()}');
SharedPreferences prefs = await SharedPreferences.getInstance();
// orderId = result.details?.orderid;
// prefs.setString('orderId',result?.details?.orderid??'');
// print('orderIdincreate${prefs.getString('orderId')}');
// orderId = result?.details?.orderid;
print("paymentSelectedIndex$paymentSelectedIndex");
// if(paymentSelectedIndex ==0){
// print("paynow.............");
// paymentSelectedIndex = -1;
// timeSelectIndex = -1;
// btnController.reset();
// razorPayOrder(result!);
//
// }else{
if(result?.status == true){
print("cod..............");
weightSelectedIndex = -1;
paymentSelectedIndex = -1;
timeSelectIndex = -1;
smsSelected = false;
pickupContactNameController.clear();
pickupContactNoController.clear();
pickupAddressController.clear();
pickupSuburbController.clear();
pickupLandMarkController.clear();
pickupCityController.clear();
pickupStateController.clear();
pickupPostcodeController.clear();
pickupDoorNoController.clear();
pikUpSaveChecking = false;
dropContactNameController.clear();
dropContactNoController.clear();
dropAddressController.clear();
dropSuburbController.clear();
dropLandMarkController.clear();
dropCityController.clear();
dropStateController.clear();
dropPostcodeController.clear();
dropDoorNoController.clear();
tenantLocationName = '';
locationId = null;
pickupCustomerId = null;
dropCustomerId = null;
dropSaveChecking = false;
btnController.reset();
Get.to(()=>HomeView(selectedIndex: 0));
// Get.to(OrderSuccessView(orderResponseDetails: result!.details!,));
}
else{
Toast.showToast('${result?.message}');
btnController.reset();
}
// }
createOrderNotification(result!);
weight = null;
// datetime = "";
// subCatName = null;
tecNotes.clear();
payment =null;
// dashboardController.getCustomerByTenantId();
update();
}
createOrderNotification(CreateOrderResponse datas) async {
print('createOrderNotificationordersssssss');
print('adminTokencreateOrderNotification$adminToken');
SharedPreferences prefs = await SharedPreferences.getInstance();
tenantToken = prefs.getString('tenantToken');
now = DateTime.now();
createOrderNotificationResult(
NotificationRequest(
data: Data(
accessid: 'AAAAILMpCEU:APA91bEavuOllBI6sFgYtxXAgNmAVwNA-MnCMHLGlR4_t7UqpLajAkdn3T0CZr_zaLBknLyim9ytFLMZgbeXmKqTad_PKCbqlYjHpaizVrLXtecxqyEy4UktIacK2UvHVUATHL-7VQQk',
),
priority: "high",
registrationIds:adminToken,
// sender: 'Nearlexpress Business',
notification: Notification(
title:"Nearlexpress Business",
body:"An order has been created. kindly process the delivery.",
sound:"ring"
)
),
);
}
createOrderNotificationResult(NotificationRequest data)async{
NotificationResponse? result = await notificationRepository.createNotification(data);
if(result?.status == true){
}
}
@override
void onInit() {
pickupExpandedTileController = ExpandedTileController(isExpanded:pickupPredictions.isNotEmpty?false:true);
dropExpandedTileController = ExpandedTileController(isExpanded:false);
// TODO: implement onInit
super.onInit();
}
@override
void dispose() {
textEditingController.dispose();
super.dispose();
}
}