3683 lines
116 KiB
Dart
3683 lines
116 KiB
Dart
import 'dart:async';
|
|
import 'dart:convert';
|
|
import 'dart:developer';
|
|
import 'dart:io';
|
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:customer/constant/collection_name.dart';
|
|
import 'package:customer/models/brands_model.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/zone_model.dart';
|
|
import 'package:firebase_auth/firebase_auth.dart' as auth;
|
|
import 'package:firebase_storage/firebase_storage.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:geocoding/geocoding.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:intl/intl.dart';
|
|
import 'package:uuid/uuid.dart';
|
|
import 'package:video_compress/video_compress.dart';
|
|
import '../constant/constant.dart';
|
|
import '../models/attributes_model.dart';
|
|
import '../models/cab_order_model.dart';
|
|
import '../models/cashback_redeem_model.dart';
|
|
import '../models/category_model.dart';
|
|
import '../models/coupon_model.dart';
|
|
import '../models/currency_model.dart';
|
|
import '../models/favorite_ondemand_service_model.dart';
|
|
import '../models/gift_cards_model.dart';
|
|
import '../models/advertisement_model.dart';
|
|
import '../models/banner_model.dart';
|
|
import '../models/cashback_model.dart';
|
|
import '../models/conversation_model.dart';
|
|
import '../models/dine_in_booking_model.dart';
|
|
import '../models/email_template_model.dart';
|
|
import '../models/favourite_item_model.dart';
|
|
import '../models/favourite_model.dart';
|
|
import '../models/gift_cards_order_model.dart';
|
|
import '../models/inbox_model.dart';
|
|
import '../models/mail_setting.dart';
|
|
import '../models/notification_model.dart';
|
|
import '../models/on_boarding_model.dart';
|
|
import '../models/onprovider_order_model.dart';
|
|
import '../models/order_model.dart';
|
|
import '../models/parcel_category.dart';
|
|
import '../models/parcel_order_model.dart';
|
|
import '../models/parcel_weight_model.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/popular_destination.dart';
|
|
import '../models/product_model.dart';
|
|
import '../models/provider_serivce_model.dart';
|
|
import '../models/rating_model.dart';
|
|
import '../models/referral_model.dart';
|
|
import '../models/rental_vehicle_type.dart';
|
|
import '../models/review_attribute_model.dart';
|
|
import '../models/section_model.dart';
|
|
import '../models/story_model.dart';
|
|
import '../models/tax_model.dart';
|
|
import '../models/vehicle_type.dart';
|
|
import '../models/vendor_category_model.dart';
|
|
import '../models/vendor_model.dart';
|
|
import '../models/wallet_transaction_model.dart';
|
|
import '../models/worker_model.dart';
|
|
import '../screen_ui/multi_vendor_service/chat_screens/ChatVideoContainer.dart';
|
|
import '../themes/app_them_data.dart';
|
|
import '../themes/show_toast_dialog.dart';
|
|
import '../utils/preferences.dart';
|
|
import '../widget/geoflutterfire/src/geoflutterfire.dart';
|
|
import '../widget/geoflutterfire/src/models/point.dart';
|
|
|
|
class FireStoreUtils {
|
|
static FirebaseFirestore fireStore = FirebaseFirestore.instance;
|
|
|
|
static String getCurrentUid() {
|
|
final user = auth.FirebaseAuth.instance.currentUser;
|
|
if(user != null){
|
|
return user.uid;
|
|
}
|
|
return "hello";
|
|
}
|
|
|
|
static Future<bool> isLogin() async {
|
|
bool isLogin = false;
|
|
if (auth.FirebaseAuth.instance.currentUser != null) {
|
|
isLogin = await userExistOrNot(
|
|
auth.FirebaseAuth.instance.currentUser!.uid,
|
|
);
|
|
} else {
|
|
isLogin = false;
|
|
}
|
|
return isLogin;
|
|
}
|
|
|
|
static Future<bool> userExistOrNot(String uid) async {
|
|
bool isExist = false;
|
|
|
|
await fireStore
|
|
.collection(CollectionName.users)
|
|
.doc(uid)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
isExist = true;
|
|
} else {
|
|
isExist = false;
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to check user exist: $error");
|
|
isExist = false;
|
|
});
|
|
return isExist;
|
|
}
|
|
|
|
static Future<UserModel?> getUserProfile(String uuid) async {
|
|
UserModel? userModel;
|
|
await fireStore
|
|
.collection(CollectionName.users)
|
|
.doc(uuid)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
userModel = UserModel.fromJson(value.data()!);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to update user: $error");
|
|
userModel = null;
|
|
});
|
|
return userModel;
|
|
}
|
|
|
|
static Future<bool> updateUser(UserModel userModel) async {
|
|
bool isUpdate = false;
|
|
await fireStore
|
|
.collection(CollectionName.users)
|
|
.doc(userModel.id)
|
|
.set(userModel.toJson())
|
|
.whenComplete(() {
|
|
Constant.userModel = userModel;
|
|
isUpdate = true;
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to update user: $error");
|
|
isUpdate = false;
|
|
});
|
|
return isUpdate;
|
|
}
|
|
|
|
static Future<List<OnBoardingModel>> getOnBoardingList() async {
|
|
List<OnBoardingModel> onBoardingModel = [];
|
|
await fireStore
|
|
.collection(CollectionName.onBoarding)
|
|
.where("type", isEqualTo: "customer")
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
OnBoardingModel documentModel = OnBoardingModel.fromJson(
|
|
element.data(),
|
|
);
|
|
onBoardingModel.add(documentModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return onBoardingModel;
|
|
}
|
|
|
|
static Future<List<ZoneModel>?> getZone() async {
|
|
List<ZoneModel> airPortList = [];
|
|
await fireStore
|
|
.collection(CollectionName.zone)
|
|
.where('publish', isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
ZoneModel ariPortModel = ZoneModel.fromJson(element.data());
|
|
airPortList.add(ariPortModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return airPortList;
|
|
}
|
|
|
|
static Future<String?> referralAdd(ReferralModel ratingModel) async {
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.referral)
|
|
.doc(ratingModel.id)
|
|
.set(ratingModel.toJson());
|
|
} catch (e, s) {
|
|
print('FireStoreUtils.referralAdd $e $s');
|
|
return "Couldn't review".tr;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
static Future<ReferralModel?> getReferralUserByCode(
|
|
String referralCode,
|
|
) async {
|
|
ReferralModel? referralModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.referral)
|
|
.where("referralCode", isEqualTo: referralCode)
|
|
.get()
|
|
.then((value) {
|
|
if (value.docs.isNotEmpty) {
|
|
referralModel = ReferralModel.fromJson(value.docs.first.data());
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
print('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return referralModel;
|
|
}
|
|
|
|
static Future<List<SectionModel>> getSections() async {
|
|
List<SectionModel> sections = [];
|
|
QuerySnapshot<Map<String, dynamic>> productsQuery =
|
|
await fireStore
|
|
.collection(CollectionName.sections)
|
|
.where("isActive", isEqualTo: true)
|
|
.get();
|
|
|
|
await Future.forEach(productsQuery.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
try {
|
|
sections.add(SectionModel.fromJson(document.data()));
|
|
} catch (e) {
|
|
print('**-FireStoreUtils.getSection Parse error $e');
|
|
}
|
|
});
|
|
return sections;
|
|
}
|
|
|
|
static Future<List<dynamic>> getSectionBannerList() async {
|
|
List<dynamic> sections = [];
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("AppHomeBanners")
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
sections = value.data()!['banners'] ?? [];
|
|
}
|
|
});
|
|
return sections;
|
|
}
|
|
|
|
static Future<CurrencyModel?> getCurrency() async {
|
|
CurrencyModel? currency;
|
|
await fireStore
|
|
.collection(CollectionName.currency)
|
|
.where("isActive", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
if (value.docs.isNotEmpty) {
|
|
currency = CurrencyModel.fromJson(value.docs.first.data());
|
|
}
|
|
});
|
|
return currency;
|
|
}
|
|
|
|
static Future<List<AdvertisementModel>> getAllAdvertisement() async {
|
|
List<AdvertisementModel> advertisementList = [];
|
|
await fireStore
|
|
.collection(CollectionName.advertisements)
|
|
.where('status', isEqualTo: 'approved')
|
|
.where('paymentStatus', isEqualTo: true)
|
|
.where('startDate', isLessThanOrEqualTo: DateTime.now())
|
|
.where('endDate', isGreaterThan: DateTime.now())
|
|
.orderBy('priority', descending: false)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
AdvertisementModel advertisementModel = AdvertisementModel.fromJson(
|
|
element.data(),
|
|
);
|
|
if (advertisementModel.isPaused == null ||
|
|
advertisementModel.isPaused == false) {
|
|
advertisementList.add(advertisementModel);
|
|
}
|
|
}
|
|
});
|
|
return advertisementList;
|
|
}
|
|
|
|
static Future<List<FavouriteModel>> getFavouriteRestaurant() async {
|
|
List<FavouriteModel> favouriteList = [];
|
|
await fireStore
|
|
.collection(CollectionName.favoriteVendor)
|
|
.where('user_id', isEqualTo: getCurrentUid())
|
|
.where("section_id", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
FavouriteModel favouriteModel = FavouriteModel.fromJson(
|
|
element.data(),
|
|
);
|
|
favouriteList.add(favouriteModel);
|
|
}
|
|
});
|
|
log("CollectionName.favoriteRestaurant :: ${favouriteList.length}");
|
|
return favouriteList;
|
|
}
|
|
|
|
static Future<EmailTemplateModel?> getEmailTemplates(String type) async {
|
|
EmailTemplateModel? emailTemplateModel;
|
|
await fireStore
|
|
.collection(CollectionName.emailTemplates)
|
|
.where('type', isEqualTo: type)
|
|
.get()
|
|
.then((value) {
|
|
print("------>");
|
|
if (value.docs.isNotEmpty) {
|
|
print(value.docs.first.data());
|
|
emailTemplateModel = EmailTemplateModel.fromJson(
|
|
value.docs.first.data(),
|
|
);
|
|
}
|
|
});
|
|
return emailTemplateModel;
|
|
}
|
|
|
|
static Future<List<CashbackModel>> getCashbackList() async {
|
|
List<CashbackModel> cashbackList = [];
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.cashback)
|
|
.where('isEnabled', isEqualTo: true)
|
|
.where('startDate', isLessThanOrEqualTo: Timestamp.now())
|
|
.where('endDate', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.get()
|
|
.then((event) {
|
|
if (event.docs.isNotEmpty) {
|
|
for (var element in event.docs) {
|
|
CashbackModel cashbackModel = CashbackModel.fromJson(
|
|
element.data(),
|
|
);
|
|
if (cashbackModel.customerIds == null ||
|
|
cashbackModel.customerIds?.contains(
|
|
FireStoreUtils.getCurrentUid(),
|
|
) ==
|
|
true) {
|
|
cashbackList.add(cashbackModel);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
} catch (error, stackTrace) {
|
|
log(
|
|
'Error fetching redeemed cashback data: $error',
|
|
stackTrace: stackTrace,
|
|
);
|
|
}
|
|
|
|
return cashbackList;
|
|
}
|
|
|
|
static Future addDriverInbox(InboxModel inboxModel) async {
|
|
return await fireStore
|
|
.collection("chat_driver")
|
|
.doc(inboxModel.orderId)
|
|
.set(inboxModel.toJson())
|
|
.then((document) {
|
|
return inboxModel;
|
|
});
|
|
}
|
|
|
|
static Future addDriverChat(ConversationModel conversationModel) async {
|
|
return await fireStore
|
|
.collection("chat_driver")
|
|
.doc(conversationModel.orderId)
|
|
.collection("thread")
|
|
.doc(conversationModel.id)
|
|
.set(conversationModel.toJson())
|
|
.then((document) {
|
|
return conversationModel;
|
|
});
|
|
}
|
|
|
|
static Future addRestaurantInbox(InboxModel inboxModel) async {
|
|
return await fireStore
|
|
.collection("chat_store")
|
|
.doc(inboxModel.orderId)
|
|
.set(inboxModel.toJson())
|
|
.then((document) {
|
|
return inboxModel;
|
|
});
|
|
}
|
|
|
|
static Future addRestaurantChat(ConversationModel conversationModel) async {
|
|
return await fireStore
|
|
.collection("chat_store")
|
|
.doc(conversationModel.orderId)
|
|
.collection("thread")
|
|
.doc(conversationModel.id)
|
|
.set(conversationModel.toJson())
|
|
.then((document) {
|
|
return conversationModel;
|
|
});
|
|
}
|
|
|
|
static Future addWorkerInbox(InboxModel inboxModel) async {
|
|
return await fireStore
|
|
.collection("chat_worker")
|
|
.doc(inboxModel.orderId)
|
|
.set(inboxModel.toJson())
|
|
.then((document) {
|
|
return inboxModel;
|
|
});
|
|
}
|
|
|
|
static Future addWorkerChat(ConversationModel conversationModel) async {
|
|
return await fireStore
|
|
.collection("chat_worker")
|
|
.doc(conversationModel.orderId)
|
|
.collection("thread")
|
|
.doc(conversationModel.id)
|
|
.set(conversationModel.toJson())
|
|
.then((document) {
|
|
return conversationModel;
|
|
});
|
|
}
|
|
|
|
static Future addProviderInbox(InboxModel inboxModel) async {
|
|
return await fireStore
|
|
.collection("chat_provider")
|
|
.doc(inboxModel.orderId)
|
|
.set(inboxModel.toJson())
|
|
.then((document) {
|
|
return inboxModel;
|
|
});
|
|
}
|
|
|
|
static Future addProviderChat(ConversationModel conversationModel) async {
|
|
return await fireStore
|
|
.collection("chat_provider")
|
|
.doc(conversationModel.orderId)
|
|
.collection("thread")
|
|
.doc(conversationModel.id)
|
|
.set(conversationModel.toJson())
|
|
.then((document) {
|
|
return conversationModel;
|
|
});
|
|
}
|
|
|
|
static Future<List<TaxModel>?> getTaxList(String? sectionId) async {
|
|
List<TaxModel> taxList = [];
|
|
List<Placemark> placeMarks = await placemarkFromCoordinates(
|
|
Constant.selectedLocation.location!.latitude ?? 0.0,
|
|
Constant.selectedLocation.location!.longitude ?? 0.0,
|
|
);
|
|
await fireStore
|
|
.collection(CollectionName.tax)
|
|
.where('sectionId', isEqualTo: sectionId)
|
|
.where('country', isEqualTo: placeMarks.first.country)
|
|
.where('enable', isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
TaxModel taxModel = TaxModel.fromJson(element.data());
|
|
taxList.add(taxModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
|
|
return taxList;
|
|
}
|
|
|
|
static Future<List<DineInBookingModel>> getDineInBooking(
|
|
bool isUpcoming,
|
|
) async {
|
|
List<DineInBookingModel> list = [];
|
|
|
|
if (isUpcoming) {
|
|
await fireStore
|
|
.collection(CollectionName.bookedTable)
|
|
.where('authorID', isEqualTo: getCurrentUid())
|
|
.where('date', isGreaterThan: Timestamp.now())
|
|
.orderBy('date', descending: true)
|
|
.orderBy('createdAt', descending: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
DineInBookingModel taxModel = DineInBookingModel.fromJson(
|
|
element.data(),
|
|
);
|
|
list.add(taxModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
} else {
|
|
await fireStore
|
|
.collection(CollectionName.bookedTable)
|
|
.where('authorID', isEqualTo: getCurrentUid())
|
|
.where('date', isLessThan: Timestamp.now())
|
|
.orderBy('date', descending: true)
|
|
.orderBy('createdAt', descending: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
DineInBookingModel taxModel = DineInBookingModel.fromJson(
|
|
element.data(),
|
|
);
|
|
list.add(taxModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
static Future<List<VendorCategoryModel>> getHomeVendorCategory() async {
|
|
List<VendorCategoryModel> list = [];
|
|
await fireStore
|
|
.collection(CollectionName.vendorCategories)
|
|
.where("section_id", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("show_in_homepage", isEqualTo: true)
|
|
.where('publish', isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
VendorCategoryModel walletTransactionModel =
|
|
VendorCategoryModel.fromJson(element.data());
|
|
list.add(walletTransactionModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return list;
|
|
}
|
|
|
|
static Future<List<ProductModel>> getProductListByBrandId(
|
|
String brandId,
|
|
) async {
|
|
List<ProductModel> list = [];
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.where('brandID', isEqualTo: brandId)
|
|
.where('publish', isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
ProductModel walletTransactionModel = ProductModel.fromJson(
|
|
element.data(),
|
|
);
|
|
list.add(walletTransactionModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return list;
|
|
}
|
|
|
|
static Future<List<BannerModel>> getHomeBottomBanner() async {
|
|
List<BannerModel> bannerList = [];
|
|
await fireStore
|
|
.collection(CollectionName.bannerItems)
|
|
.where("is_publish", isEqualTo: true)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("position", isEqualTo: "middle")
|
|
.orderBy("set_order", descending: false)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
BannerModel bannerHome = BannerModel.fromJson(element.data());
|
|
bannerList.add(bannerHome);
|
|
}
|
|
});
|
|
return bannerList;
|
|
}
|
|
|
|
static Future<List<BrandsModel>> getBrandList() async {
|
|
List<BrandsModel> brandList = [];
|
|
await fireStore
|
|
.collection(CollectionName.brands)
|
|
.where("is_publish", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
BrandsModel bannerHome = BrandsModel.fromJson(element.data());
|
|
brandList.add(bannerHome);
|
|
}
|
|
});
|
|
return brandList;
|
|
}
|
|
|
|
static Future<bool?> setBookedOrder(DineInBookingModel orderModel) async {
|
|
bool isAdded = false;
|
|
await fireStore
|
|
.collection(CollectionName.bookedTable)
|
|
.doc(orderModel.id)
|
|
.set(orderModel.toJson())
|
|
.then((value) {
|
|
isAdded = true;
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to update user: $error");
|
|
isAdded = false;
|
|
});
|
|
return isAdded;
|
|
}
|
|
|
|
static Future<List> getVendorCuisines(String id) async {
|
|
List tagList = [];
|
|
List prodTagList = [];
|
|
QuerySnapshot<Map<String, dynamic>> productsQuery =
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.where('vendorID', isEqualTo: id)
|
|
.get();
|
|
await Future.forEach(productsQuery.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
if (document.data().containsKey("categoryID") &&
|
|
document.data()['categoryID'].toString().isNotEmpty) {
|
|
prodTagList.add(document.data()['categoryID']);
|
|
}
|
|
});
|
|
QuerySnapshot<Map<String, dynamic>> catQuery =
|
|
await fireStore
|
|
.collection(CollectionName.vendorCategories)
|
|
.where('publish', isEqualTo: true)
|
|
.get();
|
|
await Future.forEach(catQuery.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
Map<String, dynamic> catDoc = document.data();
|
|
if (catDoc.containsKey("id") &&
|
|
catDoc['id'].toString().isNotEmpty &&
|
|
catDoc.containsKey("title") &&
|
|
catDoc['title'].toString().isNotEmpty &&
|
|
prodTagList.contains(catDoc['id'])) {
|
|
tagList.add(catDoc['title']);
|
|
}
|
|
});
|
|
return tagList;
|
|
}
|
|
|
|
static Future<List<FavouriteItemModel>> getFavouriteItem() async {
|
|
List<FavouriteItemModel> favouriteList = [];
|
|
await fireStore
|
|
.collection(CollectionName.favoriteItem)
|
|
.where('user_id', isEqualTo: getCurrentUid())
|
|
.where("section_id", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
FavouriteItemModel favouriteModel = FavouriteItemModel.fromJson(
|
|
element.data(),
|
|
);
|
|
favouriteList.add(favouriteModel);
|
|
}
|
|
});
|
|
return favouriteList;
|
|
}
|
|
|
|
static Future<VendorModel?> getVendorById(String vendorId) async {
|
|
VendorModel? vendorModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.vendors)
|
|
.doc(vendorId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
vendorModel = VendorModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
log('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return vendorModel;
|
|
}
|
|
|
|
static Future<ProductModel?> getProductById(String productId) async {
|
|
ProductModel? vendorCategoryModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.doc(productId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
vendorCategoryModel = ProductModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
log('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return vendorCategoryModel;
|
|
}
|
|
|
|
static Future<List<GiftCardsModel>> getGiftCard() async {
|
|
List<GiftCardsModel> giftCardModelList = [];
|
|
QuerySnapshot<Map<String, dynamic>> currencyQuery =
|
|
await fireStore
|
|
.collection(CollectionName.giftCards)
|
|
.where("isEnable", isEqualTo: true)
|
|
.get();
|
|
await Future.forEach(currencyQuery.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
try {
|
|
log(document.data().toString());
|
|
giftCardModelList.add(GiftCardsModel.fromJson(document.data()));
|
|
} catch (e) {
|
|
debugPrint('FireStoreUtils.get Currency Parse error $e');
|
|
}
|
|
});
|
|
return giftCardModelList;
|
|
}
|
|
|
|
static Future<bool?> setWalletTransaction(
|
|
WalletTransactionModel walletTransactionModel,
|
|
) async {
|
|
bool isAdded = false;
|
|
await fireStore
|
|
.collection(CollectionName.wallet)
|
|
.doc(walletTransactionModel.id)
|
|
.set(walletTransactionModel.toJson())
|
|
.then((value) {
|
|
isAdded = true;
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to update user: $error");
|
|
isAdded = false;
|
|
});
|
|
return isAdded;
|
|
}
|
|
|
|
static Future<void> getSettings() async {
|
|
try {
|
|
final restaurantSnap =
|
|
await FirebaseFirestore.instance
|
|
.collection(CollectionName.settings)
|
|
.doc('vendor')
|
|
.get();
|
|
|
|
if (restaurantSnap.exists && restaurantSnap.data() != null) {
|
|
Constant.isSubscriptionModelApplied =
|
|
restaurantSnap.data()?['subscription_model'] ?? false;
|
|
} else {
|
|
Constant.isSubscriptionModelApplied = false;
|
|
}
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("DriverNearBy")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.distanceType = event.data()?["distanceType"] ?? "km";
|
|
Constant.isEnableOTPTripStart =
|
|
event.data()?["enableOTPTripStart"] ?? false;
|
|
Constant.isEnableOTPTripStartForRental =
|
|
event.data()?["enableOTPTripStartForRental"] ?? false;
|
|
}
|
|
});
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("maintenance_settings")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.isMaintenanceModeForCustomer =
|
|
event.data()?["isMaintenanceModeForCustomer"] ?? false;
|
|
}
|
|
});
|
|
|
|
final globalSettingsSnap =
|
|
await FirebaseFirestore.instance
|
|
.collection(CollectionName.settings)
|
|
.doc("globalSettings")
|
|
.get();
|
|
|
|
if (globalSettingsSnap.exists && globalSettingsSnap.data() != null) {
|
|
Constant.isEnableAdsFeature =
|
|
globalSettingsSnap.data()?['isEnableAdsFeature'] ?? false;
|
|
Constant.isSelfDeliveryFeature =
|
|
globalSettingsSnap.data()?['isSelfDelivery'] ?? false;
|
|
Constant.defaultCountryCode =
|
|
globalSettingsSnap.data()?['defaultCountryCode'] ?? '';
|
|
Constant.defaultCountry =
|
|
globalSettingsSnap.data()?['defaultCountry'] ?? '';
|
|
|
|
String? colorStr = globalSettingsSnap.data()?['app_customer_color'];
|
|
if (colorStr != null && colorStr.isNotEmpty) {
|
|
AppThemeData.primary300 = Color(
|
|
int.parse(colorStr.replaceFirst("#", "0xff")),
|
|
);
|
|
}
|
|
}
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("googleMapKey")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.mapAPIKey = event.data()?["key"] ?? "";
|
|
}
|
|
});
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("placeHolderImage")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.placeHolderImage = event.data()?["image"] ?? "";
|
|
}
|
|
});
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("notification_setting")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists) {
|
|
Constant.senderId = event.data()?["senderId"];
|
|
Constant.jsonNotificationFileURL = event.data()?["serviceJson"];
|
|
}
|
|
});
|
|
|
|
final cashbackSnap =
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("cashbackOffer")
|
|
.get();
|
|
|
|
if (cashbackSnap.exists && cashbackSnap.data() != null) {
|
|
Constant.isCashbackActive = cashbackSnap.data()?["isEnable"] ?? false;
|
|
} else {
|
|
Constant.isCashbackActive = false;
|
|
}
|
|
|
|
final driverNearBySnap =
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("DriverNearBy")
|
|
.get();
|
|
|
|
if (driverNearBySnap.exists && driverNearBySnap.data() != null) {
|
|
Constant.selectedMapType =
|
|
driverNearBySnap.data()?["selectedMapType"] ?? "";
|
|
Constant.mapType = driverNearBySnap.data()?["mapType"] ?? "";
|
|
}
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("privacyPolicy")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.privacyPolicy = event.data()?["privacy_policy"] ?? "";
|
|
}
|
|
});
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("termsAndConditions")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.termsAndConditions =
|
|
event.data()?["termsAndConditions"] ?? "";
|
|
}
|
|
});
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("walletSettings")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.walletSetting = event.data()?["isEnabled"] ?? false;
|
|
}
|
|
});
|
|
|
|
fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("Version")
|
|
.snapshots()
|
|
.listen((event) {
|
|
if (event.exists && event.data() != null) {
|
|
Constant.googlePlayLink = event.data()?["googlePlayLink"] ?? '';
|
|
Constant.appStoreLink = event.data()?["appStoreLink"] ?? '';
|
|
Constant.appVersion = event.data()?["app_version"] ?? '';
|
|
Constant.websiteUrl = event.data()?["websiteUrl"] ?? '';
|
|
}
|
|
});
|
|
|
|
final storySnap =
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc('story')
|
|
.get();
|
|
|
|
if (storySnap.exists && storySnap.data() != null) {
|
|
Constant.storyEnable = storySnap.data()?['isEnabled'] ?? false;
|
|
} else {
|
|
Constant.storyEnable = false;
|
|
}
|
|
|
|
final emailSnap =
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("emailSetting")
|
|
.get();
|
|
|
|
if (emailSnap.exists && emailSnap.data() != null) {
|
|
Constant.mailSettings = MailSettings.fromJson(emailSnap.data()!);
|
|
}
|
|
|
|
final specialDiscountSnap =
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("specialDiscountOffer")
|
|
.get();
|
|
|
|
if (specialDiscountSnap.exists && specialDiscountSnap.data() != null) {
|
|
Constant.specialDiscountOffer =
|
|
specialDiscountSnap.data()?["isEnable"] ?? false;
|
|
} else {
|
|
Constant.specialDiscountOffer = false;
|
|
}
|
|
} catch (e) {
|
|
log("getSettings() Error: $e");
|
|
}
|
|
}
|
|
|
|
static Future<List<GiftCardsOrderModel>> getGiftHistory() async {
|
|
List<GiftCardsOrderModel> giftCardsOrderList = [];
|
|
await fireStore
|
|
.collection(CollectionName.giftPurchases)
|
|
.where("userid", isEqualTo: FireStoreUtils.getCurrentUid())
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
GiftCardsOrderModel giftCardsOrderModel =
|
|
GiftCardsOrderModel.fromJson(element.data());
|
|
giftCardsOrderList.add(giftCardsOrderModel);
|
|
}
|
|
});
|
|
return giftCardsOrderList;
|
|
}
|
|
|
|
static Future<List<OrderModel>> getAllOrder() async {
|
|
List<OrderModel> list = [];
|
|
|
|
print("Current UID: ${getCurrentUid()}");
|
|
print("Section ID: ${Constant.sectionConstantModel?.id}");
|
|
|
|
try {
|
|
final snapshot =
|
|
await fireStore
|
|
.collection(CollectionName.vendorOrders)
|
|
.where("authorID", isEqualTo: getCurrentUid())
|
|
.where("section_id", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.orderBy("createdAt", descending: true)
|
|
.get();
|
|
|
|
print("Snapshot size: ${snapshot.docs.length}");
|
|
|
|
for (var element in snapshot.docs) {
|
|
OrderModel order = OrderModel.fromJson(element.data());
|
|
print("Order fetched: ${order.id}"); // or other fields
|
|
list.add(order);
|
|
}
|
|
|
|
print("Total Orders added to list: ${list.length}");
|
|
} catch (e) {
|
|
print("Error fetching orders: $e");
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
static Future<RatingModel?> getOrderReviewsByID(
|
|
String orderId,
|
|
String productID,
|
|
) async {
|
|
RatingModel? ratingModel;
|
|
|
|
await fireStore
|
|
.collection(CollectionName.itemsReview)
|
|
.where('orderid', isEqualTo: orderId)
|
|
.where('productId', isEqualTo: productID)
|
|
.get()
|
|
.then((value) {
|
|
if (value.docs.isNotEmpty) {
|
|
ratingModel = RatingModel.fromJson(value.docs.first.data());
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return ratingModel;
|
|
}
|
|
|
|
static Future<VendorCategoryModel?> getVendorCategoryByCategoryId(
|
|
String categoryId,
|
|
) async {
|
|
VendorCategoryModel? vendorCategoryModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.vendorCategories)
|
|
.doc(categoryId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
vendorCategoryModel = VendorCategoryModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
log('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return vendorCategoryModel;
|
|
}
|
|
|
|
static Future<ReviewAttributeModel?> getVendorReviewAttribute(
|
|
String attributeId,
|
|
) async {
|
|
ReviewAttributeModel? vendorCategoryModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.reviewAttributes)
|
|
.doc(attributeId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
vendorCategoryModel = ReviewAttributeModel.fromJson(
|
|
value.data()!,
|
|
);
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
log('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return vendorCategoryModel;
|
|
}
|
|
|
|
// static Future<bool?> setRatingModel(RatingModel ratingModel) async {
|
|
// bool isAdded = false;
|
|
// await fireStore
|
|
// .collection(CollectionName.itemsReview)
|
|
// .doc(ratingModel.id)
|
|
// .set(ratingModel.toJson())
|
|
// .then((value) {
|
|
// isAdded = true;
|
|
// })
|
|
// .catchError((error) {
|
|
// log("Failed to update user: $error");
|
|
// isAdded = false;
|
|
// });
|
|
// return isAdded;
|
|
// }
|
|
|
|
static Future<VendorModel?> updateVendor(VendorModel vendor) async {
|
|
return await fireStore
|
|
.collection(CollectionName.vendors)
|
|
.doc(vendor.id)
|
|
.set(vendor.toJson())
|
|
.then((document) {
|
|
return vendor;
|
|
});
|
|
}
|
|
|
|
static Future<bool?> setProduct(ProductModel orderModel) async {
|
|
bool isAdded = false;
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.doc(orderModel.id)
|
|
.set(orderModel.toJson())
|
|
.then((value) {
|
|
isAdded = true;
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to update user: $error");
|
|
isAdded = false;
|
|
});
|
|
return isAdded;
|
|
}
|
|
|
|
static Future<ReferralModel?> getReferralUserBy() async {
|
|
ReferralModel? referralModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.referral)
|
|
.doc(getCurrentUid())
|
|
.get()
|
|
.then((value) {
|
|
referralModel = ReferralModel.fromJson(value.data()!);
|
|
});
|
|
} catch (e, s) {
|
|
print('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return referralModel;
|
|
}
|
|
|
|
static Future<List<ProductModel>> getProductByVendorId(
|
|
String vendorId,
|
|
) async {
|
|
String selectedFoodType = Preferences.getString(
|
|
Preferences.foodDeliveryType,
|
|
defaultValue: "Delivery",
|
|
);
|
|
List<ProductModel> list = [];
|
|
log("GetProductByVendorId :: $selectedFoodType");
|
|
if (selectedFoodType == "TakeAway") {
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.where("vendorID", isEqualTo: vendorId)
|
|
.where('publish', isEqualTo: true)
|
|
.orderBy("createdAt", descending: false)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
ProductModel productModel = ProductModel.fromJson(element.data());
|
|
list.add(productModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
} else {
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.where("vendorID", isEqualTo: vendorId)
|
|
.where("takeawayOption", isEqualTo: false)
|
|
.where('publish', isEqualTo: true)
|
|
.orderBy("createdAt", descending: false)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
ProductModel productModel = ProductModel.fromJson(element.data());
|
|
list.add(productModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
}
|
|
|
|
return list;
|
|
}
|
|
|
|
static Future<DeliveryCharge?> getDeliveryCharge() async {
|
|
DeliveryCharge? deliveryCharge;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("DeliveryCharge")
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
deliveryCharge = DeliveryCharge.fromJson(value.data()!);
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
log('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return deliveryCharge;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getAllVendorPublicCoupons(
|
|
String vendorId,
|
|
) async {
|
|
List<CouponModel> coupon = [];
|
|
|
|
await fireStore
|
|
.collection(CollectionName.coupons)
|
|
.where("vendorID", isEqualTo: vendorId)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.where("isEnabled", isEqualTo: true)
|
|
.where("isPublic", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel taxModel = CouponModel.fromJson(element.data());
|
|
coupon.add(taxModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
print("coupon :::::::::::::::::${coupon.length}");
|
|
return coupon;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getAllVendorCoupons(String vendorId) async {
|
|
List<CouponModel> coupon = [];
|
|
|
|
await fireStore
|
|
.collection(CollectionName.coupons)
|
|
.where("vendorID", isEqualTo: vendorId)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.where("isEnabled", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel taxModel = CouponModel.fromJson(element.data());
|
|
coupon.add(taxModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
print("coupon :::::::::::::::::${coupon.length}");
|
|
return coupon;
|
|
}
|
|
|
|
static Future<List<CashbackModel>> getAllCashbak() async {
|
|
List<CashbackModel> cashbackList = [];
|
|
await fireStore
|
|
.collection(CollectionName.cashback)
|
|
.get()
|
|
.then((value) {
|
|
cashbackList =
|
|
value.docs.map((doc) {
|
|
return CashbackModel.fromJson(doc.data());
|
|
}).toList();
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
|
|
return cashbackList;
|
|
}
|
|
|
|
static Future<List<CashbackRedeemModel>> getRedeemedCashbacks(
|
|
String cashbackId,
|
|
) async {
|
|
List<CashbackRedeemModel> redeemedDocs = [];
|
|
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.cashbackRedeem)
|
|
.where('userId', isEqualTo: FireStoreUtils.getCurrentUid())
|
|
.where('cashbackId', isEqualTo: cashbackId)
|
|
.get()
|
|
.then((value) {
|
|
redeemedDocs =
|
|
value.docs.map((doc) {
|
|
return CashbackRedeemModel.fromJson(doc.data());
|
|
}).toList();
|
|
});
|
|
} catch (error, stackTrace) {
|
|
log(
|
|
'Error fetching redeemed cashback data: $error',
|
|
stackTrace: stackTrace,
|
|
);
|
|
}
|
|
|
|
return redeemedDocs;
|
|
}
|
|
|
|
static Future<bool?> setCashbackRedeemModel(
|
|
CashbackRedeemModel cashbackRedeemModel,
|
|
) async {
|
|
bool isAdded = false;
|
|
await fireStore
|
|
.collection(CollectionName.cashbackRedeem)
|
|
.doc(cashbackRedeemModel.id)
|
|
.set(cashbackRedeemModel.toJson())
|
|
.then((value) {
|
|
isAdded = true;
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to update user: $error");
|
|
isAdded = false;
|
|
});
|
|
return isAdded;
|
|
}
|
|
|
|
static Future<bool?> setOrder(OrderModel orderModel) async {
|
|
bool isAdded = false;
|
|
await fireStore
|
|
.collection(CollectionName.vendorOrders)
|
|
.doc(orderModel.id)
|
|
.set(orderModel.toJson())
|
|
.then((value) {
|
|
isAdded = true;
|
|
})
|
|
.catchError((error) {
|
|
log("Failed to update user: $error");
|
|
isAdded = false;
|
|
});
|
|
return isAdded;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getOfferByVendorId(String vendorId) async {
|
|
List<CouponModel> couponList = [];
|
|
await fireStore
|
|
.collection(CollectionName.coupons)
|
|
.where("vendorID", isEqualTo: vendorId)
|
|
.where("isEnabled", isEqualTo: true)
|
|
.where("isPublic", isEqualTo: true)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel favouriteModel = CouponModel.fromJson(element.data());
|
|
couponList.add(favouriteModel);
|
|
}
|
|
});
|
|
return couponList;
|
|
}
|
|
|
|
static Future<List<AttributesModel>?> getAttributes() async {
|
|
List<AttributesModel> attributeList = [];
|
|
await fireStore.collection(CollectionName.vendorAttributes).get().then((
|
|
value,
|
|
) {
|
|
for (var element in value.docs) {
|
|
AttributesModel favouriteModel = AttributesModel.fromJson(
|
|
element.data(),
|
|
);
|
|
attributeList.add(favouriteModel);
|
|
}
|
|
});
|
|
return attributeList;
|
|
}
|
|
|
|
static Future<VendorCategoryModel?> getVendorCategoryById(
|
|
String categoryId,
|
|
) async {
|
|
VendorCategoryModel? vendorCategoryModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.vendorCategories)
|
|
.doc(categoryId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
vendorCategoryModel = VendorCategoryModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
log('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return vendorCategoryModel;
|
|
}
|
|
|
|
static Future<List<RatingModel>> getVendorReviews(String vendorId) async {
|
|
List<RatingModel> ratingList = [];
|
|
await fireStore
|
|
.collection(CollectionName.itemsReview)
|
|
.where('VendorId', isEqualTo: vendorId)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
RatingModel giftCardsOrderModel = RatingModel.fromJson(
|
|
element.data(),
|
|
);
|
|
ratingList.add(giftCardsOrderModel);
|
|
}
|
|
});
|
|
return ratingList;
|
|
}
|
|
|
|
static Future getPaymentSettingsData() async {
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("payFastSettings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
PayFastModel payFastModel = PayFastModel.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.payFastSettings,
|
|
jsonEncode(payFastModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("MercadoPago")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
MercadoPagoModel mercadoPagoModel = MercadoPagoModel.fromJson(
|
|
value.data()!,
|
|
);
|
|
await Preferences.setString(
|
|
Preferences.mercadoPago,
|
|
jsonEncode(mercadoPagoModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("paypalSettings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
PayPalModel payPalModel = PayPalModel.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.paypalSettings,
|
|
jsonEncode(payPalModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("stripeSettings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
StripeModel stripeModel = StripeModel.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.stripeSettings,
|
|
jsonEncode(stripeModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("flutterWave")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
FlutterWaveModel flutterWaveModel = FlutterWaveModel.fromJson(
|
|
value.data()!,
|
|
);
|
|
await Preferences.setString(
|
|
Preferences.flutterWave,
|
|
jsonEncode(flutterWaveModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("payStack")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
PayStackModel payStackModel = PayStackModel.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.payStack,
|
|
jsonEncode(payStackModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("PaytmSettings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
PaytmModel paytmModel = PaytmModel.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.paytmSettings,
|
|
jsonEncode(paytmModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("walletSettings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
WalletSettingModel walletSettingModel = WalletSettingModel.fromJson(
|
|
value.data()!,
|
|
);
|
|
await Preferences.setString(
|
|
Preferences.walletSettings,
|
|
jsonEncode(walletSettingModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("razorpaySettings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
RazorPayModel razorPayModel = RazorPayModel.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.razorpaySettings,
|
|
jsonEncode(razorPayModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("CODSettings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
CodSettingModel codSettingModel = CodSettingModel.fromJson(
|
|
value.data()!,
|
|
);
|
|
await Preferences.setString(
|
|
Preferences.codSettings,
|
|
jsonEncode(codSettingModel.toJson()),
|
|
);
|
|
}
|
|
});
|
|
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("midtrans_settings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
MidTrans midTrans = MidTrans.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.midTransSettings,
|
|
jsonEncode(midTrans.toJson()),
|
|
);
|
|
}
|
|
});
|
|
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("orange_money_settings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
OrangeMoney orangeMoney = OrangeMoney.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.orangeMoneySettings,
|
|
jsonEncode(orangeMoney.toJson()),
|
|
);
|
|
}
|
|
});
|
|
|
|
await fireStore
|
|
.collection(CollectionName.settings)
|
|
.doc("xendit_settings")
|
|
.get()
|
|
.then((value) async {
|
|
if (value.exists) {
|
|
Xendit xendit = Xendit.fromJson(value.data()!);
|
|
await Preferences.setString(
|
|
Preferences.xenditSettings,
|
|
jsonEncode(xendit.toJson()),
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
static Future<bool?> updateUserWallet({
|
|
required String amount,
|
|
required String userId,
|
|
}) async {
|
|
bool isAdded = false;
|
|
await getUserProfile(userId).then((value) async {
|
|
if (value != null) {
|
|
UserModel userModel = value;
|
|
print("Old Wallet Amount: ${userModel.walletAmount}");
|
|
print("Amount to Add: $amount");
|
|
userModel.walletAmount =
|
|
double.parse(userModel.walletAmount.toString()) +
|
|
double.parse(amount);
|
|
await FireStoreUtils.updateUser(userModel).then((value) {
|
|
isAdded = value;
|
|
});
|
|
}
|
|
});
|
|
return isAdded;
|
|
}
|
|
|
|
static StreamController<List<VendorModel>>?
|
|
getNearestVendorByCategoryController;
|
|
|
|
static Stream<List<VendorModel>> getAllNearestRestaurantByCategoryId({
|
|
bool? isDining,
|
|
required String categoryId,
|
|
}) async* {
|
|
try {
|
|
getNearestVendorByCategoryController =
|
|
StreamController<List<VendorModel>>.broadcast();
|
|
List<VendorModel> vendorList = [];
|
|
Query<Map<String, dynamic>> query =
|
|
isDining == true
|
|
? fireStore
|
|
.collection(CollectionName.vendors)
|
|
.where('categoryID', arrayContains: categoryId)
|
|
.where("enabledDiveInFuture", isEqualTo: true)
|
|
: fireStore
|
|
.collection(CollectionName.vendors)
|
|
.where('categoryID', arrayContains: categoryId);
|
|
|
|
GeoFirePoint center = Geoflutterfire().point(
|
|
latitude: Constant.selectedLocation.location!.latitude ?? 0.0,
|
|
longitude: Constant.selectedLocation.location!.longitude ?? 0.0,
|
|
);
|
|
String field = 'g';
|
|
|
|
Stream<List<DocumentSnapshot>> stream = Geoflutterfire()
|
|
.collection(collectionRef: query)
|
|
.within(
|
|
center: center,
|
|
radius: double.parse(
|
|
Constant.sectionConstantModel!.nearByRadius.toString(),
|
|
),
|
|
field: field,
|
|
strictMode: true,
|
|
);
|
|
|
|
stream.listen((List<DocumentSnapshot> documentList) async {
|
|
vendorList.clear();
|
|
for (var document in documentList) {
|
|
final data = document.data() as Map<String, dynamic>;
|
|
VendorModel vendorModel = VendorModel.fromJson(data);
|
|
if ((Constant.isSubscriptionModelApplied == true ||
|
|
vendorModel.adminCommission?.isEnabled == true) &&
|
|
vendorModel.subscriptionPlan != null) {
|
|
if (vendorModel.subscriptionTotalOrders == "-1") {
|
|
vendorList.add(vendorModel);
|
|
} else {
|
|
if ((vendorModel.subscriptionExpiryDate != null &&
|
|
vendorModel.subscriptionExpiryDate!.toDate().isBefore(
|
|
DateTime.now(),
|
|
) ==
|
|
false) ||
|
|
vendorModel.subscriptionPlan?.expiryDay == '-1') {
|
|
if (vendorModel.subscriptionTotalOrders != '0') {
|
|
vendorList.add(vendorModel);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
vendorList.add(vendorModel);
|
|
}
|
|
}
|
|
getNearestVendorByCategoryController!.sink.add(vendorList);
|
|
});
|
|
|
|
yield* getNearestVendorByCategoryController!.stream;
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
}
|
|
|
|
static StreamController<List<VendorModel>>? getNearestVendorController;
|
|
|
|
static Stream<List<VendorModel>> getAllNearestRestaurant({
|
|
bool? isDining,
|
|
}) async* {
|
|
try {
|
|
getNearestVendorController =
|
|
StreamController<List<VendorModel>>.broadcast();
|
|
List<VendorModel> vendorList = [];
|
|
Query<Map<String, dynamic>> query =
|
|
isDining == true
|
|
? fireStore
|
|
.collection(CollectionName.vendors)
|
|
.where(
|
|
'section_id',
|
|
isEqualTo: Constant.sectionConstantModel!.id,
|
|
)
|
|
.where("enabledDiveInFuture", isEqualTo: true)
|
|
: fireStore
|
|
.collection(CollectionName.vendors)
|
|
.where(
|
|
'section_id',
|
|
isEqualTo: Constant.sectionConstantModel!.id,
|
|
);
|
|
|
|
GeoFirePoint center = Geoflutterfire().point(
|
|
latitude: Constant.selectedLocation.location!.latitude ?? 0.0,
|
|
longitude: Constant.selectedLocation.location!.longitude ?? 0.0,
|
|
);
|
|
String field = 'g';
|
|
|
|
Stream<List<DocumentSnapshot>> stream = Geoflutterfire()
|
|
.collection(collectionRef: query)
|
|
.within(
|
|
center: center,
|
|
radius: double.parse(
|
|
Constant.sectionConstantModel!.nearByRadius.toString(),
|
|
),
|
|
field: field,
|
|
strictMode: true,
|
|
);
|
|
|
|
stream.listen((List<DocumentSnapshot> documentList) async {
|
|
vendorList.clear();
|
|
for (var document in documentList) {
|
|
final data = document.data() as Map<String, dynamic>;
|
|
VendorModel vendorModel = VendorModel.fromJson(data);
|
|
if ((Constant.isSubscriptionModelApplied == true ||
|
|
Constant.sectionConstantModel!.adminCommision?.isEnabled ==
|
|
true) &&
|
|
vendorModel.subscriptionPlan != null) {
|
|
if (vendorModel.subscriptionTotalOrders == "-1") {
|
|
vendorList.add(vendorModel);
|
|
} else {
|
|
if ((vendorModel.subscriptionExpiryDate != null &&
|
|
vendorModel.subscriptionExpiryDate!.toDate().isBefore(
|
|
DateTime.now(),
|
|
) ==
|
|
false) ||
|
|
vendorModel.subscriptionPlan?.expiryDay == "-1") {
|
|
if (vendorModel.subscriptionTotalOrders != '0') {
|
|
vendorList.add(vendorModel);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
vendorList.add(vendorModel);
|
|
}
|
|
}
|
|
getNearestVendorController!.sink.add(vendorList);
|
|
});
|
|
|
|
yield* getNearestVendorController!.stream;
|
|
} catch (e) {
|
|
print(e);
|
|
}
|
|
}
|
|
|
|
static Future<List<VendorCategoryModel>> getHomePageShowCategory() async {
|
|
List<VendorCategoryModel> vendorCategoryList = [];
|
|
await fireStore
|
|
.collection(CollectionName.vendorCategories)
|
|
.where("section_id", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("show_in_homepage", isEqualTo: true)
|
|
.where('publish', isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
VendorCategoryModel vendorCategoryModel =
|
|
VendorCategoryModel.fromJson(element.data());
|
|
vendorCategoryList.add(vendorCategoryModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return vendorCategoryList;
|
|
}
|
|
|
|
static Future<List<WalletTransactionModel>?> getWalletTransaction() async {
|
|
List<WalletTransactionModel> walletTransactionList = [];
|
|
log("FireStoreUtils.getCurrentUid() :: ${FireStoreUtils.getCurrentUid()}");
|
|
await fireStore
|
|
.collection(CollectionName.wallet)
|
|
.where('user_id', isEqualTo: FireStoreUtils.getCurrentUid())
|
|
.orderBy('date', descending: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
WalletTransactionModel walletTransactionModel =
|
|
WalletTransactionModel.fromJson(element.data());
|
|
walletTransactionList.add(walletTransactionModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return walletTransactionList;
|
|
}
|
|
|
|
static Future<List<ProductModel>> getProductListByCategoryId(
|
|
String categoryId,
|
|
) async {
|
|
List<ProductModel> productList = [];
|
|
List<ProductModel> categorybyProductList = [];
|
|
QuerySnapshot<Map<String, dynamic>> currencyQuery =
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.where('categoryID', isEqualTo: categoryId)
|
|
.where('publish', isEqualTo: true)
|
|
.get();
|
|
await Future.forEach(currencyQuery.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
try {
|
|
productList.add(ProductModel.fromJson(document.data()));
|
|
} catch (e) {
|
|
print('FireStoreUtils.getCurrencys Parse error $e');
|
|
}
|
|
});
|
|
|
|
List<VendorModel?> vendorList = await getAllStoresFuture();
|
|
List<ProductModel> allProduct = <ProductModel>[];
|
|
|
|
for (var vendor in vendorList) {
|
|
await getAllProducts(vendor!.id.toString()).then((value) {
|
|
if (Constant.isSubscriptionModelApplied == true ||
|
|
vendor.adminCommission?.isEnabled == true) {
|
|
if (vendor.subscriptionPlan != null &&
|
|
Constant.isExpire(vendor) == false) {
|
|
if (vendor.subscriptionPlan?.itemLimit == '-1') {
|
|
allProduct.addAll(value);
|
|
} else {
|
|
int selectedProduct =
|
|
value.length <
|
|
int.parse(vendor.subscriptionPlan?.itemLimit ?? '0')
|
|
? (value.isEmpty ? 0 : (value.length))
|
|
: int.parse(vendor.subscriptionPlan?.itemLimit ?? '0');
|
|
allProduct.addAll(value.sublist(0, selectedProduct));
|
|
}
|
|
}
|
|
} else {
|
|
allProduct.addAll(value);
|
|
}
|
|
});
|
|
}
|
|
|
|
for (var element in productList) {
|
|
bool productIsInList = allProduct.any(
|
|
(product) => product.id == element.id,
|
|
);
|
|
if (productIsInList) {
|
|
categorybyProductList.add(element);
|
|
}
|
|
}
|
|
|
|
return categorybyProductList;
|
|
}
|
|
|
|
static Future<List<ProductModel>> getAllProducts(String vendorId) async {
|
|
List<ProductModel> products = [];
|
|
|
|
QuerySnapshot<Map<String, dynamic>> productsQuery =
|
|
await fireStore
|
|
.collection(CollectionName.vendorProducts)
|
|
.where("section_id", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('vendorID', isEqualTo: vendorId)
|
|
.where('publish', isEqualTo: true)
|
|
.orderBy('createdAt', descending: false)
|
|
.get();
|
|
await Future.forEach(productsQuery.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
try {
|
|
products.add(ProductModel.fromJson(document.data()));
|
|
} catch (e) {
|
|
print('product**-FireStoreUtils.getAllProducts Parse error $e');
|
|
}
|
|
});
|
|
return products;
|
|
}
|
|
|
|
static Future<List<VendorModel>> getAllStoresFuture({
|
|
String? categoryId,
|
|
}) async {
|
|
List<VendorModel> vendors = [];
|
|
|
|
try {
|
|
final collectionReference =
|
|
categoryId == null
|
|
? fireStore
|
|
.collection(CollectionName.vendors)
|
|
.where(
|
|
"section_id",
|
|
isEqualTo: Constant.sectionConstantModel!.id,
|
|
)
|
|
: fireStore
|
|
.collection(CollectionName.vendors)
|
|
.where(
|
|
"section_id",
|
|
isEqualTo: Constant.sectionConstantModel!.id,
|
|
)
|
|
.where("categoryID", isEqualTo: categoryId);
|
|
|
|
GeoFirePoint center = Geoflutterfire().point(
|
|
latitude: Constant.selectedLocation.location!.latitude ?? 0.0,
|
|
longitude: Constant.selectedLocation.location!.longitude ?? 0.0,
|
|
);
|
|
|
|
String field = 'g';
|
|
|
|
List<DocumentSnapshot> documentList =
|
|
await Geoflutterfire()
|
|
.collection(collectionRef: collectionReference)
|
|
.within(
|
|
center: center,
|
|
radius: double.parse(
|
|
Constant.sectionConstantModel!.nearByRadius.toString(),
|
|
),
|
|
field: field,
|
|
strictMode: true,
|
|
)
|
|
.first; // Fetch the data once as a Future
|
|
|
|
if (documentList.isNotEmpty) {
|
|
for (var document in documentList) {
|
|
final data = document.data() as Map<String, dynamic>;
|
|
VendorModel vendorModel = VendorModel.fromJson(data);
|
|
|
|
if (Constant.isSubscriptionModelApplied == true ||
|
|
Constant.sectionConstantModel?.adminCommision?.isEnabled ==
|
|
true) {
|
|
if (vendorModel.subscriptionPlan != null &&
|
|
Constant.isExpire(vendorModel) == false) {
|
|
if (vendorModel.subscriptionTotalOrders == "-1") {
|
|
vendors.add(vendorModel);
|
|
} else {
|
|
if ((vendorModel.subscriptionExpiryDate != null &&
|
|
vendorModel.subscriptionExpiryDate!.toDate().isBefore(
|
|
DateTime.now(),
|
|
) ==
|
|
false) ||
|
|
vendorModel.subscriptionPlan?.expiryDay == "-1") {
|
|
if (vendorModel.subscriptionTotalOrders != '0') {
|
|
vendors.add(vendorModel);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
vendors.add(vendorModel);
|
|
}
|
|
}
|
|
}
|
|
} catch (e) {
|
|
print('Error fetching vendors: $e');
|
|
}
|
|
|
|
return vendors;
|
|
}
|
|
|
|
static Future<NotificationModel?> getNotificationContent(String type) async {
|
|
NotificationModel? notificationModel;
|
|
await fireStore
|
|
.collection(CollectionName.dynamicNotification)
|
|
.where('type', isEqualTo: type)
|
|
.get()
|
|
.then((value) {
|
|
print("------>");
|
|
if (value.docs.isNotEmpty) {
|
|
print(value.docs.first.data());
|
|
|
|
notificationModel = NotificationModel.fromJson(
|
|
value.docs.first.data(),
|
|
);
|
|
} else {
|
|
notificationModel = NotificationModel(
|
|
id: "",
|
|
message: "Notification setup is pending",
|
|
subject: "setup notification",
|
|
type: "",
|
|
);
|
|
}
|
|
});
|
|
return notificationModel;
|
|
}
|
|
|
|
static Future<List<VendorCategoryModel>> getVendorCategory() async {
|
|
List<VendorCategoryModel> list = [];
|
|
await fireStore
|
|
.collection(CollectionName.vendorCategories)
|
|
.where('section_id', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('publish', isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
print("====>${value.docs.length}");
|
|
VendorCategoryModel walletTransactionModel =
|
|
VendorCategoryModel.fromJson(element.data());
|
|
list.add(walletTransactionModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return list;
|
|
}
|
|
|
|
static Future<GiftCardsOrderModel> placeGiftCardOrder(
|
|
GiftCardsOrderModel giftCardsOrderModel,
|
|
) async {
|
|
print("=====>");
|
|
print(giftCardsOrderModel.toJson());
|
|
await fireStore
|
|
.collection(CollectionName.giftPurchases)
|
|
.doc(giftCardsOrderModel.id)
|
|
.set(giftCardsOrderModel.toJson());
|
|
return giftCardsOrderModel;
|
|
}
|
|
|
|
static Future removeFavouriteRestaurant(FavouriteModel favouriteModel) async {
|
|
await fireStore
|
|
.collection(CollectionName.favoriteVendor)
|
|
.where("store_id", isEqualTo: favouriteModel.restaurantId)
|
|
.get()
|
|
.then((value) {
|
|
value.docs.forEach((element) async {
|
|
await fireStore
|
|
.collection(CollectionName.favoriteVendor)
|
|
.doc(element.id)
|
|
.delete();
|
|
});
|
|
});
|
|
}
|
|
|
|
static Future<void> setFavouriteRestaurant(
|
|
FavouriteModel favouriteModel,
|
|
) async {
|
|
favouriteModel.sectionId = Constant.sectionConstantModel!.id;
|
|
log("setFavouriteRestaurant :: ${favouriteModel.toJson()}");
|
|
await fireStore
|
|
.collection(CollectionName.favoriteVendor)
|
|
.add(favouriteModel.toJson());
|
|
}
|
|
|
|
static Future<void> removeFavouriteItem(
|
|
FavouriteItemModel favouriteModel,
|
|
) async {
|
|
try {
|
|
final favoriteCollection = fireStore.collection(
|
|
CollectionName.favoriteItem,
|
|
);
|
|
final querySnapshot =
|
|
await favoriteCollection
|
|
.where("product_id", isEqualTo: favouriteModel.productId)
|
|
.get();
|
|
for (final doc in querySnapshot.docs) {
|
|
await favoriteCollection.doc(doc.id).delete();
|
|
}
|
|
} catch (e) {
|
|
print("Error removing favourite item: $e");
|
|
}
|
|
}
|
|
|
|
static Future<void> setFavouriteItem(
|
|
FavouriteItemModel favouriteModel,
|
|
) async {
|
|
favouriteModel.sectionId = Constant.sectionConstantModel!.id;
|
|
await fireStore
|
|
.collection(CollectionName.favoriteItem)
|
|
.add(favouriteModel.toJson());
|
|
}
|
|
|
|
static Future<Url> uploadChatImageToFireStorage(
|
|
File image,
|
|
BuildContext context,
|
|
) async {
|
|
ShowToastDialog.showLoader("Please wait".tr);
|
|
var uniqueID = const Uuid().v4();
|
|
Reference upload = FirebaseStorage.instance.ref().child(
|
|
'images/$uniqueID.png',
|
|
);
|
|
UploadTask uploadTask = upload.putFile(image);
|
|
var storageRef = (await uploadTask.whenComplete(() {})).ref;
|
|
var downloadUrl = await storageRef.getDownloadURL();
|
|
var metaData = await storageRef.getMetadata();
|
|
ShowToastDialog.closeLoader();
|
|
return Url(
|
|
mime: metaData.contentType ?? 'image',
|
|
url: downloadUrl.toString(),
|
|
);
|
|
}
|
|
|
|
static Future<List<CouponModel>> getHomeCoupon() async {
|
|
List<CouponModel> list = [];
|
|
await fireStore
|
|
.collection(CollectionName.coupons)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.where("isEnabled", isEqualTo: true)
|
|
.where("isPublic", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel walletTransactionModel = CouponModel.fromJson(
|
|
element.data(),
|
|
);
|
|
list.add(walletTransactionModel);
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log(error.toString());
|
|
});
|
|
return list;
|
|
}
|
|
|
|
static Future<List<BannerModel>> getHomeTopBanner() async {
|
|
List<BannerModel> bannerList = [];
|
|
await fireStore
|
|
.collection(CollectionName.bannerItems)
|
|
.where("is_publish", isEqualTo: true)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("position", isEqualTo: "top")
|
|
.orderBy("set_order", descending: false)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
BannerModel bannerHome = BannerModel.fromJson(element.data());
|
|
bannerList.add(bannerHome);
|
|
}
|
|
});
|
|
return bannerList;
|
|
}
|
|
|
|
static Future<List<StoryModel>> getStory() async {
|
|
List<StoryModel> storyList = [];
|
|
await fireStore
|
|
.collection(CollectionName.story)
|
|
.where('sectionID', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.get()
|
|
.then((value) {
|
|
print("Number of Stories Fetched: ${value.docs.length}");
|
|
for (var element in value.docs) {
|
|
StoryModel walletTransactionModel = StoryModel.fromJson(
|
|
element.data(),
|
|
);
|
|
storyList.add(walletTransactionModel);
|
|
}
|
|
});
|
|
return storyList;
|
|
}
|
|
|
|
static Future<GiftCardsOrderModel?> checkRedeemCode(String giftCode) async {
|
|
GiftCardsOrderModel? giftCardsOrderModel;
|
|
await fireStore
|
|
.collection(CollectionName.giftPurchases)
|
|
.where("giftCode", isEqualTo: giftCode)
|
|
.get()
|
|
.then((value) {
|
|
if (value.docs.isNotEmpty) {
|
|
giftCardsOrderModel = GiftCardsOrderModel.fromJson(
|
|
value.docs.first.data(),
|
|
);
|
|
}
|
|
});
|
|
return giftCardsOrderModel;
|
|
}
|
|
|
|
static Future<void> sendTopUpMail({
|
|
required String amount,
|
|
required String paymentMethod,
|
|
required String tractionId,
|
|
}) async {
|
|
EmailTemplateModel? emailTemplateModel =
|
|
await FireStoreUtils.getEmailTemplates(Constant.walletTopup);
|
|
|
|
String newString = emailTemplateModel!.message.toString();
|
|
newString = newString.replaceAll(
|
|
"{username}",
|
|
Constant.userModel!.firstName.toString() +
|
|
Constant.userModel!.lastName.toString(),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{date}",
|
|
DateFormat('yyyy-MM-dd').format(Timestamp.now().toDate()),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{amount}",
|
|
Constant.amountShow(amount: amount),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{paymentmethod}",
|
|
paymentMethod.toString(),
|
|
);
|
|
newString = newString.replaceAll("{transactionid}", tractionId.toString());
|
|
newString = newString.replaceAll(
|
|
"{newwalletbalance}.",
|
|
Constant.amountShow(amount: Constant.userModel!.walletAmount.toString()),
|
|
);
|
|
await Constant.sendMail(
|
|
subject: emailTemplateModel.subject,
|
|
isAdmin: emailTemplateModel.isSendToAdmin,
|
|
body: newString,
|
|
recipients: [Constant.userModel!.email],
|
|
);
|
|
}
|
|
|
|
static Future<ChatVideoContainer?> uploadChatVideoToFireStorage(
|
|
BuildContext context,
|
|
File video,
|
|
) async {
|
|
try {
|
|
ShowToastDialog.showLoader("Uploading video...");
|
|
final String uniqueID = const Uuid().v4();
|
|
final Reference videoRef = FirebaseStorage.instance.ref(
|
|
'videos/$uniqueID.mp4',
|
|
);
|
|
final UploadTask uploadTask = videoRef.putFile(
|
|
video,
|
|
SettableMetadata(contentType: 'video/mp4'),
|
|
);
|
|
await uploadTask;
|
|
final String videoUrl = await videoRef.getDownloadURL();
|
|
ShowToastDialog.showLoader("Generating thumbnail...");
|
|
File thumbnail = await VideoCompress.getFileThumbnail(
|
|
video.path,
|
|
quality: 75, // 0 - 100
|
|
position: -1, // Get the first frame
|
|
);
|
|
|
|
final String thumbnailID = const Uuid().v4();
|
|
final Reference thumbnailRef = FirebaseStorage.instance.ref(
|
|
'thumbnails/$thumbnailID.jpg',
|
|
);
|
|
final UploadTask thumbnailUploadTask = thumbnailRef.putData(
|
|
thumbnail.readAsBytesSync(),
|
|
SettableMetadata(contentType: 'image/jpeg'),
|
|
);
|
|
await thumbnailUploadTask;
|
|
final String thumbnailUrl = await thumbnailRef.getDownloadURL();
|
|
var metaData = await thumbnailRef.getMetadata();
|
|
ShowToastDialog.closeLoader();
|
|
|
|
return ChatVideoContainer(
|
|
videoUrl: Url(
|
|
url: videoUrl.toString(),
|
|
mime: metaData.contentType ?? 'video',
|
|
videoThumbnail: thumbnailUrl,
|
|
),
|
|
thumbnailUrl: thumbnailUrl,
|
|
);
|
|
} catch (e) {
|
|
ShowToastDialog.closeLoader();
|
|
ShowToastDialog.showToast("Error: ${e.toString()}");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static Future<OrderModel?> getOrderByOrderId(String orderId) async {
|
|
OrderModel? orderModel;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.vendorOrders)
|
|
.doc(orderId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.data() != null) {
|
|
orderModel = OrderModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
} catch (e, s) {
|
|
print('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return null;
|
|
}
|
|
return orderModel;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getCabCoupon() async {
|
|
List<CouponModel> ordersList = [];
|
|
await fireStore
|
|
.collection(CollectionName.promos)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.where("isEnabled", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel bannerHome = CouponModel.fromJson(element.data());
|
|
ordersList.add(bannerHome);
|
|
}
|
|
});
|
|
return ordersList;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getParcelCoupon() async {
|
|
List<CouponModel> ordersList = [];
|
|
await fireStore
|
|
.collection(CollectionName.parcelCoupons)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.where("isEnabled", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel bannerHome = CouponModel.fromJson(element.data());
|
|
ordersList.add(bannerHome);
|
|
}
|
|
});
|
|
return ordersList;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getRentalCoupon() async {
|
|
List<CouponModel> ordersList = [];
|
|
await fireStore
|
|
.collection(CollectionName.rentalCoupons)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.where("isEnabled", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel bannerHome = CouponModel.fromJson(element.data());
|
|
ordersList.add(bannerHome);
|
|
}
|
|
});
|
|
return ordersList;
|
|
}
|
|
|
|
static Future<bool?> deleteUser() async {
|
|
bool? isDelete;
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.users)
|
|
.doc(FireStoreUtils.getCurrentUid())
|
|
.delete();
|
|
|
|
// delete user from firebase auth
|
|
await auth.FirebaseAuth.instance.currentUser?.delete().then((value) {
|
|
isDelete = true;
|
|
});
|
|
} catch (e, s) {
|
|
log('FireStoreUtils.firebaseCreateNewUser $e $s');
|
|
return false;
|
|
}
|
|
return isDelete;
|
|
}
|
|
|
|
static Future<List<ParcelCategory>> getParcelServiceCategory() async {
|
|
List<ParcelCategory> parcelCategoryList = [];
|
|
await fireStore
|
|
.collection(CollectionName.parcelCategory)
|
|
.where('publish', isEqualTo: true)
|
|
// .where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.orderBy('set_order', descending: false)
|
|
.get()
|
|
.then((value) {
|
|
log("Parcel Category Count: ${value.docs.length}");
|
|
for (var element in value.docs) {
|
|
try {
|
|
ParcelCategory category = ParcelCategory.fromJson(element.data());
|
|
parcelCategoryList.add(category);
|
|
} catch (e, stackTrace) {
|
|
log('getParcelServiceCategory parse error: ${element.id} $e');
|
|
log(stackTrace.toString());
|
|
}
|
|
}
|
|
});
|
|
return parcelCategoryList;
|
|
}
|
|
|
|
static Future<List<ParcelWeightModel>> getParcelWeight() async {
|
|
List<ParcelWeightModel> parcelWeightList = [];
|
|
await fireStore.collection(CollectionName.parcelWeight).get().then((value) {
|
|
for (var element in value.docs) {
|
|
try {
|
|
ParcelWeightModel category = ParcelWeightModel.fromJson(
|
|
element.data(),
|
|
);
|
|
parcelWeightList.add(category);
|
|
} catch (e, stackTrace) {
|
|
log('getParcelWeight parse error: ${element.id} $e');
|
|
log(stackTrace.toString());
|
|
}
|
|
}
|
|
});
|
|
return parcelWeightList;
|
|
}
|
|
|
|
static Future<bool> setParcelOrder(
|
|
ParcelOrderModel orderModel,
|
|
double totalAmount,
|
|
) async {
|
|
// try {
|
|
// final firestore = FirebaseFirestore.instance;
|
|
// final isNew = orderModel.id.isEmpty;
|
|
//
|
|
// final docRef = firestore.collection(CollectionName.parcelOrders).doc(isNew ? null : orderModel.id);
|
|
// if (isNew) {
|
|
// orderModel.id = docRef.id;
|
|
// }
|
|
//
|
|
// // Handle wallet payment if needed
|
|
// if (orderModel.paymentCollectByReceiver == false && orderModel.paymentMethod == "wallet") {
|
|
// WalletTransactionModel transactionModel = WalletTransactionModel(
|
|
// id: Constant.getUuid(),
|
|
// serviceType: 'parcel-service',
|
|
// amount: totalAmount,
|
|
// date: Timestamp.now(),
|
|
// paymentMethod: PaymentGateway.wallet.name,
|
|
// transactionUser: "customer",
|
|
// userId: FireStoreUtils.getCurrentUid(),
|
|
// isTopup: false,
|
|
// orderId: orderModel.id,
|
|
// note: "Order Amount debited".tr,
|
|
// paymentStatus: "success".tr,
|
|
// );
|
|
//
|
|
// await FireStoreUtils.setWalletTransaction(transactionModel).then((value) async {
|
|
// if (value == true) {
|
|
// await FireStoreUtils.updateUserWallet(amount: "-$totalAmount", userId: FireStoreUtils.getCurrentUid());
|
|
// }
|
|
// });
|
|
// }
|
|
//
|
|
// // Set the parcel order in Firestore
|
|
// await firestore.collection(CollectionName.parcelOrders).doc(orderModel.id).set(orderModel.toJson());
|
|
//
|
|
// return true;
|
|
// } catch (e) {
|
|
// debugPrint("Failed to place parcel order: $e");
|
|
// return false;
|
|
// }
|
|
return true;
|
|
}
|
|
|
|
static Future<void> sendParcelBookEmail({
|
|
required ParcelOrderModel orderModel,
|
|
}) async {
|
|
try {
|
|
EmailTemplateModel? emailTemplateModel =
|
|
await FireStoreUtils.getEmailTemplates(Constant.newParcelBook);
|
|
|
|
String newString = emailTemplateModel!.message.toString();
|
|
newString = newString.replaceAll(
|
|
"{passengername}",
|
|
"${Constant.userModel!.firstName} ${Constant.userModel!.lastName}",
|
|
);
|
|
newString = newString.replaceAll("{parcelid}", orderModel.id.toString());
|
|
newString = newString.replaceAll(
|
|
"{date}",
|
|
DateFormat('dd-MM-yyyy').format(orderModel.createdAt!.toDate()),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{sendername}",
|
|
orderModel.sender!.name.toString(),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{senderphone}",
|
|
orderModel.sender!.phone.toString(),
|
|
);
|
|
newString = newString.replaceAll("{note}", orderModel.note.toString());
|
|
newString = newString.replaceAll(
|
|
"{deliverydate}",
|
|
DateFormat(
|
|
'dd-MM-yyyy',
|
|
).format(orderModel.receiverPickupDateTime!.toDate()),
|
|
);
|
|
|
|
String subjectNewString = emailTemplateModel.subject.toString();
|
|
subjectNewString = subjectNewString.replaceAll(
|
|
"{orderid}",
|
|
orderModel.id.toString(),
|
|
);
|
|
await Constant.sendMail(
|
|
subject: subjectNewString,
|
|
isAdmin: emailTemplateModel.isSendToAdmin,
|
|
body: newString,
|
|
recipients: [Constant.userModel!.email],
|
|
);
|
|
} catch (e) {
|
|
log("SIGNUP :: 22 :::::: $e");
|
|
}
|
|
}
|
|
|
|
static Stream<List<ParcelOrderModel>> listenParcelOrders() {
|
|
return fireStore
|
|
.collection(CollectionName.parcelOrders)
|
|
.where('authorID', isEqualTo: FireStoreUtils.getCurrentUid())
|
|
.where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.orderBy('createdAt', descending: true)
|
|
.snapshots()
|
|
.map((snapshot) {
|
|
return snapshot.docs.map((doc) {
|
|
log("===>");
|
|
print(doc.data());
|
|
return ParcelOrderModel.fromJson(doc.data());
|
|
}).toList();
|
|
});
|
|
}
|
|
|
|
static Future<List<VehicleType>> getVehicleType() async {
|
|
List<VehicleType> vehicleTypeList = [];
|
|
await fireStore
|
|
.collection(CollectionName.vehicleType)
|
|
.where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("isActive", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
try {
|
|
VehicleType category = VehicleType.fromJson(element.data());
|
|
vehicleTypeList.add(category);
|
|
} catch (e, stackTrace) {
|
|
print('getVehicleType error: ${element.id} $e');
|
|
print(stackTrace);
|
|
}
|
|
}
|
|
});
|
|
return vehicleTypeList;
|
|
}
|
|
|
|
static Future<List<PopularDestination>> getPopularDestination() async {
|
|
List<PopularDestination> popularDestination = [];
|
|
await fireStore
|
|
.collection(CollectionName.popularDestinations)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('is_publish', isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
try {
|
|
PopularDestination category = PopularDestination.fromJson(
|
|
element.data(),
|
|
);
|
|
popularDestination.add(category);
|
|
} catch (e, stackTrace) {
|
|
print('Get PopularDestination error: ${element.id} $e');
|
|
print(stackTrace);
|
|
}
|
|
}
|
|
});
|
|
return popularDestination;
|
|
}
|
|
|
|
static Future cabOrderPlace(CabOrderModel orderModel) async {
|
|
await fireStore
|
|
.collection(CollectionName.rides)
|
|
.doc(orderModel.id)
|
|
.set(orderModel.toJson());
|
|
}
|
|
|
|
static Future parcelOrderPlace(ParcelOrderModel orderModel) async {
|
|
await fireStore
|
|
.collection(CollectionName.parcelOrders)
|
|
.doc(orderModel.id)
|
|
.set(orderModel.toJson());
|
|
}
|
|
|
|
static Future rentalOrderPlace(RentalOrderModel orderModel) async {
|
|
await fireStore
|
|
.collection(CollectionName.rentalOrders)
|
|
.doc(orderModel.id)
|
|
.set(orderModel.toJson());
|
|
}
|
|
|
|
static Future<CabOrderModel?> getCabOrderById(String orderId) async {
|
|
CabOrderModel? orderModel;
|
|
try {
|
|
final doc =
|
|
await fireStore.collection(CollectionName.rides).doc(orderId).get();
|
|
if (doc.data() != null) {
|
|
final model = CabOrderModel.fromJson(doc.data()!);
|
|
if (model.rideType == "ride") {
|
|
orderModel = model;
|
|
}
|
|
}
|
|
} catch (e, s) {
|
|
print('getCabOrderById error: $e\n$s');
|
|
return null;
|
|
}
|
|
return orderModel;
|
|
}
|
|
|
|
static Future<CabOrderModel?> getIntercityOrder(String orderId) async {
|
|
CabOrderModel? orderModel;
|
|
try {
|
|
final doc =
|
|
await fireStore.collection(CollectionName.rides).doc(orderId).get();
|
|
if (doc.data() != null) {
|
|
final model = CabOrderModel.fromJson(doc.data()!);
|
|
if (model.rideType == "intercity") {
|
|
orderModel = model;
|
|
}
|
|
}
|
|
} catch (e, s) {
|
|
print('getCabOrderById error: $e\n$s');
|
|
return null;
|
|
}
|
|
return orderModel;
|
|
}
|
|
|
|
static Future<UserModel?> getDriver(String userId) async {
|
|
UserModel? userModel;
|
|
|
|
try {
|
|
final doc =
|
|
await fireStore.collection(CollectionName.users).doc(userId).get();
|
|
|
|
if (doc.data() != null) {
|
|
userModel = UserModel.fromJson(doc.data()!);
|
|
}
|
|
} catch (e) {
|
|
log("getDriver error: $e");
|
|
}
|
|
|
|
return userModel;
|
|
}
|
|
|
|
// static Future<List<CabOrderModel>> getCabDriverOrders() async {
|
|
// List<CabOrderModel> ordersList = [];
|
|
// await fireStore.collection(CollectionName.rides).where('authorID', isEqualTo: FireStoreUtils.getCurrentUid()).orderBy('createdAt', descending: true).get().then((value) {
|
|
// for (var element in value.docs) {
|
|
// CabOrderModel orderModel = CabOrderModel.fromJson(element.data());
|
|
// ordersList.add(orderModel);
|
|
// }
|
|
// });
|
|
// return ordersList;
|
|
// }
|
|
|
|
static Stream<List<CabOrderModel>> getCabDriverOrders() {
|
|
return fireStore
|
|
.collection(CollectionName.rides)
|
|
.where('authorID', isEqualTo: FireStoreUtils.getCurrentUid())
|
|
.where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.orderBy('createdAt', descending: true)
|
|
.snapshots()
|
|
.map((query) {
|
|
List<CabOrderModel> ordersList = [];
|
|
for (var element in query.docs) {
|
|
ordersList.add(CabOrderModel.fromJson(element.data()));
|
|
}
|
|
return ordersList;
|
|
});
|
|
}
|
|
|
|
static Future<List<CategoryModel>> getOnDemandCategory() async {
|
|
List<CategoryModel> categoryList = [];
|
|
await fireStore
|
|
.collection(CollectionName.providerCategories)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("level", isEqualTo: 0)
|
|
.where("publish", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CategoryModel orderModel = CategoryModel.fromJson(element.data());
|
|
categoryList.add(orderModel);
|
|
}
|
|
});
|
|
return categoryList;
|
|
}
|
|
|
|
static Future<CategoryModel?> getCategoryById(String categoryId) async {
|
|
CategoryModel? categoryModel;
|
|
await fireStore
|
|
.collection(CollectionName.providerCategories)
|
|
.doc(categoryId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
categoryModel = CategoryModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
return categoryModel;
|
|
}
|
|
|
|
static Future<List<ProviderServiceModel>> getProviderFuture({
|
|
String categoryId = '',
|
|
}) async {
|
|
List<ProviderServiceModel> providerList = [];
|
|
|
|
try {
|
|
Query<Map<String, dynamic>> collectionReference;
|
|
|
|
if (categoryId.isNotEmpty) {
|
|
collectionReference = fireStore
|
|
.collection(CollectionName.providersServices)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('categoryId', isEqualTo: categoryId)
|
|
.where("publish", isEqualTo: true);
|
|
} else {
|
|
collectionReference = fireStore
|
|
.collection(CollectionName.providersServices)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("publish", isEqualTo: true);
|
|
}
|
|
|
|
GeoFirePoint center = Geoflutterfire().point(
|
|
latitude: Constant.selectedLocation.location!.latitude ?? 0.0,
|
|
longitude: Constant.selectedLocation.location!.longitude ?? 0.0,
|
|
);
|
|
|
|
String field = 'g';
|
|
|
|
await Geoflutterfire()
|
|
.collection(collectionRef: collectionReference)
|
|
.within(
|
|
center: center,
|
|
radius: double.parse(
|
|
Constant.sectionConstantModel!.nearByRadius.toString(),
|
|
),
|
|
field: field,
|
|
strictMode: true,
|
|
)
|
|
.first
|
|
.then((documentList) {
|
|
for (var document in documentList) {
|
|
ProviderServiceModel providerServiceModel =
|
|
ProviderServiceModel.fromJson(
|
|
document.data() as Map<String, dynamic>,
|
|
);
|
|
|
|
log(
|
|
":: isExpireDate(expiryDay :: ${Constant.isExpireDate(expiryDay: (providerServiceModel.subscriptionPlan?.expiryDay == '-1'), subscriptionExpiryDate: providerServiceModel.subscriptionExpiryDate)}",
|
|
);
|
|
|
|
if (Constant.isSubscriptionModelApplied == true ||
|
|
Constant.sectionConstantModel?.adminCommision?.isEnabled ==
|
|
true) {
|
|
if (providerServiceModel.subscriptionPlan != null &&
|
|
Constant.isExpireDate(
|
|
expiryDay:
|
|
(providerServiceModel
|
|
.subscriptionPlan
|
|
?.expiryDay ==
|
|
'-1'),
|
|
subscriptionExpiryDate:
|
|
providerServiceModel.subscriptionExpiryDate,
|
|
) ==
|
|
false) {
|
|
if (providerServiceModel.subscriptionTotalOrders == "-1" ||
|
|
providerServiceModel.subscriptionTotalOrders != '0') {
|
|
providerList.add(providerServiceModel);
|
|
}
|
|
}
|
|
} else {
|
|
providerList.add(providerServiceModel);
|
|
}
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log('Error fetching providers: $error');
|
|
});
|
|
} catch (e) {
|
|
log('Error in getProviderFuture: $e');
|
|
}
|
|
|
|
return providerList;
|
|
}
|
|
|
|
static Future<List<ProviderServiceModel>> getAllProviderServiceByAuthorId(
|
|
String authId,
|
|
) async {
|
|
List<ProviderServiceModel> providerService = [];
|
|
await fireStore
|
|
.collection(CollectionName.providersServices)
|
|
.where('author', isEqualTo: authId)
|
|
.where('publish', isEqualTo: true)
|
|
.orderBy('createdAt', descending: false)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
ProviderServiceModel orderModel = ProviderServiceModel.fromJson(
|
|
element.data(),
|
|
);
|
|
providerService.add(orderModel);
|
|
}
|
|
});
|
|
return providerService;
|
|
}
|
|
|
|
static Future<CategoryModel?> getSubCategoryById(String categoryId) async {
|
|
CategoryModel? categoryModel;
|
|
await fireStore
|
|
.collection(CollectionName.providerCategories)
|
|
.doc(categoryId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
categoryModel = CategoryModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
return categoryModel;
|
|
}
|
|
|
|
static Future<List<RatingModel>> getReviewByProviderServiceId(
|
|
String serviceId,
|
|
) async {
|
|
List<RatingModel> providerReview = [];
|
|
await fireStore
|
|
.collection(CollectionName.itemsReview)
|
|
.where('productId', isEqualTo: serviceId)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
RatingModel orderModel = RatingModel.fromJson(element.data());
|
|
providerReview.add(orderModel);
|
|
}
|
|
});
|
|
return providerReview;
|
|
}
|
|
|
|
static Future<List<ProviderServiceModel>> getProviderServiceByProviderId({
|
|
required String providerId,
|
|
}) async {
|
|
List<ProviderServiceModel> providerList = [];
|
|
|
|
try {
|
|
final collectionReference = fireStore
|
|
.collection(CollectionName.providersServices)
|
|
.where("author", isEqualTo: providerId)
|
|
.where("sectionId", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("publish", isEqualTo: true);
|
|
|
|
// Geolocation center point
|
|
GeoFirePoint center = Geoflutterfire().point(
|
|
latitude: Constant.selectedLocation.location!.latitude ?? 0.0,
|
|
longitude: Constant.selectedLocation.location!.longitude ?? 0.0,
|
|
);
|
|
|
|
String field = 'g';
|
|
|
|
// Query within radius
|
|
await Geoflutterfire()
|
|
.collection(collectionRef: collectionReference)
|
|
.within(
|
|
center: center,
|
|
radius: double.parse(
|
|
Constant.sectionConstantModel!.nearByRadius.toString(),
|
|
),
|
|
field: field,
|
|
strictMode: true,
|
|
)
|
|
.first
|
|
.then((documentList) {
|
|
for (var document in documentList) {
|
|
ProviderServiceModel providerServiceModel =
|
|
ProviderServiceModel.fromJson(
|
|
document.data() as Map<String, dynamic>,
|
|
);
|
|
|
|
log(
|
|
":: isExpireDate(expiryDay :: ${Constant.isExpireDate(expiryDay: (providerServiceModel.subscriptionPlan?.expiryDay == '-1'), subscriptionExpiryDate: providerServiceModel.subscriptionExpiryDate)}",
|
|
);
|
|
|
|
//Subscription & Commission check
|
|
if (Constant.isSubscriptionModelApplied == true ||
|
|
Constant.sectionConstantModel?.adminCommision?.isEnabled ==
|
|
true) {
|
|
if (providerServiceModel.subscriptionPlan != null &&
|
|
Constant.isExpireDate(
|
|
expiryDay:
|
|
(providerServiceModel
|
|
.subscriptionPlan
|
|
?.expiryDay ==
|
|
'-1'),
|
|
subscriptionExpiryDate:
|
|
providerServiceModel.subscriptionExpiryDate,
|
|
) ==
|
|
false) {
|
|
if (providerServiceModel.subscriptionTotalOrders == "-1" ||
|
|
providerServiceModel.subscriptionTotalOrders != '0') {
|
|
providerList.add(providerServiceModel);
|
|
}
|
|
}
|
|
} else {
|
|
providerList.add(providerServiceModel);
|
|
}
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
log('Error fetching provider services: $error');
|
|
});
|
|
} catch (e) {
|
|
log('Error in getProviderServiceByProviderId: $e');
|
|
}
|
|
|
|
return providerList;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getProviderCoupon(String providerId) async {
|
|
List<CouponModel> offers = [];
|
|
await fireStore
|
|
.collection(CollectionName.providersCoupons)
|
|
.where('providerId', isEqualTo: providerId)
|
|
.where("isEnabled", isEqualTo: true)
|
|
.where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel favouriteOndemandServiceModel = CouponModel.fromJson(
|
|
element.data(),
|
|
);
|
|
offers.add(favouriteOndemandServiceModel);
|
|
}
|
|
});
|
|
return offers;
|
|
}
|
|
|
|
static Future<List<CouponModel>> getProviderCouponAfterExpire(
|
|
String providerId,
|
|
) async {
|
|
List<CouponModel> coupon = [];
|
|
await fireStore
|
|
.collection(CollectionName.providersCoupons)
|
|
.where('providerId', isEqualTo: providerId)
|
|
.where('isEnabled', isEqualTo: true)
|
|
.where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where('isPublic', isEqualTo: true)
|
|
.where('expiresAt', isGreaterThanOrEqualTo: Timestamp.now())
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
CouponModel favouriteOndemandServiceModel = CouponModel.fromJson(
|
|
element.data(),
|
|
);
|
|
coupon.add(favouriteOndemandServiceModel);
|
|
}
|
|
});
|
|
return coupon;
|
|
}
|
|
|
|
static Future<OnProviderOrderModel> onDemandOrderPlace(
|
|
OnProviderOrderModel orderModel,
|
|
double totalAmount,
|
|
) async {
|
|
DocumentReference documentReference;
|
|
if (orderModel.id.isEmpty) {
|
|
documentReference =
|
|
fireStore.collection(CollectionName.providerOrders).doc();
|
|
orderModel.id = documentReference.id;
|
|
} else {
|
|
documentReference = fireStore
|
|
.collection(CollectionName.providerOrders)
|
|
.doc(orderModel.id);
|
|
}
|
|
await documentReference.set(orderModel.toJson());
|
|
|
|
return orderModel;
|
|
}
|
|
|
|
static Future<void> sendOrderOnDemandServiceEmail({
|
|
required OnProviderOrderModel orderModel,
|
|
}) async {
|
|
try {
|
|
String firstHTML = """
|
|
<table style="width: 100%; border-collapse: collapse; border: 1px solid rgb(0, 0, 0);">
|
|
<thead>
|
|
<tr>
|
|
<th style="text-align: left; border: 1px solid rgb(0, 0, 0);">Product Name<br></th>
|
|
<th style="text-align: left; border: 1px solid rgb(0, 0, 0);">Quantity<br></th>
|
|
<th style="text-align: left; border: 1px solid rgb(0, 0, 0);">Price<br></th>
|
|
<th style="text-align: left; border: 1px solid rgb(0, 0, 0);">Total<br></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
""";
|
|
|
|
EmailTemplateModel? emailTemplateModel =
|
|
await FireStoreUtils.getEmailTemplates(Constant.newOnDemandBook);
|
|
|
|
if (emailTemplateModel != null) {
|
|
String newString = emailTemplateModel.message.toString();
|
|
newString = newString.replaceAll(
|
|
"{username}",
|
|
"${Constant.userModel?.firstName ?? ''} ${Constant.userModel?.lastName ?? ''}",
|
|
);
|
|
newString = newString.replaceAll("{orderid}", orderModel.id);
|
|
newString = newString.replaceAll(
|
|
"{date}",
|
|
DateFormat('dd-MM-yyyy').format(orderModel.createdAt.toDate()),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{address}",
|
|
orderModel.address!.getFullAddress(),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{paymentmethod}",
|
|
orderModel.payment_method,
|
|
);
|
|
|
|
double total = 0.0;
|
|
double discount = 0.0;
|
|
double taxAmount = 0.0;
|
|
List<String> htmlList = [];
|
|
|
|
if (orderModel.provider.disPrice == "" ||
|
|
orderModel.provider.disPrice == "0") {
|
|
total =
|
|
double.parse(orderModel.provider.price.toString()) *
|
|
orderModel.quantity;
|
|
} else {
|
|
total =
|
|
double.parse(orderModel.provider.disPrice.toString()) *
|
|
orderModel.quantity;
|
|
}
|
|
|
|
String product = """
|
|
<tr>
|
|
<td style="width: 20%; border-top: 1px solid rgb(0, 0, 0);">${orderModel.provider.title}</td>
|
|
<td style="width: 20%; border: 1px solid rgb(0, 0, 0);" rowspan="2">${orderModel.quantity}</td>
|
|
<td style="width: 20%; border: 1px solid rgb(0, 0, 0);" rowspan="2">${Constant.amountShow(amount: (orderModel.provider.disPrice == "" || orderModel.provider.disPrice == "0") ? orderModel.provider.price.toString() : orderModel.provider.disPrice.toString())}</td>
|
|
<td style="width: 20%; border: 1px solid rgb(0, 0, 0);" rowspan="2">${Constant.amountShow(amount: (total).toString())}</td>
|
|
</tr>
|
|
""";
|
|
htmlList.add(product);
|
|
|
|
if (orderModel.couponCode != null &&
|
|
orderModel.couponCode!.isNotEmpty) {
|
|
discount = double.parse(orderModel.discount.toString());
|
|
}
|
|
List<String> taxHtmlList = [];
|
|
if (orderModel.taxModel != null) {
|
|
for (var element in orderModel.taxModel!) {
|
|
taxAmount =
|
|
taxAmount +
|
|
Constant.getTaxValue(
|
|
amount: (total - discount).toString(),
|
|
taxModel: element,
|
|
);
|
|
String taxHtml =
|
|
"""<span style="font-size: 1rem;">${element.title}: ${Constant.amountShow(amount: Constant.getTaxValue(amount: (total - discount).toString(), taxModel: element).toString())}${Constant.taxList.indexOf(element) == Constant.taxList.length - 1 ? "</span>" : "<br></span>"}""";
|
|
taxHtmlList.add(taxHtml);
|
|
}
|
|
}
|
|
|
|
var totalamount = total + taxAmount - discount;
|
|
|
|
newString = newString.replaceAll(
|
|
"{subtotal}",
|
|
Constant.amountShow(amount: total.toString()),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{coupon}",
|
|
'(${orderModel.couponCode.toString()})',
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{discountamount}",
|
|
orderModel.couponCode == null
|
|
? "0.0"
|
|
: Constant.amountShow(amount: orderModel.discount.toString()),
|
|
);
|
|
newString = newString.replaceAll(
|
|
"{totalAmount}",
|
|
Constant.amountShow(amount: totalamount.toString()),
|
|
);
|
|
|
|
String tableHTML = htmlList.join();
|
|
String lastHTML = "</tbody></table>";
|
|
newString = newString.replaceAll(
|
|
"{productdetails}",
|
|
firstHTML + tableHTML + lastHTML,
|
|
);
|
|
newString = newString.replaceAll("{taxdetails}", taxHtmlList.join());
|
|
newString = newString.replaceAll(
|
|
"{newwalletbalance}.",
|
|
Constant.amountShow(
|
|
amount: Constant.userModel?.walletAmount.toString(),
|
|
),
|
|
);
|
|
|
|
String subjectNewString = emailTemplateModel.subject.toString();
|
|
subjectNewString = subjectNewString.replaceAll(
|
|
"{orderid}",
|
|
orderModel.id,
|
|
);
|
|
await Constant.sendMail(
|
|
subject: subjectNewString,
|
|
isAdmin: emailTemplateModel.isSendToAdmin,
|
|
body: newString,
|
|
recipients: [Constant.userModel?.email],
|
|
);
|
|
}
|
|
} catch (e) {
|
|
log("SIGNUP :: 22 :::::: $e");
|
|
}
|
|
}
|
|
|
|
static Future<void> updateOnDemandOrder(
|
|
OnProviderOrderModel orderModel,
|
|
) async {
|
|
if (orderModel.id.isEmpty) {
|
|
throw Exception("Order ID cannot be empty");
|
|
}
|
|
|
|
try {
|
|
final docRef = fireStore
|
|
.collection(CollectionName.providerOrders)
|
|
.doc(orderModel.id);
|
|
await docRef.set(orderModel.toJson(), SetOptions(merge: true));
|
|
} catch (e) {
|
|
print("Error updating OnDemand order: $e");
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
// static Future<void> updateOnDemandOrder(OnProviderOrderModel orderModel) async {
|
|
// if (orderModel.id.isEmpty) {
|
|
// throw Exception("Order ID cannot be empty");
|
|
// }
|
|
//
|
|
// try {
|
|
// final docRef = fireStore.collection(CollectionName.providerOrders).doc(orderModel.id);
|
|
//
|
|
// // Convert model to map
|
|
// final Map<String, dynamic> data = orderModel.toJson();
|
|
//
|
|
// // Remove null values so we only update non-null fields
|
|
// final Map<String, dynamic> updateData = {};
|
|
// data.forEach((key, value) {
|
|
// if (value != null) {
|
|
// updateData[key] = value;
|
|
// }
|
|
// });
|
|
//
|
|
// if (updateData.isNotEmpty) {
|
|
// await docRef.set(updateData, SetOptions(merge: true));
|
|
// print("Order ${orderModel.id} updated dynamically: $updateData");
|
|
// } else {
|
|
// print("No fields to update for order ${orderModel.id}");
|
|
// }
|
|
// } catch (e) {
|
|
// print("Error updating OnDemand order: $e");
|
|
// rethrow;
|
|
// }
|
|
// }
|
|
|
|
// static Future<List<OnProviderOrderModel>> getProviderOrders() async {
|
|
// List<OnProviderOrderModel> ordersList = [];
|
|
// await fireStore
|
|
// .collection(CollectionName.providerOrders)
|
|
// .where("authorID", isEqualTo: FireStoreUtils.getCurrentUid())
|
|
// .where("sectionId", isEqualTo: Constant.sectionConstantModel!.id.toString())
|
|
// .orderBy("createdAt", descending: true)
|
|
// .get()
|
|
// .then((value) {
|
|
// for (var element in value.docs) {
|
|
// OnProviderOrderModel orderModel = OnProviderOrderModel.fromJson(element.data());
|
|
// ordersList.add(orderModel);
|
|
// }
|
|
// });
|
|
// return ordersList;
|
|
// }
|
|
|
|
static Stream<List<OnProviderOrderModel>> getProviderOrdersStream() {
|
|
return fireStore
|
|
.collection(CollectionName.providerOrders)
|
|
.where("authorID", isEqualTo: getCurrentUid())
|
|
.where(
|
|
"sectionId",
|
|
isEqualTo: Constant.sectionConstantModel!.id.toString(),
|
|
)
|
|
.orderBy("createdAt", descending: true)
|
|
.snapshots()
|
|
.map(
|
|
(snapshot) =>
|
|
snapshot.docs
|
|
.map((doc) => OnProviderOrderModel.fromJson(doc.data()))
|
|
.toList(),
|
|
);
|
|
}
|
|
|
|
static Future<WorkerModel?> getWorker(String id) async {
|
|
try {
|
|
DocumentSnapshot<Map<String, dynamic>> doc =
|
|
await fireStore
|
|
.collection(CollectionName.providersWorkers)
|
|
.doc(id)
|
|
.get();
|
|
|
|
if (doc.exists && doc.data() != null) {
|
|
return WorkerModel.fromJson(doc.data()!);
|
|
}
|
|
} catch (e) {
|
|
print("FireStoreUtils.getWorker error: $e");
|
|
}
|
|
return null;
|
|
}
|
|
|
|
static Future<OnProviderOrderModel?> getProviderOrderById(
|
|
String orderId,
|
|
) async {
|
|
OnProviderOrderModel? orderModel;
|
|
await fireStore
|
|
.collection(CollectionName.providerOrders)
|
|
.doc(orderId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
orderModel = OnProviderOrderModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
return orderModel;
|
|
}
|
|
|
|
static Future<RatingModel?> getReviewsByProviderID(
|
|
String orderId,
|
|
String providerId,
|
|
) async {
|
|
RatingModel? ratingModel;
|
|
|
|
await fireStore
|
|
.collection(CollectionName.itemsReview)
|
|
.where('orderid', isEqualTo: orderId)
|
|
.where('VendorId', isEqualTo: providerId)
|
|
.limit(1)
|
|
.get()
|
|
.then((snapshot) {
|
|
if (snapshot.docs.isNotEmpty) {
|
|
ratingModel = RatingModel.fromJson(snapshot.docs.first.data());
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
print('Error fetching review for provider: $error');
|
|
});
|
|
|
|
return ratingModel;
|
|
}
|
|
|
|
static Future<RatingModel?> getReviewsByWorkerID(
|
|
String orderId,
|
|
String workerId,
|
|
) async {
|
|
RatingModel? ratingModel;
|
|
|
|
await fireStore
|
|
.collection(CollectionName.itemsReview)
|
|
.where('orderid', isEqualTo: orderId)
|
|
.where('driverId', isEqualTo: workerId)
|
|
.limit(1)
|
|
.get()
|
|
.then((snapshot) {
|
|
if (snapshot.docs.isNotEmpty) {
|
|
ratingModel = RatingModel.fromJson(snapshot.docs.first.data());
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
print('Error fetching review by worker ID: $error');
|
|
});
|
|
|
|
return ratingModel;
|
|
}
|
|
|
|
static Future<ProviderServiceModel?> getCurrentProvider(String uid) async {
|
|
try {
|
|
final doc =
|
|
await fireStore
|
|
.collection(CollectionName.providersServices)
|
|
.doc(uid)
|
|
.get();
|
|
if (doc.exists && doc.data() != null) {
|
|
return ProviderServiceModel.fromJson(doc.data()!);
|
|
}
|
|
} catch (e, stackTrace) {
|
|
print('Error fetching current provider: $e');
|
|
print(stackTrace);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
static Future<RatingModel?> updateReviewById(
|
|
RatingModel ratingProduct,
|
|
) async {
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.itemsReview)
|
|
.doc(ratingProduct.id)
|
|
.set(ratingProduct.toJson());
|
|
return ratingProduct;
|
|
} catch (e, stackTrace) {
|
|
print('Error updating review: $e');
|
|
print(stackTrace);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static Future<ProviderServiceModel?> updateProvider(
|
|
ProviderServiceModel provider,
|
|
) async {
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.providersServices)
|
|
.doc(provider.id)
|
|
.set(provider.toJson());
|
|
return provider;
|
|
} catch (e, stackTrace) {
|
|
print('Error updating provider: $e');
|
|
print(stackTrace);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static Future<WorkerModel?> updateWorker(WorkerModel worker) async {
|
|
try {
|
|
await fireStore
|
|
.collection(CollectionName.providersWorkers)
|
|
.doc(worker.id)
|
|
.set(worker.toJson());
|
|
return worker;
|
|
} catch (e, stackTrace) {
|
|
print('Error updating worker: $e');
|
|
print(stackTrace);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static Future<ParcelOrderModel?> getParcelOrder(String orderId) async {
|
|
try {
|
|
final doc =
|
|
await fireStore
|
|
.collection(CollectionName.parcelOrders)
|
|
.doc(orderId)
|
|
.get();
|
|
if (doc.exists && doc.data() != null) {
|
|
return ParcelOrderModel.fromJson(doc.data()!);
|
|
}
|
|
} catch (e, stackTrace) {
|
|
print('Error fetching current provider: $e');
|
|
print(stackTrace);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
static Stream<UserModel?> driverStream(String userId) {
|
|
return fireStore
|
|
.collection(CollectionName.users)
|
|
.doc(userId)
|
|
.snapshots()
|
|
.map((doc) {
|
|
if (doc.data() != null) {
|
|
return UserModel.fromJson(doc.data()!);
|
|
}
|
|
return null;
|
|
});
|
|
}
|
|
|
|
static Future<void> updateCabOrder(CabOrderModel orderModel) async {
|
|
if (orderModel.id!.isEmpty) {
|
|
throw Exception("Order ID cannot be empty");
|
|
}
|
|
|
|
try {
|
|
final docRef = fireStore
|
|
.collection(CollectionName.rides)
|
|
.doc(orderModel.id);
|
|
await docRef.set(orderModel.toJson(), SetOptions(merge: true));
|
|
} catch (e) {
|
|
print("Error updating OnDemand order: $e");
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
static Future<List<RentalVehicleType>> getRentalVehicleType() async {
|
|
List<RentalVehicleType> vehicleTypeList = [];
|
|
await fireStore
|
|
.collection(CollectionName.rentalVehicleType)
|
|
.where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.where("isActive", isEqualTo: true)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
try {
|
|
RentalVehicleType category = RentalVehicleType.fromJson(
|
|
element.data(),
|
|
);
|
|
vehicleTypeList.add(category);
|
|
} catch (e, stackTrace) {
|
|
print('getVehicleType error: ${element.id} $e');
|
|
print(stackTrace);
|
|
}
|
|
}
|
|
});
|
|
return vehicleTypeList;
|
|
}
|
|
|
|
static Future<List<RentalPackageModel>> getRentalPackage(
|
|
String vehicleId,
|
|
) async {
|
|
List<RentalPackageModel> rentalPackageList = [];
|
|
await fireStore
|
|
.collection(CollectionName.rentalPackages)
|
|
.where("vehicleTypeId", isEqualTo: vehicleId)
|
|
.orderBy("ordering", descending: false)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
try {
|
|
log('Rental Package Data: ${element.data()}');
|
|
RentalPackageModel category = RentalPackageModel.fromJson(
|
|
element.data(),
|
|
);
|
|
rentalPackageList.add(category);
|
|
} catch (e, stackTrace) {
|
|
print('getVehicleType error: ${element.id} $e');
|
|
print(stackTrace);
|
|
}
|
|
}
|
|
});
|
|
return rentalPackageList;
|
|
}
|
|
|
|
static Stream<List<RentalOrderModel>> getRentalOrders() {
|
|
return fireStore
|
|
.collection(CollectionName.rentalOrders)
|
|
.where('authorID', isEqualTo: FireStoreUtils.getCurrentUid())
|
|
.where('sectionId', isEqualTo: Constant.sectionConstantModel!.id)
|
|
.orderBy('createdAt', descending: true)
|
|
.snapshots()
|
|
.map((query) {
|
|
List<RentalOrderModel> ordersList = [];
|
|
for (var element in query.docs) {
|
|
ordersList.add(RentalOrderModel.fromJson(element.data()));
|
|
}
|
|
return ordersList;
|
|
});
|
|
}
|
|
|
|
static Future<RentalOrderModel?> getRentalOrderById(String orderId) async {
|
|
RentalOrderModel? orderModel;
|
|
await fireStore
|
|
.collection(CollectionName.rentalOrders)
|
|
.doc(orderId)
|
|
.get()
|
|
.then((value) {
|
|
if (value.exists) {
|
|
orderModel = RentalOrderModel.fromJson(value.data()!);
|
|
}
|
|
});
|
|
return orderModel;
|
|
}
|
|
|
|
static Future<RatingModel?> getReviewsbyID(String orderId) async {
|
|
RatingModel? ratingModel;
|
|
|
|
await fireStore
|
|
.collection(CollectionName.itemsReview)
|
|
.where('orderid', isEqualTo: orderId)
|
|
.get()
|
|
.then((snapshot) {
|
|
if (snapshot.docs.isNotEmpty) {
|
|
ratingModel = RatingModel.fromJson(snapshot.docs.first.data());
|
|
}
|
|
})
|
|
.catchError((error) {
|
|
print('Error fetching review for provider: $error');
|
|
});
|
|
|
|
return ratingModel;
|
|
}
|
|
|
|
static Future<dynamic> getOrderByIdFromAllCollections(String orderId) async {
|
|
final List<String> collections = [
|
|
CollectionName.parcelOrders,
|
|
CollectionName.rentalOrders,
|
|
CollectionName.providerOrders,
|
|
CollectionName.rides,
|
|
CollectionName.vendorOrders,
|
|
];
|
|
|
|
for (String collection in collections) {
|
|
try {
|
|
final snapshot =
|
|
await fireStore
|
|
.collection(collection)
|
|
.where('id', isEqualTo: orderId)
|
|
.limit(1)
|
|
.get();
|
|
|
|
if (snapshot.docs.isNotEmpty) {
|
|
final data = snapshot.docs.first.data();
|
|
data['collection_name'] = collection;
|
|
return data;
|
|
}
|
|
} catch (e) {
|
|
log("Error fetching from $collection => $e");
|
|
}
|
|
}
|
|
|
|
log("No order found with ID $orderId");
|
|
return null;
|
|
}
|
|
|
|
static Future<void> setSos(String orderId, UserLocation userLocation) {
|
|
DocumentReference documentReference =
|
|
fireStore.collection(CollectionName.sos).doc();
|
|
|
|
Map<String, dynamic> sosMap = {
|
|
'id': documentReference.id,
|
|
'orderId': orderId,
|
|
'status': "Initiated",
|
|
'latLong': userLocation.toJson(),
|
|
};
|
|
|
|
return documentReference
|
|
.set(sosMap)
|
|
.then((_) {
|
|
print("SOS request created successfully for order: $orderId");
|
|
})
|
|
.catchError((error) {
|
|
print("Failed to create SOS request: $error");
|
|
});
|
|
}
|
|
|
|
static Future<bool> getSOS(String orderId) {
|
|
return fireStore
|
|
.collection(CollectionName.sos)
|
|
.where('orderId', isEqualTo: orderId)
|
|
.get()
|
|
.then((querySnapshot) {
|
|
bool isAdded = false;
|
|
for (var element in querySnapshot.docs) {
|
|
if (element['orderId'] == orderId) {
|
|
isAdded = true;
|
|
break;
|
|
}
|
|
}
|
|
return isAdded;
|
|
})
|
|
.catchError((error) {
|
|
print("Error checking SOS: $error");
|
|
return false;
|
|
});
|
|
}
|
|
|
|
static Future<void> setRideComplain({
|
|
required String orderId,
|
|
required String title,
|
|
required String description,
|
|
required String driverID,
|
|
required String driverName,
|
|
required String customerID,
|
|
required String customerName,
|
|
}) async {
|
|
try {
|
|
DocumentReference docRef =
|
|
fireStore.collection(CollectionName.complaints).doc();
|
|
|
|
Map<String, dynamic> complaintData = {
|
|
'id': docRef.id,
|
|
'createdAt': Timestamp.now(),
|
|
'description': description,
|
|
'driverId': driverID,
|
|
'driverName': driverName,
|
|
'orderId': orderId,
|
|
'customerName': customerName,
|
|
'customerId': customerID,
|
|
'status': "Initiated",
|
|
'title': title,
|
|
};
|
|
|
|
await docRef.set(complaintData);
|
|
} catch (e) {
|
|
print("Error adding ride complain: $e");
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
static Future<bool> isRideComplainAdded(String orderId) async {
|
|
try {
|
|
QuerySnapshot querySnapshot =
|
|
await fireStore
|
|
.collection(CollectionName.complaints)
|
|
.where('orderId', isEqualTo: orderId)
|
|
.limit(1)
|
|
.get();
|
|
|
|
return querySnapshot.docs.isNotEmpty;
|
|
} catch (e) {
|
|
print("Error checking ride complain: $e");
|
|
return false;
|
|
}
|
|
}
|
|
|
|
static Future<Map<String, dynamic>?> getRideComplainData(
|
|
String orderId,
|
|
) async {
|
|
try {
|
|
QuerySnapshot querySnapshot =
|
|
await fireStore
|
|
.collection(CollectionName.complaints)
|
|
.where('orderId', isEqualTo: orderId)
|
|
.limit(1)
|
|
.get();
|
|
|
|
if (querySnapshot.docs.isNotEmpty) {
|
|
return querySnapshot.docs.first.data() as Map<String, dynamic>;
|
|
} else {
|
|
return null;
|
|
}
|
|
} catch (e) {
|
|
print("Error fetching ride complain data: $e");
|
|
return null;
|
|
}
|
|
}
|
|
|
|
static void removeFavouriteOndemandService(
|
|
FavouriteOndemandServiceModel favouriteModel,
|
|
) {
|
|
FirebaseFirestore.instance
|
|
.collection(CollectionName.favoriteService)
|
|
.where("user_id", isEqualTo: favouriteModel.user_id)
|
|
.where("service_id", isEqualTo: favouriteModel.service_id)
|
|
.get()
|
|
.then((value) {
|
|
for (var element in value.docs) {
|
|
FirebaseFirestore.instance
|
|
.collection(CollectionName.favoriteService)
|
|
.doc(element.id)
|
|
.delete()
|
|
.then((value) {
|
|
print("Remove Success!");
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
static Future<void> setFavouriteOndemandSection(
|
|
FavouriteOndemandServiceModel favouriteModel,
|
|
) async {
|
|
await fireStore
|
|
.collection(CollectionName.favoriteService)
|
|
.add(favouriteModel.toJson())
|
|
.then((value) {
|
|
print("===FAVOURITE ADDED=== ${favouriteModel.toJson()}");
|
|
});
|
|
}
|
|
|
|
static Future<List<FavouriteOndemandServiceModel>> getFavouritesServiceList(
|
|
String userId,
|
|
) async {
|
|
List<FavouriteOndemandServiceModel> lstFavourites = [];
|
|
|
|
QuerySnapshot<Map<String, dynamic>> favourites =
|
|
await fireStore
|
|
.collection(CollectionName.favoriteService)
|
|
.where('user_id', isEqualTo: userId)
|
|
.where("section_id", isEqualTo: Constant.sectionConstantModel!.id)
|
|
.get();
|
|
|
|
await Future.forEach(favourites.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
try {
|
|
lstFavourites.add(
|
|
FavouriteOndemandServiceModel.fromJson(document.data()),
|
|
);
|
|
} catch (e) {
|
|
print('FavouriteModel.getCurrencys Parse error $e');
|
|
}
|
|
});
|
|
|
|
return lstFavourites;
|
|
}
|
|
|
|
static Future<List<ProviderServiceModel>> getCurrentProviderService(
|
|
FavouriteOndemandServiceModel model,
|
|
) async {
|
|
List<ProviderServiceModel> providerService = [];
|
|
|
|
QuerySnapshot<Map<String, dynamic>> reviewQuery =
|
|
await fireStore
|
|
.collection(CollectionName.providersServices)
|
|
.where('id', isEqualTo: model.service_id)
|
|
.where('sectionId', isEqualTo: model.section_id)
|
|
.get();
|
|
await Future.forEach(reviewQuery.docs, (
|
|
QueryDocumentSnapshot<Map<String, dynamic>> document,
|
|
) {
|
|
try {
|
|
providerService.add(ProviderServiceModel.fromJson(document.data()));
|
|
} catch (e) {
|
|
print(
|
|
'FireStoreUtils.getReviewByProviderServiceId Parse error ${document.id} $e',
|
|
);
|
|
}
|
|
});
|
|
return providerService;
|
|
}
|
|
}
|