environment_monitoring_app/lib/models/air_collection_data.dart

252 lines
9.7 KiB
Dart

import 'dart:io';
import 'air_installation_data.dart';
class AirCollectionData {
// Link to the original installation
String? installationRefID;
int? airManId; // The ID from the server database
// Collection Info
String? collectionDate;
String? collectionTime;
String? weather;
double? temperature;
String? powerFailure;
// PM10 Readings
double? pm10Flowrate;
String? pm10FlowrateResult;
String? pm10TotalTime;
String? pm10TotalTimeResult;
double? pm10Pressure;
String? pm10PressureResult;
double? pm10Vstd;
// PM2.5 Readings
double? pm25Flowrate;
String? pm25FlowrateResult;
String? pm25TotalTime;
String? pm25TotalTimeResult;
double? pm25Pressure;
String? pm25PressureResult;
double? pm25Vstd;
// General
String? remarks;
int? collectionUserId;
String? collectionUserName; // To hold the user's name for alerts
String? status;
// Image Files for Collection
File? imageFront;
File? imageBack;
File? imageLeft;
File? imageRight;
File? imageChart;
File? imageFilterPaper;
File? optionalImage1;
File? optionalImage2;
File? optionalImage3;
File? optionalImage4;
String? optionalRemark1;
String? optionalRemark2;
String? optionalRemark3;
String? optionalRemark4;
AirCollectionData({
this.installationRefID,
this.airManId,
this.collectionDate,
this.collectionTime,
this.weather,
this.temperature,
this.powerFailure,
this.pm10Flowrate,
this.pm10FlowrateResult,
this.pm10TotalTime,
this.pm10TotalTimeResult,
this.pm10Pressure,
this.pm10PressureResult,
this.pm10Vstd,
this.pm25Flowrate,
this.pm25FlowrateResult,
this.pm25TotalTime,
this.pm25TotalTimeResult,
this.pm25Pressure,
this.pm25PressureResult,
this.pm25Vstd,
this.remarks,
this.collectionUserId,
this.collectionUserName,
this.status,
this.imageFront,
this.imageBack,
this.imageLeft,
this.imageRight,
this.imageChart,
this.imageFilterPaper,
this.optionalImage1,
this.optionalImage2,
this.optionalImage3,
this.optionalImage4,
this.optionalRemark1,
this.optionalRemark2,
this.optionalRemark3,
this.optionalRemark4,
});
String generateCollectionTelegramAlert(AirInstallationData installationData, {required bool isDataOnly}) {
final submissionType = isDataOnly ? "(Data Only)" : "(Data & Images)";
final buffer = StringBuffer()
..writeln('✅ *Air Manual Collection $submissionType Submitted:*')
..writeln()
..writeln('*Station ID:* ${installationData.stationID ?? 'N/A'}')
..writeln('*Location:* ${installationData.locationName ?? 'N/A'}')
..writeln('*Collection Date:* ${collectionDate ?? 'N/A'} at ${collectionTime ?? 'N/A'}')
..writeln('*Submitted by User:* ${collectionUserName ?? 'N/A'}')
..writeln('*Status of Submission:* Successful');
return buffer.toString();
}
factory AirCollectionData.fromMap(Map<String, dynamic> map) {
File? fileFromPath(String? path) => path != null ? File(path) : null;
double? parseDouble(dynamic value) {
if (value is double) return value;
if (value is int) return value.toDouble();
if (value is String) return double.tryParse(value);
return null;
}
return AirCollectionData(
installationRefID: map['installationRefID'],
airManId: map['air_man_id'],
collectionDate: map['air_man_collection_date'],
collectionTime: map['air_man_collection_time'],
weather: map['air_man_collection_weather'],
temperature: parseDouble(map['air_man_collection_temperature']),
powerFailure: map['air_man_collection_power_failure'],
pm10Flowrate: parseDouble(map['air_man_collection_pm10_flowrate']),
pm10FlowrateResult: map['air_man_collection_pm10_flowrate_result'],
pm10TotalTime: map['air_man_collection_pm10_total_time'],
pm10TotalTimeResult: map['air_man_collection_total_time_result'],
pm10Pressure: parseDouble(map['air_man_collection_pm10_pressure']),
pm10PressureResult: map['air_man_collection_pm10_pressure_result'],
pm10Vstd: parseDouble(map['air_man_collection_pm10_vstd']),
pm25Flowrate: parseDouble(map['air_man_collection_pm25_flowrate']),
pm25FlowrateResult: map['air_man_collection_pm25_flowrate_result'],
pm25TotalTime: map['air_man_collection_pm25_total_time'],
pm25TotalTimeResult: map['air_man_collection_pm25_total_time_result'],
pm25Pressure: parseDouble(map['air_man_collection_pm25_pressure']),
pm25PressureResult: map['air_man_collection_pm25_pressure_result'],
pm25Vstd: parseDouble(map['air_man_collection_pm25_vstd']),
remarks: map['air_man_collection_remarks'],
collectionUserName: map['collectionUserName'],
status: map['status'],
optionalRemark1: map['optionalRemark1'],
optionalRemark2: map['optionalRemark2'],
optionalRemark3: map['optionalRemark3'],
optionalRemark4: map['optionalRemark4'],
imageFront: fileFromPath(map['imageFrontPath']),
imageBack: fileFromPath(map['imageBackPath']),
imageLeft: fileFromPath(map['imageLeftPath']),
imageRight: fileFromPath(map['imageRightPath']),
imageChart: fileFromPath(map['imageChartPath']),
imageFilterPaper: fileFromPath(map['imageFilterPaperPath']),
optionalImage1: fileFromPath(map['optionalImage1Path']),
optionalImage2: fileFromPath(map['optionalImage2Path']),
optionalImage3: fileFromPath(map['optionalImage3Path']),
optionalImage4: fileFromPath(map['optionalImage4Path']),
);
}
Map<String, dynamic> toMap() {
return {
'installationRefID': installationRefID,
'air_man_id': airManId,
'air_man_collection_date': collectionDate,
'air_man_collection_time': collectionTime,
'air_man_collection_weather': weather,
'air_man_collection_temperature': temperature,
'air_man_collection_power_failure': powerFailure,
'air_man_collection_pm10_flowrate': pm10Flowrate,
'air_man_collection_pm10_flowrate_result': pm10FlowrateResult,
'air_man_collection_pm10_total_time': pm10TotalTime,
'air_man_collection_total_time_result': pm10TotalTimeResult,
'air_man_collection_pm10_pressure': pm10Pressure,
'air_man_collection_pm10_pressure_result': pm10PressureResult,
'air_man_collection_pm10_vstd': pm10Vstd,
'air_man_collection_pm25_flowrate': pm25Flowrate,
'air_man_collection_pm25_flowrate_result': pm25FlowrateResult,
'air_man_collection_pm25_total_time': pm25TotalTime,
'air_man_collection_pm25_total_time_result': pm25TotalTimeResult,
'air_man_collection_pm25_pressure': pm25Pressure,
'air_man_collection_pm25_pressure_result': pm25PressureResult,
'air_man_collection_pm25_vstd': pm25Vstd,
'air_man_collection_remarks': remarks,
'collectionUserName': collectionUserName,
'status': status,
'optionalRemark1': optionalRemark1,
'optionalRemark2': optionalRemark2,
'optionalRemark3': optionalRemark3,
'optionalRemark4': optionalRemark4,
'imageFront': imageFront,
'imageBack': imageBack,
'imageLeft': imageLeft,
'imageRight': imageRight,
'imageChart': imageChart,
'imageFilterPaper': imageFilterPaper,
'optionalImage1': optionalImage1,
'optionalImage2': optionalImage2,
'optionalImage3': optionalImage3,
'optionalImage4': optionalImage4,
};
}
Map<String, dynamic> toJson() {
return {
'air_man_id': airManId?.toString(),
'air_man_collection_user_id': collectionUserId?.toString(),
'air_man_collection_date': collectionDate,
'air_man_collection_time': collectionTime,
'air_man_collection_weather': weather,
'air_man_collection_temperature': temperature?.toString(),
'air_man_collection_power_failure': powerFailure,
'air_man_collection_pm10_flowrate': pm10Flowrate?.toString(),
'air_man_collection_pm10_flowrate_result': pm10FlowrateResult,
'air_man_collection_pm10_total_time': pm10TotalTime,
'air_man_collection_total_time_result': pm10TotalTimeResult,
'air_man_collection_pm10_pressure': pm10Pressure?.toString(),
'air_man_collection_pm10_pressure_result': pm10PressureResult,
'air_man_collection_pm10_vstd': pm10Vstd?.toString(),
'air_man_collection_pm25_flowrate': pm25Flowrate?.toString(),
'air_man_collection_pm25_flowrate_result': pm25FlowrateResult,
'air_man_collection_pm25_total_time': pm25TotalTime,
'air_man_collection_pm25_total_time_result': pm25TotalTimeResult,
'air_man_collection_pm25_pressure': pm25Pressure?.toString(),
'air_man_collection_pm25_pressure_result': pm25PressureResult,
'air_man_collection_pm25_vstd': pm25Vstd?.toString(),
'air_man_collection_remarks': remarks,
'air_man_collection_image_optional_01_remarks': optionalRemark1,
'air_man_collection_image_optional_02_remarks': optionalRemark2,
'air_man_collection_image_optional_03_remarks': optionalRemark3,
'air_man_collection_image_optional_04_remarks': optionalRemark4,
};
}
Map<String, File> getImagesForUpload() {
final Map<String, File> files = {};
if (imageFront != null) files['front'] = imageFront!;
if (imageBack != null) files['back'] = imageBack!;
if (imageLeft != null) files['left'] = imageLeft!;
if (imageRight != null) files['right'] = imageRight!;
if (imageChart != null) files['chart'] = imageChart!;
if (imageFilterPaper != null) files['filter_paper'] = imageFilterPaper!;
if (optionalImage1 != null) files['optional_01'] = optionalImage1!;
if (optionalImage2 != null) files['optional_02'] = optionalImage2!;
if (optionalImage3 != null) files['optional_03'] = optionalImage3!;
if (optionalImage4 != null) files['optional_04'] = optionalImage4!;
return files;
}
}