import 'dart:convert'; import 'dart:io'; 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; String travelingHours; String image; File imageFile; // List contacts; List ppmCheckLists; List calibrationTools; List pmKits; Pentry({ this.travelingHours, this.timer, this.status, this.ppmVisitStatus, this.actualVisitDate, this.image, this.imageFile, // this.contacts, this.ppmCheckLists, this.calibrationTools, this.pmKits, }); bool validate(){ if(actualVisitDate == null) return false; if(timer == null && timer.endAt != null) return false; if(ppmVisitStatus == null) return false; //if(status == null) return false; return true; } Map toMap() { Map map = {}; map["visit_status"] = ppmVisitStatus?.id.toString(); if(status != null) map["pentry_status"] = status?.id.toString(); if(travelingHours != null) map["traveling_hours"] = travelingHours; if(imageFile != null) map["file_attachement"] = base64Encode(imageFile.readAsBytesSync()); map["actual_date"] = (actualVisitDate.millisecondsSinceEpoch / 1000).toStringAsFixed(0); if(timer != null){ map["start_date"] = (timer.startAt.millisecondsSinceEpoch / 1000).toStringAsFixed(0); map["end_date"] = ((timer.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0); map["working_hours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); } // if(contacts?.isNotEmpty == true) { // for(int i = 0;i e.toMap()).toList()); map["calibrationTools"] = jsonEncode(calibrationTools.map((e) => e.toMap()).toList()); map["pmKits"] = jsonEncode(pmKits.map((e) => e.toMap()).toList()); 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['pmKits'] != null){ pmKits =(map['pmKits'] as List) .map((e) => PMKit.fromMap(e as Map)) .toList(); } List ppmCheckLists = []; if(map['ppmCheckLists'] != null){ ppmCheckLists =(map['ppmCheckLists'] as List) .map((e) => PPMCheckList.fromMap(e as Map)) .toList(); } List calibrationTools = []; if(map['calibrationTools'] != null){ calibrationTools =(map['calibrationTools'] as List) .map((e) => CalibrationTool.fromMap(e as Map)) .toList(); } return Pentry( status: Lookup.fromJson(map["pentry_status"]), ppmVisitStatus: Lookup.fromJson(map["visit_status"]), actualVisitDate: getDate(map["actual_date"]), travelingHours: map["traveling_hours"], timer: TimerModel( startAt: getDate(map["start_date"]), endAt: getDate(map["end_date"]), durationInSecond: (int.tryParse(map["working_hours"] ?? "") ?? 0) * 60 *60 ), // contacts: contacts, ppmCheckLists: ppmCheckLists, calibrationTools: calibrationTools, pmKits: pmKits, ); } static getDate(String date){ return date == null || date.isEmpty ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); } }