Files

138 lines
4.0 KiB
Dart

class Igel {
final int id;
final String name;
final String? gender; // 'männlich' | 'weiblich' | 'unbekannt'
final String? feature; // Merkmal
final String? note; // Information
// 🆕 NEU:
final DateTime? rescuedAt; // YYYY-MM-DD (Datum)
final String? location; // Ort / Fundstelle
final String? marking;
final String? finder;
final String? phone;
final String? email;
final String? admissionReason;
final String? animalCondition;
final DateTime? releasedAt; // YYYY-MM-DD (Datum)
final String? releaseLocation;
final DateTime? createdAt;
final DateTime? updatedAt;
Igel({
required this.id,
required this.name,
this.gender,
this.feature,
this.note,
this.rescuedAt,
this.location,
this.marking,
this.finder,
this.phone,
this.email,
this.admissionReason,
this.animalCondition,
this.releasedAt,
this.releaseLocation,
this.createdAt,
this.updatedAt,
});
static DateTime? _parseDateOrNull(String? s) {
if (s == null || s.isEmpty) return null;
try {
return DateTime.parse(s);
} catch (_) {
return null;
}
}
factory Igel.fromMap(Map<String, dynamic> m) {
return Igel(
id: (m['id'] as num).toInt(),
name: (m['name'] ?? '') as String,
gender: m['gender'] as String?,
feature: m['feature'] as String?,
note: m['note'] as String?,
rescuedAt: _parseDateOrNull(m['rescued_at'] as String?),
location: m['location'] as String?,
marking: m['marking'] as String?,
finder: m['finder'] as String?,
phone: m['phone'] as String?,
email: m['email'] as String?,
admissionReason: m['admission_reason'] as String?,
animalCondition: m['animal_condition'] as String?,
releasedAt: _parseDateOrNull(m['released_at'] as String?),
releaseLocation: m['release_location'] as String?,
createdAt: _parseDateOrNull(m['created_at'] as String?),
updatedAt: _parseDateOrNull(m['updated_at'] as String?),
);
}
Map<String, dynamic> toMapForCreateUpdate() {
String? fmtDate(DateTime? d) =>
d?.toIso8601String().split('T').first;
return {
'name': name,
'gender': gender,
'feature': feature,
'note': note,
'rescued_at': fmtDate(rescuedAt),
'location': location?.trim().isEmpty == true ? null : location,
'marking': marking?.trim().isEmpty == true ? null : marking,
'finder': finder?.trim().isEmpty == true ? null : finder,
'phone': phone?.trim().isEmpty == true ? null : phone,
'email': email?.trim().isEmpty == true ? null : email,
'admission_reason':
admissionReason?.trim().isEmpty == true ? null : admissionReason,
'animal_condition':
animalCondition?.trim().isEmpty == true ? null : animalCondition,
'released_at': fmtDate(releasedAt),
'release_location':
releaseLocation?.trim().isEmpty == true ? null : releaseLocation,
};
}
Igel copyWith({
String? name,
String? gender,
String? feature,
String? note,
DateTime? rescuedAt,
String? location,
String? marking,
String? finder,
String? phone,
String? email,
String? admissionReason,
String? animalCondition,
DateTime? releasedAt,
String? releaseLocation,
DateTime? createdAt,
DateTime? updatedAt,
}) {
return Igel(
id: id,
name: name ?? this.name,
gender: gender ?? this.gender,
feature: feature ?? this.feature,
note: note ?? this.note,
rescuedAt: rescuedAt ?? this.rescuedAt,
location: location ?? this.location,
marking: marking ?? this.marking,
finder: finder ?? this.finder,
phone: phone ?? this.phone,
email: email ?? this.email,
admissionReason: admissionReason ?? this.admissionReason,
animalCondition: animalCondition ?? this.animalCondition,
releasedAt: releasedAt ?? this.releasedAt,
releaseLocation: releaseLocation ?? this.releaseLocation,
createdAt: createdAt ?? this.createdAt,
updatedAt: updatedAt ?? this.updatedAt,
);
}
}