148 lines
5.1 KiB
Dart
Executable File
148 lines
5.1 KiB
Dart
Executable File
// lib/models/order_data.dart
|
|
|
|
class OrderData {
|
|
final String customerName;
|
|
final double tripDistanceKm; // المسافة الكلية للرحلة بالكيلومتر
|
|
final String price;
|
|
final String startLocationAddress;
|
|
final String endLocationAddress;
|
|
|
|
final double distanceToPassengerKm; // المسافة إلى الراكب بالكيلومتر
|
|
final int tripDurationMinutes; // مدة الرحلة الكلية بالدقائق (مقربة لأعلى)
|
|
final int
|
|
durationToPassengerMinutes; // المدة إلى الراكب بالدقائق (مقربة لأعلى)
|
|
|
|
final String rideType;
|
|
final String orderId;
|
|
final String passengerId;
|
|
final String passengerRate;
|
|
|
|
final String? rawStartCoordinates;
|
|
final String? rawEndCoordinates;
|
|
|
|
OrderData({
|
|
required this.customerName,
|
|
required this.tripDistanceKm,
|
|
required this.price,
|
|
required this.startLocationAddress,
|
|
required this.endLocationAddress,
|
|
required this.distanceToPassengerKm,
|
|
required this.tripDurationMinutes,
|
|
required this.durationToPassengerMinutes,
|
|
required this.rideType,
|
|
required this.orderId,
|
|
required this.passengerId,
|
|
required this.passengerRate,
|
|
this.rawStartCoordinates,
|
|
this.rawEndCoordinates,
|
|
});
|
|
|
|
// دالة مساعدة لتحويل الثواني إلى دقائق وتقريبها لأعلى
|
|
static int _secondsToRoundedUpMinutes(String secondsString) {
|
|
final seconds = double.tryParse(secondsString) ?? 0.0;
|
|
if (seconds <= 0) return 0;
|
|
return (seconds / 60)
|
|
.ceil(); // .ceil() لتقريب الكسر لأعلى (مثلاً 0.1 دقيقة تصبح 1 دقيقة)
|
|
}
|
|
|
|
factory OrderData.fromList(List<dynamic> list) {
|
|
// بناءً على testList والافتراضات الجديدة:
|
|
// list[4]: durationToRide (مدة الرحلة الكلية بالثواني)
|
|
// list[5]: distance (المسافة الكلية للرحلة بالكيلومتر)
|
|
// list[12]: distanceByPassenger (المسافة إلى الراكب بالمتر)
|
|
// list[15]: durationToPassenger (المدة إلى الراكب بالثواني)
|
|
|
|
double distanceToPassengerMeters =
|
|
list.length > 12 ? (double.tryParse(list[12].toString()) ?? 0.0) : 0.0;
|
|
|
|
return OrderData(
|
|
customerName: list.length > 8 ? list[8].toString() : 'Unknown Customer',
|
|
tripDistanceKm:
|
|
list.length > 5 ? (double.tryParse(list[5].toString()) ?? 0.0) : 0.0,
|
|
price: list.length > 2 ? list[2].toString().split('.')[0] : '0',
|
|
startLocationAddress:
|
|
list.length > 29 ? list[29].toString() : 'Unknown Address',
|
|
endLocationAddress:
|
|
list.length > 30 ? list[30].toString() : 'Unknown Address',
|
|
|
|
distanceToPassengerKm:
|
|
distanceToPassengerMeters / 1000.0, // تحويل من متر إلى كيلومتر
|
|
|
|
tripDurationMinutes:
|
|
list.length > 4 ? _secondsToRoundedUpMinutes(list[4].toString()) : 0,
|
|
durationToPassengerMinutes: list.length > 15
|
|
? _secondsToRoundedUpMinutes(list[15].toString())
|
|
: 0,
|
|
|
|
rideType:
|
|
list.length > 31 ? _getRideType(list[31].toString()) : 'Unknown',
|
|
orderId: list.length > 16 ? list[16].toString() : 'N/A',
|
|
passengerId: list.length > 7 ? list[7].toString() : 'N/A',
|
|
passengerRate: list.length > 33 ? list[33].toString() : 'N/A',
|
|
|
|
rawStartCoordinates: list.isNotEmpty ? list[0].toString() : null,
|
|
rawEndCoordinates: list.length > 1 ? list[1].toString() : null,
|
|
);
|
|
}
|
|
|
|
static String _getRideType(String type) {
|
|
switch (type) {
|
|
case 'Comfort':
|
|
return 'كمفورت ❄️';
|
|
case 'Lady':
|
|
return 'ليدي 👩';
|
|
case 'Speed':
|
|
return 'سبيد 🔻';
|
|
case 'Mashwari':
|
|
return 'مشواري';
|
|
case 'Rayeh Gai':
|
|
return 'رايح جاي';
|
|
default:
|
|
return type;
|
|
}
|
|
}
|
|
|
|
Map<String, double?>? get startCoordinates {
|
|
if (rawStartCoordinates == null) return null;
|
|
final parts = rawStartCoordinates!.split(',');
|
|
if (parts.length == 2) {
|
|
return {
|
|
'lat': double.tryParse(parts[0].trim()),
|
|
'lng': double.tryParse(parts[1].trim())
|
|
};
|
|
}
|
|
return null;
|
|
}
|
|
|
|
Map<String, double?>? get endCoordinates {
|
|
if (rawEndCoordinates == null) return null;
|
|
final parts = rawEndCoordinates!.split(',');
|
|
if (parts.length == 2) {
|
|
return {
|
|
'lat': double.tryParse(parts[0].trim()),
|
|
'lng': double.tryParse(parts[1].trim())
|
|
};
|
|
}
|
|
return null;
|
|
}
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'customerName': customerName,
|
|
'tripDistanceKm': tripDistanceKm,
|
|
'price': price,
|
|
'startLocationAddress': startLocationAddress,
|
|
'endLocationAddress': endLocationAddress,
|
|
'distanceToPassengerKm': distanceToPassengerKm,
|
|
'tripDurationMinutes': tripDurationMinutes,
|
|
'durationToPassengerMinutes': durationToPassengerMinutes,
|
|
'rideType': rideType,
|
|
'orderId': orderId,
|
|
'passengerId': passengerId,
|
|
'passengerRate': passengerRate,
|
|
'rawStartCoordinates': rawStartCoordinates,
|
|
'rawEndCoordinates': rawEndCoordinates,
|
|
};
|
|
}
|
|
}
|