138 lines
4.0 KiB
Dart
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,
|
|
);
|
|
}
|
|
}
|