import 'package:test_sa/extensions/enum_extensions.dart'; import 'package:test_sa/models/enums/recurrent_task_inspection_data_type.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/timer_model.dart'; class RecurrentWo { RecurrentWoData? recurrentWoData; String? message; String? title; String? innerMessage; int? responseCode; bool? isSuccess; RecurrentWo({this.recurrentWoData, this.message, this.title, this.innerMessage, this.responseCode, this.isSuccess}); RecurrentWo.fromJson(Map json) { recurrentWoData = json['data'] != null ? RecurrentWoData.fromJson(json['data']) : null; message = json['message']; title = json['title']; innerMessage = json['innerMessage']; responseCode = json['responseCode']; isSuccess = json['isSuccess']; } Map toJson() { final Map data = {}; if (recurrentWoData != null) { data['data'] = recurrentWoData!.toJson(); } data['message'] = message; data['title'] = title; data['innerMessage'] = innerMessage; data['responseCode'] = responseCode; data['isSuccess'] = isSuccess; return data; } } class RecurrentWoData { int? id; String? title; String? taskNo; Engineer? engineer; String? scheduleDate; Status? status; Site? site; Lookup? building; Lookup? floor; Lookup? department; Lookup? room; List? planRecurrentMedicalTaskRooms; List? planRecurrentTaskTimers; TimerModel? recurrentWoTimerModel = TimerModel(); double? totalWorkingHours = 0.0; List? timerModelList = []; String? comment; TimerModel? recurrentWoTimePicker; RecurrentWoData( {this.id, this.title, this.taskNo, this.engineer, this.scheduleDate, this.status, this.site, this.building, this.recurrentWoTimerModel, this.floor, this.department, this.room, this.planRecurrentMedicalTaskRooms, this.planRecurrentTaskTimers, this.timerModelList, this.recurrentWoTimePicker, this.comment, this.totalWorkingHours}); RecurrentWoData.fromJson(Map json) { id = json['id']; title = json['title']; taskNo = json['taskNo']; engineer = json['engineer'] != null ? new Engineer.fromJson(json['engineer']) : null; scheduleDate = json['scheduleDate']; status = json['status'] != null ? Status.fromJson(json['status']) : null; site = json['site'] != null ? Site.fromJson(json['site']) : null; building = json["building"] == null ? null : Lookup.fromJson(json["building"]); floor = json["floor"] == null ? null : Lookup.fromJson(json["floor"]); department = json["department"] == null ? null : Lookup.fromJson(json["department"]); room = json["room"] == null ? null : Lookup.fromJson(json["room"]); comment = json["comment"]; if (json['planRecurrentMedicalTaskRooms'] != null) { planRecurrentMedicalTaskRooms = []; json['planRecurrentMedicalTaskRooms'].forEach((v) { planRecurrentMedicalTaskRooms!.add(PlanRecurrentMedicalTaskRooms.fromJson(v)); }); } if (json['planRecurrentTaskTimers'] != null) { planRecurrentTaskTimers = []; json['planRecurrentTaskTimers'].forEach((v) { planRecurrentTaskTimers?.add(PlanRecurrentTaskTimers.fromJson(v)); }); //TODO need to test this @waseem.. totalWorkingHours = json['planRecurrentTaskTimers'].fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item['endDateTime']).difference(DateTime.parse(item['startDateTime'])).inSeconds) ?? 0; } } Map toJson({int? status = 0}) { final Map data = {}; List taskRoomTabAttributesJson = []; if (planRecurrentMedicalTaskRooms != null) { taskRoomTabAttributesJson = planRecurrentMedicalTaskRooms ?.expand((room) => room.planRecurrentMedicalTaskRoomTabs ?? []) .expand((tab) => tab.planRecurrentMedicalTaskRoomTabAttributes ?? []) .map((attribute) => attribute.toJson()) .toList() ?? []; } data['id'] = id; data['statusValue'] = status; data['comment'] = comment; if (planRecurrentTaskTimers != null) { data['planRecurrentTaskTimers'] = planRecurrentTaskTimers!.map((v) => v.toJson()).toList(); } if (taskRoomTabAttributesJson.isNotEmpty) { data['attributes'] = taskRoomTabAttributesJson; } else { data['attributes'] = []; } return data; } } class Engineer { String? userId; String? userName; String? email; String? employeeId; int? languageId; Engineer({this.userId, this.userName, this.email, this.employeeId, this.languageId}); Engineer.fromJson(Map json) { userId = json['userId']; userName = json['userName']; email = json['email']; employeeId = json['employeeId']; languageId = json['languageId']; } Map toJson() { final Map data = {}; data['userId'] = userId; data['userName'] = userName; data['email'] = email; data['employeeId'] = employeeId; data['languageId'] = languageId; return data; } } class Status { int? id; String? name; int? value; Status({this.id, this.name, this.value}); Status.fromJson(Map json) { id = json['id']; name = json['name']; value = json['value']; } Map toJson() { final Map data = {}; data['id'] = id; data['name'] = name; data['value'] = value; return data; } } class Site { int? id; String? siteName; Site({this.id, this.siteName}); Site.fromJson(Map json) { id = json['id']; siteName = json['siteName']; } Map toJson() { final Map data = {}; data['id'] = id; data['siteName'] = siteName; return data; } } class PlanRecurrentMedicalTaskRooms { int? id; Room? room; List? planRecurrentMedicalTaskRoomTabs; PlanRecurrentMedicalTaskRooms({this.id, this.room, this.planRecurrentMedicalTaskRoomTabs}); PlanRecurrentMedicalTaskRooms.fromJson(Map json) { id = json['id']; room = json['room'] != null ? Room.fromJson(json['room']) : null; if (json['planRecurrentMedicalTaskRoomTabs'] != null) { planRecurrentMedicalTaskRoomTabs = []; json['planRecurrentMedicalTaskRoomTabs'].forEach((v) { planRecurrentMedicalTaskRoomTabs!.add(PlanRecurrentMedicalTaskRoomTabs.fromJson(v)); }); } } Map toJson() { final Map data = {}; data['id'] = id; if (room != null) { data['room'] = room!.toJson(); } if (planRecurrentMedicalTaskRoomTabs != null) { data['planRecurrentMedicalTaskRoomTabs'] = planRecurrentMedicalTaskRoomTabs!.map((v) => v.toJson()).toList(); } return data; } } class Room { int? id; String? roomId; Room({this.id, this.roomId}); Room.fromJson(Map json) { id = json['id']; roomId = json['roomId']; } Map toJson() { final Map data = {}; data['id'] = id; data['roomId'] = roomId; return data; } } class PlanRecurrentMedicalTaskRoomTabs { int? id; String? tabName; int? tabMedicalRoomId; List? planRecurrentMedicalTaskRoomTabAttributes; PlanRecurrentMedicalTaskRoomTabs({this.id, this.tabName, this.tabMedicalRoomId, this.planRecurrentMedicalTaskRoomTabAttributes}); PlanRecurrentMedicalTaskRoomTabs.fromJson(Map json) { id = json['id']; tabName = json['tabName']; tabMedicalRoomId = json['tabMedicalRoomId']; if (json['planRecurrentMedicalTaskRoomTabAttributes'] != null) { planRecurrentMedicalTaskRoomTabAttributes = []; json['planRecurrentMedicalTaskRoomTabAttributes'].forEach((v) { planRecurrentMedicalTaskRoomTabAttributes!.add(PlanRecurrentMedicalTaskRoomTabAttributes.fromJson(v)); }); } } Map toJson() { final Map data = {}; data['id'] = id; data['tabName'] = tabName; data['tabMedicalRoomId'] = tabMedicalRoomId; if (planRecurrentMedicalTaskRoomTabAttributes != null) { data['planRecurrentMedicalTaskRoomTabAttributes'] = planRecurrentMedicalTaskRoomTabAttributes!.map((v) => v.toJson()).toList(); } return data; } } class PlanRecurrentMedicalTaskRoomTabAttributes { int? id; Attribute? attribute; dynamic attributeValue; PlanRecurrentMedicalTaskRoomTabAttributes({this.id, this.attribute, this.attributeValue}); PlanRecurrentMedicalTaskRoomTabAttributes.fromJson(Map json) { id = json['id']; attribute = json['attribute'] != null ? Attribute.fromJson(json['attribute']) : null; attributeValue = json['attributeValue']; } Map toJson() { final Map data = {}; data['id'] = id; data['attributeValue'] = attributeValue != null ? attributeValue.toString() : attributeValue; return data; } } class Attribute { String? name; String? type; String? key; RecurrentTaskInspectionDataTypeEnum? dataTypeEnum; Attribute({this.name, this.type, this.key, this.dataTypeEnum}); Attribute.fromJson(Map json) { name = json['name']; type = json['type']; dataTypeEnum = json['type'] == null ? null : (json['type'] as String).toRecurrentTaskInspectionDataTypeEnum(); key = json['key']; } Map toJson() { final Map data = {}; data['name'] = name; data['type'] = type; data['key'] = key; return data; } } class PlanRecurrentTaskTimers { int? id; String? startTime; String? endTime; dynamic workingHours; PlanRecurrentTaskTimers({this.id, this.startTime, this.endTime, this.workingHours}); PlanRecurrentTaskTimers.fromJson(Map json) { id = json['id']; startTime = json['startDateTime']; endTime = json['endDateTime']; workingHours = json['workingHour']; } Map toJson() { final Map data = {}; data['id'] = id; data['startDateTime'] = startTime; data['endDateTime'] = endTime; data['workingHour'] = workingHours; return data; } }