import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:driver/constant/constant.dart'; import 'package:driver/models/admin_commission.dart'; import 'package:driver/models/cab_order_model.dart'; import 'package:driver/models/subscription_plan_model.dart'; class UserModel { String? id; String? firstName; String? lastName; String? email; String? profilePictureURL; String? fcmToken; String? countryCode; String? phoneNumber; num? walletAmount; bool? active; bool? isActive; bool? isDocumentVerify; Timestamp? createdAt; String? role; UserLocation? location; UserBankDetails? userBankDetails; List? shippingAddress; String? carName; String? carNumber; String? carPictureURL; List? inProgressOrderID; List? orderRequestData; String? vendorID; String? zoneId; num? rotation; String? appIdentifier; String? provider; String? subscriptionPlanId; Timestamp? subscriptionExpiryDate; SubscriptionPlanModel? subscriptionPlan; String? serviceType; String? sectionId; String? vehicleId; String? vehicleType; String? carMakes; String? reviewsCount; String? reviewsSum; AdminCommission? adminCommissionModel; CabOrderModel? orderCabRequestData; String? rideType; String? ownerId; bool? isOwner; UserModel({ this.id, this.firstName, this.lastName, this.active, this.isActive, this.isDocumentVerify, this.email, this.profilePictureURL, this.fcmToken, this.countryCode, this.phoneNumber, this.walletAmount, this.createdAt, this.role, this.location, this.shippingAddress, this.carName, this.carNumber, this.carPictureURL, this.inProgressOrderID, this.orderRequestData, this.vendorID, this.zoneId, this.rotation, this.appIdentifier, this.provider, this.subscriptionPlanId, this.subscriptionExpiryDate, this.subscriptionPlan, this.serviceType, this.sectionId, this.vehicleId, this.vehicleType, this.carMakes, this.reviewsCount, this.reviewsSum, this.adminCommissionModel, this.orderCabRequestData, this.rideType, this.ownerId, this.isOwner, }); String fullName() { return "${firstName ?? ''} ${lastName ?? ''}"; } double get averageRating { final double sum = double.tryParse(reviewsSum ?? '0') ?? 0.0; final double count = double.tryParse(reviewsCount ?? '0') ?? 0.0; if (count <= 0) return 0.0; return sum / count; } UserModel.fromJson(Map json) { id = json['id']; email = json['email']; firstName = json['firstName']; lastName = json['lastName']; profilePictureURL = json['profilePictureURL']; fcmToken = json['fcmToken']; countryCode = json['countryCode']; phoneNumber = json['phoneNumber']; walletAmount = json['wallet_amount'] ?? 0; createdAt = json['createdAt']; active = json['active']; isActive = json['isActive']; isDocumentVerify = json['isDocumentVerify'] ?? false; role = json['role'] ?? 'user'; location = json['location'] != null ? UserLocation.fromJson(json['location']) : null; userBankDetails = json['userBankDetails'] != null ? UserBankDetails.fromJson(json['userBankDetails']) : null; if (json['shippingAddress'] != null) { shippingAddress = []; json['shippingAddress'].forEach((v) { shippingAddress!.add(ShippingAddress.fromJson(v)); }); } carName = json['carName']; carNumber = json['carNumber']; carPictureURL = json['carPictureURL']; inProgressOrderID = json['inProgressOrderID'] ?? []; orderRequestData = json['orderRequestData'] ?? []; vendorID = json['vendorID'] ?? ''; zoneId = json['zoneId'] ?? ''; rotation = json['rotation']; appIdentifier = json['appIdentifier']; provider = json['provider']; subscriptionPlanId = json['subscriptionPlanId']; subscriptionExpiryDate = json['subscriptionExpiryDate']; subscriptionPlan = json['subscription_plan'] != null ? SubscriptionPlanModel.fromJson(json['subscription_plan']) : null; serviceType = json['serviceType']; sectionId = json['sectionId'] ?? ''; vehicleId = json['vehicleId']; vehicleType = json['vehicleType']; carMakes = json['carMakes']; reviewsCount = json['reviewsCount'] == null ? '0' : json['reviewsCount'].toString(); reviewsSum = json['reviewsSum'] == null ? '0' : json['reviewsSum'].toString(); adminCommissionModel = json['adminCommission'] != null ? AdminCommission.fromJson(json['adminCommission']) : null; orderCabRequestData = json['ordercabRequestData'] != null ? CabOrderModel.fromJson(json['ordercabRequestData']) : null; rideType = json['rideType']; ownerId = json['ownerId']; isOwner = json['isOwner']; } Map toJson() { final Map data = {}; data['id'] = id; data['email'] = email; data['firstName'] = firstName; data['lastName'] = lastName; data['profilePictureURL'] = profilePictureURL; data['fcmToken'] = fcmToken; data['countryCode'] = countryCode; data['phoneNumber'] = phoneNumber; data['wallet_amount'] = walletAmount ?? 0; data['createdAt'] = createdAt; data['active'] = active; data['isActive'] = isActive; data['role'] = role; data['isDocumentVerify'] = isDocumentVerify; data['zoneId'] = zoneId; data['sectionId'] = sectionId ?? ''; if (location != null) { data['location'] = location!.toJson(); } if (userBankDetails != null) { data['userBankDetails'] = userBankDetails!.toJson(); } if (shippingAddress != null) { data['shippingAddress'] = shippingAddress!.map((v) => v.toJson()).toList(); } data['serviceType'] = serviceType; data['rotation'] = rotation; data['inProgressOrderID'] = inProgressOrderID; if (role == Constant.userRoleDriver) { data['vendorID'] = vendorID; data['carName'] = carName; data['carNumber'] = carNumber; data['carPictureURL'] = carPictureURL; data['orderRequestData'] = orderRequestData; data['vehicleType'] = vehicleType; data['carMakes'] = carMakes; data['vehicleId'] = vehicleId ?? ''; if (orderCabRequestData != null) { data['ordercabRequestData'] = orderCabRequestData!.toJson(); } data['rideType'] = rideType; data['ownerId'] = ownerId; data['isOwner'] = isOwner; } if (role == Constant.userRoleVendor) { data['vendorID'] = vendorID; data['subscriptionPlanId'] = subscriptionPlanId; data['subscriptionExpiryDate'] = subscriptionExpiryDate; data['subscription_plan'] = subscriptionPlan?.toJson(); } data['appIdentifier'] = appIdentifier; data['provider'] = provider; data['reviewsCount'] = reviewsCount; data['reviewsSum'] = reviewsSum; if (adminCommissionModel != null) { data['adminCommission'] = adminCommissionModel!.toJson(); } return data; } } class UserLocation { double? latitude; double? longitude; UserLocation({this.latitude, this.longitude}); UserLocation.fromJson(Map json) { latitude = json['latitude']; longitude = json['longitude']; } Map toJson() { final Map data = {}; data['latitude'] = latitude; data['longitude'] = longitude; return data; } } class ShippingAddress { String? id; String? address; String? addressAs; String? landmark; String? locality; UserLocation? location; bool? isDefault; ShippingAddress({this.address, this.landmark, this.locality, this.location, this.isDefault, this.addressAs, this.id}); ShippingAddress.fromJson(Map json) { id = json['id']; address = json['address']; landmark = json['landmark']; locality = json['locality']; isDefault = json['isDefault']; addressAs = json['addressAs']; location = json['location'] == null ? null : UserLocation.fromJson(json['location']); } Map toJson() { final Map data = {}; data['id'] = id; data['address'] = address; data['landmark'] = landmark; data['locality'] = locality; data['isDefault'] = isDefault; data['addressAs'] = addressAs; if (location != null) { data['location'] = location!.toJson(); } return data; } String getFullAddress() { return '${address == null || address!.isEmpty ? "" : address} $locality ${landmark == null || landmark!.isEmpty ? "" : landmark.toString()}'; } } class UserBankDetails { String bankName; String branchName; String holderName; String accountNumber; String otherDetails; UserBankDetails({ this.bankName = '', this.otherDetails = '', this.branchName = '', this.accountNumber = '', this.holderName = '', }); factory UserBankDetails.fromJson(Map parsedJson) { return UserBankDetails( bankName: parsedJson['bankName'] ?? '', branchName: parsedJson['branchName'] ?? '', holderName: parsedJson['holderName'] ?? '', accountNumber: parsedJson['accountNumber'] ?? '', otherDetails: parsedJson['otherDetails'] ?? '', ); } Map toJson() { return { 'bankName': bankName, 'branchName': branchName, 'holderName': holderName, 'accountNumber': accountNumber, 'otherDetails': otherDetails, }; } }