import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/pantry/calibration_tools.dart'; import 'package:test_sa/models/pantry/pm_kit.dart'; import 'package:test_sa/models/pantry/ppm_check_list.dart'; import 'package:test_sa/models/timer_model.dart'; class Pentry { Lookup ppmVisitStatus; Lookup status; TimerModel timer; DateTime actualVisitDate; DateTime expectedVisitDate; String travelingHours; String image; File imageFile; // List contacts; List ppmCheckLists; List calibrationTools; List pmKits; String signatureNurse; String signatureEngineer; Uint8List localNurseSignature; Uint8List localEngineerSignature; Pentry( {this.travelingHours, this.timer, this.status, this.ppmVisitStatus, this.actualVisitDate, this.expectedVisitDate, this.image, this.imageFile, // this.contacts, this.ppmCheckLists, this.calibrationTools, this.pmKits, this.signatureNurse, this.signatureEngineer, this.localNurseSignature, this.localEngineerSignature}); Future validate() async { if (actualVisitDate == null) { await Fluttertoast.showToast(msg: "Actual visit date is Required"); return false; } if (expectedVisitDate == null) { await Fluttertoast.showToast(msg: "expected visit date is Required"); return false; } if (timer?.startAt == null) { await Fluttertoast.showToast(msg: "Working Hours Required"); return false; } if (timer?.endAt == null) { await Fluttertoast.showToast(msg: "Please Stop The Timer"); return false; } if (ppmVisitStatus == null) return false; if (status?.id == null) { await Fluttertoast.showToast(msg: "Device Status is Required"); return false; } return true; } Map toMap(int visitId) { Map map = {}; map["visitStatusId"] = ppmVisitStatus?.id.toString(); if (status != null) map["deviceStatusId"] = status?.id.toString(); if (travelingHours != null) map["travelingHours"] = travelingHours; //if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); map["actualDate"] = actualVisitDate.toIso8601String(); map["expectedDate"] = expectedVisitDate.toIso8601String(); if (timer != null) { map["startDate"] = timer.startAt.toIso8601String(); map["endDate"] = timer.endAt?.toIso8601String() ?? DateTime.now().toIso8601String(); map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); } if (imageFile != null) { map["vAttachments"] = [ {"attachmentName": (imageFile.path.split("/").last + base64Encode(imageFile.readAsBytesSync()))} ]; } map["travelingHours"] = travelingHours; // if(contacts?.isNotEmpty == true) { // for(int i = 0;i e.toMap(visitId)).toList(); map["vCalibrationTools"] = calibrationTools.map((e) => e.toMap(visitId)).toList(); map["vKits"] = pmKits.map((e) => e.toMap(visitId)).toList(); map["nurseSignature"] = "${DateTime.now().toIso8601String()}.png|$signatureNurse"; map["engSignature"] = "${DateTime.now().toIso8601String()}.png|$signatureEngineer"; return map; } factory Pentry.fromMap(Map map) { // List contacts = []; // if(map['contacts'] != null){ // contacts =(map['contacts'] as List) // .map((e) => Contact.fromMap(e as Map)) // .toList(); // } List pmKits = []; if (map['vKits'] != null) { pmKits = (map['vKits'] as List).map((e) => PMKit.fromMap(e as Map)).toList(); } List ppmCheckLists = []; if (map['vChecklists'] != null) { ppmCheckLists = (map['vChecklists'] as List).map((e) => PPMCheckList.fromMap(e as Map)).toList(); } List calibrationTools = []; if (map['vCalibrationTools'] != null) { calibrationTools = (map['vCalibrationTools'] as List).map((e) => CalibrationTool.fromMap(e as Map)).toList(); } return Pentry( status: Lookup(id: map["taskStatusId"], name: map["taskStatusName"]), ppmVisitStatus: Lookup(id: map["visitStatusId"], name: map["visitStatusName"]), actualVisitDate: DateTime.tryParse(map["actualDate"] ?? ""), expectedVisitDate: DateTime.tryParse(map["expectedDate"] ?? ""), travelingHours: map["travelingHours"], timer: TimerModel( startAt: DateTime.tryParse(map["startDate"] ?? ""), endAt: DateTime.tryParse(map["endDate"] ?? ""), durationInSecond: (int.tryParse(map["workingHours"] ?? "") ?? 0) * 60 * 60, ), // contacts: contacts, ppmCheckLists: ppmCheckLists, calibrationTools: calibrationTools, pmKits: pmKits, signatureNurse: URLs.getFileUrl(map["nurseSignature"]), signatureEngineer: URLs.getFileUrl(map["engSignature"]), ); } Pentry copyWith({ Lookup ppmVisitStatus, Lookup status, TimerModel timer, DateTime actualVisitDate, DateTime expectedVisitDate, String travelingHours, String image, File imageFile, List ppmCheckLists, List calibrationTools, List pmKits, String signatureNurse, String signatureEngineer, }) { return Pentry( ppmVisitStatus: ppmVisitStatus ?? this.ppmVisitStatus, status: status ?? this.status, timer: timer ?? this.timer, actualVisitDate: actualVisitDate ?? this.actualVisitDate, expectedVisitDate: expectedVisitDate ?? this.expectedVisitDate, travelingHours: travelingHours ?? this.travelingHours, image: image ?? this.image, imageFile: imageFile ?? this.imageFile, ppmCheckLists: ppmCheckLists ?? this.ppmCheckLists?.map((e) => e.copyWith())?.toList(), calibrationTools: calibrationTools ?? this.calibrationTools?.map((e) => e.copyWith())?.toList(), pmKits: pmKits ?? this.pmKits.map((e) => e.copyWith()).toList(), signatureNurse: signatureNurse ?? this.signatureNurse, signatureEngineer: signatureEngineer ?? this.signatureEngineer); } }