83 lines
2.6 KiB
Dart
83 lines
2.6 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
import 'package:latlong2/latlong.dart';
|
|
|
|
class EventModel {
|
|
final String id;
|
|
final String name;
|
|
final String description;
|
|
final DateTime startDateTime;
|
|
final DateTime endDateTime;
|
|
final double price;
|
|
final int installationTime;
|
|
final int disassemblyTime;
|
|
final String eventTypeId;
|
|
final String customerId;
|
|
final LatLng address;
|
|
final List<String> workforce;
|
|
|
|
EventModel({
|
|
required this.id,
|
|
required this.name,
|
|
required this.description,
|
|
required this.startDateTime,
|
|
required this.endDateTime,
|
|
required this.price,
|
|
required this.installationTime,
|
|
required this.disassemblyTime,
|
|
required this.eventTypeId,
|
|
required this.customerId,
|
|
required this.address,
|
|
required this.workforce,
|
|
});
|
|
|
|
factory EventModel.fromMap(Map<String, dynamic> map, String id) {
|
|
final GeoPoint? geoPoint = map['Address'] as GeoPoint?;
|
|
final List<dynamic> workforceRefs = map['workforce'] ?? [];
|
|
final Timestamp? startTimestamp = map['StartDateTime'] as Timestamp?;
|
|
final Timestamp? endTimestamp = map['EndDateTime'] as Timestamp?;
|
|
|
|
return EventModel(
|
|
id: id,
|
|
name: map['Name'] ?? '',
|
|
description: map['Description'] ?? '',
|
|
startDateTime: startTimestamp?.toDate() ?? DateTime.now(),
|
|
endDateTime: endTimestamp?.toDate() ??
|
|
DateTime.now().add(const Duration(hours: 1)),
|
|
price: (map['Price'] ?? 0.0).toDouble(),
|
|
installationTime: map['InstallationTime'] ?? 0,
|
|
disassemblyTime: map['DisassemblyTime'] ?? 0,
|
|
eventTypeId: map['EventType'] is DocumentReference
|
|
? (map['EventType'] as DocumentReference).id
|
|
: '',
|
|
customerId: map['customer'] is DocumentReference
|
|
? (map['customer'] as DocumentReference).id
|
|
: '',
|
|
address: geoPoint != null
|
|
? LatLng(geoPoint.latitude, geoPoint.longitude)
|
|
: const LatLng(0, 0),
|
|
workforce: workforceRefs.map((ref) {
|
|
if (ref is DocumentReference) {
|
|
return ref.id;
|
|
}
|
|
return ref.toString();
|
|
}).toList(),
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'Name': name,
|
|
'Description': description,
|
|
'StartDateTime': Timestamp.fromDate(startDateTime),
|
|
'EndDateTime': Timestamp.fromDate(endDateTime),
|
|
'Price': price,
|
|
'InstallationTime': installationTime,
|
|
'DisassemblyTime': disassemblyTime,
|
|
'EventType': eventTypeId,
|
|
'customer': customerId,
|
|
'Address': GeoPoint(address.latitude, address.longitude),
|
|
'workforce': workforce,
|
|
};
|
|
}
|
|
}
|