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

145 lines
5.8 KiB
Dart

3 years ago
import 'dart:convert';
import 'device/device.dart';
import 'lookup.dart';
import 'part.dart';
import 'timer_model.dart';
3 years ago
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;
3 years ago
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 ?? "";
3 years ago
//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);
3 years ago
}
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;
}
3 years ago
});
_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 ?? "";
3 years ago
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;
3 years ago
}
if (parts == null) return false;
3 years ago
//if(endDate == null) return false;
//if(reason == null) return false;
if ((device?.id == null || (device?.id?.isEmpty ?? false)) && type?.id != 1) return false;
3 years ago
//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();
3 years ago
}
}
3 years ago
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"]));
3 years ago
}
static getDate(String date) {
return date == null || date.isEmpty ? null : DateTime.fromMillisecondsSinceEpoch((int.tryParse(date) ?? 0) * 1000);
3 years ago
}
}