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 = new Map<String, dynamic>();
data['id'] = this.id;
data['startDateTime'] = this.startDateTime;
data['endDateTime'] = this.endDateTime;
data['workingHours'] = this.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,
bool 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 (this.visitTimers != null) {
map['visitTimers'] = this.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);
}
}