65 lines
1.9 KiB
Dart
65 lines
1.9 KiB
Dart
import 'package:cloud_firestore/cloud_firestore.dart';
|
|
|
|
/// Ein Datensatz = eine Rechnung / dokumentierter Auftrag (Fotos, Unterschrift, PDF).
|
|
class Auftrag {
|
|
Auftrag({
|
|
required this.id,
|
|
required this.titel,
|
|
required this.beschreibung,
|
|
required this.kundenName,
|
|
required this.kundenEmail,
|
|
required this.rechnungsnummer,
|
|
required this.betragText,
|
|
required this.fotoUrls,
|
|
required this.unterschriftUrl,
|
|
required this.createdAt,
|
|
});
|
|
|
|
final String id;
|
|
final String titel;
|
|
final String beschreibung;
|
|
final String kundenName;
|
|
final String kundenEmail;
|
|
final String rechnungsnummer;
|
|
final String betragText;
|
|
final List<String> fotoUrls;
|
|
final String? unterschriftUrl;
|
|
final DateTime? createdAt;
|
|
|
|
bool get hasUnterschrift =>
|
|
unterschriftUrl != null && unterschriftUrl!.isNotEmpty;
|
|
|
|
factory Auftrag.fromDoc(DocumentSnapshot<Map<String, dynamic>> doc) {
|
|
final d = doc.data() ?? {};
|
|
final fotos = d['fotoUrls'];
|
|
return Auftrag(
|
|
id: doc.id,
|
|
titel: d['titel'] as String? ?? '',
|
|
beschreibung: d['beschreibung'] as String? ?? '',
|
|
kundenName: d['kundenName'] as String? ?? '',
|
|
kundenEmail: d['kundenEmail'] as String? ?? '',
|
|
rechnungsnummer: d['rechnungsnummer'] as String? ?? '',
|
|
betragText: d['betragText'] as String? ?? '',
|
|
fotoUrls: fotos is List
|
|
? fotos.map((e) => e.toString()).toList()
|
|
: const <String>[],
|
|
unterschriftUrl: d['unterschriftUrl'] as String?,
|
|
createdAt: (d['createdAt'] as Timestamp?)?.toDate(),
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return {
|
|
'titel': titel,
|
|
'beschreibung': beschreibung,
|
|
'kundenName': kundenName,
|
|
'kundenEmail': kundenEmail,
|
|
'rechnungsnummer': rechnungsnummer,
|
|
'betragText': betragText,
|
|
'fotoUrls': fotoUrls,
|
|
'unterschriftUrl': unterschriftUrl,
|
|
'updatedAt': FieldValue.serverTimestamp(),
|
|
};
|
|
}
|
|
}
|