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/service_report.dart

148 lines
5.7 KiB
Dart

import 'dart:convert';
import 'device/device.dart';
import 'lookup.dart';
import 'part.dart';
import 'timer_model.dart';
class ServiceReport {
String? id;
String? operatingHours;
DateTime? visitDate;
DateTime? endDate;
Lookup? serviceType;
Lookup? callLastSituation;
Lookup? status;
Lookup? type;
Lookup? reason;
String? faultDescription;
String? workPreformed;
String? travelingHours;
String? invoiceNumber;
String? invoiceCode;
List<Part>? parts;
String? image;
Device? device;
String? quantity;
String? jobSheetNumber;
TimerModel? timer;
ServiceReport({
this.id,
this.visitDate,
this.endDate,
this.serviceType,
this.status,
this.type,
this.faultDescription,
this.travelingHours,
this.parts,
this.workPreformed,
this.reason,
this.operatingHours,
this.callLastSituation,
this.jobSheetNumber,
this.image,
this.device,
this.invoiceCode,
this.invoiceNumber,
this.quantity = "1",
this.timer,
});
Map<String,String> toMap(){
Map<String,String> _map = {};
if(id != null) _map["id"] = id??"";
if(visitDate != null) _map["visit_date"] = ((visitDate?.millisecondsSinceEpoch??0) ~/ 1000).toString();
if(serviceType != null) _map["service_type"] = serviceType?.id.toString()??"";
if(status != null) _map["status"] = status?.id.toString()??"";
if(type != null) _map["service_report_type"] = type?.id.toString()??"";
if(faultDescription != null && (faultDescription?.isNotEmpty??false)) _map["fault_description"] = faultDescription??"";
//if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours;
if(timer != null){
_map["start_time"] = ((timer?.startAt?.millisecondsSinceEpoch??0) / 1000).toStringAsFixed(0);
_map["end_time"] = ((timer?.endAt ?? DateTime.now()).millisecondsSinceEpoch / 1000).toStringAsFixed(0);
_map["working_hours"] = ((timer?.durationInSecond??0) / 60 / 60).toStringAsFixed(5);
}
if(travelingHours != null && (travelingHours?.isNotEmpty??false)) _map["traveling_hours"] = travelingHours??"";
if(workPreformed != null && (workPreformed?.isNotEmpty??false)) _map["work_performed"] = workPreformed??"";
if(jobSheetNumber != null && (jobSheetNumber?.isNotEmpty??false)) _map["job_sheet_no"] = jobSheetNumber??"";
if(parts != null && (parts?.isNotEmpty??false)){
Map<String,int> _partsMap = {};
parts?.forEach((part) {
if((part.id?.isNotEmpty??false)) {
_partsMap[part?.id??""] = part.quantity;
}
});
_map["parts"] = json.encode(_partsMap);
}
if(device?.id != null && device?.id != null) _map["eq_id"] = device?.id??"";
if(quantity != null && (quantity?.isNotEmpty??false)) _map["qty"] = quantity??"";
if(endDate != null) _map["end_date"] = ((endDate?.millisecondsSinceEpoch??0) ~/ 1000).toString();
if(reason != null) _map["reasons"] = reason?.id.toString()??"";
if(operatingHours != null && (operatingHours?.isNotEmpty??false)) _map["operation_hours"] = operatingHours??"";
if(callLastSituation != null) _map["call_last_situtation"] = callLastSituation?.id.toString()??"";
if(image != null) _map["image"] = image??"";
if(invoiceCode != null) _map["invoice_no"] = invoiceCode??"";
if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber??"";
return _map;
}
bool validate(){
if(visitDate == null) return false;
if(serviceType == null) return false;
if(status == null) return false;
if(type == null) return false;
if(callLastSituation == null) return false;
if(callLastSituation?.id == 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;
if((device?.id == null ||(device?.id?.isEmpty??false)) && type?.id != 1) return false;
//if(quantity == null || quantity.isEmpty) return false;
//if(image == null) return false;
return true;
}
factory ServiceReport.fromJson(Map<String,dynamic> parsedJson,String id){
List<Part> _parts = [];
if(parsedJson["parts"] != null){
if(parsedJson["parts"][0]["id"] != null){
List partsList = parsedJson["parts"];
_parts = partsList.map((e) => Part.fromJson(e)).toList();
}
}
return ServiceReport(
id: id,
serviceType: Lookup.fromJson(parsedJson["service_type"]),
callLastSituation: Lookup.fromJson(parsedJson["call_last_situtation"]),
reason: Lookup.fromJson(parsedJson["reasons"]),
status: Lookup.fromJson(parsedJson["service_report_status"]),
type: Lookup.fromJson(parsedJson["service_report_type"]),
faultDescription: parsedJson["fault_description"],
endDate:getDate(parsedJson["end_date"]),
invoiceCode: parsedJson["invoice_code"],
invoiceNumber: parsedJson["invoice_no"],
jobSheetNumber: parsedJson["job_sheet_no"],
operatingHours: parsedJson["operation_hours"],
parts: _parts,
quantity: parsedJson["nid"],
travelingHours: parsedJson["traveling_hours"],
visitDate: getDate(parsedJson["visit_date"]),
//workHours: parsedJson["working_hours"],
timer: TimerModel(
durationInSecond: (int.tryParse(parsedJson["working_hours"] ?? "") ?? 0) * 60 *60),
workPreformed: parsedJson["work_performed"],
device: parsedJson["eq_nid"] == null ? null : Device(id: parsedJson["eq_nid"],serialNumber: parsedJson["eq_serial"])
);
}
static getDate(String date){
return date == null || date.isEmpty
? null : DateTime.fromMillisecondsSinceEpoch((int.tryParse(date)??0) * 1000);
}
}