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 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 map, String id) { final GeoPoint? geoPoint = map['Address'] as GeoPoint?; final List 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 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, }; } }