import 'dart:typed_data'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/device/device.dart'; import 'package:test_sa/models/engineer.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/part.dart'; import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/models/timer_model.dart'; class ServiceReport { int id; String operatingHours; DateTime visitDate; DateTime endDate; Lookup assetType; Lookup callLastSituation; Engineer engineer; Lookup status; Lookup type; Lookup reason; int faultDescriptionId; String workPreformed; //String workHours; String travelingHours; String invoiceNumber; String invoiceCode; List parts; String image; Device device; String quantity; String jobSheetNumber; TimerModel timer; String signatureNurse; String signatureEngineer; Uint8List localNurseSignature; Uint8List localEngineerSignature; ServiceReport({ this.id, this.visitDate, this.endDate, this.assetType, this.status, this.type, this.faultDescriptionId, //this.workHours, this.travelingHours, this.parts, this.engineer, this.workPreformed, this.reason, this.operatingHours, this.callLastSituation, this.jobSheetNumber, this.image, this.device, this.invoiceCode, this.invoiceNumber, this.quantity = "1", this.timer, this.signatureNurse, this.signatureEngineer, this.localNurseSignature, this.localEngineerSignature }); Map toMap(ServiceRequest request){ Map _map = {}; if(id != null) _map["id"] = id; if(visitDate != null) _map["visitDate"] = visitDate.toIso8601String(); //if(serviceType != null) _map["service_type"] = serviceType.id.toString(); if(status != null) _map["status"] = status?.toMap(); if(type != null) _map["typeOfWO"] = type?.toMap(); if(assetType != null) _map["TypeOfWO"] = assetType?.toMap(); //if(faultDescriptionId != null && faultDescriptionId.isNotEmpty) _map["fault_description"] = faultDescriptionId; //if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours; if(timer != null){ _map["startofWorkTime"] = timer.startAt.toIso8601String(); _map["endofWorkTime"] = (timer.endAt ?? DateTime.now()).toIso8601String(); _map["workingHours"] = (timer.durationInSecond / 60 / 60).toStringAsFixed(5); } if(travelingHours != null && travelingHours.isNotEmpty) _map["traveling_hours"] = travelingHours; // if(workPreformed != null && workPreformed.isNotEmpty){ // _map["faultDescription"] = { // //"id":faultDescriptionId ?? 0, // "workPerformed":workPreformed // }; // } if(jobSheetNumber != null && jobSheetNumber.isNotEmpty) _map["job_sheet_no"] = jobSheetNumber; if(parts != null && parts.isNotEmpty){ _map["sparePartsWorkOrders"] = parts.map((e) => e.toJson()).toList(); } if(device != null && device.id != null){ _map["callRequest"] = { "id":request.id, "asset":device?.toMap(assetType), }; _map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber; } _map["AssignedEmployee"] = engineer?.toMap(); //if(quantity != null && quantity.isNotEmpty) _map["qty"] = quantity; //if(endDate != null) _map["end_date"] = (endDate.millisecondsSinceEpoch ~/ 1000).toString(); if(reason != null) _map["reason"] = reason.toMap(); //if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours; if(callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap(); //if(image != null) _map["image"] = image; //if(invoiceCode != null) _map["invoice_no"] = invoiceCode; //if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber; if(image != null){ _map["attachmentsWorkOrder"]=[{ "name":image }]; } _map["nurseSignature"] = signatureNurse; _map["engSignature"] = signatureEngineer; return _map; } bool validate(){ if(visitDate == null) return false; //if(serviceType == null) return false; if(status == null) return false; if(type == null && assetType==null) return false; if(engineer == null) return false; if(callLastSituation == null) return false; if(callLastSituation?.value == 12){ // if(invoiceCode != null || invoiceCode?.isEmpty == true) return false; if(invoiceNumber != null || invoiceNumber?.isEmpty== true ) return false; } if(parts == null) return false; //if(endDate == null) return false; //if(reason == null) return false; //todo uncoment this line //if((device?.id == null || device.id.isEmpty) && type?.id != 1) return false; //if(quantity == null || quantity.isEmpty) return false; //if(image == null) return false; return true; } factory ServiceReport.fromJson(Map parsedJson,int id){ List _parts = []; if(parsedJson["sparePartsWorkOrders"] != null){ if(parsedJson["sparePartsWorkOrders"][0]["id"] != null){ List partsList = parsedJson["sparePartsWorkOrders"]; _parts = partsList.map((e) => Part.fromJson( e["sparePart"],reportJson: e)).toList(); } } return ServiceReport( id: id, assetType: Lookup.fromJson(parsedJson["assetType"]), callLastSituation: Lookup.fromJson(parsedJson["calllastSituation"]), reason: Lookup.fromJson(parsedJson["reason"]), status: Lookup.fromJson(parsedJson["status"]), type: Lookup.fromJson(parsedJson["typeOfWO"]), //faultDescriptionId: parsedJson["fault_description"], endDate:DateTime.tryParse(parsedJson["endofWorkTime"]), //invoiceCode: parsedJson["invoice_code"], //invoiceNumber: parsedJson["invoice_no"], //jobSheetNumber: parsedJson["job_sheet_no"], //operatingHours: parsedJson["workingHours"], engineer: Engineer.fromJson(parsedJson["assignedEmployee"]), parts: _parts, //quantity: parsedJson["nid"], //travelingHours: parsedJson["traveling_hours"], visitDate: DateTime.tryParse(parsedJson["visitDate"]), //workHours: parsedJson["working_hours"], timer: TimerModel( startAt: DateTime.tryParse(parsedJson["startofWorkTime"]), endAt: DateTime.tryParse(parsedJson["endofWorkTime"]), durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 *60).toInt() ), //workPreformed: parsedJson["work_performed"], device: Device.fromJson(parsedJson["callRequest"]["asset"]), signatureNurse: URLs.getFileUrl(parsedJson["nurseSignature"]) , signatureEngineer:URLs.getFileUrl(parsedJson["engSignature"]), ); } // static getDate(String date){ // return date == null || date.isEmpty // ? null : DateTime.fromMillisecondsSinceEpoch(int.tryParse(date) * 1000); // } }