Files
EM2_ERP/em2rp/lib/models/event_model.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,
};
}
}