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/new_models/gas_refill_model.dart

420 lines
14 KiB
Dart

import 'dart:typed_data';
import 'package:flutter/cupertino.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/new_models/assigned_employee.dart';
import 'package:test_sa/models/new_models/building.dart';
import 'package:test_sa/models/new_models/department.dart';
import 'package:test_sa/models/new_models/floor.dart';
import 'package:test_sa/models/new_models/site.dart';
import 'package:test_sa/models/timer_model.dart';
class GasRefillModel {
GasRefillModel(
{this.id,
this.gazRefillNo,
this.expectedDate,
this.expectedTime,
this.startDate,
this.startTime,
this.endDate,
this.endTime,
this.engSignature,
this.nurseSignature,
this.workingHours,
this.extensionNo,
this.employeeId,
this.name,
this.createdDate,
this.site,
this.building,
this.floor,
this.department,
this.assignedEmployee,
this.status,
this.comment,
this.gazRefillDetails,
this.localEngineerSignature,
this.localNurseSignature,
this.timer,
this.timerModelList,
this.gasRefillTimer,
this.gasRefillAttachments,
});
GasRefillModel.fromJson(dynamic json) {
id = json['id'];
gazRefillNo = json['gazRefillNo'];
expectedDate = json['expectedDate'];
expectedTime = json['expectedTime'];
startDate = json['startDate'];
startTime = json['startTime'];
endDate = json['endDate'];
endTime = json['endTime'];
comment = json['comment'];
workingHours = json['workingHours'];
extensionNo = json['extensionNo'];
employeeId = json['employeeId'];
name = json['name'];
createdDate = json['createdDate'];
//TODO need to use this when added from backend...
if (json['gasRefillTimer'] != null) {
gasRefillTimer = <GasRefillTimer>[];
json['gasRefillTimer'].forEach((v) {
gasRefillTimer?.add(GasRefillTimer.fromJson(v));
});
workingHours = json['gasRefillTimer'].fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item['endDateTime']).difference(DateTime.parse(item['startDateTime'])).inSeconds) ?? 0;
}
if (json['gasRefillAttachments'] != null) {
gasRefillAttachments = <GasRefillAttachments>[];
json['gasRefillAttachments'].forEach((v) {
gasRefillAttachments!.add(GasRefillAttachments.fromJson(v));
});
}
try {
final DateTime? sd = DateTime.tryParse(startDate ?? "");
final DateTime? st = DateTime.tryParse(startTime ?? "");
final DateTime? ed = DateTime.tryParse(endDate ?? "");
final DateTime? et = DateTime.tryParse(endTime ?? "");
timer = TimerModel(
startAt: st == null ? sd : sd?.add(Duration(hours: st.hour, minutes: st.minute, seconds: st.second)), // Handle potential null 'sd'
endAt: et == null ? ed : ed?.add(Duration(hours: et.hour, minutes: et.minute, seconds: et.second)), // Handle potential null 'ed'
);
if (timer!.endAt != null && timer!.startAt != null) {
// Use '!' since timer could be null after initialization
timer!.durationInSecond = (timer!.endAt!.difference(timer!.startAt!)).inSeconds;
workingHours = (((timer!.durationInSecond ?? 0) / 60) / 60);
}
} catch (e) {
print(e);
}
engSignature = json['engSignature'];
nurseSignature = json['nurseSignature'];
site = json['site'] != null ? Site.fromJson(json['site']) : null;
building = json['building'] != null ? Building.fromJson(json['building']) : null;
floor = json['floor'] != null ? Floor.fromJson(json['floor']) : null;
department = json['department'] != null ? Department.fromJson(json['department']) : null;
assignedEmployee = json['assignedEmployee'] != null ? AssignedEmployee.fromJson(json['assignedEmployee']) : null;
status = json['status'] != null ? Lookup.fromJson(json['status']) : null;
if (json['gazRefillDetails'] != null) {
gazRefillDetails = [];
json['gazRefillDetails'].forEach((v) {
gazRefillDetails!.add(GasRefillDetails.fromJson(v)); // Use '!' since gazRefillDetails is initialized here
});
}
}
num? id; // Now nullable
String? gazRefillNo; // Now nullable
String? expectedDate; // Now nullable
String? expectedTime; // Now nullable
String? startDate; // Now nullable
String? startTime; // Now nullable
String? endDate; // Now nullable
String? endTime; // Now nullable
String? engSignature; // Now nullable
String? nurseSignature; // Now nullable
double? workingHours;
dynamic extensionNo;
String? employeeId;
String? name;
String? createdDate;
Site? site; // Now nullable
Building? building; // Now nullable
Floor? floor; // Now nullable
Department? department; // Now nullable
AssignedEmployee? assignedEmployee; // Now nullable
Lookup? status; // Now nullable
String? comment; // Now nullable
List<GasRefillDetails>? gazRefillDetails; // Now nullable
Uint8List? localNurseSignature; // Now nullable
Uint8List? localEngineerSignature; // Now nullable
TimerModel? timer;
//TODO need to check when api provided..
List<TimerModel>? timerModelList = [];
List<GasRefillTimer>? gasRefillTimer = [];
List<GasRefillAttachments>? gasRefillAttachments;
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id ?? 0;
map['gazRefillNo'] = "GR-${DateTime.now().toString().split(" ").first}";
map['expectedDate'] = expectedDate;
map['expectedTime'] = expectedTime;
map['startDate'] = startDate;
map['startTime'] = startTime;
map['endDate'] = endDate;
map['endTime'] = endTime;
map['engSignature'] = engSignature;
map['nurseSignature'] = nurseSignature;
map['workingHours'] = workingHours;
map['extensionNo'] = extensionNo;
map['employeeId'] = employeeId;
map['name'] = name;
map['createdDate'] = createdDate;
map['comment'] = comment;
//TODO need to check parameters here ...
if (gasRefillTimer != null) {
map['gasRefillTimer'] = gasRefillTimer?.map((v) => v.toJson()).toList();
}
if (gasRefillAttachments != null) {
map['gasRefillAttachments'] = gasRefillAttachments?.map((v) => v.toJson()).toList();
}
if (site != null) {
map['site'] = site?.toJson(addBuildings: false); // Use '?.' for null safety
}
if (building != null) {
map['building'] = building?.toJson(addFloor: false); // Use '?.' for null safety
}
if (floor != null) {
map['floor'] = floor?.toJson(addDepartments: false); // Use '?.' for null safety
}
if (department != null) {
map['department'] = department?.toJson(); // Use '?.' for null safety
}
if (assignedEmployee != null) {
map['assignedEmployee'] = assignedEmployee?.toJson(); // Use '?.' for null safety
}
if (status != null) {
map['status'] = status?.toJson(); // Use '?.' for null safety
}
if (gazRefillDetails != null) {
map['gazRefillDetails'] = gazRefillDetails!.map((v) => v.toJson()).toList(); // Use '!' since gazRefillDetails could be null
}
return map;
}
bool validate(BuildContext context) {
if (site == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.destinationSite}");
return false;
} else if (building == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.building}");
return false;
} else if (floor == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.floor}");
return false;
} else if (department == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.department}");
return false;
}
return true;
}
fromGasRefillModel(GasRefillModel model) {
id = model.id;
//userId = model.userId;
site = model.site;
gazRefillNo = model.gazRefillNo;
status = Lookup.fromStatus(model.status);
gazRefillDetails = model.gazRefillDetails;
building = model.building;
floor = model.floor;
department = model.department;
startDate = model.startDate;
endDate = model.endDate;
expectedDate = model.expectedDate;
comment = model.comment;
assignedEmployee = model.assignedEmployee;
localEngineerSignature = model.localEngineerSignature;
localNurseSignature = model.localNurseSignature;
engSignature = model.engSignature;
nurseSignature = model.nurseSignature;
workingHours = model.workingHours;
extensionNo = model.extensionNo;
employeeId = model.employeeId;
name = model.name;
createdDate = model.createdDate;
}
GasRefillModel copyWith({
num? id, // Parameters are now nullable
String? gazRefillNo,
String? expectedDate,
String? expectedTime,
String? startDate,
String? startTime,
String? endDate,
String? endTime,
String? engSignature,
String? nurseSignature,
double? workingHours,
num? extensionNo,
num? employeeId,
String? name,
String? createdDate,
Site? site,
Building? building,
Floor? floor,
Department? department,
AssignedEmployee? assignedEmployee,
Lookup? status,
String? comment,
List<GasRefillDetails>? gazRefillDetails,
List<GasRefillTimer>? gasRefillTimer,
TimerModel? timer,
}) =>
GasRefillModel(
id: id ?? this.id,
gazRefillNo: gazRefillNo ?? this.gazRefillNo,
expectedDate: expectedDate ?? this.expectedDate,
expectedTime: expectedTime ?? this.expectedTime,
startDate: startDate ?? this.startDate,
startTime: startTime ?? this.startTime,
endDate: endDate ?? this.endDate,
endTime: endTime ?? this.endTime,
engSignature: engSignature ?? this.engSignature,
nurseSignature: nurseSignature ?? this.nurseSignature,
workingHours: workingHours ?? this.workingHours,
site: site ?? this.site,
building: building ?? this.building,
floor: floor ?? this.floor,
department: department ?? this.department,
assignedEmployee: assignedEmployee ?? this.assignedEmployee,
status: status ?? this.status,
comment: comment ?? this.comment,
gazRefillDetails: gazRefillDetails ?? this.gazRefillDetails,
timer: timer ?? this.timer,
gasRefillTimer : gasRefillTimer ?? this.gasRefillTimer,
);
}
class GasRefillDetails {
GasRefillDetails({
this.id,
this.gasType,
this.cylinderType,
this.cylinderSize,
this.requestedQty,
this.deliverdQty,
this.selectedForEditing,
});
GasRefillDetails.fromJson(dynamic json) {
id = json['id'];
gasType = json['gasType'] != null ? Lookup.fromJson(json['gasType']) : null;
cylinderType = json['cylinderType'] != null ? Lookup.fromJson(json['cylinderType']) : null;
cylinderSize = json['cylinderSize'] != null ? Lookup.fromJson(json['cylinderSize']) : null;
requestedQty = json['requestedQty'];
deliverdQty = json['deliverdQty'];
}
num? id; // Now nullable
Lookup? gasType; // Now nullable
Lookup? cylinderType; // Now nullable
Lookup? cylinderSize; // Now nullable
num? requestedQty; // Now nullable
num? deliverdQty; // Now nullable
bool? selectedForEditing; // Now nullable
GasRefillDetails copyWith({
num? id, // Parameters are now nullable
Lookup? gasType,
Lookup? cylinderType,
Lookup? cylinderSize,
num? requestedQty,
num? deliverdQty,
bool? selectedForEditing,
}) =>
GasRefillDetails(
id: id ?? this.id,
gasType: gasType ?? this.gasType,
cylinderType: cylinderType ?? this.cylinderType,
cylinderSize: cylinderSize ?? this.cylinderSize,
requestedQty: requestedQty ?? this.requestedQty,
deliverdQty: deliverdQty ?? this.deliverdQty,
selectedForEditing: selectedForEditing ?? this.selectedForEditing,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id ?? 0;
if (gasType != null) {
map['gasType'] = gasType?.toJson(); // Use '?.' for null safety
}
if (cylinderType != null) {
map['cylinderType'] = cylinderType?.toJson(); // Use '?.' for null safety
}
if (cylinderSize != null) {
map['cylinderSize'] = cylinderSize?.toJson(); // Use '?.' for null safety
}
map['requestedQty'] = requestedQty;
map['deliverdQty'] = deliverdQty;
return map;
}
bool validate(BuildContext context) {
if (gasType == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.gasType}");
return false;
} else if (requestedQty == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.quantity}");
return false;
} else if (cylinderType == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderType}");
return false;
} else if (cylinderSize == null) {
Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.cylinderSize}");
return false;
}
return true;
}
}
class GasRefillTimer {
int? id;
String? startTime;
String? endTime;
dynamic workingHours;
GasRefillTimer({this.id, this.startTime, this.endTime, this.workingHours});
GasRefillTimer.fromJson(Map<String, dynamic> json) {
id = json['id'];
startTime = json['startDateTime'];
endTime = json['endDateTime'];
workingHours = json['workingHour'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['startDateTime'] = startTime;
data['endDateTime'] = endTime;
data['workingHour'] = workingHours;
return data;
}
}
class GasRefillAttachments {
int? id;
String? attachmentName;
GasRefillAttachments({this.id, this.attachmentName});
GasRefillAttachments.fromJson(Map<String, dynamic> json) {
id = json['id'];
attachmentName = json['attachmentName'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['id'] = id;
data['attachmentName'] = attachmentName;
return data;
}
}