Erweiterungen

This commit is contained in:
Sven committed 2026-02-14 08:52:06 +01:00
1 parent ba1f7d5440
commit bb3dc9e856
28 files changed
+1672 -1291

No files matched your search

+26
View File
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:objectbox/objectbox.dart';
import 'package:stadtbote/model/job_tour.dart';
import 'package:stadtbote/model/tour_file.dart';
@Entity()
class Job {
@@ -34,6 +35,25 @@ class Job {
toursJson = jsonEncode(value.map((e) => e.toJson()).toList());
}
// Store files as JSON string for ObjectBox
String filesJson = '';
@Transient()
List<TourFile> get files {
if (filesJson.isEmpty) {
return [];
}
final List<dynamic> decoded = jsonDecode(filesJson);
return decoded.map((e) => TourFile.fromJson(e as Map<String, dynamic>)).toList();
}
set files(List<TourFile> value) {
filesJson = jsonEncode(value.map((e) => e.toJson()).toList());
}
// Helper method to check if job has files
bool get hasFiles => files.isNotEmpty;
Job();
factory Job.fromJson(Map<String, dynamic> json) {
@@ -52,6 +72,11 @@ class Job {
job.tours = (json['tours'] as List<dynamic>)
.map((e) => JobTour.fromJson(e as Map<String, dynamic>))
.toList();
if (json['files'] != null) {
job.files = (json['files'] as List<dynamic>)
.map((e) => TourFile.fromJson(e as Map<String, dynamic>))
.toList();
}
return job;
}
@@ -68,6 +93,7 @@ class Job {
'rem': rem,
'delayOrderTime': delayOrderTime,
'tours': tours.map((e) => e.toJson()).toList(),
'files': files.map((e) => e.toJson()).toList(),
};
}
}
+8
View File
@@ -1,3 +1,4 @@
import 'package:stadtbote/model/tour_file.dart';
import 'package:stadtbote/model/tour_position.dart';
import 'package:stadtbote/model/tour_task.dart';
@@ -15,6 +16,7 @@ class JobTour {
TourPosition? pos;
late String rem;
List<TourTask>? tasks;
List<TourFile>? files;
JobTour();
@@ -39,6 +41,11 @@ class JobTour {
.map((e) => TourTask.fromJson(e as Map<String, dynamic>))
.toList()
: null;
tour.files = json['files'] != null
? (json['files'] as List<dynamic>)
.map((e) => TourFile.fromJson(e as Map<String, dynamic>))
.toList()
: null;
return tour;
}
@@ -57,6 +64,7 @@ class JobTour {
'pos': pos?.toJson(),
'rem': rem,
'tasks': tasks?.map((e) => e.toJson()).toList(),
'files': files?.map((e) => e.toJson()).toList(),
};
}
}
+39
View File
@@ -0,0 +1,39 @@
class TourFile {
late int index;
late String name;
String? remark;
late String url;
TourFile();
factory TourFile.fromJson(Map<String, dynamic> json) {
final file = TourFile();
file.index = json['index'] as int;
file.name = json['name'] as String;
file.remark = json['remark'] as String?;
file.url = json['url'] as String;
return file;
}
Map<String, dynamic> toJson() {
return {
'index': index,
'name': name,
'remark': remark,
'url': url,
};
}
bool get isPdf {
return name.toLowerCase().endsWith('.pdf');
}
bool get isImage {
final ext = name.toLowerCase();
return ext.endsWith('.jpg') ||
ext.endsWith('.jpeg') ||
ext.endsWith('.png') ||
ext.endsWith('.gif') ||
ext.endsWith('.webp');
}
}