You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/models/ppm/ppm.dart

685 lines
23 KiB
Dart

import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/ppm/ppm_attachment.dart';
import 'package:test_sa/models/ppm/ppm_calibration_tools.dart';
import 'package:test_sa/models/ppm/ppm_check_list.dart';
import 'package:test_sa/models/ppm/ppm_contacts.dart';
import 'package:test_sa/models/ppm/ppm_kit.dart';
import 'package:test_sa/models/timer_model.dart';
class VisitTimers {
int? id;
String? startDateTime;
String? endDateTime;
double? workingHours;
VisitTimers({this.id, this.startDateTime, this.endDateTime, this.workingHours});
VisitTimers.fromJson(Map<String, dynamic> json) {
id = json['id'];
startDateTime = json['startDateTime'];
endDateTime = json['endDateTime'];
workingHours = json['workingHours'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['startDateTime'] = startDateTime;
data['endDateTime'] = endDateTime;
data['workingHours'] = workingHours;
return data;
}
}
class Ppm {
Ppm({
this.id,
this.ppmScheduleId,
this.assetId,
this.jobSheetNo,
this.assignedEmployeeId,
this.expectedDate,
this.actualDate,
this.nextDate,
this.forwardToId,
this.maintenanceContractId,
this.typeOfServiceId,
this.executionTimeFrameId,
this.externalEngineer,
this.telephone,
this.groupLeaderReviewId,
this.timePeriodId,
this.assignedToId,
this.vCalibrationTools,
this.vKits,
this.vContacts,
this.vChecklists,
this.files,
this.visitStatusId,
this.visitTimers,
this.startDate,
this.endDate,
this.workingHours,
this.travelingHours,
this.deviceStatusId,
this.comments,
this.workPerformed,
this.supplierId,
this.suppPersonId,
this.suppStartDate,
this.suppEndDate,
this.suppWorkingHours,
this.taskStatusId,
this.engSignature,
this.nurseSignature,
this.safetyId,
this.assetAvailabilityId,
this.assetAvailabilityName,
this.assetName,
this.assetNumber,
this.assetSerialNo,
this.assetSupplierId,
this.assetSupplierName,
this.assignedEmployeeName,
this.assignedToName,
this.contractNumber,
this.createdOn,
this.departmentId,
this.departmentName,
this.deviceStatusName,
this.dueDate,
this.executionTimeFrameName,
this.forwardToName,
this.groupLeaderReviewName,
this.manufacturerId,
this.manufacturerName,
this.modelId,
this.modelName,
this.modifiedOn,
this.notified,
this.planCode,
this.planNo,
this.ppmId,
this.ppmScheduleCode,
this.ppmScheduleNo,
this.ppmSupplierId,
this.ppmSupplierName,
this.safetyName,
this.siteId,
this.siteName,
this.buildingName,
this.floorName,
this.roomName,
this.supplierName,
this.suppPerson,
this.taskStatusName,
this.timePeriodName,
this.timePeriodValue,
this.typeOfServiceName,
this.visitCode,
this.visitNo,
this.visitStatusName,
this.warrantyEndDate,
});
Ppm.fromJson(dynamic json) {
id = json['id'];
ppmScheduleId = json['ppmScheduleId'];
assetId = json['assetId'];
jobSheetNo = json['jobSheetNo'];
assignedEmployeeId = json['assignedEmployeeId'];
expectedDate = json['expectedDate'];
actualDate = json['actualDate'];
nextDate = json['nextDate'];
forwardToId = json['forwardToId'];
maintenanceContractId = json['maintenanceContractId'];
typeOfServiceId = json['typeOfServiceId'];
executionTimeFrameId = json['executionTimeFrameId'];
externalEngineer = json['externalEngineer'];
telephone = json['telephone'];
groupLeaderReviewId = json['groupLeaderReviewId'];
timePeriodId = json['timePeriodId'];
assignedToId = json['assignedToId'];
if (json['vCalibrationTools'] != null) {
vCalibrationTools = [];
json['vCalibrationTools'].forEach((v) {
vCalibrationTools!.add(PpmCalibrationTools.fromJson(v));
});
}
if (json['vKits'] != null) {
vKits = [];
json['vKits'].forEach((v) {
vKits!.add(PpmKits.fromJson(v));
});
}
if (json['vContacts'] != null) {
vContacts = [];
json['vContacts'].forEach((v) {
vContacts!.add(PpmContacts.fromJson(v));
});
}
if (json['vChecklists'] != null) {
vChecklists = [];
json['vChecklists'].forEach((v) {
vChecklists!.add(PpmChecklists.fromJson(v));
});
}
if (json['vAttachments'] != null) {
files = [];
json['vAttachments'].forEach((v) {
files!.add(PpmAttachments.fromJson(v));
});
}
visitStatusId = json['visitStatusId'];
visitTimers = <VisitTimers>[];
if (json['visitTimers'] != null) {
json['visitTimers'].forEach((v) {
visitTimers!.add(VisitTimers.fromJson(v));
});
}
startDate = json['startDate'];
endDate = json['endDate'];
workingHours = json['workingHours'];
tbsTimer = TimerModel();
// try {
// tbsTimer = TimerModel(startAt: DateTime.tryParse(startDate ?? ""), endAt: DateTime.tryParse(endDate ?? ""));
// if (tbsTimer.endAt != null && tbsTimer.startAt != null) {
// tbsTimer.durationInSecond = (tbsTimer.endAt.difference(tbsTimer.startAt))?.inSeconds;
// workingHours = (((tbsTimer.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2);
// }
// } catch (e) {
// print(e.toString());
// }
travelingHours = json['travelingHours'];
deviceStatusId = json['deviceStatusId'];
comments = json['comments'];
workPerformed = json['workPerformed'];
supplierId = json['supplierId'];
suppPersonId = json['suppPersonId'];
suppStartDate = json['suppStartDate'];
suppEndDate = json['suppEndDate'];
suppWorkingHours = json['suppWorkingHours'];
try {
externalEngineerTimer = TimerModel(startAt: DateTime.tryParse(suppStartDate ?? ""), endAt: DateTime.tryParse(suppEndDate ?? ""));
if (externalEngineerTimer?.endAt != null && externalEngineerTimer?.startAt != null) {
externalEngineerTimer?.durationInSecond = (externalEngineerTimer!.endAt!.difference(externalEngineerTimer!.startAt!)).inSeconds;
suppWorkingHours = (((externalEngineerTimer!.durationInSecond ?? 0) / 60) / 60).toStringAsFixed(2);
}
} catch (e) {
print(e.toString());
}
taskStatusId = json['taskStatusId'];
engSignature = json['engSignature'];
nurseSignature = json['nurseSignature'];
safetyId = json['safetyId'];
assetAvailabilityId = json['assetAvailabilityId'];
assetAvailabilityName = json['assetAvailabilityName'];
assetName = json['assetName'];
assetNumber = json['assetNumber'];
assetSerialNo = json['assetSerialNo'];
assetSupplierId = json['assetSupplierId'];
assetSupplierName = json['assetSupplierName'];
assignedEmployeeName = json['assignedEmployeeName'];
assignedToName = json['assignedToName'];
createdOn = json['createdOn'];
departmentId = json['departmentId'];
departmentName = json['departmentName'];
deviceStatusName = json['deviceStatusName'];
dueDate = json['dueDate'];
executionTimeFrameName = json['executionTimeFrameName'];
forwardToName = json['forwardToName'];
manufacturerId = json['manufacturerId'];
manufacturerName = json['manufacturerName'];
modifiedOn = json['modifiedOn'];
notified = json['notified'];
planCode = json['planCode'];
planNo = json['planNo'];
ppmId = json['ppmId'];
ppmScheduleCode = json['ppmScheduleCode'];
ppmScheduleNo = json['ppmScheduleNo'];
ppmSupplierId = json['ppmSupplierId'];
ppmSupplierName = json['ppmSupplierName'];
safetyName = json['safetyName'];
siteId = json['siteId'];
siteName = json['siteName'];
buildingName = json['buildingName'];
floorName = json['floorName'];
roomName = json['roomName'];
supplierName = json['supplierName'];
suppPerson = json['suppPerson'];
taskStatusName = json['taskStatusName'];
timePeriodName = json['timePeriodName'];
timePeriodValue = json['timePeriodValue'];
typeOfServiceName = json['typeOfServiceName'];
visitCode = json['visitCode'];
visitNo = json['visitNo'];
visitStatusName = json['visitStatusName'];
warrantyEndDate = json['warrantyEndDate'];
}
num? id;
num? ppmScheduleId;
num? assetId;
String? jobSheetNo;
String? assignedEmployeeId;
String? expectedDate;
String? actualDate;
String? nextDate;
String? forwardToId;
num? maintenanceContractId;
num? typeOfServiceId;
num? executionTimeFrameId;
String? externalEngineer;
String? telephone;
num? groupLeaderReviewId;
num? timePeriodId;
num? assignedToId;
List<PpmCalibrationTools>? vCalibrationTools;
List<PpmKits>? vKits;
List<PpmContacts>? vContacts;
List<PpmChecklists>? vChecklists;
List<PpmAttachments>? files;
num? visitStatusId;
List<VisitTimers>? visitTimers;
String? startDate;
String? endDate;
String? workingHours;
String? travelingHours;
num? deviceStatusId;
String? comments;
String? workPerformed;
num? supplierId;
num? suppPersonId;
String? suppStartDate;
String? suppEndDate;
String? suppWorkingHours;
num? taskStatusId;
String? engSignature;
String? nurseSignature;
num? safetyId;
num? assetAvailabilityId;
String? assetAvailabilityName;
String? assetName;
String? assetNumber;
String? assetSerialNo;
num? assetSupplierId;
String? assetSupplierName;
String? assignedEmployeeName;
String? assignedToName;
String? contractNumber;
String? createdOn;
num? departmentId;
String? departmentName;
String? deviceStatusName;
String? dueDate;
String? executionTimeFrameName;
String? forwardToName;
String? groupLeaderReviewName;
num? manufacturerId;
String? manufacturerName;
num? modelId;
String? modelName;
String? modifiedOn;
bool? notified;
String? planCode;
num? planNo;
num? ppmId;
String? ppmScheduleCode;
num? ppmScheduleNo;
num? ppmSupplierId;
String? ppmSupplierName;
String? safetyName;
num? siteId;
String? siteName;
String? buildingName;
String? floorName;
String? roomName;
String? supplierName;
String? suppPerson;
String? taskStatusName;
String? timePeriodName;
num? timePeriodValue;
String? typeOfServiceName;
String? visitCode;
num? visitNo;
String? visitStatusName;
String? warrantyEndDate;
TimerModel? tbsTimer = TimerModel();
TimerModel? externalEngineerTimer = TimerModel();
Uint8List? localNurseSignature;
Uint8List? localEngineerSignature;
Ppm copyWith({
num? id,
num? ppmScheduleId,
num? assetId,
String? jobSheetNo,
String? assignedEmployeeId,
String? expectedDate,
String? actualDate,
String? nextDate,
String? forwardToId,
num? maintenanceContractId,
num? typeOfServiceId,
num? executionTimeFrameId,
String? externalEngineer,
String? telephone,
num? groupLeaderReviewId,
num? timePeriodId,
num? assignedToId,
List<PpmCalibrationTools>? vCalibrationTools,
List<PpmKits>? vKits,
List<PpmContacts>? vContacts,
List<PpmChecklists>? vChecklists,
List<PpmAttachments>? files,
num? visitStatusId,
List<VisitTimers>? visitTimers,
String? startDate,
String? endDate,
String? workingHours,
String? travelingHours,
num? deviceStatusId,
String? comments,
String? workPerformed,
num? supplierId,
num? suppPersonId,
String? suppStartDate,
String? suppEndDate,
String? suppWorkingHours,
num? taskStatusId,
String? engSignature,
String? nurseSignature,
num? safetyId,
num? assetAvailabilityId,
String? assetAvailabilityName,
String? assetName,
String? assetNumber,
String? assetSerialNo,
num? assetSupplierId,
String? assetSupplierName,
String? assignedEmployeeName,
String? assignedToName,
String? contractNumber,
String? createdOn,
num? departmentId,
String? departmentName,
String? deviceStatusName,
String? dueDate,
String? executionTimeFrameName,
String? forwardToName,
String? groupLeaderReviewName,
num? manufacturerId,
String? manufacturerName,
num? modelId,
String? modelName,
String? modifiedOn,
bool? notified,
String? planCode,
num? planNo,
num? ppmId,
String? ppmScheduleCode,
num? ppmScheduleNo,
num? ppmSupplierId,
String? ppmSupplierName,
String? safetyName,
num? siteId,
String? siteName,
String? buildingName,
String? floorName,
String? roomName,
String? supplierName,
String? suppPerson,
String? taskStatusName,
String? timePeriodName,
num? timePeriodValue,
String? typeOfServiceName,
String? visitCode,
num? visitNo,
String? visitStatusName,
String? warrantyEndDate,
TimerModel? tbsTimer,
TimerModel? externalEngineerTimer,
}) {
Ppm ppm = Ppm(
id: id ?? this.id,
ppmScheduleId: ppmScheduleId ?? this.ppmScheduleId,
assetId: assetId ?? this.assetId,
jobSheetNo: jobSheetNo ?? this.jobSheetNo,
assignedEmployeeId: assignedEmployeeId ?? this.assignedEmployeeId,
expectedDate: expectedDate ?? this.expectedDate,
actualDate: actualDate ?? this.actualDate,
nextDate: nextDate ?? this.nextDate,
forwardToId: forwardToId ?? this.forwardToId,
maintenanceContractId: maintenanceContractId ?? this.maintenanceContractId,
typeOfServiceId: typeOfServiceId ?? this.typeOfServiceId,
executionTimeFrameId: executionTimeFrameId ?? this.executionTimeFrameId,
externalEngineer: externalEngineer ?? this.externalEngineer,
telephone: telephone ?? this.telephone,
groupLeaderReviewId: groupLeaderReviewId ?? this.groupLeaderReviewId,
timePeriodId: timePeriodId ?? this.timePeriodId,
assignedToId: assignedToId ?? this.assignedToId,
vCalibrationTools: vCalibrationTools ?? this.vCalibrationTools,
vKits: vKits ?? this.vKits,
vContacts: vContacts ?? this.vContacts,
vChecklists: vChecklists ?? this.vChecklists,
files: files ?? this.files,
visitStatusId: visitStatusId ?? this.visitStatusId,
visitTimers: visitTimers ?? this.visitTimers,
startDate: startDate ?? this.startDate,
endDate: endDate ?? this.endDate,
workingHours: workingHours ?? this.workingHours,
travelingHours: travelingHours ?? this.travelingHours,
deviceStatusId: deviceStatusId ?? this.deviceStatusId,
comments: comments ?? this.comments,
workPerformed: workPerformed ?? this.workPerformed,
supplierId: supplierId ?? this.supplierId,
suppPersonId: suppPersonId ?? this.suppPersonId,
suppStartDate: suppStartDate ?? this.suppStartDate,
suppEndDate: suppEndDate ?? this.suppEndDate,
suppWorkingHours: suppWorkingHours ?? this.suppWorkingHours,
taskStatusId: taskStatusId ?? this.taskStatusId,
engSignature: engSignature ?? this.engSignature,
nurseSignature: nurseSignature ?? this.nurseSignature,
safetyId: safetyId ?? this.safetyId,
assetAvailabilityId: assetAvailabilityId ?? this.assetAvailabilityId,
assetAvailabilityName: assetAvailabilityName ?? this.assetAvailabilityName,
assetName: assetName ?? this.assetName,
assetNumber: assetNumber ?? this.assetNumber,
assetSerialNo: assetSerialNo ?? this.assetSerialNo,
assetSupplierId: assetSupplierId ?? this.assetSupplierId,
assetSupplierName: assetSupplierName ?? this.assetSupplierName,
assignedEmployeeName: assignedEmployeeName ?? this.assignedEmployeeName,
assignedToName: assignedToName ?? this.assignedToName,
createdOn: createdOn ?? this.createdOn,
departmentId: departmentId ?? this.departmentId,
departmentName: departmentName ?? this.departmentName,
deviceStatusName: deviceStatusName ?? this.deviceStatusName,
dueDate: dueDate ?? this.dueDate,
executionTimeFrameName: executionTimeFrameName ?? this.executionTimeFrameName,
forwardToName: forwardToName ?? this.forwardToName,
manufacturerId: manufacturerId ?? this.manufacturerId,
manufacturerName: manufacturerName ?? this.manufacturerName,
modifiedOn: modifiedOn ?? this.modifiedOn,
notified: notified ?? this.notified,
planCode: planCode ?? this.planCode,
planNo: planNo ?? this.planNo,
ppmId: ppmId ?? this.ppmId,
ppmScheduleCode: ppmScheduleCode ?? this.ppmScheduleCode,
ppmScheduleNo: ppmScheduleNo ?? this.ppmScheduleNo,
ppmSupplierId: ppmSupplierId ?? this.ppmSupplierId,
ppmSupplierName: ppmSupplierName ?? this.ppmSupplierName,
safetyName: safetyName ?? this.safetyName,
siteId: siteId ?? this.siteId,
siteName: siteName ?? this.siteName,
buildingName: buildingName ?? this.buildingName,
floorName: floorName ?? this.floorName,
roomName: roomName ?? this.roomName,
supplierName: supplierName ?? this.supplierName,
suppPerson: suppPerson ?? this.suppPerson,
taskStatusName: taskStatusName ?? this.taskStatusName,
timePeriodName: timePeriodName ?? this.timePeriodName,
timePeriodValue: timePeriodValue ?? this.timePeriodValue,
typeOfServiceName: typeOfServiceName ?? this.typeOfServiceName,
visitCode: visitCode ?? this.visitCode,
visitNo: visitNo ?? this.visitNo,
visitStatusName: visitStatusName ?? this.visitStatusName,
warrantyEndDate: warrantyEndDate ?? this.warrantyEndDate,
);
ppm.tbsTimer = tbsTimer ?? this.tbsTimer;
ppm.externalEngineerTimer = externalEngineerTimer ?? this.externalEngineerTimer;
return ppm;
}
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['ppmScheduleId'] = ppmScheduleId;
map['assetId'] = assetId;
map['jobSheetNo'] = jobSheetNo;
map['assignedEmployeeId'] = assignedEmployeeId;
map['expectedDate'] = expectedDate;
map['actualDate'] = actualDate;
map['nextDate'] = nextDate;
map['forwardToId'] = forwardToId;
map['maintenanceContractId'] = maintenanceContractId;
map['typeOfServiceId'] = typeOfServiceId;
map['executionTimeFrameId'] = executionTimeFrameId;
map['externalEngineer'] = externalEngineer;
map['telephone'] = telephone;
map['groupLeaderReviewId'] = groupLeaderReviewId;
map['timePeriodId'] = timePeriodId;
map['assignedToId'] = assignedToId;
if (vCalibrationTools != null) {
map['vCalibrationTools'] = vCalibrationTools!.map((v) => v.copyWith(visitId: id).toJson()).toList();
}
if (vKits != null) {
map['vKits'] = vKits!.map((v) => v.copyWith(visitId: id).toJson()).toList();
}
if (vContacts != null) {
map['vContacts'] = vContacts!.map((v) => v.toJson()).toList();
}
if (vChecklists != null) {
map['vChecklists'] = vChecklists!.map((v) => v.toJson()).toList();
}
if (files?.isNotEmpty ?? false) {
map["vAttachments"] = files!
.map((file) =>
{"attachmentName": _isLocalUrl(file.attachmentName!) ? ("${file.attachmentName!.split("/").last}|${base64Encode(File(file.attachmentName!).readAsBytesSync())}") : file.attachmentName})
.toList();
}
map['visitStatusId'] = visitStatusId;
if (visitTimers != null) {
map['visitTimers'] = visitTimers!.map((v) => v.toJson()).toList();
}
// map['startDate'] = tbsTimer?.startAt?.toIso8601String();
// map['endDate'] = tbsTimer?.endAt?.toIso8601String();
// map['workingHours'] = ((tbsTimer?.durationInSecond ?? 0) / 60 / 60).toStringAsFixed(5);
map['travelingHours'] = travelingHours;
map['deviceStatusId'] = deviceStatusId;
map['comments'] = comments;
map['workPerformed'] = workPerformed;
map['supplierId'] = supplierId;
map['suppPersonId'] = suppPersonId;
map['suppStartDate'] = externalEngineerTimer?.startAt?.toIso8601String();
map['suppEndDate'] = externalEngineerTimer?.endAt?.toIso8601String();
map['suppWorkingHours'] = ((externalEngineerTimer?.durationInSecond ?? 0) / 60 / 60).toStringAsFixed(5);
map['taskStatusId'] = taskStatusId;
map['engSignature'] = engSignature;
map['nurseSignature'] = nurseSignature;
map['safetyId'] = safetyId;
map['assetAvailabilityId'] = assetAvailabilityId;
map['assetAvailabilityName'] = assetAvailabilityName;
map['assetName'] = assetName;
map['assetNumber'] = assetNumber;
map['assetSerialNo'] = assetSerialNo;
map['assetSupplierId'] = assetSupplierId;
map['assetSupplierName'] = assetSupplierName;
map['assignedEmployeeName'] = assignedEmployeeName;
map['assignedToName'] = assignedToName;
map['createdOn'] = createdOn;
map['departmentId'] = departmentId;
map['departmentName'] = departmentName;
map['deviceStatusName'] = deviceStatusName;
map['dueDate'] = dueDate;
map['executionTimeFrameName'] = executionTimeFrameName;
map['forwardToName'] = forwardToName;
map['manufacturerId'] = manufacturerId;
map['manufacturerName'] = manufacturerName;
map['modifiedOn'] = modifiedOn;
map['notified'] = notified;
map['planCode'] = planCode;
map['planNo'] = planNo;
map['ppmId'] = ppmId;
map['ppmScheduleCode'] = ppmScheduleCode;
map['ppmScheduleNo'] = ppmScheduleNo;
map['ppmSupplierId'] = ppmSupplierId;
map['ppmSupplierName'] = ppmSupplierName;
map['safetyName'] = safetyName;
map['siteId'] = siteId;
map['siteName'] = siteName;
map['supplierName'] = supplierName;
map['suppPerson'] = suppPerson;
map['taskStatusName'] = taskStatusName;
map['timePeriodName'] = timePeriodName;
map['timePeriodValue'] = timePeriodValue;
map['typeOfServiceName'] = typeOfServiceName;
map['visitCode'] = visitCode;
map['visitNo'] = visitNo;
map['visitStatusName'] = visitStatusName;
map['warrantyEndDate'] = warrantyEndDate;
return map;
}
bool _isLocalUrl(String url) {
if (url.isEmpty != false) return false;
return url.startsWith("/") || url.startsWith("file://") || url.substring(1).startsWith(':\\');
}
Future<bool> validate(BuildContext context) async {
if (deviceStatusId == null || visitStatusId == null) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.status}");
return false;
}
if (actualDate == null) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.actualDate}");
return false;
}
if (expectedDate == null) {
await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.visitDate}");
return false;
}
if (tbsTimer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
}
if (tbsTimer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
if (externalEngineerTimer?.startAt != null && externalEngineerTimer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop External Engineer Timer");
return false;
}
return true;
}
void removeEmptyObjects() {
if (vCalibrationTools?.isNotEmpty ?? false) vCalibrationTools!.removeWhere((element) => element.assetId == null && element.calibrationDateOfTesters == null);
if (vKits?.isNotEmpty ?? false) vKits!.removeWhere((element) => element.partName == null && element.partNumber == null);
}
}