import 'dart:io'; import 'package:flutter/widgets.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/generic_attachment_model.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/supplier_details.dart'; import 'package:test_sa/models/timer_model.dart'; class PlanPreventiveVisit { String? id; String? visitNo; Asset? asset; String? planNo; String? planName; String? nextPMDate; String? assetName; String? model; String? manufacturer; String? supplierName; String? siteName; String? buildingName; String? floorName; String? departmentName; String? roomName; String? fromDate; String? creationDate; String? createdDate; String? closedDate; String? toDate; AssignedEmployee? assignedEmployee; DateTime? acutalDateOfVisit; Lookup? typeOfService; Lookup? visitStatus; num? travelingHours; String? comments; int? executionTimeFrame; Lookup? taskStatus; Lookup? deviceStatus; Lookup? assetAvailability = Lookup(); Lookup? safety; String? engSignature; String? nurseSignature; List? preventiveVisitAttachments; List? attachments = []; List? preventiveVisitCalibrations; List? preventiveVisitChecklists; List? preventiveVisitKits; List? preventiveVisitTimers; List? preventiveVisitSuppliers; TimerModel? tbsTimer = TimerModel(); List? timerModelList = []; TimerModel? ppMTimePicker; PlanPreventiveVisit( {this.id, this.visitNo, this.asset, this.planNo, this.planName, this.nextPMDate, this.assetName, this.model, this.manufacturer, this.supplierName, this.siteName, this.buildingName, this.floorName, this.departmentName, this.roomName, this.fromDate, this.creationDate, this.createdDate, this.closedDate, this.toDate, this.assignedEmployee, this.acutalDateOfVisit, this.typeOfService, this.visitStatus, this.travelingHours, this.comments, this.executionTimeFrame, this.taskStatus, this.deviceStatus, this.assetAvailability, this.safety, this.engSignature, this.nurseSignature, this.preventiveVisitAttachments, this.attachments, this.preventiveVisitCalibrations, this.preventiveVisitChecklists, this.preventiveVisitKits, this.preventiveVisitTimers, this.timerModelList, this.ppMTimePicker, this.preventiveVisitSuppliers}); PlanPreventiveVisit.fromJson(Map json) { id = json['id']; visitNo = json['visitNo']; asset = json['asset'] != null ? Asset.fromJson(json['asset']) : null; planNo = json['planNo']; planName = json['planName']; nextPMDate = json['nextPMDate']; assetName = json['assetName']; model = json['model']; manufacturer = json['manufacturer']; supplierName = json['supplierName']; siteName = json['siteName']; buildingName = json['buildingName']; floorName = json['floorName']; departmentName = json['departmentName']; roomName = json['roomName']; fromDate = json['fromDate']; creationDate = json['creationDate']; createdDate = json['createdDate']; closedDate = json['closedDate']; toDate = json['toDate']; assignedEmployee = json['assignedEmployee'] != null ? AssignedEmployee.fromJson(json['assignedEmployee']) : null; acutalDateOfVisit = json['acutalDateOfVisit'] != null ? DateTime.parse(json['acutalDateOfVisit']) : null; typeOfService = json['typeOfService'] != null ? Lookup.fromJson(json['typeOfService']) : null; visitStatus = json['visitStatus'] != null ? Lookup.fromJson(json['visitStatus']) : null; travelingHours = json['travelingHours']; comments = json['comments']; executionTimeFrame = json['executionTimeFrame']; taskStatus = json['taskStatus'] != null ? Lookup.fromJson(json['taskStatus']) : null; deviceStatus = json['deviceStatus'] != null ? Lookup.fromJson(json['deviceStatus']) : null; assetAvailability = json['assetAvailability'] != null ? Lookup.fromJson(json['assetAvailability']) : null; safety = json['safety'] != null ? Lookup.fromJson(json['safety']) : null; engSignature = json['engSignature']; nurseSignature = json['nurseSignature']; if (json['preventiveVisitAttachments'] != null) { preventiveVisitAttachments = []; json['preventiveVisitAttachments'].forEach((v) { preventiveVisitAttachments!.add(GenericAttachmentModel.fromPreventiveVisitJson(v)); }); } if (json['preventiveVisitCalibrations'] != null) { preventiveVisitCalibrations = []; json['preventiveVisitCalibrations'].forEach((v) { preventiveVisitCalibrations!.add(PreventiveVisitCalibrations.fromJson(v)); }); } if (json['preventiveVisitChecklists'] != null) { preventiveVisitChecklists = []; json['preventiveVisitChecklists'].forEach((v) { preventiveVisitChecklists!.add(PreventiveVisitChecklists.fromJson(v)); }); } if (json['preventiveVisitKits'] != null) { preventiveVisitKits = []; json['preventiveVisitKits'].forEach((v) { preventiveVisitKits!.add(PreventiveVisitKits.fromJson(v)); }); } if (json['preventiveVisitTimers'] != null) { preventiveVisitTimers = []; json['preventiveVisitTimers'].forEach((v) { preventiveVisitTimers!.add(PreventiveVisitTimers.fromJson(v)); }); } if (json['preventiveVisitSuppliers'] != null) { preventiveVisitSuppliers = []; json['preventiveVisitSuppliers'].forEach((v) { preventiveVisitSuppliers!.add(PreventiveVisitSuppliers.fromJson(v)); }); } } Map toJson({required int status}) { final Map data = {}; data['id'] = id; data['acutalDateOfVisit'] = acutalDateOfVisit?.toIso8601String(); data['typeOfServiceId'] = typeOfService?.id; data['visitStatusValue'] = status; data['travelingHours'] = travelingHours; data['comments'] = comments; data['taskStatusId'] = taskStatus?.id; data['deviceStatusId'] = deviceStatus?.id; data['assetAvailabilityId'] = assetAvailability?.id; data['safetyId'] = safety?.id; data['engSignature'] = engSignature; data['nurseSignature'] = nurseSignature; if (preventiveVisitAttachments != null) { data['preventiveVisitAttachments'] = preventiveVisitAttachments!.map((v) => v.toPreventiveVisitJson()).toList(); } if (preventiveVisitCalibrations != null) { data['preventiveVisitCalibrations'] = preventiveVisitCalibrations!.map((v) => v.toJson()).toList(); } if (preventiveVisitChecklists != null) { data['preventiveVisitChecklists'] = preventiveVisitChecklists!.map((v) => v.toJson()).toList(); } if (preventiveVisitKits != null) { data['preventiveVisitKits'] = preventiveVisitKits!.map((v) => v.toJson()).toList(); } if (preventiveVisitTimers != null) { data['preventiveVisitTimers'] = preventiveVisitTimers!.map((v) => v.toJson()).toList(); } if (preventiveVisitSuppliers != null) { data['preventiveVisitSuppliers'] = preventiveVisitSuppliers!.map((v) => v.toJson()).toList(); } return data; } Future validate(BuildContext context) async { if (visitStatus?.id == null) { await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.status}"); return false; } if (acutalDateOfVisit == null) { await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.actualDate}"); 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; } 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); } } class AssignedEmployee { String? userId; String? userName; String? email; String? employeeId; int? languageId; AssignedEmployee({this.userId, this.userName, this.email, this.employeeId, this.languageId}); AssignedEmployee.fromJson(Map json) { userId = json['userId']; userName = json['userName']; email = json['email']; employeeId = json['employeeId']; languageId = json['languageId']; } Map toJson() { final Map data = Map(); data['userId'] = this.userId; data['userName'] = this.userName; data['email'] = this.email; data['employeeId'] = this.employeeId; data['languageId'] = this.languageId; return data; } } class PreventiveVisitChecklists { int? id; Lookup? taskStatus; String? taskComment; String? measuredValue; InstructionText? instructionText; PreventiveVisitChecklists({this.id, this.taskStatus, this.taskComment, this.measuredValue, this.instructionText}); PreventiveVisitChecklists.fromJson(Map json) { id = json['id']; taskStatus = json['taskStatus'] != null ? Lookup.fromJson(json['taskStatus']) : null; taskComment = json['taskComment']; measuredValue = json['measuredValue']; instructionText = json['instructionText'] != null ? InstructionText.fromJson(json['instructionText']) : null; } Map toJson() { final Map data = {}; data['id'] = id; data['taskStatusId'] = taskStatus?.id; data['taskComment'] = taskComment; data['measuredValue'] = measuredValue; return data; } } class InstructionText { int? id; String? text; InstructionText({this.id, this.text}); InstructionText.fromJson(Map json) { id = json['id']; text = json['text']; } Map toJson() { final Map data = {}; data['id'] = id; data['text'] = text; return data; } } class PreventiveVisitTimers { int? id; String? startDateTime; String? endDateTime; double? workingHours; PreventiveVisitTimers({this.id, this.startDateTime, this.endDateTime, this.workingHours}); PreventiveVisitTimers.fromJson(Map json) { id = json['id']; startDateTime = json['startDateTime']; endDateTime = json['endDateTime']; workingHours = json['workingHours']; } Map toJson() { final Map data = {}; data['id'] = id; data['startDateTime'] = startDateTime; data['endDateTime'] = endDateTime; data['workingHours'] = workingHours; return data; } } class PreventiveVisitCalibrations { num? id; Asset? asset; String? calibrationDateOfTesters; PreventiveVisitCalibrations({this.id, this.asset, this.calibrationDateOfTesters}); PreventiveVisitCalibrations.fromJson(Map json) { id = json['id']; asset = json['asset'] != null ? Asset.fromJson(json['asset']) : null; calibrationDateOfTesters = json['calibrationDateOfTesters']; } Map toJson() { final Map data = {}; data['id'] = id; if (asset != null) { data['assetId'] = asset?.id; } data['calibrationDateOfTesters'] = calibrationDateOfTesters; return data; } } class PreventiveVisitSuppliers { int? id; SupplierDetails? supplier; SuppPersons? suppPerson; DateTime? startDateTime; DateTime? endDateTime; TextEditingController? workingHoursController; num? workingHours; PreventiveVisitSuppliers({this.id, this.supplier, this.suppPerson, this.startDateTime, this.endDateTime, this.workingHours, this.workingHoursController}); PreventiveVisitSuppliers.fromJson(Map json) { id = json['id']; supplier = json['supplier'] != null ? SupplierDetails.fromJson(json['supplier']) : null; suppPerson = json['suppPerson'] != null ? SuppPersons.fromJson(json['suppPerson']) : null; startDateTime = json['startDateTime'] != null ? DateTime.parse(json['startDateTime']) : null; endDateTime = json['endDateTime'] != null ? DateTime.parse(json['endDateTime']) : null; workingHours = json['workingHours']; } Map toJson() { final Map data = {}; data['id'] = id; if (supplier != null) { data['supplierId'] = supplier?.id; } if (suppPerson != null) { data['suppPersonId'] = suppPerson?.id; } data['startDateTime'] = startDateTime?.toIso8601String(); data['endDateTime'] = endDateTime?.toIso8601String(); data['workingHours'] = workingHours; return data; } } class PreventiveVisitKits { int? id; PartCatalogItem? partCatalogItem; PreventiveVisitKits({this.id, partCatalogItem}); PreventiveVisitKits.fromJson(Map json) { id = json['id']; partCatalogItem = json['partCatalogItem'] != null ? PartCatalogItem.fromJson(json['partCatalogItem']) : null; } Map toJson() { final Map data = {}; data['id'] = id; if (partCatalogItem != null) { data['partCatalogItemId'] = partCatalogItem?.id; } return data; } } class PartCatalogItem { num? id; String? partName; String? partNumber; String? oracleCode; PartCatalogItem({this.id, this.partName, this.partNumber, this.oracleCode}); PartCatalogItem.fromJson(Map json) { id = json['id']; partName = json['partName']; partNumber = json['partNumber']; oracleCode = json['oracleCode']; } Map toJson() { final Map data = {}; data['id'] = id; data['partName'] = partName; data['partNumber'] = partNumber; data['oracleCode'] = oracleCode; return data; } }