100 lines
2.7 KiB
Dart
100 lines
2.7 KiB
Dart
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 {
|
|
@Id()
|
|
int id = 0;
|
|
|
|
// External ID from server
|
|
@Unique()
|
|
late int externalId;
|
|
|
|
late String ver;
|
|
late int state;
|
|
String? crFilter;
|
|
late int ordertime;
|
|
late int offsWarn;
|
|
late bool global;
|
|
late int vhtId;
|
|
late String rem;
|
|
late int delayOrderTime;
|
|
|
|
// Store tours as JSON string for ObjectBox
|
|
String toursJson = '[]';
|
|
|
|
@Transient()
|
|
List<JobTour> get tours {
|
|
final List<dynamic> decoded = jsonDecode(toursJson);
|
|
return decoded.map((e) => JobTour.fromJson(e as Map<String, dynamic>)).toList();
|
|
}
|
|
|
|
set tours(List<JobTour> value) {
|
|
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) {
|
|
final job = Job();
|
|
job.id = 0; // Let ObjectBox assign the ID
|
|
job.externalId = json['id'] as int; // Store external ID separately
|
|
job.ver = json['ver'] as String;
|
|
job.state = json['state'] as int;
|
|
job.crFilter = json['cr_filter'] as String?;
|
|
job.ordertime = json['ordertime'] as int;
|
|
job.offsWarn = json['offs_warn'] as int;
|
|
job.global = json['global'] as bool;
|
|
job.vhtId = json['vht_id'] as int;
|
|
job.rem = json['rem'] as String;
|
|
job.delayOrderTime = json['delayOrderTime'] as int;
|
|
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;
|
|
}
|
|
|
|
Map<String, dynamic> toJson() {
|
|
return {
|
|
'id': externalId, // Use external ID for JSON
|
|
'ver': ver,
|
|
'state': state,
|
|
'cr_filter': crFilter,
|
|
'ordertime': ordertime,
|
|
'offs_warn': offsWarn,
|
|
'global': global,
|
|
'vht_id': vhtId,
|
|
'rem': rem,
|
|
'delayOrderTime': delayOrderTime,
|
|
'tours': tours.map((e) => e.toJson()).toList(),
|
|
'files': files.map((e) => e.toJson()).toList(),
|
|
};
|
|
}
|
|
}
|