Merge remote-tracking branch 'origin/main_design2.0' into main_design2.0

# Conflicts:
#	lib/main.dart
#	lib/new_views/common_widgets/app_floating_action_button.dart
#	lib/new_views/common_widgets/app_text_form_field.dart
#	lib/new_views/pages/new_gas_refill_request_page.dart
#	lib/new_views/pages/new_service_request_page.dart
#	lib/views/pages/device_transfer/device_transfer_details.dart
#	lib/views/pages/device_transfer/update_device_transfer.dart
#	lib/views/pages/user/requests/create_request.dart
#	lib/views/pages/user/requests/request_details.dart
#	lib/views/widgets/device_trancfer/device_transfer_info_section.dart
#	lib/views/widgets/device_trancfer/device_transfer_item.dart
#	lib/views/widgets/device_trancfer/device_transfer_list.dart
#	lib/views/widgets/equipment/auto_complete_devices_field.dart
#	lib/views/widgets/equipment/auto_complete_models_field.dart
#	lib/views/widgets/equipment/device_button.dart
#	lib/views/widgets/equipment/device_item.dart
#	lib/views/widgets/equipment/single_device_picker.dart
#	lib/views/widgets/pentry/auto_complete_fields/auto_complete_devices_field.dart
#	lib/views/widgets/requests/service_request_item.dart
#	lib/views/widgets/search/asset_transfer_search_dialog.dart
design_3.0_demo_module
Sikander Saleem 3 years ago
commit 47b863c479

@ -0,0 +1,3 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12 2.8125V4.6875H10.125V2.8125H12ZM10.125 13.8281V16.5H12V13.8281H10.125ZM15.75 24V22.125H13.875V20.25H12V24H15.75ZM19.5 10.0781H13.875V11.9531H19.5V10.0781ZM19.5 13.8281H22.125V11.9531H19.5V13.8281ZM19.5 16.5V18.375H24V13.8281H22.125V16.5H19.5ZM13.875 0H12V2.8125H13.875V0ZM12 8.4375H13.875V4.6875H12V6.5625H10.125V11.9531H12V8.4375ZM0 10.0781V13.8281H1.875V11.9531H4.6875V10.0781H0ZM13.875 13.8281V11.9531H12V13.8281H13.875ZM17.625 15.7031H19.5V13.8281H17.625V15.7031ZM22.125 11.9531H24V10.0781H22.125V11.9531ZM15.75 13.8281H13.875V16.5H12V18.375H15.75V13.8281ZM10.125 20.25H12V18.375H10.125V20.25ZM15.75 18.375V20.25H19.5V18.375H15.75ZM21.375 22.125V20.25H19.5V22.125H21.375ZM24 24V22.125H21.375V24H24ZM17.625 24H19.5V22.125H17.625V24ZM8.4375 11.9531V10.0781H6.5625V11.9531H4.6875V13.8281H10.125V11.9531H8.4375ZM8.4375 8.4375H0V0H8.4375V8.4375ZM6.5625 1.875H1.875V6.5625H6.5625V1.875ZM5.15625 3.28125H3.28125V5.15625H5.15625V3.28125ZM24 0V8.4375H15.5625V0H24ZM22.125 1.875H17.4375V6.5625H22.125V1.875ZM20.7188 3.28125H18.8438V5.15625H20.7188V3.28125ZM0 15.5625H8.4375V24H0V15.5625ZM1.875 22.125H6.5625V17.4375H1.875V22.125ZM3.28125 20.7188H5.15625V18.8438H3.28125V20.7188Z" fill="#163A51"/>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -8,7 +8,7 @@
"passwordLengthMessage" : "يجب أن تتكون كلمة السر من 6 خانات على الأقل",
"overview" : "نظرة عامة",
"myRequests" : "طلباتي",
"myAssets" : "ممتلكاتي",
"myAssets" : "أجهزتي",
"contactUs": "اتصل بنا",
"welcome" : "مرحبا،",
"openWhatsapp" : "الإنتقال الى الواتس اب",
@ -38,5 +38,9 @@
"floor" : "الطابق",
"youHaveToAddRequests" : "يجب إضافة طلبات",
"createdSuccessfully" : "إكتمل الطلب بنجاح",
"failedToCompleteRequest" : "فشل إتمام الطلب"
"failedToCompleteRequest" : "فشل إتمام الطلب",
"assetNo" : "رقم الجهاز",
"manufacture" : "صناعة",
"model" : "الطراز",
"serialNumber" : "الرقم التسلسلي"
}

@ -38,5 +38,9 @@
"floor" : "Floor",
"youHaveToAddRequests" : "You have to add requests",
"createdSuccessfully" : "Created successfully",
"failedToCompleteRequest" : "Failed to complete request"
"failedToCompleteRequest" : "Failed to complete request",
"assetNo" : "Asset No.",
"manufacture" : "Manufacture",
"model" : "Model",
"serialNumber" : "Serial Number"
}

@ -5,18 +5,16 @@ import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/device/device_transfer_search.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/user.dart';
import '../../../models/hospital.dart';
class DeviceTransferProvider extends ChangeNotifier {
class AssetTransferProvider extends ChangeNotifier {
// number of items call in each request
final pageItemNumber = 12;
DeviceTransferSearch deviceTransferSearch = DeviceTransferSearch();
AssetTransfer transferModel = AssetTransfer();
//reset provider data
void reset() {
@ -41,7 +39,7 @@ class DeviceTransferProvider extends ChangeNotifier {
bool nextPage = true;
// list of user requests
List<DeviceTransfer> items;
List<AssetTransfer> items;
// when requests in-process _loading = true
// done _loading = true
@ -73,7 +71,7 @@ class DeviceTransferProvider extends ChangeNotifier {
Map<String, dynamic> body = {};
body["pageNumber"] = (items?.length ?? 0) ~/ pageItemNumber + 1;
body["pageSize"] = pageItemNumber;
body.addAll(deviceTransferSearch.toMap());
body.addAll(transferModel.toJson());
response = await ApiManager.instance.post(URLs.getDeviceTransfer, body: body);
@ -81,7 +79,7 @@ class DeviceTransferProvider extends ChangeNotifier {
if (stateCode >= 200 && stateCode < 300) {
// client's request was successfully received
List listJson = json.decode(response.body)["data"];
List<DeviceTransfer> itemsPage = listJson.map((request) => DeviceTransfer.fromJson(request)).toList();
List<AssetTransfer> itemsPage = listJson.map((request) => AssetTransfer.fromJson(request)).toList();
items ??= [];
items.addAll(itemsPage.toSet().toList());
notifyListeners();
@ -102,7 +100,7 @@ class DeviceTransferProvider extends ChangeNotifier {
}
}
Future<DeviceTransfer> getRequestById({int assetTransferId}) async {
Future<AssetTransfer> getRequestById({int assetTransferId}) async {
Response response;
try {
response = await ApiManager.instance.get(
@ -110,7 +108,7 @@ class DeviceTransferProvider extends ChangeNotifier {
enableToastMessage: false,
);
if (response.statusCode >= 200 && response.statusCode < 300) {
return DeviceTransfer.fromJson(json.decode(response.body)["data"]);
return AssetTransfer.fromJson(json.decode(response.body)["data"]);
}
return null;
} catch (error) {
@ -122,27 +120,27 @@ class DeviceTransferProvider extends ChangeNotifier {
Future<int> createRequest({
@required String host,
@required User user,
@required DeviceTransfer model,
@required AssetTransfer model,
}) async {
Map<String, dynamic> body = {
"id": 0,
"assetId": model.device.id ?? "",
// "assetId": model.device.id ?? "",
"destSiteId": hospital.id ?? "",
"destDepartmentId": department.id ?? "",
"senderSiteId": model.sender.client.id ?? "",
// "senderSiteId": model.sender.client.id ?? "",
// "transferNo": 0,
// "transferCode": "string",
"destBuildingId": building?.id,
"destFloorId": floor.id,
"destRoom": room,
/////
"senderBuildingId": model.device.destBuildingId,
"senderFloorId": model.device.destFloorId,
"senderDepartmentId": model.device.destDepartmentId,
"senderRoom": model.device.destRoom,
if (model?.sender?.attachments?.isNotEmpty ?? false)
"senderAttachments":
model?.sender?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
// "senderBuildingId": model.device.destBuildingId,
// "senderFloorId": model.device.destFloorId,
// "senderDepartmentId": model.device.destDepartmentId,
// "senderRoom": model.device.destRoom,
// if (model?.sender?.attachments?.isNotEmpty ?? false)
// "senderAttachments":
// model?.sender?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
// "senderAssignedEmployeeId": "string",
// "senderMachineStatusId": 0,
// "senderComment": "string",
@ -167,7 +165,7 @@ class DeviceTransferProvider extends ChangeNotifier {
stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
if (items != null) {
items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
items.insert(0, AssetTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0]));
reset();
notifyListeners();
}
@ -183,81 +181,81 @@ class DeviceTransferProvider extends ChangeNotifier {
@required User user,
@required bool isSender,
@required int requestId,
@required DeviceTransfer oldModel,
@required DeviceTransferInfo newModel,
@required AssetTransfer oldModel,
@required AssetTransfer newModel,
}) async {
Map<String, dynamic> body = {
"id": oldModel.id,
"assetId": oldModel.device.id ?? "",
"senderSiteId": oldModel.sender.client.id,
"destSiteId": oldModel.receiver.client.id,
"destDepartmentId": oldModel.receiver.department.id,
// "assetId": oldModel.device.id ?? "",
// "senderSiteId": oldModel.sender.client.id,
// "destSiteId": oldModel.receiver.client.id,
// "destDepartmentId": oldModel.receiver.department.id,
};
if (isSender) {
body.addAll({
"senderSiteId": newModel.client.id,
"senderDepartmentId": newModel.department.id,
"senderAssignedEmployeeId": newModel.userId,
"senderMachineStatusId": newModel.status.id,
"senderComment": newModel.comment,
"senderWorkingHours": newModel.workingHours,
"senderStartDate": newModel.timer?.startAt?.toIso8601String(),
"senderEndDate": newModel.timer?.endAt?.toIso8601String(),
"senderTravelingHours": newModel.travelingHours,
"senderEngSignature": newModel.engSignature,
if (newModel?.attachments?.isNotEmpty ?? false)
"senderAttachments":
newModel?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
"destSiteId": oldModel.receiver.client?.id,
"destDepartmentId": oldModel.receiver.department?.id,
"destBuildingId": oldModel.device?.destBuildingId,
"destFloorId": oldModel.device?.destFloorId,
"destRoom": oldModel.device?.destRoom,
"receiverAssignedEmployeeId": oldModel.receiver.userId,
"receiverMachineStatusId": oldModel.receiver.status.id ?? "",
"receiverComment": oldModel.receiver.comment,
"receiverWorkingHours": oldModel.receiver.workingHours,
"receiverStartDate": oldModel.receiver.timer?.startAt?.toIso8601String(),
"receiverEndDate": oldModel.receiver.timer?.endAt?.toIso8601String(),
"receiverTravelingHours": oldModel.receiver?.travelingHours,
"receiverEngSignature": oldModel.receiver?.engSignature,
if (oldModel.receiver?.attachments?.isNotEmpty ?? false)
"receiverAttachments": oldModel.receiver?.attachments
?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})
?.toList(),
// "senderSiteId": newModel.client.id,
// "senderDepartmentId": newModel.department.id,
// "senderAssignedEmployeeId": newModel.userId,
// "senderMachineStatusId": newModel.status.id,
// "senderComment": newModel.comment,
// "senderWorkingHours": newModel.workingHours,
// "senderStartDate": newModel.timer?.startAt?.toIso8601String(),
// "senderEndDate": newModel.timer?.endAt?.toIso8601String(),
// "senderTravelingHours": newModel.travelingHours,
// "senderEngSignature": newModel.engSignature,
// if (newModel?.attachments?.isNotEmpty ?? false)
// "senderAttachments":
// newModel?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
// "destSiteId": oldModel.receiver.client?.id,
// "destDepartmentId": oldModel.receiver.department?.id,
// "destBuildingId": oldModel.device?.destBuildingId,
// "destFloorId": oldModel.device?.destFloorId,
// "destRoom": oldModel.device?.destRoom,
// "receiverAssignedEmployeeId": oldModel.receiver.userId,
// "receiverMachineStatusId": oldModel.receiver.status.id ?? "",
// "receiverComment": oldModel.receiver.comment,
// "receiverWorkingHours": oldModel.receiver.workingHours,
// "receiverStartDate": oldModel.receiver.timer?.startAt?.toIso8601String(),
// "receiverEndDate": oldModel.receiver.timer?.endAt?.toIso8601String(),
// "receiverTravelingHours": oldModel.receiver?.travelingHours,
// "receiverEngSignature": oldModel.receiver?.engSignature,
// if (oldModel.receiver?.attachments?.isNotEmpty ?? false)
// "receiverAttachments": oldModel.receiver?.attachments
// ?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})
// ?.toList(),
});
} else {
body.addAll({
"senderSiteId": oldModel.sender.client.id,
"senderDepartmentId": oldModel.sender.department.id,
"senderAssignedEmployeeId": oldModel.sender.userId,
"senderMachineStatusId": oldModel.sender.status.id,
"senderComment": oldModel.sender.comment,
"senderWorkingHours": oldModel.sender.workingHours,
"senderStartDate": oldModel.sender.timer?.startAt?.toIso8601String(),
"senderEndDate": oldModel.sender.timer?.endAt?.toIso8601String(),
"senderTravelingHours": oldModel.sender?.travelingHours,
"senderEngSignature": oldModel.sender?.engSignature,
if (oldModel.sender?.attachments?.isNotEmpty ?? false)
"senderAttachments":
oldModel.sender?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
"destSiteId": newModel.client?.id,
"destDepartmentId": newModel.department?.id,
"destBuildingId": oldModel.device?.destBuildingId,
"destFloorId": oldModel.device?.destFloorId,
"destRoom": oldModel.device?.destRoom,
"receiverAssignedEmployeeId": newModel.userId,
"receiverMachineStatusId": newModel.status?.id ?? "",
"receiverComment": newModel.comment,
"receiverWorkingHours": newModel.workingHours,
"receiverStartDate": newModel.timer?.startAt?.toIso8601String(),
"receiverEndDate": newModel.timer?.endAt?.toIso8601String(),
"receiverTravelingHours": newModel.travelingHours,
"receiverEngSignature": newModel.engSignature,
if (newModel?.attachments?.isNotEmpty ?? false)
"receiverAttachments":
newModel?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
// "senderSiteId": oldModel.sender.client.id,
// "senderDepartmentId": oldModel.sender.department.id,
// "senderAssignedEmployeeId": oldModel.sender.userId,
// "senderMachineStatusId": oldModel.sender.status.id,
// "senderComment": oldModel.sender.comment,
// "senderWorkingHours": oldModel.sender.workingHours,
// "senderStartDate": oldModel.sender.timer?.startAt?.toIso8601String(),
// "senderEndDate": oldModel.sender.timer?.endAt?.toIso8601String(),
// "senderTravelingHours": oldModel.sender?.travelingHours,
// "senderEngSignature": oldModel.sender?.engSignature,
// if (oldModel.sender?.attachments?.isNotEmpty ?? false)
// "senderAttachments":
// oldModel.sender?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
// "destSiteId": newModel.client?.id,
// "destDepartmentId": newModel.department?.id,
// "destBuildingId": oldModel.device?.destBuildingId,
// "destFloorId": oldModel.device?.destFloorId,
// "destRoom": oldModel.device?.destRoom,
// "receiverAssignedEmployeeId": newModel.userId,
// "receiverMachineStatusId": newModel.status?.id ?? "",
// "receiverComment": newModel.comment,
// "receiverWorkingHours": newModel.workingHours,
// "receiverStartDate": newModel.timer?.startAt?.toIso8601String(),
// "receiverEndDate": newModel.timer?.endAt?.toIso8601String(),
// "receiverTravelingHours": newModel.travelingHours,
// "receiverEngSignature": newModel.engSignature,
// if (newModel?.attachments?.isNotEmpty ?? false)
// "receiverAttachments":
// newModel?.attachments?.map((file) => {"attachmentName": _isLocalUrl(file.path) ? ("${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}") : file.path})?.toList(),
});
}
//body.addAll(newModel.toJson(isSender));
@ -267,7 +265,7 @@ class DeviceTransferProvider extends ChangeNotifier {
response = await ApiManager.instance.put(URLs.updateDeviceTransfer, body: body);
print(response.body);
print("${newModel.engSignature}.png");
// print("${newModel.engSignature}.png");
// response = await post(
// Uri.parse("$host${URLs.updateDeviceTransfer}/$requestId"),
// body: body,

@ -4,11 +4,12 @@ import 'package:flutter/cupertino.dart';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/models/user.dart';
class DevicesProvider extends ChangeNotifier {
import '../../../models/device/device.dart';
class AssetProvider extends ChangeNotifier {
//reset provider data
void reset() {
_devices = [];
@ -76,10 +77,10 @@ class DevicesProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List equipmentListJson = json.decode(response.body)["data"];
var dList = equipmentListJson.map<Device>((device) => Device.fromJson(device, startKeyWithDest: false)).toList();
var dList = equipmentListJson.map<Device>((asset) => Device.fromJson(asset)).toList();
try {
if (isQr) {
dList = dList.where((element) => number?.toLowerCase() == element?.number?.toLowerCase())?.toList() ?? [];
dList = dList.where((element) => number?.toLowerCase() == element?.assetNumber?.toLowerCase())?.toList() ?? [];
}
} catch (e) {
print(e);
@ -125,8 +126,8 @@ class DevicesProvider extends ChangeNotifier {
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List equipmentListJson = json.decode(response.body)["data"];
page = equipmentListJson.map((device) => Device.fromJson(device, startKeyWithDest: false)).toList();
_devices.addAll(equipmentListJson.map<Device>((device) => Device.fromJson(device, startKeyWithDest: false)).toList());
page = equipmentListJson.map((asset) => Device.fromJson(asset)).toList();
_devices.addAll(equipmentListJson.map<Device>((asset) => Device.fromJson(asset)).toList());
notifyListeners();
}
return page;

@ -107,13 +107,13 @@ class GasRefillProvider extends ChangeNotifier {
if (timer?.endAt != null) "endTime": timer.endAt.toIso8601String(),
"department": model.department?.toJson(),
"GazRefillNo": "GR-${DateTime.now().toString().split(" ").first}",
"status": model.status?.toMap(),
"status": model.status?.toJson(),
};
body["gazRefillDetails"] = model.gazRefillDetails
.map((model) => {
"gasType": model.gasType.toMap(),
"cylinderSize": model.cylinderSize.toMap(),
"cylinderType": model.cylinderType.toMap(),
"gasType": model.gasType.toJson(),
"cylinderSize": model.cylinderSize.toJson(),
"cylinderType": model.cylinderType.toJson(),
"requestedQty": model.requestedQty,
})
.toList();
@ -144,7 +144,7 @@ class GasRefillProvider extends ChangeNotifier {
Map<String, dynamic> body = {
"id": newModel.id,
"gazRefillNo": newModel.title ?? "",
"status": newModel.status.toMap(),
"status": newModel.status.toJson(),
//"expectedDate": newModel.expectedDate?.toIso8601String(),
"expectedTime": newModel.expectedDate?.toIso8601String(),
if (timer?.startAt != null) "startDate": timer.startAt.toIso8601String(),
@ -164,9 +164,9 @@ class GasRefillProvider extends ChangeNotifier {
body["gazRefillDetails"] = newModel.details
.map((model) => {
"gasType": model.type.toMap(),
"cylinderSize": model.cylinderSize.toMap(),
"cylinderType": model.cylinderType.toMap(),
"gasType": model.type.toJson(),
"cylinderSize": model.cylinderSize.toJson(),
"cylinderType": model.cylinderType.toJson(),
"requestedQty": model.requestedQuantity,
"deliverdQty": model.deliveredQuantity,
})

@ -146,10 +146,10 @@ class ServiceRequestsProvider extends ChangeNotifier {
"client": user.clientId,
"callComments": serviceRequest.callComments,
if (serviceRequest.devicePhotos.isNotEmpty) "attachmentsCallRequest": serviceRequest.devicePhotos.map((e) => {"name": e}).toList(),
"priority": serviceRequest.priority?.toMap(),
"defectType": serviceRequest.defectType?.toMap(),
"typeofRequest": serviceRequest.type?.toMap(),
"requestedThrough": serviceRequest.requestedThrough?.toMap(),
"priority": serviceRequest.priority?.toJson(),
"defectType": serviceRequest.defectType?.toJson(),
"typeofRequest": serviceRequest.type?.toJson(),
"requestedThrough": serviceRequest.requestedThrough?.toJson(),
"reviewComment": null,
if (serviceRequest.audio != null) "voiceNote": serviceRequest.audio,
"callSiteContactPerson": [
@ -188,7 +188,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
} else {
if (data["data"] != null && data["data"] == true) {
// serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
// serviceRequests.insert(0, ServiceRequest.fromJson(data[0]));
}
}
}
@ -239,10 +239,10 @@ class ServiceRequestsProvider extends ChangeNotifier {
"callCreatedBy": serviceRequest['callCreatedBy'],
"requestedDate": request.date ?? "",
"requestedTime": request.date ?? "",
"priority": request.priority?.toMap(),
"defectType": request.defectType?.toMap(),
"typeofRequest": request.type?.toMap(),
"requestedThrough": request.requestedThrough?.toMap(),
"priority": request.priority?.toJson(),
"defectType": request.defectType?.toJson(),
"typeofRequest": request.type?.toJson(),
"requestedThrough": request.requestedThrough?.toJson(),
"voiceNote": request.audio,
"assets": request.deviceId == null ? [] : [request.deviceId],
"attachmentsCallRequest": request.devicePhotos?.map((e) => {"name": e})?.toList(),
@ -272,8 +272,8 @@ class ServiceRequestsProvider extends ChangeNotifier {
"value": request.statusValue,
},
"callLastSituation": null,
"firstAction": request.firstAction?.toMap(),
"loanAvailablity": request.loanAvailability?.toMap(),
"firstAction": request.firstAction?.toJson(),
"loanAvailablity": request.loanAvailability?.toJson(),
"comments": request.reviewComment,
"firstActionDate": date?.toIso8601String(),
"visitDate": date?.toIso8601String() ?? "",
@ -313,7 +313,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
"callRequest": {
"id": request.id,
},
"assetType": report.assetType?.toMap(),
"assetType": report.assetType?.toJson(),
"assignedEmployee": {"id": report.engineer?.id, "name": report.engineer?.name ?? ""},
"visitDate": report.returnToService?.toIso8601String() ?? "",
// "assistantEmployees": [
@ -333,10 +333,10 @@ class ServiceRequestsProvider extends ChangeNotifier {
"contactUserId": user.userID,
}
],
"calllastSituation": report.callLastSituation?.toMap(),
"calllastSituation": report.callLastSituation?.toJson(),
"currentSituation": null,
"repairLocation": report.repairLocation?.toMap(),
"reason": report.reason?.toMap(),
"repairLocation": report.repairLocation?.toJson(),
"reason": report.reason?.toJson(),
"startofWorkTime": report.timer?.startAt?.toIso8601String() ?? "",
"endofWorkTime": report.timer?.endAt?.toIso8601String() ?? "",
"workingHours": report?.workingHours,
@ -355,7 +355,7 @@ class ServiceRequestsProvider extends ChangeNotifier {
"reviewComment": "",
"comment": report.comment,
"attachmentsWorkOrder": request.devicePhotos?.map((e) => {"name": e})?.toList(),
"equipmentStatus": report.equipmentStatus?.toMap(),
"equipmentStatus": report.equipmentStatus?.toJson(),
"suppEngineerWorkOrders": null,
"engSignature": report.signatureEngineer,
"nurseSignature": report.signatureNurse,
@ -671,14 +671,14 @@ class ServiceRequestsProvider extends ChangeNotifier {
if (search.assetType != null) "assetSerialNo": search.assetType?.name,
if (search.workOrderNo != null) "workOrderNo": search.workOrderNo,
if (search.id != null) "workOrderNo": search.id?.toString(),
if (search.calllastSituation != null) "callslastSituationWO": search.calllastSituation.toMap(),
if (search.calllastSituation != null) "callslastSituationWO": search.calllastSituation.toJson(),
if (search.assignedEmployee != null)
"assignedEmployees": [
search.assignedEmployee.id,
],
// "statusWO": [],
if (site?.isNotEmpty ?? false) "site": site,
if (search.visitDate != null && dateOperator != null) "visitDateSymbol": dateOperator?.toMap(),
if (search.visitDate != null && dateOperator != null) "visitDateSymbol": dateOperator?.toJson(),
if (search.visitDate != null && dateOperator != null) "visitDateFrom": search.visitDate,
};
print(body);

@ -15,8 +15,8 @@ extension WidgetExtensions on Widget {
Widget paddingAll(double value) => Padding(padding: EdgeInsets.all(value), child: this);
Widget paddingOnly({int left = 0, int right = 0, int top = 0, int bottom = 0}) =>
Padding(padding: EdgeInsets.only(left: left.toScreenWidth, right: right.toScreenWidth, top: top.toScreenHeight, bottom: bottom.toScreenHeight), child: this);
Widget paddingOnly({int start = 0, int end = 0, int top = 0, int bottom = 0}) =>
Padding(padding: EdgeInsetsDirectional.only(start: start.toScreenWidth, end: end.toScreenWidth, top: top.toScreenHeight, bottom: bottom.toScreenHeight), child: this);
Widget toExpanded({int flex = 1}) => Expanded(flex: flex, child: this);
}

@ -7,8 +7,8 @@ import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:localization/localization.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/departments_provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/gas_refill_provider.dart';
import 'package:test_sa/controllers/providers/api/hospitals_provider.dart';
@ -47,7 +47,6 @@ import 'package:test_sa/controllers/providers/api/status_drop_down/service_reqes
import 'package:test_sa/new_views/app_style/app_themes.dart';
import 'package:test_sa/new_views/pages/land_page/land_page.dart';
import 'package:test_sa/new_views/pages/login_page.dart';
import 'package:test_sa/new_views/pages/new_service_request_page.dart';
import 'package:test_sa/new_views/pages/new_transfer_request_page.dart';
import 'package:test_sa/new_views/pages/splash_page.dart';
import 'package:test_sa/providers/department_provider.dart';
@ -122,7 +121,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => DepartmentProvider()),
ChangeNotifierProvider(create: (_) => SiteProvider()),
ChangeNotifierProvider(create: (_) => HospitalsProvider()),
ChangeNotifierProvider(create: (_) => DevicesProvider()),
ChangeNotifierProvider(create: (_) => AssetProvider()),
ChangeNotifierProvider(create: (_) => ServiceRequestsProvider()),
ChangeNotifierProvider(create: (_) => DepartmentsProvider()),
ChangeNotifierProvider(create: (_) => NotificationsProvider()),
@ -140,7 +139,7 @@ class MyApp extends StatelessWidget {
ChangeNotifierProvider(create: (_) => GasStatusProvider()),
ChangeNotifierProvider(create: (_) => GasTypesProvider()),
ChangeNotifierProvider(create: (_) => GasRefillProvider()),
ChangeNotifierProvider(create: (_) => DeviceTransferProvider()),
ChangeNotifierProvider(create: (_) => AssetTransferProvider()),
ChangeNotifierProvider(create: (_) => AssignedToProvider()),
ChangeNotifierProvider(create: (_) => PentryTaskStatusProvider()),
ChangeNotifierProvider(create: (_) => PentryVisitStatusProvider()),
@ -180,16 +179,15 @@ class MyApp extends StatelessWidget {
LoginPage.routeName: (_) => const LoginPage(),
old.LandPage.id: (_) => const old.LandPage(),
LandPage.routeName: (_) => const LandPage(),
NewServiceRequestPage.routeName: (_) => const NewServiceRequestPage(),
NewGasRefillRequestPage.routeName: (_) => const NewGasRefillRequestPage(),
NewTransferRequestPage.routeName: (_) => const NewTransferRequestPage(),
ServiceRequestsPage.id: (_) => ServiceRequestsPage(),
ReportIssuesPage.id: (_) => const ReportIssuesPage(),
RequestGasRefill.id: (_) => const RequestGasRefill(),
CreateRequestPage.id: (_) => const CreateRequestPage(),
SingleHospitalPicker.id: (_) => SingleHospitalPicker(),
SingleDevicePicker.id: (_) => SingleDevicePicker(),
SingleDepartmentPicker.id: (_) => SingleDepartmentPicker(),
ServiceRequestsPage.id: (_) => ServiceRequestsPage(),
NotificationsPage.id: (_) => NotificationsPage(),
FutureRequestServiceDetails.id: (_) => FutureRequestServiceDetails(),
PreventiveMaintenanceVisitsPage.id: (_) => PreventiveMaintenanceVisitsPage(),

@ -63,6 +63,7 @@ class CallRequestForWorkOrder {
}
}
@Deprecated("")
class Asset {
int id;
String assetSerialNo;

@ -0,0 +1,223 @@
import 'asset_transfer_attachment.dart';
class AssetTransfer {
AssetTransfer({
this.id,
this.transferNo,
this.transferCode,
this.assetId,
this.destSiteId,
this.destBuildingId,
this.destFloorId,
this.destDepartmentId,
this.destRoom,
this.senderSiteId,
this.senderBuildingId,
this.senderFloorId,
this.senderDepartmentId,
this.senderRoom,
this.senderAssignedEmployeeId,
this.senderMachineStatusId,
this.senderComment,
this.senderStartDate,
this.senderEndDate,
this.senderWorkingHours,
this.senderTravelingHours,
this.senderEngSignature,
this.senderAttachments,
this.receiverAssignedEmployeeId,
this.receiverMachineStatusId,
this.receiverComment,
this.receiverStartDate,
this.receiverEndDate,
this.receiverWorkingHours,
this.receiverTravelingHours,
this.receiverEngSignature,
this.receiverAttachments,
});
AssetTransfer.fromJson(dynamic json) {
id = json['id'];
transferNo = json['transferNo'];
transferCode = json['transferCode'];
assetId = json['assetId'];
destSiteId = json['destSiteId'];
destBuildingId = json['destBuildingId'];
destFloorId = json['destFloorId'];
destDepartmentId = json['destDepartmentId'];
destRoom = json['destRoom'];
senderSiteId = json['senderSiteId'];
senderBuildingId = json['senderBuildingId'];
senderFloorId = json['senderFloorId'];
senderDepartmentId = json['senderDepartmentId'];
senderRoom = json['senderRoom'];
senderAssignedEmployeeId = json['senderAssignedEmployeeId'];
senderMachineStatusId = json['senderMachineStatusId'];
senderComment = json['senderComment'];
senderStartDate = json['senderStartDate'];
senderEndDate = json['senderEndDate'];
senderWorkingHours = json['senderWorkingHours'];
senderTravelingHours = json['senderTravelingHours'];
senderEngSignature = json['senderEngSignature'];
if (json['senderAttachments'] != null) {
senderAttachments = [];
json['senderAttachments'].forEach((v) {
senderAttachments.add(AssetTransferAttachment.fromJson(v));
});
}
receiverAssignedEmployeeId = json['receiverAssignedEmployeeId'];
receiverMachineStatusId = json['receiverMachineStatusId'];
receiverComment = json['receiverComment'];
receiverStartDate = json['receiverStartDate'];
receiverEndDate = json['receiverEndDate'];
receiverWorkingHours = json['receiverWorkingHours'];
receiverTravelingHours = json['receiverTravelingHours'];
receiverEngSignature = json['receiverEngSignature'];
if (json['receiverAttachments'] != null) {
receiverAttachments = [];
json['receiverAttachments'].forEach((v) {
receiverAttachments.add(AssetTransferAttachment.fromJson(v));
});
}
}
num id;
num transferNo;
String transferCode;
num assetId;
num destSiteId;
num destBuildingId;
num destFloorId;
num destDepartmentId;
String destRoom;
num senderSiteId;
num senderBuildingId;
num senderFloorId;
num senderDepartmentId;
String senderRoom;
String senderAssignedEmployeeId;
num senderMachineStatusId;
String senderComment;
String senderStartDate;
String senderEndDate;
String senderWorkingHours;
String senderTravelingHours;
String senderEngSignature;
List<AssetTransferAttachment> senderAttachments;
String receiverAssignedEmployeeId;
num receiverMachineStatusId;
String receiverComment;
String receiverStartDate;
String receiverEndDate;
String receiverWorkingHours;
String receiverTravelingHours;
String receiverEngSignature;
List<AssetTransferAttachment> receiverAttachments;
AssetTransfer copyWith({
num id,
num transferNo,
String transferCode,
num assetId,
num destSiteId,
num destBuildingId,
num destFloorId,
num destDepartmentId,
String destRoom,
num senderSiteId,
num senderBuildingId,
num senderFloorId,
num senderDepartmentId,
String senderRoom,
String senderAssignedEmployeeId,
num senderMachineStatusId,
String senderComment,
String senderStartDate,
String senderEndDate,
String senderWorkingHours,
String senderTravelingHours,
String senderEngSignature,
List<AssetTransferAttachment> senderAttachments,
String receiverAssignedEmployeeId,
num receiverMachineStatusId,
String receiverComment,
String receiverStartDate,
String receiverEndDate,
String receiverWorkingHours,
String receiverTravelingHours,
String receiverEngSignature,
List<AssetTransferAttachment> receiverAttachments,
}) =>
AssetTransfer(
id: id ?? this.id,
transferNo: transferNo ?? this.transferNo,
transferCode: transferCode ?? this.transferCode,
assetId: assetId ?? this.assetId,
destSiteId: destSiteId ?? this.destSiteId,
destBuildingId: destBuildingId ?? this.destBuildingId,
destFloorId: destFloorId ?? this.destFloorId,
destDepartmentId: destDepartmentId ?? this.destDepartmentId,
destRoom: destRoom ?? this.destRoom,
senderSiteId: senderSiteId ?? this.senderSiteId,
senderBuildingId: senderBuildingId ?? this.senderBuildingId,
senderFloorId: senderFloorId ?? this.senderFloorId,
senderDepartmentId: senderDepartmentId ?? this.senderDepartmentId,
senderRoom: senderRoom ?? this.senderRoom,
senderAssignedEmployeeId: senderAssignedEmployeeId ?? this.senderAssignedEmployeeId,
senderMachineStatusId: senderMachineStatusId ?? this.senderMachineStatusId,
senderComment: senderComment ?? this.senderComment,
senderStartDate: senderStartDate ?? this.senderStartDate,
senderEndDate: senderEndDate ?? this.senderEndDate,
senderWorkingHours: senderWorkingHours ?? this.senderWorkingHours,
senderTravelingHours: senderTravelingHours ?? this.senderTravelingHours,
senderEngSignature: senderEngSignature ?? this.senderEngSignature,
senderAttachments: senderAttachments ?? this.senderAttachments,
receiverAssignedEmployeeId: receiverAssignedEmployeeId ?? this.receiverAssignedEmployeeId,
receiverMachineStatusId: receiverMachineStatusId ?? this.receiverMachineStatusId,
receiverComment: receiverComment ?? this.receiverComment,
receiverStartDate: receiverStartDate ?? this.receiverStartDate,
receiverEndDate: receiverEndDate ?? this.receiverEndDate,
receiverWorkingHours: receiverWorkingHours ?? this.receiverWorkingHours,
receiverTravelingHours: receiverTravelingHours ?? this.receiverTravelingHours,
receiverEngSignature: receiverEngSignature ?? this.receiverEngSignature,
receiverAttachments: receiverAttachments ?? this.receiverAttachments,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['transferNo'] = transferNo;
map['transferCode'] = transferCode;
map['assetId'] = assetId;
map['destSiteId'] = destSiteId;
map['destBuildingId'] = destBuildingId;
map['destFloorId'] = destFloorId;
map['destDepartmentId'] = destDepartmentId;
map['destRoom'] = destRoom;
map['senderSiteId'] = senderSiteId;
map['senderBuildingId'] = senderBuildingId;
map['senderFloorId'] = senderFloorId;
map['senderDepartmentId'] = senderDepartmentId;
map['senderRoom'] = senderRoom;
map['senderAssignedEmployeeId'] = senderAssignedEmployeeId;
map['senderMachineStatusId'] = senderMachineStatusId;
map['senderComment'] = senderComment;
map['senderStartDate'] = senderStartDate;
map['senderEndDate'] = senderEndDate;
map['senderWorkingHours'] = senderWorkingHours;
map['senderTravelingHours'] = senderTravelingHours;
map['senderEngSignature'] = senderEngSignature;
if (senderAttachments != null) {
map['senderAttachments'] = senderAttachments.map((v) => v.toJson()).toList();
}
map['receiverAssignedEmployeeId'] = receiverAssignedEmployeeId;
map['receiverMachineStatusId'] = receiverMachineStatusId;
map['receiverComment'] = receiverComment;
map['receiverStartDate'] = receiverStartDate;
map['receiverEndDate'] = receiverEndDate;
map['receiverWorkingHours'] = receiverWorkingHours;
map['receiverTravelingHours'] = receiverTravelingHours;
map['receiverEngSignature'] = receiverEngSignature;
if (receiverAttachments != null) {
map['receiverAttachments'] = receiverAttachments.map((v) => v.toJson()).toList();
}
return map;
}
}

@ -0,0 +1,27 @@
class AssetTransferAttachment {
AssetTransferAttachment({
this.id,
this.attachmentName,
});
AssetTransferAttachment.fromJson(dynamic json) {
id = json['id'];
attachmentName = json['attachmentName'];
}
num id;
String attachmentName;
AssetTransferAttachment copyWith({
num id,
String attachmentName,
}) =>
AssetTransferAttachment(
id: id ?? this.id,
attachmentName: attachmentName ?? this.attachmentName,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['attachmentName'] = attachmentName;
return map;
}
}

@ -0,0 +1,43 @@
import 'asset_transfer.dart';
import 'device.dart';
class AssetTransferSearch extends AssetTransfer {
Device asset;
int pageNumber = 10, pageSize;
bool mostRecent;
Map<String, dynamic> toSearch() {
final map = <String, dynamic>{};
map['pageSize'] = pageSize;
map['pageNumber'] = pageNumber;
map['id'] = id;
map['transferNo'] = transferNo;
map['transferCode'] = transferCode;
map['assetId'] = assetId;
map['destSiteId'] = destSiteId;
map['destBuildingId'] = destBuildingId;
map['destFloorId'] = destFloorId;
map['destDepartmentId'] = destDepartmentId;
map['destRoom'] = destRoom;
map['senderSiteId'] = senderSiteId;
map['senderBuildingId'] = senderBuildingId;
map['senderFloorId'] = senderFloorId;
map['senderDepartmentId'] = senderDepartmentId;
map['senderRoom'] = senderRoom;
map['senderAssignedEmployeeId'] = senderAssignedEmployeeId;
map['receiverAssignedEmployeeId'] = receiverAssignedEmployeeId;
map['mostRecent'] = mostRecent;
map['assetNumber'] = asset?.assetNumber;
map['assetSerialNo'] = asset?.assetSerialNo;
map['siteName'] = asset?.site?.custName;
/// TODO : the below parameters need to be discussed
// map['relatedToEmployeeId'] = "";
// map['assetGroup'] = {
// "id": 1,
// "name": "",
// "code": "",
// };
return map;
}
}

@ -1,89 +1,411 @@
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/device/supplier.dart';
import 'package:test_sa/models/device/technical_guidance_book.dart';
import 'package:test_sa/models/lookup.dart';
import 'model.dart';
import '../new_models/building.dart';
import '../new_models/department.dart';
import '../new_models/floor.dart';
import '../new_models/site.dart';
import 'model_definition.dart';
class Device {
int id;
String serialNumber;
String number;
String assetName;
String destBuildingName;
int destBuildingId;
String destDepartmentName;
int destDepartmentId;
String destRoom;
String destFloor;
int destFloorId;
String destSiteName;
Device({
this.id,
this.assetSerialNo,
this.systemID,
this.assetNumber,
this.modelDefinition,
this.supplier,
this.ipAddress,
this.macAddress,
this.portNumber,
this.assetReplace,
this.oldAsset,
this.isParent,
this.parentAsset,
this.assetType,
this.site,
this.building,
this.floor,
this.department,
this.room,
this.testsDay,
this.purchasingPrice,
this.nbv,
this.currency,
this.poNo,
this.invoiceNumber,
this.invoiceDate,
this.replacementDate,
this.originDepartment,
this.originSite,
this.budgetYear,
this.lastPOPrice,
this.commissioningStatus,
this.productionDate,
this.edd,
this.technicalInspectionDate,
this.deliveryInspectionDate,
this.endUserAcceptanceDate,
this.receivingCommittee,
this.siteWarrantyMonths,
this.extendedWarrantyMonths,
this.remainderWarrantyMonths,
this.eomWarrantyMonthsNo,
this.warrantyValue,
this.warrantyEndDate,
this.warrantyContractConditions,
this.technicalGuidanceBooks,
this.comment,
this.tagCode,
});
// String brand;
// String model;
Device.fromJson(dynamic json) {
id = json['id'];
assetSerialNo = json['assetSerialNo'];
systemID = json['systemID'];
assetNumber = json['assetNumber'];
modelDefinition = json['modelDefinition'] != null ? ModelDefinition.fromJson(json['modelDefinition']) : null;
supplier = json['supplier'] != null ? Supplier.fromJson(json['supplier']) : null;
ipAddress = json['ipAddress'];
macAddress = json['macAddress'];
portNumber = json['portNumber'];
assetReplace = json['assetReplace'] != null ? Lookup.fromJson(json['assetReplace']) : null;
oldAsset = json['oldAsset'] != null ? AssetInfo.fromJson(json['oldAsset']) : null;
isParent = json['isParent'] != null ? Lookup.fromJson(json['isParent']) : null;
parentAsset = json['parentAsset'] != null ? AssetInfo.fromJson(json['parentAsset']) : null;
assetType = json['assetType'] != null ? Lookup.fromJson(json['assetType']) : null;
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;
room = json['room'];
testsDay = json['testsDay'];
purchasingPrice = json['purchasingPrice'];
nbv = json['nbv'];
currency = json['currency'] != null ? Lookup.fromJson(json['currency']) : null;
poNo = json['poNo'];
invoiceNumber = json['invoiceNumber'];
invoiceDate = json['invoiceDate'];
replacementDate = json['replacementDate'];
originDepartment = json['originDepartment'] != null ? Department.fromJson(json['originDepartment']) : null;
originSite = json['originSite'] != null ? Site.fromJson(json['originSite']) : null;
budgetYear = json['budgetYear'];
lastPOPrice = json['lastPOPrice'];
commissioningStatus = json['commissioningStatus'] != null ? Lookup.fromJson(json['commissioningStatus']) : null;
productionDate = json['productionDate'];
edd = json['edd'];
technicalInspectionDate = json['technicalInspectionDate'];
deliveryInspectionDate = json['deliveryInspectionDate'];
endUserAcceptanceDate = json['endUserAcceptanceDate'];
receivingCommittee = json['receivingCommittee'];
siteWarrantyMonths = json['siteWarrantyMonths'] != null ? Lookup.fromJson(json['siteWarrantyMonths']) : null;
extendedWarrantyMonths = json['extendedWarrantyMonths'] != null ? Lookup.fromJson(json['extendedWarrantyMonths']) : null;
remainderWarrantyMonths = json['remainderWarrantyMonths'] != null ? Lookup.fromJson(json['remainderWarrantyMonths']) : null;
eomWarrantyMonthsNo = json['eomWarrantyMonthsNo'];
warrantyValue = json['warrantyValue'];
warrantyEndDate = json['warrantyEndDate'];
warrantyContractConditions = json['warrantyContractConditions'];
if (json['technicalGuidanceBooks'] != null) {
technicalGuidanceBooks = [];
json['technicalGuidanceBooks'].forEach((v) {
technicalGuidanceBooks.add(TechnicalGuidanceBook.fromJson(v));
});
}
comment = json['comment'];
tagCode = json['tagCode'];
}
num id;
String assetSerialNo;
String systemID;
String assetNumber;
ModelDefinition modelDefinition;
Hospital hospital;
Supplier supplier;
String ipAddress;
String macAddress;
String portNumber;
Lookup assetReplace;
AssetInfo oldAsset;
Lookup isParent;
AssetInfo parentAsset;
Lookup assetType;
Site site;
Building building;
Floor floor;
Department department;
String room;
num testsDay;
num purchasingPrice;
String nbv;
Lookup currency;
String poNo;
String invoiceNumber;
String invoiceDate;
String replacementDate;
Department originDepartment;
Site originSite;
num budgetYear;
num lastPOPrice;
Lookup commissioningStatus;
String productionDate;
String edd;
String technicalInspectionDate;
String deliveryInspectionDate;
String endUserAcceptanceDate;
String receivingCommittee;
Lookup siteWarrantyMonths;
Lookup extendedWarrantyMonths;
Lookup remainderWarrantyMonths;
num eomWarrantyMonthsNo;
num warrantyValue;
String warrantyEndDate;
String warrantyContractConditions;
List<TechnicalGuidanceBook> technicalGuidanceBooks;
String comment;
String tagCode;
Device copyWith({
num id,
String assetSerialNo,
String systemID,
String assetNumber,
ModelDefinition modelDefinition,
Supplier supplier,
String ipAddress,
String macAddress,
String portNumber,
Lookup assetReplace,
AssetInfo oldAsset,
Lookup isParent,
AssetInfo parentAsset,
Lookup assetType,
Site site,
Building building,
Floor floor,
Department department,
String room,
num testsDay,
num purchasingPrice,
String nbv,
Lookup currency,
String poNo,
String invoiceNumber,
String invoiceDate,
String replacementDate,
Department originDepartment,
Site originSite,
num budgetYear,
num lastPOPrice,
Lookup commissioningStatus,
String productionDate,
String edd,
String technicalInspectionDate,
String deliveryInspectionDate,
String endUserAcceptanceDate,
String receivingCommittee,
Lookup siteWarrantyMonths,
Lookup extendedWarrantyMonths,
Lookup remainderWarrantyMonths,
num eomWarrantyMonthsNo,
num warrantyValue,
String warrantyEndDate,
String warrantyContractConditions,
List<TechnicalGuidanceBook> technicalGuidanceBooks,
String comment,
String tagCode,
}) =>
Device(
id: id ?? this.id,
assetSerialNo: assetSerialNo ?? this.assetSerialNo,
systemID: systemID ?? this.systemID,
assetNumber: assetNumber ?? this.assetNumber,
modelDefinition: modelDefinition ?? this.modelDefinition,
supplier: supplier ?? this.supplier,
ipAddress: ipAddress ?? this.ipAddress,
macAddress: macAddress ?? this.macAddress,
portNumber: portNumber ?? this.portNumber,
assetReplace: assetReplace ?? this.assetReplace,
oldAsset: oldAsset ?? this.oldAsset,
isParent: isParent ?? this.isParent,
parentAsset: parentAsset ?? this.parentAsset,
assetType: assetType ?? this.assetType,
site: site ?? this.site,
building: building ?? this.building,
floor: floor ?? this.floor,
department: department ?? this.department,
room: room ?? this.room,
testsDay: testsDay ?? this.testsDay,
purchasingPrice: purchasingPrice ?? this.purchasingPrice,
nbv: nbv ?? this.nbv,
currency: currency ?? this.currency,
poNo: poNo ?? this.poNo,
invoiceNumber: invoiceNumber ?? this.invoiceNumber,
invoiceDate: invoiceDate ?? this.invoiceDate,
replacementDate: replacementDate ?? this.replacementDate,
originDepartment: originDepartment ?? this.originDepartment,
originSite: originSite ?? this.originSite,
budgetYear: budgetYear ?? this.budgetYear,
lastPOPrice: lastPOPrice ?? this.lastPOPrice,
commissioningStatus: commissioningStatus ?? this.commissioningStatus,
productionDate: productionDate ?? this.productionDate,
edd: edd ?? this.edd,
technicalInspectionDate: technicalInspectionDate ?? this.technicalInspectionDate,
deliveryInspectionDate: deliveryInspectionDate ?? this.deliveryInspectionDate,
endUserAcceptanceDate: endUserAcceptanceDate ?? this.endUserAcceptanceDate,
receivingCommittee: receivingCommittee ?? this.receivingCommittee,
siteWarrantyMonths: siteWarrantyMonths ?? this.siteWarrantyMonths,
extendedWarrantyMonths: extendedWarrantyMonths ?? this.extendedWarrantyMonths,
remainderWarrantyMonths: remainderWarrantyMonths ?? this.remainderWarrantyMonths,
eomWarrantyMonthsNo: eomWarrantyMonthsNo ?? this.eomWarrantyMonthsNo,
warrantyValue: warrantyValue ?? this.warrantyValue,
warrantyEndDate: warrantyEndDate ?? this.warrantyEndDate,
warrantyContractConditions: warrantyContractConditions ?? this.warrantyContractConditions,
technicalGuidanceBooks: technicalGuidanceBooks ?? this.technicalGuidanceBooks,
comment: comment ?? this.comment,
tagCode: tagCode ?? this.tagCode,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['assetSerialNo'] = assetSerialNo;
map['systemID'] = systemID;
map['assetNumber'] = assetNumber;
if (modelDefinition != null) {
map['modelDefinition'] = modelDefinition.toJson();
}
if (supplier != null) {
map['supplier'] = supplier.toJson();
}
map['ipAddress'] = ipAddress;
map['macAddress'] = macAddress;
map['portNumber'] = portNumber;
if (assetReplace != null) {
map['assetReplace'] = assetReplace.toJson();
}
if (oldAsset != null) {
map['oldAsset'] = oldAsset.toJson();
}
if (isParent != null) {
map['isParent'] = isParent.toJson();
}
if (parentAsset != null) {
map['parentAsset'] = parentAsset.toJson();
}
if (assetType != null) {
map['assetType'] = assetType.toJson();
}
if (site != null) {
map['site'] = site.toJson();
}
if (building != null) {
map['building'] = building.toJson();
}
if (floor != null) {
map['floor'] = floor.toJson();
}
if (department != null) {
map['department'] = department.toJson();
}
map['room'] = room;
map['testsDay'] = testsDay;
map['purchasingPrice'] = purchasingPrice;
map['nbv'] = nbv;
if (currency != null) {
map['currency'] = currency.toJson();
}
map['poNo'] = poNo;
map['invoiceNumber'] = invoiceNumber;
map['invoiceDate'] = invoiceDate;
map['replacementDate'] = replacementDate;
if (originDepartment != null) {
map['originDepartment'] = originDepartment.toJson();
}
if (originSite != null) {
map['originSite'] = originSite.toJson();
}
map['budgetYear'] = budgetYear;
map['lastPOPrice'] = lastPOPrice;
if (commissioningStatus != null) {
map['commissioningStatus'] = commissioningStatus.toJson();
}
map['productionDate'] = productionDate;
map['edd'] = edd;
map['technicalInspectionDate'] = technicalInspectionDate;
map['deliveryInspectionDate'] = deliveryInspectionDate;
map['endUserAcceptanceDate'] = endUserAcceptanceDate;
map['receivingCommittee'] = receivingCommittee;
if (siteWarrantyMonths != null) {
map['siteWarrantyMonths'] = siteWarrantyMonths.toJson();
}
if (extendedWarrantyMonths != null) {
map['extendedWarrantyMonths'] = extendedWarrantyMonths.toJson();
}
if (remainderWarrantyMonths != null) {
map['remainderWarrantyMonths'] = remainderWarrantyMonths.toJson();
}
map['eomWarrantyMonthsNo'] = eomWarrantyMonthsNo;
map['warrantyValue'] = warrantyValue;
map['warrantyEndDate'] = warrantyEndDate;
map['warrantyContractConditions'] = warrantyContractConditions;
if (technicalGuidanceBooks != null) {
map['technicalGuidanceBooks'] = technicalGuidanceBooks.map((v) => v.toJson()).toList();
}
map['comment'] = comment;
map['tagCode'] = tagCode;
return map;
}
}
Device({
class AssetInfo {
AssetInfo({
this.id,
this.serialNumber,
this.number,
this.assetSerialNo,
this.assetNumber,
this.tagCode,
this.systemId,
this.assetName,
this.hospital,
this.destBuildingName,
this.destDepartmentName,
this.destRoom,
this.destFloor,
this.destSiteName,
// this.brand,
// this.model,
this.modelDefinition,
this.destFloorId,
this.destDepartmentId,
this.destBuildingId,
});
factory Device.fromJson(Map<String, dynamic> parsedJson, {bool startKeyWithDest = true}) {
return Device(
id: parsedJson["id"],
serialNumber: parsedJson["assetSerialNo"],
number: parsedJson["assetNumber"],
assetName: parsedJson["assetName"],
modelDefinition: ModelDefinition.fromJson(parsedJson["modelDefinition"]),
hospital: Hospital.fromJson(parsedJson["site"]),
destBuildingName: startKeyWithDest ? parsedJson["destBuildingName"] : parsedJson['building']['name'],
destBuildingId: startKeyWithDest ? parsedJson["destBuildingName"] : parsedJson['building']['id'],
destDepartmentName: startKeyWithDest ? parsedJson["destDepartmentName"] : parsedJson['department']['departmentName'],
destDepartmentId: startKeyWithDest ? parsedJson["destDepartmentName"] : parsedJson['department']['id'],
destRoom: startKeyWithDest ? parsedJson["destRoom"] : parsedJson['room'],
destFloor: startKeyWithDest ? parsedJson["destFloor"] : parsedJson['floor']['name'],
destFloorId: startKeyWithDest ? null : parsedJson['floor']['id'],
destSiteName: parsedJson['destSiteName']
// parsedJson["modelDefinition"] == null ? "" :
// parsedJson["modelDefinition"]["manufacturerName"],
// model: parsedJson["modelDefinition"] == null ? "" :
// parsedJson["modelDefinition"]["modelName"],
);
AssetInfo.fromJson(dynamic json) {
id = json['id'];
assetSerialNo = json['assetSerialNo'];
assetNumber = json['assetNumber'];
tagCode = json['tagCode'];
systemId = json['systemId'];
assetName = json['assetName'];
}
factory Device.fromDevice(Device device) {
return Device(
id: device.id,
serialNumber: device.serialNumber,
number: device.number,
// brand: device.brand,
// model: device.model,
);
}
num id;
String assetSerialNo;
String assetNumber;
String tagCode;
String systemId;
String assetName;
AssetInfo copyWith({
num id,
String assetSerialNo,
String assetNumber,
String tagCode,
String systemId,
String assetName,
}) =>
AssetInfo(
id: id ?? this.id,
assetSerialNo: assetSerialNo ?? this.assetSerialNo,
assetNumber: assetNumber ?? this.assetNumber,
tagCode: tagCode ?? this.tagCode,
systemId: systemId ?? this.systemId,
assetName: assetName ?? this.assetName,
);
Map<String, dynamic> toMap(Lookup assetType) {
return {
'id': id,
'assetSerialNo': serialNumber,
'assetNumber': number,
'assetName': assetName,
'modelDefinition': modelDefinition.toJson(),
'site': hospital.toMap(),
'AssetType': assetType.toMap(),
"supplier": {"id": 0, "suppliername": "string"},
};
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['assetSerialNo'] = assetSerialNo;
map['assetNumber'] = assetNumber;
map['tagCode'] = tagCode;
map['systemId'] = systemId;
map['assetName'] = assetName;
return map;
}
}

@ -1,132 +0,0 @@
import 'dart:io';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/hospital.dart';
import 'package:test_sa/models/lookup.dart';
import '../timer_model.dart';
class DeviceTransfer {
int id;
String userId;
String title;
Device device;
DeviceTransferInfo sender;
DeviceTransferInfo receiver;
String createdOn;
DeviceTransfer({
this.id,
this.device,
this.title,
this.userId,
this.sender,
this.receiver,
this.createdOn,
});
bool validate() {
if (device == null) return false;
return receiver.validate();
}
fromDeviceTransfer(DeviceTransfer old) {
id = old.id;
title = old.title;
userId = old.userId;
device = Device.fromDevice(old.device);
final sender = DeviceTransferInfo();
sender.fromDetails(old.sender);
this.sender = sender;
final receiver = DeviceTransferInfo();
receiver.fromDetails(old.receiver);
this.receiver = receiver;
createdOn = old.createdOn;
}
factory DeviceTransfer.fromJson(Map<String, dynamic> parsedJson) {
List<String> senderFiles = [];
if (parsedJson["senderAttachments"] != null && parsedJson["senderAttachments"] is List) {
List list = parsedJson["senderAttachments"];
senderFiles = list.map((e) => (URLs.getFileUrl(e["attachmentName"]))).toList();
}
List<String> receiverFiles = [];
if (parsedJson["receiverAttachments"] != null && parsedJson["receiverAttachments"] is List) {
List list = parsedJson["receiverAttachments"];
receiverFiles = list.map((e) => (URLs.getFileUrl(e["attachmentName"]))).toList();
}
return DeviceTransfer(
id: parsedJson["id"],
title: parsedJson["transferCode"],
userId: parsedJson["uid"],
createdOn: parsedJson['createdOn'],
device: Device(
id: parsedJson["assetId"],
number: parsedJson["assetNumber"],
assetName: parsedJson["assetName"],
serialNumber: parsedJson["assetSerialNo"],
destBuildingId: parsedJson["destBuildingId"],
destBuildingName: parsedJson["destBuildingName"],
destDepartmentId: parsedJson["destDepartmentId"],
destDepartmentName: parsedJson["destDepartmentName"],
destFloorId: parsedJson["destFloorId"],
destFloor: parsedJson["destFloorName"],
destRoom: parsedJson["destRoom"],
destSiteName: parsedJson["destSiteName"],
),
sender: DeviceTransferInfo(
travelingHours: parsedJson["senderTravelingHours"],
comment: parsedJson["senderComment"],
workingHours: parsedJson["senderWorkingHours"],
attachments: senderFiles?.map((e) => File(e))?.toList(),
timer: TimerModel(
startAt: DateTime.tryParse(parsedJson["senderStartDate"] ?? ""),
endAt: DateTime.tryParse(parsedJson["senderEndDate"] ?? ""),
durationInSecond: ((parsedJson["workingHours"] ?? 0) * 60 * 60).toInt(),
),
// startDate: parsedJson["senderStartDate"] == null ? null : DateTime.parse(parsedJson["senderStartDate"]),
// endDate: parsedJson["senderEndDate"] == null ? null : DateTime.parse(parsedJson["senderEndDate"]),
userId: parsedJson["senderAssignedEmployeeId"],
userName: parsedJson["senderAssignedEmployeeName"],
assignedEmployeeName: parsedJson["senderAssignedEmployeeName"],
client: Hospital(id: parsedJson["senderSiteId"], name: parsedJson["senderSiteName"]),
department: Department(
id: parsedJson["senderDepartmentId"],
name: parsedJson["senderDepartmentName"],
),
engSignature: URLs.getFileUrl(parsedJson["senderEngSignature"]),
status: Lookup(
id: parsedJson["senderMachineStatusId"],
name: parsedJson["senderMachineStatusName"],
),
),
receiver: DeviceTransferInfo(
travelingHours: parsedJson["receiverTravelingHours"],
comment: parsedJson["receiverComment"],
workingHours: parsedJson["receiverWorkingHours"],
attachments: receiverFiles?.map((e) => File(e))?.toList(),
timer: parsedJson["receiverStartDate"] != null || parsedJson["receiverEndDate"] != null
? TimerModel(startAt: DateTime.tryParse(parsedJson["receiverStartDate"] ?? ""), endAt: DateTime.tryParse(parsedJson["receiverEndDate"] ?? ""))
: null,
// startDate: parsedJson["receiverStartDate"] == null ? null : DateTime.parse(parsedJson["receiverStartDate"]),
// endDate: parsedJson["receiverEndDate"] == null ? null : DateTime.parse(parsedJson["receiverEndDate"]),
userId: parsedJson["receiverAssignedEmployeeId"],
userName: parsedJson["receiverAssignedEmployeeName"],
assignedEmployeeName: parsedJson["receiverAssignedEmployeeName"],
client: Hospital(id: parsedJson["destSiteId"], name: parsedJson["destSiteName"]),
department: Department(
id: parsedJson["destDepartmentId"],
name: parsedJson["destDepartmentName"],
),
engSignature: URLs.getFileUrl(parsedJson["receiverEngSignature"]),
status: Lookup(
id: parsedJson["receiverMachineStatusId"],
name: parsedJson["receiverMachineStatusName"],
),
),
);
}
}

@ -6,6 +6,7 @@ import 'package:test_sa/models/lookup.dart';
import '../timer_model.dart';
@Deprecated("Use asset_transfer.dart instead of this one")
class DeviceTransferInfo {
String userId;
String comment;

@ -1,7 +1,7 @@
import 'package:test_sa/models/device/device.dart';
import '../hospital.dart';
import 'device.dart';
@Deprecated("Use asset_transfer_search.dart instead of this one")
class DeviceTransferSearch {
Device device;
String title, room;

@ -1,3 +1,4 @@
@Deprecated("Use the class inside model_definition.dart")
class ModelDefinition {
int id;
String assetName;

@ -0,0 +1,149 @@
import 'package:test_sa/models/device/supplier.dart';
class ModelDefinition {
ModelDefinition({
this.id,
this.assetName,
this.modelDefCode,
this.modelName,
this.manufacturerId,
this.manufacturerName,
this.supplierName,
this.replacementDate,
this.essentialEquipement,
this.businessCritical,
this.lifeSpan,
this.modelDefRelatedDefects,
this.suppliers,
});
ModelDefinition.fromJson(dynamic json) {
id = json['id'];
assetName = json['assetName'];
modelDefCode = json['modelDefCode'];
modelName = json['modelName'];
manufacturerId = json['manufacturerId'];
manufacturerName = json['manufacturerName'];
supplierName = json['supplierName'];
replacementDate = json['replacementDate'];
essentialEquipement = json['essentialEquipement'];
businessCritical = json['businessCritical'];
lifeSpan = json['lifeSpan'];
if (json['modelDefRelatedDefects'] != null) {
modelDefRelatedDefects = [];
json['modelDefRelatedDefects'].forEach((v) {
modelDefRelatedDefects.add(ModelDefRelatedDefects.fromJson(v));
});
}
if (json['suppliers'] != null) {
suppliers = [];
json['suppliers'].forEach((v) {
suppliers.add(Supplier.fromJson(v));
});
}
}
num id;
String assetName;
String modelDefCode;
String modelName;
num manufacturerId;
String manufacturerName;
dynamic supplierName;
String replacementDate;
String essentialEquipement;
String businessCritical;
num lifeSpan;
List<ModelDefRelatedDefects> modelDefRelatedDefects;
List<Supplier> suppliers;
ModelDefinition copyWith({
num id,
String assetName,
String modelDefCode,
String modelName,
num manufacturerId,
String manufacturerName,
dynamic supplierName,
String replacementDate,
String essentialEquipement,
String businessCritical,
num lifeSpan,
List<ModelDefRelatedDefects> modelDefRelatedDefects,
List<Supplier> suppliers,
}) =>
ModelDefinition(
id: id ?? this.id,
assetName: assetName ?? this.assetName,
modelDefCode: modelDefCode ?? this.modelDefCode,
modelName: modelName ?? this.modelName,
manufacturerId: manufacturerId ?? this.manufacturerId,
manufacturerName: manufacturerName ?? this.manufacturerName,
supplierName: supplierName ?? this.supplierName,
replacementDate: replacementDate ?? this.replacementDate,
essentialEquipement: essentialEquipement ?? this.essentialEquipement,
businessCritical: businessCritical ?? this.businessCritical,
lifeSpan: lifeSpan ?? this.lifeSpan,
modelDefRelatedDefects: modelDefRelatedDefects ?? this.modelDefRelatedDefects,
suppliers: suppliers ?? this.suppliers,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['assetName'] = assetName;
map['modelDefCode'] = modelDefCode;
map['modelName'] = modelName;
map['manufacturerId'] = manufacturerId;
map['manufacturerName'] = manufacturerName;
map['supplierName'] = supplierName;
map['replacementDate'] = replacementDate;
map['essentialEquipement'] = essentialEquipement;
map['businessCritical'] = businessCritical;
map['lifeSpan'] = lifeSpan;
if (modelDefRelatedDefects != null) {
map['modelDefRelatedDefects'] = modelDefRelatedDefects.map((v) => v.toJson()).toList();
}
if (suppliers != null) {
map['suppliers'] = suppliers.map((v) => v.toJson()).toList();
}
return map;
}
}
class ModelDefRelatedDefects {
ModelDefRelatedDefects({
this.id,
this.defectName,
this.workPerformed,
this.estimatedTime,
});
ModelDefRelatedDefects.fromJson(dynamic json) {
id = json['id'];
defectName = json['defectName'];
workPerformed = json['workPerformed'];
estimatedTime = json['estimatedTime'];
}
num id;
String defectName;
String workPerformed;
String estimatedTime;
ModelDefRelatedDefects copyWith({
num id,
String defectName,
String workPerformed,
String estimatedTime,
}) =>
ModelDefRelatedDefects(
id: id ?? this.id,
defectName: defectName ?? this.defectName,
workPerformed: workPerformed ?? this.workPerformed,
estimatedTime: estimatedTime ?? this.estimatedTime,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['defectName'] = defectName;
map['workPerformed'] = workPerformed;
map['estimatedTime'] = estimatedTime;
return map;
}
}

@ -0,0 +1,27 @@
class Supplier {
Supplier({
this.id,
this.suppliername,
});
Supplier.fromJson(dynamic json) {
id = json['id'];
suppliername = json['suppliername'];
}
num id;
String suppliername;
Supplier copyWith({
num id,
String suppliername,
}) =>
Supplier(
id: id ?? this.id,
suppliername: suppliername ?? this.suppliername,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
map['suppliername'] = suppliername;
return map;
}
}

@ -0,0 +1,28 @@
import '../lookup.dart';
class TechnicalGuidanceBook {
TechnicalGuidanceBook({this.id, this.guidanceBook});
TechnicalGuidanceBook.fromJson(dynamic json) {
id = json['id'];
guidanceBook = json['guidanceBook'] != null ? Lookup.fromJson(json['guidanceBook']) : null;
}
num id;
Lookup guidanceBook;
TechnicalGuidanceBook copyWith({
num id,
Lookup guidanceBook,
}) =>
TechnicalGuidanceBook(
id: id ?? this.id,
guidanceBook: guidanceBook ?? this.guidanceBook,
);
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['id'] = id;
if (guidanceBook != null) {
map['guidanceBook'] = guidanceBook.toJson();
}
return map;
}
}

@ -39,4 +39,9 @@ enum TranslationKeys {
createdSuccessfully,
failedToCompleteRequest,
youHaveToAddRequests,
assetNo,
manufacture,
model,
serialNumber,
device,
}

@ -11,7 +11,7 @@ class Lookup extends Base {
@override
int get hashCode => id?.hashCode ?? value?.hashCode;
toMap() {
toJson() {
return {"id": id, "name": name, "value": value};
}

@ -11,7 +11,7 @@ class Department extends Base {
Department.fromJson(dynamic json) {
id = json['id'];
identifier = id.toString();
departmentName = json['departmentName'];
departmentName = json['departmentName'] ?? json['name'];
name = departmentName;
departmentCode = json['departmentCode'];
ntCode = json['ntCode'];

@ -149,7 +149,7 @@ class GasRefillModel {
map['assignedEmployee'] = assignedEmployee.toJson();
}
if (status != null) {
map['status'] = status.toMap();
map['status'] = status.toJson();
}
if (gazRefillDetails != null) {
map['gazRefillDetails'] = gazRefillDetails.map((v) => v.toJson()).toList();
@ -222,13 +222,13 @@ class GasRefillDetails {
final map = <String, dynamic>{};
map['id'] = id;
if (gasType != null) {
map['gasType'] = gasType.toMap();
map['gasType'] = gasType.toJson();
}
if (cylinderType != null) {
map['cylinderType'] = cylinderType.toMap();
map['cylinderType'] = cylinderType.toJson();
}
if (cylinderSize != null) {
map['cylinderSize'] = cylinderSize.toMap();
map['cylinderSize'] = cylinderSize.toJson();
}
map['requestedQty'] = requestedQty;
map['deliverdQty'] = deliverdQty;

@ -91,9 +91,9 @@ class ServiceReport {
if (returnToService != null) _map["replacementDate"] = returnToService.toIso8601String();
//if(serviceType != null) _map["service_type"] = serviceType.id.toString();
if (equipmentStatus != null) _map["equipmentStatus"] = equipmentStatus?.toMap();
if (type != null) _map["typeOfWO"] = type?.toMap();
if (assetType != null) _map["TypeOfWO"] = assetType?.toMap();
if (equipmentStatus != null) _map["equipmentStatus"] = equipmentStatus?.toJson();
if (type != null) _map["typeOfWO"] = type?.toJson();
if (assetType != null) _map["TypeOfWO"] = assetType?.toJson();
//if(faultDescriptionId != null && faultDescriptionId.isNotEmpty) _map["fault_description"] = faultDescriptionId;
//if(workHours != null && workHours.isNotEmpty) _map["working_hours"] = workHours;
if (timer != null) {
@ -121,18 +121,19 @@ class ServiceReport {
if (device != null && device.id != null) {
_map["callRequest"] = {
"id": request.id,
"asset": device?.toMap(assetType),
// "asset": device?.toJson(assetType),
"asset": device?.toJson(),
};
_map["callRequest"]["asset"]["invoiceNumber"] = invoiceNumber;
}
_map["AssignedEmployee"] = engineer?.toMap();
_map["repairLocation"] = repairLocation?.toMap();
_map["repairLocation"] = repairLocation?.toJson();
//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 (reason != null) _map["reason"] = reason.toJson();
//if(operatingHours != null && operatingHours.isNotEmpty) _map["operation_hours"] = operatingHours;
if (callLastSituation != null) _map["calllastSituation"] = callLastSituation.toMap();
if (currentSituation != null) _map["currentSituation"] = currentSituation.toMap();
if (callLastSituation != null) _map["calllastSituation"] = callLastSituation.toJson();
if (currentSituation != null) _map["currentSituation"] = currentSituation.toJson();
//if(image != null) _map["image"] = image;
//if(invoiceCode != null) _map["invoice_no"] = invoiceCode;
//if(invoiceNumber != null) _map["invoice_code"] = invoiceNumber;

@ -114,7 +114,7 @@ class SearchWorkOrder {
workOrderYear = wo.workOrderYear ?? workOrderYear;
workOrderSequennce = wo.workOrderSequennce ?? workOrderSequennce;
callRequest = wo.callRequest ?? callRequest;
if (wo.assetType != null) assetType = Lookup.fromJson((wo.assetType)?.toMap() ?? {});
if (wo.assetType != null) assetType = Lookup.fromJson((wo.assetType)?.toJson() ?? {});
if (wo.assignedEmployee != null) assignedEmployee = AssignedEmployee.fromJson((wo.assignedEmployee)?.toJson() ?? {});
visitDate = wo.visitDate ?? visitDate;
assistantEmployees = (wo.assistantEmployees ?? assistantEmployees)
@ -127,10 +127,10 @@ class SearchWorkOrder {
if (wo.supplier != null) supplier = SupplierModel.fromJson((wo.supplier)?.toJson() ?? {});
vendorTicketNumber = wo.vendorTicketNumber ?? vendorTicketNumber;
contactPersonWorkOrders = (wo.contactPersonWorkOrders ?? contactPersonWorkOrders)?.map((e) => ContactPersonWorkOrders.fromJson(e?.toJson() ?? {}))?.toList() ?? [];
calllastSituation = Lookup.fromJson((wo.calllastSituation ?? calllastSituation)?.toMap() ?? {});
if (wo.currentSituation != null) currentSituation = Lookup.fromJson((wo.currentSituation)?.toMap() ?? {});
repairLocation = Lookup.fromJson((wo.repairLocation ?? repairLocation)?.toMap() ?? {});
reason = Lookup.fromJson((wo.reason ?? reason)?.toMap() ?? {});
calllastSituation = Lookup.fromJson((wo.calllastSituation ?? calllastSituation)?.toJson() ?? {});
if (wo.currentSituation != null) currentSituation = Lookup.fromJson((wo.currentSituation)?.toJson() ?? {});
repairLocation = Lookup.fromJson((wo.repairLocation ?? repairLocation)?.toJson() ?? {});
reason = Lookup.fromJson((wo.reason ?? reason)?.toJson() ?? {});
// startofWorkTime = wo.startofWorkTime ?? startofWorkTime;
// endofWorkTime = wo.endofWorkTime ?? endofWorkTime;
timer = wo.timer ?? timer;
@ -142,7 +142,7 @@ class SearchWorkOrder {
reviewComment = wo.reviewComment ?? reviewComment;
comment = wo.comment ?? comment;
attachmentsWorkOrder = (wo.attachmentsWorkOrder ?? attachmentsWorkOrder)?.map((e) => AttachmentsWorkOrder.fromJson(e?.toJson() ?? {}))?.toList() ?? [];
equipmentStatus = Lookup.fromJson((wo.equipmentStatus ?? equipmentStatus)?.toMap() ?? {});
equipmentStatus = Lookup.fromJson((wo.equipmentStatus ?? equipmentStatus)?.toJson() ?? {});
suppEngineerWorkOrders = (wo.suppEngineerWorkOrders ?? suppEngineerWorkOrders)?.map((e) => SuppEngineerWorkOrders.fromJson(e?.toJson() ?? {}))?.toList() ?? [];
engSignature = wo.engSignature ?? engSignature;
nurseSignature = wo.nurseSignature ?? nurseSignature;
@ -269,7 +269,7 @@ class SearchWorkOrder {
map['callRequest'] = callRequest.toJson();
}
if (assetType != null) {
map['assetType'] = assetType.toMap();
map['assetType'] = assetType.toJson();
}
if (assignedEmployee != null) {
map['assignedEmployee'] = assignedEmployee.toJson();
@ -286,14 +286,14 @@ class SearchWorkOrder {
map['contactPersonWorkOrders'] = contactPersonWorkOrders.map((v) => v.toJson()).toList();
}
if (calllastSituation != null) {
map['calllastSituation'] = calllastSituation.toMap();
map['calllastSituation'] = calllastSituation.toJson();
}
map['currentSituation'] = currentSituation?.toMap();
map['currentSituation'] = currentSituation?.toJson();
if (repairLocation?.id != null) {
map['repairLocation'] = repairLocation.toMap();
map['repairLocation'] = repairLocation.toJson();
}
if (reason != null && reason.id != null) {
map['reason'] = reason.toMap();
map['reason'] = reason.toJson();
}
// map['startofWorkTime'] = startofWorkTime;
// map['endofWorkTime'] = endofWorkTime;
@ -315,7 +315,7 @@ class SearchWorkOrder {
map['attachmentsWorkOrder'] = attachmentsWorkOrder.map((v) => v.toJson()).toList();
}
if (equipmentStatus != null && equipmentStatus.id != null) {
map['equipmentStatus'] = equipmentStatus.toMap();
map['equipmentStatus'] = equipmentStatus.toJson();
}
if (suppEngineerWorkOrders != null) {
map['suppEngineerWorkOrders'] = suppEngineerWorkOrders.map((v) => v.toJson()).toList();
@ -412,13 +412,13 @@ class WoParentDto {
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
if (callLastSituation != null) {
map['callLastSituation'] = callLastSituation.toMap();
map['callLastSituation'] = callLastSituation.toJson();
}
if (supplier != null) {
map['supplier'] = supplier.toJson();
}
if (assetType != null) {
map['assetType'] = assetType.toMap();
map['assetType'] = assetType.toJson();
}
map['vendorTicketNumber'] = vendorTicketNumber;
map['callId'] = callId ?? 0;
@ -430,10 +430,10 @@ class WoParentDto {
map['suppEngineerWorkOrders'] = suppEngineerWorkOrders.map((v) => v.toJson()).toList();
}
if (equipmentStatus != null) {
map['equipmentStatus'] = equipmentStatus.toMap();
map['equipmentStatus'] = equipmentStatus.toJson();
}
if (currentSituation != null) {
map['currentSituation'] = currentSituation.toMap();
map['currentSituation'] = currentSituation.toJson();
}
return map;
}
@ -1372,7 +1372,7 @@ class CallRequest {
map['status'] = status.toJson();
}
if (callLastSituation != null) {
map['callLastSituation'] = callLastSituation.toMap();
map['callLastSituation'] = callLastSituation.toJson();
}
if (defectType != null) {
map['defectType'] = defectType.toJson();
@ -1848,7 +1848,7 @@ class Asset {
map['parentAsset'] = parentAsset.toJson();
}
map['assetType'] = assetType?.toMap();
map['assetType'] = assetType?.toJson();
if (site != null) {
map['site'] = site.toJson();
}

@ -60,7 +60,7 @@ class ServiceRequestSearch {
}
if (statusValue != null) {
search["status"] = statusValue.toMap();
search["status"] = statusValue.toJson();
}
if (deviceName != null && deviceName.isNotEmpty) {
@ -80,7 +80,7 @@ class ServiceRequestSearch {
}
if (dateOperator != null && from != null) {
search["requestedDateSymbol"] = dateOperator.toMap();
search["requestedDateSymbol"] = dateOperator.toJson();
search["requestedDateFrom"] = from;
}
if (dateOperator != null && to != null) {

@ -58,8 +58,8 @@ class SubWorkOrderDetails {
Map<String, dynamic> toJson() {
final map = <String, dynamic>{};
map['equipmentStatus'] = equipmentStatus?.toMap();
map['reason'] = reason?.toMap();
map['equipmentStatus'] = equipmentStatus?.toJson();
map['reason'] = reason?.toJson();
map['faultDescription'] = faultDescription?.toJson();
if (sparePartsWorkOrders?.isNotEmpty ?? false) {
map['sparePartsWorkOrders'] = sparePartsWorkOrders?.map((e) => e.toJson())?.toList();

@ -4,8 +4,8 @@ import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/new_views/pages/new_gas_refill_request_page.dart';
import 'package:test_sa/new_views/pages/new_service_request_page.dart';
import 'package:test_sa/new_views/pages/new_transfer_request_page.dart';
import 'package:test_sa/views/pages/user/requests/create_request.dart';
import '../../models/enums/translation_keys.dart';
import '../app_style/app_color.dart';
@ -52,10 +52,10 @@ class _AppFloatingActionButtonState extends State<AppFloatingActionButton> {
mainAxisSize: MainAxisSize.min,
children: [
_FloatingButtonListTile(iconName: "gas_refill_request", label: context.translation.gasRefillRequest, routeName: NewGasRefillRequestPage.routeName),
const Divider().defaultStyle(context).paddingOnly(left: 16, right: 16),
const Divider().defaultStyle(context).paddingOnly(start: 16, end: 16),
_FloatingButtonListTile(iconName: "transfer_request", label: context.translation.transferRequest, routeName: NewTransferRequestPage.routeName),
const Divider().defaultStyle(context).paddingOnly(left: 16, right: 16),
_FloatingButtonListTile(iconName: "service_request", label: context.translation.serviceRequest, routeName: NewServiceRequestPage.routeName),
const Divider().defaultStyle(context).paddingOnly(start: 16, end: 16),
_FloatingButtonListTile(iconName: "service_request", label: context.translation.serviceRequest, routeName: CreateRequestPage.id),
],
).paddingOnly(top: 8, bottom: 8),
),

@ -98,13 +98,14 @@ class _AppTextFormFieldState extends State<AppTextFormField> {
floatingLabelStyle: AppTextStyle.body1?.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? null : AppColor.neutral20),
hintText: widget.hintText ?? "",
labelText: widget.labelText ?? "",
suffixIcon: widget.prefixIconData == null
? null
: Icon(
widget.prefixIconData,
size: widget.prefixIconSize == null ? 20.toScreenWidth : (widget.prefixIconSize - 10).toScreenWidth,
color: AppColor.neutral70,
),
suffixIcon: widget.suffixIcon ??
(widget.prefixIconData == null
? null
: Icon(
widget.prefixIconData,
size: widget.prefixIconSize == null ? 20.toScreenWidth : (widget.prefixIconSize - 10).toScreenWidth,
color: AppColor.neutral70,
)),
),
),
);

@ -90,7 +90,7 @@ class _LoginPageState extends State<LoginPage> {
).center.expanded,
AppFilledButton(label: context.translation.login, maxWidth: true, onPressed: _login),
],
).paddingOnly(left: 16, right: 16, bottom: 24, top: 24),
).paddingOnly(start: 16, end: 16, bottom: 24, top: 24),
),
);
}

@ -155,14 +155,6 @@ class _NewGasRefillRequestPageState extends State<NewGasRefillRequestPage> {
_gasModel.department = value;
},
),
// 8.height,
// SingleItemDropDownMenu<Department, DepartmentProvider>(
// context: context,
// title: context.translation.department,
// onSelect: (value) {
// _formModel.department = value;
// },
// ),
8.height,
AppFilledButton(
label: context.translation.add,
@ -226,7 +218,7 @@ class _NewGasRefillRequestPageState extends State<NewGasRefillRequestPage> {
).expanded,
AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: _submit),
],
).paddingOnly(left: 16, right: 16, bottom: 24),
).paddingOnly(start: 16, end: 16, bottom: 24),
);
}

@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/translation_keys.dart';
import '../common_widgets/app_filled_button.dart';
import '../common_widgets/default_app_bar.dart';
class NewServiceRequestPage extends StatelessWidget {
static const String routeName = "/new_service_request_page";
const NewServiceRequestPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: DefaultAppBar(title: context.translation.newServiceRequest),
body: Column(
children: [
SingleChildScrollView(
child: Column(children: []),
).expanded,
AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: () {})
],
).paddingOnly(left: 16, right: 16, bottom: 24),
);
}
}

@ -21,7 +21,7 @@ class NewTransferRequestPage extends StatelessWidget {
).expanded,
AppFilledButton(label: context.translation.submitRequest, maxWidth: true, onPressed: () {})
],
).paddingOnly(left: 16, right: 16, bottom: 24),
).paddingOnly(start: 16, end: 16, bottom: 24),
);
}
}

@ -1,15 +1,16 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/device_transfer/update_device_transfer.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/device_trancfer/device_transfer_info_section.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart';
@ -17,7 +18,7 @@ import 'package:test_sa/views/widgets/requests/info_row.dart';
import '../../../models/enums/user_types.dart';
class DeviceTransferDetails extends StatefulWidget {
final DeviceTransfer model;
final AssetTransfer model;
const DeviceTransferDetails({Key key, this.model}) : super(key: key);
@ -26,7 +27,7 @@ class DeviceTransferDetails extends StatefulWidget {
}
class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
DeviceTransfer _model;
AssetTransfer _model;
bool _isSender = false;
bool _isReceiver = false;
UserProvider _userProvider;
@ -41,7 +42,7 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
}
Future<void> _getDeviceTransfer() async {
_model = await Provider.of<DeviceTransferProvider>(context).getRequestById(assetTransferId: widget.model.id);
_model = await Provider.of<AssetTransferProvider>(context).getRequestById(assetTransferId: widget.model.id);
}
@override
@ -56,8 +57,8 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
return const ALoading();
} else {
_userProvider = Provider.of<UserProvider>(context);
_isSender = _userProvider.user.userID == _model.sender?.userId;
_isReceiver = _userProvider.user.userID == _model.receiver?.userId;
// _isSender = _userProvider.user.userID == _model.sender?.userId;
// _isReceiver = _userProvider.user.userID == _model.receiver?.userId;
return Form(
key: _formKey,
child: LoadingManager(
@ -93,39 +94,39 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
children: [
RequestInfoRow(
title: "Transfer Id",
info: _model.title?.toString(),
info: "_model.title?.toString()",
),
RequestInfoRow(
title: context.translation.assetName,
info: _model.device.assetName,
info: "_model.device.assetName",
),
RequestInfoRow(
title: context.translation.assetSN,
info: _model.device.serialNumber,
info: "_model.device.serialNumber",
),
RequestInfoRow(
title: context.translation.assetNumber,
info: _model.device.number,
info: "_model.device.number",
),
RequestInfoRow(
title: context.translation.destinationSite,
info: _model.device.destSiteName,
info: "_model.device.destSiteName",
),
RequestInfoRow(
title: context.translation.building,
info: _model.device.destBuildingName,
info: " _model.device.destBuildingName",
),
RequestInfoRow(
title: context.translation.floor,
info: _model.device.destFloor,
info: "_model.device.destFloor",
),
RequestInfoRow(
title: context.translation.department,
info: _model.device.destDepartmentName,
info: "_model.device.destDepartmentName",
),
RequestInfoRow(
title: context.translation.room,
info: _model.device.destRoom,
info: "_model.device.destRoom",
),
RequestInfoRow(
title: context.translation.actions,
@ -140,25 +141,25 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
if (_userProvider.user?.type == UsersTypes.engineer)
ASmallButton(
text: context.translation.edit,
onPressed: (_isSender)
? (_model.sender.status?.name == "Closed"
? null
: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateDeviceTransfer(
model: _model,
isSender: true,
)));
})
: null,
// onPressed: (_isSender)
// ? (_model.sender.status?.name == "Closed"
// ? null
// : () {
// Navigator.of(context).push(MaterialPageRoute(
// builder: (_) => UpdateDeviceTransfer(
// model: _model,
// isSender: true,
// )));
// })
// : null,
),
],
),
const SizedBox(height: 12),
DeviceTransferInfoSection(
info: _model.sender,
isSender: true,
),
// DeviceTransferInfoSection(
// info: _model.sender,
// isSender: true,
// ),
const SizedBox(height: 8),
Row(
children: [
@ -168,25 +169,25 @@ class _DeviceTransferDetailsState extends State<DeviceTransferDetails> {
if (_userProvider.user?.type == UsersTypes.engineer)
ASmallButton(
text: context.translation.edit,
onPressed: (_isReceiver)
? (_model.receiver.status?.name == "Closed"
? null
: () {
Navigator.of(context).push(MaterialPageRoute(
builder: (_) => UpdateDeviceTransfer(
model: _model,
isSender: false,
)));
})
: null,
// onPressed: (_isReceiver)
// ? (_model.receiver.status?.name == "Closed"
// ? null
// : () {
// Navigator.of(context).push(MaterialPageRoute(
// builder: (_) => UpdateDeviceTransfer(
// model: _model,
// isSender: false,
// )));
// })
// : null,
),
],
),
const SizedBox(height: 12),
DeviceTransferInfoSection(
info: _model.receiver,
isSender: false,
),
// DeviceTransferInfoSection(
// info: _model.receiver,
// isSender: false,
// ),
],
),
),

@ -1,17 +1,14 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/models/department.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/equipment/device_button.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
@ -38,9 +35,9 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
bool _validate = false;
UserProvider _userProvider;
SettingProvider _settingProvider;
DeviceTransferProvider _deviceTransferProvider;
AssetTransferProvider _deviceTransferProvider;
final TextEditingController _requestedQuantityController = TextEditingController();
final DeviceTransfer _formModel = DeviceTransfer(receiver: DeviceTransferInfo(), sender: DeviceTransferInfo());
final AssetTransfer _formModel = AssetTransfer(/*receiver: DeviceTransferInfo(), sender: DeviceTransferInfo()*/);
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
@ -57,10 +54,10 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
}
_formKey.currentState.save();
if (!_formModel.validate()) {
setState(() {});
return false;
}
// if (!_formModel.validate()) {
// setState(() {});
// return false;
// }
_isLoading = true;
setState(() {});
@ -97,7 +94,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context, listen: false);
_deviceTransferProvider = Provider.of<AssetTransferProvider>(context, listen: false);
return Scaffold(
key: _scaffoldKey,
body: Form(
@ -138,29 +135,29 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
// ),
12.height,
const ASubTitle("Asset"),
if (_validate && _formModel.device == null)
if (_validate /*&& _formModel.device == null*/)
ASubTitle(
context.translation.requiredWord,
color: Colors.red,
),
6.height,
DeviceButton(
device: _formModel.device,
onDevicePick: (device) {
_formModel.device = device;
_formModel.sender.client = device.hospital;
setState(() {});
},
),
if (_formModel.device != null) 8.height,
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Site", value: _formModel.device.hospital?.name),
if (_formModel.device != null) 4.height,
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Department", value: _formModel.device.destDepartmentName),
if (_formModel.device != null) 4.height,
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Floor", value: _formModel.device.destFloor),
if (_formModel.device != null) 4.height,
if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Room", value: _formModel.device.destRoom),
if (_formModel.device != null) 8.height,
// DeviceButton(
// device: _formModel.device,
// onDevicePick: (device) {
// _formModel.device = device;
// _formModel.sender.client = device.hospital;
// setState(() {});
// },
// ),
// if (_formModel.device != null) 8.height,
// if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Site", value: _formModel.device.hospital?.name),
// if (_formModel.device != null) 4.height,
// if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Department", value: _formModel.device.destDepartmentName),
// if (_formModel.device != null) 4.height,
// if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Floor", value: _formModel.device.destFloor),
// if (_formModel.device != null) 4.height,
// if (_formModel.device != null) AdditionalAssetInfo(title: "Asset Room", value: _formModel.device.destRoom),
// if (_formModel.device != null) 8.height,
// const SizedBox(height: 8,),
// const ASubTitle("Sender Department"),
// if(_validate && _formModel.senderDepartment == null)
@ -224,7 +221,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
_deviceTransferProvider.building = null;
_deviceTransferProvider.floor = null;
_deviceTransferProvider.department = null;
_formModel.receiver.client = value;
// _formModel.receiver.client = value;
setState(() {});
},
),
@ -254,7 +251,7 @@ class _RequestDeviceTransferState extends State<RequestDeviceTransfer> {
departments: _deviceTransferProvider?.floor?.departments,
onSelect: (status) {
_deviceTransferProvider.department = status;
_formModel.receiver.department = Department(id: status.id, name: status.name);
// _formModel.receiver.department = Department(id: status.id, name: status.name);
setState(() {});
},
),

@ -1,14 +1,12 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/device/device_transfer_search.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/device_trancfer/device_transfer_list.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/search/asset_transfer_search_dialog.dart';
import '../../widgets/buttons/app_icon_button.dart';
@ -22,13 +20,13 @@ class TrackDeviceTransferPage extends StatefulWidget {
}
class _TrackDeviceTransferPageState extends State<TrackDeviceTransferPage> with TickerProviderStateMixin {
DeviceTransferProvider _deviceTransferProvider;
AssetTransferProvider _deviceTransferProvider;
UserProvider _userProvider;
SettingProvider _settingProvider;
@override
Widget build(BuildContext context) {
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context);
_deviceTransferProvider = Provider.of<AssetTransferProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
@ -71,22 +69,22 @@ class _TrackDeviceTransferPageState extends State<TrackDeviceTransferPage> with
buttonSize: 42,
backgroundColor: AColors.white,
onPressed: () async {
DeviceTransferSearch temp = await showModalBottomSheet(
context: context,
isScrollControlled: true,
builder: (context) {
return AssetTransferSearchDialog(initialSearchValue: _deviceTransferProvider.deviceTransferSearch);
},
);
if (temp != null) {
_deviceTransferProvider.deviceTransferSearch = temp;
_deviceTransferProvider.reset();
setState(() {});
await _deviceTransferProvider.getRequests(
user: _userProvider.user,
host: _settingProvider.host,
);
}
// DeviceTransferSearch temp = await showModalBottomSheet(
// context: context,
// isScrollControlled: true,
// builder: (context) {
// return AssetTransferSearchDialog(initialSearchValue: _deviceTransferProvider.deviceTransferSearch);
// },
// );
// if (temp != null) {
// _deviceTransferProvider.deviceTransferSearch = temp;
// _deviceTransferProvider.reset();
// setState(() {});
// await _deviceTransferProvider.getRequests(
// user: _userProvider.user,
// host: _settingProvider.host,
// );
// }
},
),
const SizedBox(width: 16),

@ -1,30 +1,21 @@
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/device_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/asset_transfer_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/e_signature/e_signature.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/asset_status.dart';
import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../controllers/localization/localization.dart';
import '../../widgets/timer/app_timer.dart';
class UpdateDeviceTransfer extends StatefulWidget {
final DeviceTransfer model;
final AssetTransfer model;
final bool isSender;
const UpdateDeviceTransfer({Key key, this.model, this.isSender}) : super(key: key);
@ -39,21 +30,21 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
UserProvider _userProvider;
SettingProvider _settingProvider;
Uint8List _signature;
DeviceTransferProvider _deviceTransferProvider;
AssetTransferProvider _deviceTransferProvider;
final TextEditingController _requestedQuantityController = TextEditingController();
final DeviceTransferInfo _formModel = DeviceTransferInfo(attachments: []);
// final DeviceTransferInfo _formModel = DeviceTransferInfo(attachments: []);
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
_update() async {
if (_formModel?.timer?.startAt == null) {
await Fluttertoast.showToast(msg: "Working Hours Required");
return false;
}
if (_formModel?.timer?.endAt == null) {
await Fluttertoast.showToast(msg: "Please Stop The Timer");
return false;
}
// if (_formModel?.timer?.startAt == null) {
// await Fluttertoast.showToast(msg: "Working Hours Required");
// return false;
// }
// if (_formModel?.timer?.endAt == null) {
// await Fluttertoast.showToast(msg: "Please Stop The Timer");
// return false;
// }
_validate = true;
if (!_formKey.currentState.validate()) {
setState(() {});
@ -63,15 +54,17 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
_isLoading = true;
setState(() {});
int status = await _deviceTransferProvider.updateRequest(
user: _userProvider.user, host: _settingProvider.host, requestId: widget.model.id, isSender: widget.isSender, newModel: _formModel, oldModel: widget.model);
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(msg: context.translation.successfulRequestMessage);
_validate = false;
Navigator.of(context).pop();
}
// int status = await _deviceTransferProvider.updateRequest(
// user: _userProvider.user, host: _settingProvider.host, requestId: widget.model.id, isSender: widget.isSender, newModel: _formModel, oldModel: widget.model);
// _isLoading = false;
// setState(() {});
// if (status >= 200 && status < 300) {
// Fluttertoast.showToast(
// msg: context.translation.successfulRequestMessage,
// );
// _validate = false;
// Navigator.of(context).pop();
// }
}
// @override
@ -81,7 +74,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
@override
void initState() {
_formModel.fromDetails(widget.isSender ? widget.model.sender : widget.model.receiver, withSignature: false);
// _formModel.fromDetails(widget.isSender ? widget.model.sender : widget.model.receiver, withSignature: false);
super.initState();
}
@ -95,7 +88,7 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
Widget build(BuildContext context) {
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);
_deviceTransferProvider = Provider.of<DeviceTransferProvider>(context, listen: false);
_deviceTransferProvider = Provider.of<AssetTransferProvider>(context, listen: false);
return Scaffold(
key: _scaffoldKey,
body: Form(
@ -128,15 +121,15 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
const SizedBox(
height: 4,
),
ATextFormField(
initialValue: _formModel?.comment,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.subtitle1,
textInputType: TextInputType.text,
onSaved: (value) {
_formModel.comment = value;
},
),
// ATextFormField(
// initialValue: _formModel?.comment,
// textAlign: TextAlign.center,
// style: Theme.of(context).textTheme.subtitle1,
// textInputType: TextInputType.text,
// onSaved: (value) {
// _formModel.comment = value;
// },
// ),
const SizedBox(
height: 8,
),
@ -144,15 +137,15 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
const SizedBox(
height: 4,
),
ATextFormField(
initialValue: _formModel?.travelingHours,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.subtitle1,
textInputType: TextInputType.number,
onSaved: (value) {
_formModel.travelingHours = value;
},
),
// ATextFormField(
// initialValue: _formModel?.travelingHours,
// textAlign: TextAlign.center,
// style: Theme.of(context).textTheme.subtitle1,
// textInputType: TextInputType.number,
// onSaved: (value) {
// _formModel.travelingHours = value;
// },
// ),
const SizedBox(
height: 16,
),
@ -160,16 +153,16 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
const SizedBox(height: 8),
Row(
children: [
Expanded(
child: AppTimer(
timer: _formModel.timer,
onChange: (timer) async {
_formModel.timer = timer;
_formModel.workingHours = (((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0";
return true;
},
),
),
// Expanded(
// child: AppTimer(
// timer: _formModel.timer,
// onChange: (timer) async {
// _formModel.timer = timer;
// _formModel.workingHours = (((timer?.durationInSecond ?? 0) / 60) / 60)?.toStringAsFixed(2) ?? "0";
// return true;
// },
// ),
// ),
],
),
const SizedBox(height: 16),
@ -177,21 +170,21 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
const SizedBox(
height: 4,
),
AssetStatusMenu(
initialValue: _formModel.status,
onSelect: (status) {
if (status == null) return;
_formModel.status = status;
setState(() {});
},
),
// AssetStatusMenu(
// initialValue: _formModel.status,
// onSelect: (status) {
// if (status == null) return;
// _formModel.status = status;
// setState(() {});
// },
// ),
const SizedBox(
height: 16,
),
MultiFilesPicker(
label: "Attachments",
files: _formModel.attachments,
),
// MultiFilesPicker(
// label: "Attachments",
// files: _formModel.attachments,
// ),
const SizedBox(
height: 16,
),
@ -201,16 +194,16 @@ class _UpdateDeviceTransferState extends State<UpdateDeviceTransfer> {
const SizedBox(
height: 4,
),
ESignature(
oldSignature: widget.isSender ? widget.model.sender.engSignature : widget.model.receiver.engSignature,
newSignature: _signature,
onSaved: (signature) {
_signature = signature;
if (signature == null || signature.isEmpty) return;
_formModel.engSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
// base64Encode(signature);
},
),
// ESignature(
// oldSignature: widget.isSender ? widget.model.sender.engSignature : widget.model.receiver.engSignature,
// newSignature: _signature,
// onSaved: (signature) {
// _signature = signature;
// if (signature == null || signature.isEmpty) return;
// _formModel.engSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}";
// // base64Encode(signature);
// },
// ),
Padding(
padding: const EdgeInsets.all(16.0),
child: AButton(

@ -18,6 +18,7 @@ import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/device_transfer/track_device_transfer.dart';
import 'package:test_sa/views/pages/sub_workorder/search_sub_workorder_page.dart';
import 'package:test_sa/views/pages/user/gas_refill/track_gas_refill.dart';
import 'package:test_sa/views/pages/user/requests/create_request.dart';
import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button.dart';
@ -25,7 +26,6 @@ import 'package:test_sa/views/widgets/dialogs/dialog.dart';
import 'package:test_sa/views/widgets/drawer/drawer_item.dart';
import 'package:url_launcher/url_launcher.dart';
import '../../../new_views/pages/new_service_request_page.dart';
import '../../widgets/land_page/land_page_item.dart';
import 'requests/requests_page.dart';
@ -154,8 +154,7 @@ class _LandPageState extends State<LandPage> {
text: "New Service Request",
icon: FontAwesomeIcons.screwdriverWrench,
onPressed: () {
// Navigator.of(context).pushNamed(CreateRequestPage.id);
Navigator.of(context).pushNamed(NewServiceRequestPage.routeName);
Navigator.of(context).pushNamed(CreateRequestPage.id);
},
),
LandPageItem(
@ -283,7 +282,7 @@ class _LandPageState extends State<LandPage> {
children: [
const Icon(Icons.clear).onPress(() => Navigator.pop(context)),
],
).paddingOnly(left: 4, right: 14),
).paddingOnly(start: 4, end: 14),
Row(
children: [
Container(
@ -310,7 +309,7 @@ class _LandPageState extends State<LandPage> {
textScaleFactor: AppStyle.getScaleFactor(context),
).expanded
],
).paddingOnly(left: 14, right: 14, top: 21, bottom: 21),
).paddingOnly(start: 14, end: 14, top: 21, bottom: 21),
Divider(
height: 1,
thickness: 1,
@ -438,7 +437,7 @@ class _LandPageState extends State<LandPage> {
6.width,
Image.asset("assets/images/cloud_logo.png", width: 32, height: 32)
],
).paddingOnly(left: 20, right: 20, top: 8, bottom: 8),
).paddingOnly(start: 20, end: 20, top: 8, bottom: 8),
],
),
),

@ -14,15 +14,12 @@ import 'package:test_sa/controllers/validator/validator.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
import 'package:test_sa/views/widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/date_and_time/time_picker.dart';
import 'package:test_sa/views/widgets/equipment/device_button.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/sound/record_sound.dart';
@ -36,8 +33,9 @@ import 'package:test_sa/views/widgets/titles/app_sub_title.dart';
import '../../../../controllers/providers/api/status_drop_down/service_reqest/service_request_through_provider.dart';
import '../../../../controllers/providers/api/status_drop_down/service_reqest/service_request_type_provider.dart';
import '../../../app_style/sizing.dart';
import '../../../widgets/date_and_time/date_picker.dart';
import '../../../../models/device/device.dart';
import '../../../../models/enums/translation_keys.dart';
import '../../../../new_views/common_widgets/default_app_bar.dart';
import '../../../widgets/status/service_request/service_request_first_action.dart';
import '../../../widgets/status/service_request/service_request_loan_availability.dart';
@ -60,8 +58,7 @@ class CreateRequestPageState extends State<CreateRequestPage> {
final List<File> _deviceImages = [];
bool _isLoading = false;
bool _showDatePicker = false;
Device _device;
Device _asset;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
TextEditingController _maintenanceController, _commentController, _reviewCommentController;
@ -75,7 +72,7 @@ class CreateRequestPageState extends State<CreateRequestPage> {
_commentController = TextEditingController();
if (widget.serviceRequest != null) {
_serviceRequest = widget.serviceRequest;
_device = _serviceRequest.device;
_asset = _serviceRequest.device;
_deviceImages.addAll(_serviceRequest.devicePhotos.map((e) => File(e)).toList());
_showDatePicker = _serviceRequest.firstAction != null && _serviceRequest.firstAction.name == "Need a visit";
if (_showDatePicker && _serviceRequest.visitDate != null) {
@ -130,6 +127,7 @@ class CreateRequestPageState extends State<CreateRequestPage> {
return Scaffold(
key: _scaffoldKey,
appBar: const DefaultAppBar(title: TranslationKeys.newServiceRequest),
body: SafeArea(
child: LoadingManager(
isLoading: _isLoading,
@ -138,316 +136,245 @@ class CreateRequestPageState extends State<CreateRequestPage> {
onRefresh: () async {},
child: Form(
key: _formKey,
child: Stack(
child: Column(
children: [
ListView(
children: [
//AppNameBar(),
const SizedBox(height: 16),
Hero(
tag: "logo",
child: Image(
height: _height / 6,
image: const AssetImage("assets/images/logo.png"),
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
PickAsset(
device: _asset,
onPickAsset: (asset) {
_asset = asset;
setState(() {});
},
),
),
Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
widget.serviceRequest == null ? context.translation.newServiceRequest : context.translation.updateServiceRequest,
style: Theme.of(context).textTheme.headline5.copyWith(color: AColors.cyan, fontWeight: FontWeight.w600),
),
const SizedBox(
height: 8,
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
12.height,
_userProvider.user.clientId == null
? const SizedBox.shrink()
: ATextFormField(
enable: false,
initialValue: _userProvider.user.clientName ?? context.translation.noHospitalFound,
hintText: context.translation.hospital,
prefixIconData: FontAwesomeIcons.hospital,
style: Theme.of(context).textTheme.subtitle1,
),
12.height,
_userProvider.user.departmentId == null || (_userProvider.user?.departmentId?.isEmpty ?? false)
? const SizedBox.shrink()
: Container(
padding: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: const Color(0xfff5f5f5),
border: Border.all(
color: const Color(0xffefefef),
),
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: _userProvider.user.departmentName
?.map(
(e) => Text(
e?.trim() ?? "",
style: Theme.of(context).textTheme.titleMedium.copyWith(color: AColors.black),
),
)
?.toList() ??
[],
),
Icon(
FontAwesomeIcons.hospitalUser,
size: 20 * AppStyle.getScaleFactor(context),
color: const Color(0xff2e303a),
),
],
),
),
12.height,
DeviceButton(
device: _device,
onDevicePick: (device) {
_device = device;
setState(() {});
},
),
const SizedBox(
height: 8,
),
const ASubTitle("Priority"),
const SizedBox(
height: 4,
),
ServiceRequestPriorityMenu(
initialValue: widget.serviceRequest?.priority,
const ASubTitle("Priority"),
const SizedBox(
height: 4,
),
ServiceRequestPriorityMenu(
initialValue: widget.serviceRequest?.priority,
onSelect: (status) {
_serviceRequest.priority = status;
},
enabled: widget.serviceRequest == null ? true : false,
),
const SizedBox(
height: 8,
),
const ASubTitle("Equipment Status"),
const SizedBox(
height: 4,
),
ServiceRequestDefectTypesMenu(
initialValue: _serviceRequest.defectType,
onSelect: (status) {
_serviceRequest.defectType = status;
},
enabled: widget.serviceRequest == null ? true : false,
),
12.height,
const SizedBox(
height: 8,
),
const ASubTitle("Type of Request"),
const SizedBox(
height: 4,
),
ServiceRequestTypesMenu(
initialValue: _serviceRequest.type,
onSelect: (status) {
_serviceRequest.type = status;
},
enabled: false,
withDefaultItem: widget.serviceRequest == null,
),
const SizedBox(
height: 8,
),
const ASubTitle("Through"),
const SizedBox(
height: 4,
),
ServiceRequestedThroughMenu(
initialValue: _serviceRequest.requestedThrough,
enabled: false,
),
if (widget.serviceRequest != null) 12.height,
if (widget.serviceRequest != null) const ASubTitle("First Action"),
const SizedBox(
height: 4,
),
if (widget.serviceRequest != null)
ServiceRequestedFirstAction(
initialValue: _serviceRequest.firstAction,
enabled: !isFirstActionSubmitted,
onSelect: (status) {
_serviceRequest.priority = status;
_dateTime = null;
_serviceRequest.firstAction = status;
_showDatePicker = _serviceRequest.firstAction != null && _serviceRequest.firstAction.name == "Need a visit";
_serviceRequestsProvider.notifyListeners();
},
enabled: widget.serviceRequest == null ? true : false,
),
const SizedBox(
height: 8,
),
const ASubTitle("Equipment Status"),
const SizedBox(
height: 4,
),
ServiceRequestDefectTypesMenu(
initialValue: _serviceRequest.defectType,
onSelect: (status) {
_serviceRequest.defectType = status;
if (_showDatePicker) 12.height,
if (_showDatePicker)
ADateTimePicker(
date: _dateTime,
enable: !isFirstActionSubmitted,
from: DateTime.now(),
onDateTimePicker: (date) {
_dateTime = date;
setState(() {});
},
enabled: widget.serviceRequest == null ? true : false,
),
12.height,
const SizedBox(
height: 8,
),
const ASubTitle("Type of Request"),
const SizedBox(
height: 4,
),
ServiceRequestTypesMenu(
initialValue: _serviceRequest.type,
if (widget.serviceRequest != null) 12.height,
if (widget.serviceRequest != null) const ASubTitle("Loan Availability"),
const SizedBox(
height: 4,
),
if (widget.serviceRequest != null)
ServiceRequestedLoanAvailability(
initialValue: _serviceRequest.loanAvailability,
onSelect: (status) {
_serviceRequest.type = status;
_serviceRequest.loanAvailability = status;
},
enabled: false,
withDefaultItem: widget.serviceRequest == null,
),
const SizedBox(
height: 8,
),
const ASubTitle("Through"),
const SizedBox(
height: 4,
),
ServiceRequestedThroughMenu(
initialValue: _serviceRequest.requestedThrough,
enabled: false,
),
if (widget.serviceRequest != null) 12.height,
if (widget.serviceRequest != null) const ASubTitle("First Action"),
const SizedBox(
height: 4,
),
if (widget.serviceRequest != null)
ServiceRequestedFirstAction(
initialValue: _serviceRequest.firstAction,
enabled: !isFirstActionSubmitted,
onSelect: (status) {
_dateTime = null;
_serviceRequest.firstAction = status;
_showDatePicker = _serviceRequest.firstAction != null && _serviceRequest.firstAction.name == "Need a visit";
_serviceRequestsProvider.notifyListeners();
},
),
if (_showDatePicker) 12.height,
if (_showDatePicker)
ADateTimePicker(
date: _dateTime,
enable: !isFirstActionSubmitted,
from: DateTime.now(),
onDateTimePicker: (date) {
_dateTime = date;
setState(() {});
},
),
if (widget.serviceRequest != null) 12.height,
if (widget.serviceRequest != null) const ASubTitle("Loan Availability"),
const SizedBox(
height: 4,
),
if (widget.serviceRequest != null)
ServiceRequestedLoanAvailability(
initialValue: _serviceRequest.loanAvailability,
onSelect: (status) {
_serviceRequest.loanAvailability = status;
},
),
12.height,
if (widget.serviceRequest != null) const ASubTitle("Comments"),
const SizedBox(
height: 4,
),
if (widget.serviceRequest != null)
ATextFormField(
controller: _reviewCommentController,
initialValue: _serviceRequest.reviewComment,
hintText: context.translation.comment,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.multiline,
onSaved: (value) {
_serviceRequest.reviewComment = value;
},
enable: widget.serviceRequest != null ? false : true,
),
12.height,
MultiFilesPicker(
label: context.translation.deviceFiles,
files: _deviceImages,
enabled: widget.serviceRequest == null ? true : false,
12.height,
if (widget.serviceRequest != null) const ASubTitle("Comments"),
const SizedBox(
height: 4,
),
if (widget.serviceRequest != null)
ATextFormField(
controller: _reviewCommentController,
initialValue: _serviceRequest.reviewComment,
hintText: _subtitle.comment,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.multiline,
onSaved: (value) {
_serviceRequest.reviewComment = value;
},
enable: widget.serviceRequest != null ? false : true,
),
12.height,
SpeechToTextButton(
controller: _maintenanceController,
12.height,
MultiFilesPicker(
label: _subtitle.deviceFiles,
files: _deviceImages,
enabled: widget.serviceRequest == null ? true : false,
),
12.height,
SpeechToTextButton(
controller: _maintenanceController,
enabled: widget.serviceRequest == null ? true : false,
),
12.height,
ATextFormField(
controller: _maintenanceController,
initialValue: _serviceRequest.callComments,
hintText: _subtitle.maintenanceIssue,
prefixIconData: FontAwesomeIcons.triangleExclamation,
style: Theme.of(context).textTheme.titleLarge,
textInputType: TextInputType.multiline,
validator: (value) => widget.serviceRequest != null || Validator.hasValue(value) ? null : _subtitle.maintenanceIssueRequired,
onSaved: (value) {
_serviceRequest.callComments = value;
},
enable: widget.serviceRequest == null ? true : false,
),
12.height,
if (_serviceRequest.audio?.isNotEmpty == true)
ASoundPlayer(
audio: _serviceRequest.audio,
)
else
RecordSound(
onRecord: (audio) {
_serviceRequest.audio = audio;
},
enabled: widget.serviceRequest == null ? true : false,
),
12.height,
12.height,
if (widget.serviceRequest != null)
ATextFormField(
controller: _maintenanceController,
initialValue: _serviceRequest.callComments,
hintText: context.translation.maintenanceIssue,
prefixIconData: FontAwesomeIcons.triangleExclamation,
style: Theme.of(context).textTheme.titleLarge,
controller: _commentController,
initialValue: _serviceRequest.comments,
hintText: _subtitle.comment,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.multiline,
validator: (value) => widget.serviceRequest != null || Validator.hasValue(value) ? null : context.translation.maintenanceIssueRequired,
onSaved: (value) {
_serviceRequest.callComments = value;
_serviceRequest.comments = value;
},
enable: widget.serviceRequest == null ? true : false,
),
12.height,
if (_serviceRequest.audio?.isNotEmpty == true)
ASoundPlayer(
audio: _serviceRequest.audio,
)
else
RecordSound(
onRecord: (audio) {
_serviceRequest.audio = audio;
},
enabled: widget.serviceRequest == null ? true : false,
),
12.height,
if (widget.serviceRequest != null)
ATextFormField(
controller: _commentController,
initialValue: _serviceRequest.comments,
hintText: context.translation.comment,
style: Theme.of(context).textTheme.titleMedium,
textInputType: TextInputType.multiline,
onSaved: (value) {
_serviceRequest.comments = value;
},
),
],
).paddingOnly(left: 20, right: 20),
Padding(
padding: const EdgeInsets.all(20.0),
child: AButton(
text: widget.serviceRequest == null ? context.translation.submit : context.translation.update,
onPressed: () async {
if (!_formKey.currentState.validate()) return;
if (_device?.id == null) {
Fluttertoast.showToast(msg: context.translation.pickDevice);
return;
}
if (_serviceRequest.firstAction?.name == "Need a visit" && _dateTime == null) {
Fluttertoast.showToast(msg: "first action is required");
return;
}
if (widget.serviceRequest != null && (_serviceRequest?.engineerId == null || (_serviceRequest?.engineerId?.isEmpty ?? false))) {
await Fluttertoast.showToast(msg: "No Assigned Employee");
return;
}
_formKey.currentState.save();
_serviceRequest.deviceId = _device?.id;
if (widget.serviceRequest == null) {
_serviceRequest.type = Provider.of<ServiceRequestTypeProvider>(context, listen: false).getDefaultItem();
}
_serviceRequest.requestedThrough = Provider.of<ServiceRequestedThroughProvider>(context, listen: false).getDefaultItem();
_isLoading = true;
setState(() {});
_serviceRequest.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList();
if (_serviceRequest.audio != null) {
if (_isLocalUrl(_serviceRequest.audio)) {
final File file = File(_serviceRequest.audio);
_serviceRequest.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}";
}
}
int status = 0;
if (widget.serviceRequest == null) {
status = await _serviceRequestsProvider.createRequest(
user: _userProvider.user,
host: _settingProvider.host,
serviceRequest: _serviceRequest,
);
} else {
status = await _serviceRequestsProvider.updateDate(
user: _userProvider.user,
host: _settingProvider.host,
request: _serviceRequest,
date: _dateTime,
);
}
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(
msg: context.translation.successfulRequestMessage,
);
Navigator.of(context).pop();
} else {
String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: context.translation);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(errorMessage),
));
}
},
),
),
],
),
const ABackButton(),
],
),
).expanded,
AppFilledButton(
onPressed: () async {
if (!_formKey.currentState.validate()) return;
if (_asset?.id == null) {
Fluttertoast.showToast(msg: _subtitle.pickDevice);
return;
}
if (_serviceRequest.firstAction?.name == "Need a visit" && _dateTime == null) {
Fluttertoast.showToast(msg: "first action is required");
return;
}
if (widget.serviceRequest != null && (_serviceRequest?.engineerId == null || (_serviceRequest?.engineerId?.isEmpty ?? false))) {
await Fluttertoast.showToast(msg: "No Assigned Employee");
return;
}
_formKey.currentState.save();
_serviceRequest.deviceId = _asset?.id;
if (widget.serviceRequest == null) {
_serviceRequest.type = Provider.of<ServiceRequestTypeProvider>(context, listen: false).getDefaultItem();
}
_serviceRequest.requestedThrough = Provider.of<ServiceRequestedThroughProvider>(context, listen: false).getDefaultItem();
_isLoading = true;
setState(() {});
_serviceRequest.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList();
if (_serviceRequest.audio != null) {
if (_isLocalUrl(_serviceRequest.audio)) {
final File file = File(_serviceRequest.audio);
_serviceRequest.audio = "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}";
}
}
int status = 0;
if (widget.serviceRequest == null) {
status = await _serviceRequestsProvider.createRequest(
user: _userProvider.user,
host: _settingProvider.host,
serviceRequest: _serviceRequest,
);
} else {
status = await _serviceRequestsProvider.updateDate(
user: _userProvider.user,
host: _settingProvider.host,
request: _serviceRequest,
date: _dateTime,
);
}
_isLoading = false;
setState(() {});
if (status >= 200 && status < 300) {
Fluttertoast.showToast(
msg: _subtitle.requestCompleteSuccessfully,
);
Navigator.of(context).pop();
} else {
String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: _subtitle);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(errorMessage),
));
}
},
label: TranslationKeys.submitRequest),
],
),
),
).paddingOnly(start: 16, end: 16, bottom: 24, top: 16),
),
),
);

@ -5,7 +5,6 @@ import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
@ -24,9 +23,7 @@ import 'package:test_sa/views/widgets/buttons/app_back_button.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_icon_button.dart';
import 'package:test_sa/views/widgets/images/files_list.dart';
import 'package:test_sa/views/widgets/images/images_list.dart';
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import 'package:test_sa/views/widgets/sound/sound_player.dart';
@ -84,7 +81,7 @@ class RequestDetailsPage extends StatelessWidget {
8.height,
Text(serviceRequest.deviceEnName, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))),
Text(
'${context.translation.assetNumber}: ${serviceRequest.device.number}',
'${context.translation.assetNumber}: ${serviceRequest.device.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
@ -393,7 +390,7 @@ class RequestDetailsPage extends StatelessWidget {
// )
],
).expanded,
AppFilledButton(label: context.translation.login, maxWidth: true, onPressed: () {}).paddingOnly(left: 16, right: 16, bottom: 24),
AppFilledButton(label: context.translation.login, maxWidth: true, onPressed: () {}).paddingOnly(start: 16, end: 16, bottom: 24),
],
),
// workOrders.isEmpty ?

@ -2,13 +2,13 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device_transfer_info.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:test_sa/views/widgets/requests/info_row.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
import '../../../controllers/providers/api/user_provider.dart';
import '../../../models/device/device_transfer_info.dart';
import '../images/multi_image_picker.dart';
class DeviceTransferInfoSection extends StatelessWidget {

@ -3,17 +3,15 @@ import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class DeviceTransferItem extends StatelessWidget {
final int index;
final DeviceTransfer item;
final Function(DeviceTransfer) onPressed;
final AssetTransfer item;
final Function(AssetTransfer) onPressed;
const DeviceTransferItem({Key key, this.item, this.onPressed, this.index}) : super(key: key);
@ -47,21 +45,21 @@ class DeviceTransferItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
item.title ?? "-----",
/*item.title ??*/ "-----",
style: Theme.of(context).textTheme.headline6.copyWith(color: onItemColor, fontSize: 16, fontWeight: FontWeight.bold),
),
Divider(
color: onItemColor,
),
Text(
item.device?.number ?? "-----",
/*item.asset?.number ??*/ "-----",
style: Theme.of(context).textTheme.headline6.copyWith(color: onItemColor, fontSize: 16, fontWeight: FontWeight.bold),
),
Divider(
color: onItemColor,
),
Text(
item.device.assetName ?? "",
/*item.asset.assetName ??*/ "",
style: Theme.of(context).textTheme.headline6.copyWith(color: onItemColor, fontSize: 16, fontWeight: FontWeight.bold),
),
Divider(
@ -77,71 +75,71 @@ class DeviceTransferItem extends StatelessWidget {
),
),
),
StatusLabel(
backgroundColor: AColors.getRequestStatusColor(item.sender.status?.id),
label: item.sender.status?.name,
)
// StatusLabel(
// backgroundColor: AColors.getRequestStatusColor(item.sender.status?.id),
// label: item.sender.status?.name,
// )
],
),
//const SizedBox(height: 8,),
Row(
children: [
Expanded(
child: Text(
item.sender.client.name,
style: Theme.of(context).textTheme.subtitle2.copyWith(
color: onItemColor,
),
),
),
],
),
if (item.sender.department.id != null)
Text(
item.sender.department.name,
style: Theme.of(context).textTheme.bodySmall.copyWith(
color: onItemColor,
),
),
// Row(
// children: [
// Expanded(
// child: Text(
// item.sender.client.name,
// style: Theme.of(context).textTheme.subtitle2.copyWith(
// color: onItemColor,
// ),
// ),
// ),
// ],
// ),
// if (item.sender.department.id != null)
// Text(
// item.sender.department.name,
// style: Theme.of(context).textTheme.bodySmall.copyWith(
// color: onItemColor,
// ),
// ),
Divider(
color: onItemColor,
),
Row(
children: [
Expanded(
child: Text(
context.translation.to,
style: Theme.of(context).textTheme.subtitle2.copyWith(
color: onItemColor,
),
),
),
StatusLabel(
backgroundColor: AColors.getRequestStatusColor(item.receiver.status?.id),
label: item.receiver.status?.name,
)
],
),
//const SizedBox(height: 8,),
Row(
children: [
Expanded(
child: Text(
item.receiver.client.name,
style: Theme.of(context).textTheme.subtitle2.copyWith(
color: onItemColor,
),
),
),
],
),
if (item.receiver.department.id != null)
Text(
item.receiver.department.name,
style: Theme.of(context).textTheme.bodySmall.copyWith(
color: onItemColor,
),
),
// Row(
// children: [
// Expanded(
// child: Text(
// context.translation.to,
// style: Theme.of(context).textTheme.subtitle2.copyWith(
// color: onItemColor,
// ),
// ),
// ),
// StatusLabel(
// backgroundColor: AColors.getRequestStatusColor(item.receiver.status?.id),
// label: item.receiver.status?.name,
// )
// ],
// ),
// //const SizedBox(height: 8,),
// Row(
// children: [
// Expanded(
// child: Text(
// item.receiver.client.name,
// style: Theme.of(context).textTheme.subtitle2.copyWith(
// color: onItemColor,
// ),
// ),
// ),
// ],
// ),
// if (item.receiver.department.id != null)
// Text(
// item.receiver.department.name,
// style: Theme.of(context).textTheme.bodySmall.copyWith(
// color: onItemColor,
// ),
// ),
//Divider(color: onItemColor,),
],
),

@ -1,15 +1,15 @@
import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device_transfer.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import 'package:test_sa/views/widgets/device_trancfer/device_transfer_item.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
class DeviceTransferList extends StatelessWidget {
final List<DeviceTransfer> items;
final List<AssetTransfer> items;
final bool nextPage;
final Future<void> Function() onLazyLoad;

@ -33,7 +33,7 @@ class DrawerItem extends StatelessWidget {
textScaleFactor: AppStyle.getScaleFactor(context),
),
],
).paddingOnly(left: 20, right: 20),
).paddingOnly(start: 20, end: 20),
),
);
}

@ -4,11 +4,12 @@ import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import '../../../models/device/device.dart';
class AutoCompleteDeviceField extends StatefulWidget {
final Device initialValue;
final int hospitalId;
@ -22,13 +23,13 @@ class AutoCompleteDeviceField extends StatefulWidget {
class _AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
SettingProvider _settingProvider;
DevicesProvider _devicesProvider;
AssetProvider _devicesProvider;
UserProvider _userProvider;
TextEditingController _controller;
@override
void initState() {
_controller = TextEditingController(text: widget.initialValue.serialNumber);
_controller = TextEditingController(text: widget.initialValue.assetSerialNo);
super.initState();
}
@ -42,8 +43,8 @@ class _AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_devicesProvider = Provider.of<DevicesProvider>(context);
//
_devicesProvider = Provider.of<AssetProvider>(context);
return LoadingManager(
isLoading: _devicesProvider.isLoading,
isFailedLoading: _devicesProvider.devices == null,
@ -82,12 +83,12 @@ class _AutoCompleteDeviceFieldState extends State<AutoCompleteDeviceField> {
},
itemBuilder: (context, device) {
return ListTile(
title: Text(device.serialNumber),
title: Text(device.assetSerialNo),
subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"),
);
},
onSuggestionSelected: (device) {
_controller.text = device.serialNumber;
_controller.text = device.assetSerialNo;
widget.onPick(device.id);
},
),

@ -24,7 +24,7 @@ class AutoCompleteModelField extends StatefulWidget {
class _AutoCompleteModelFieldState extends State<AutoCompleteModelField> {
SettingProvider _settingProvider;
DevicesProvider _devicesProvider;
AssetProvider _devicesProvider;
UserProvider _userProvider;
TextEditingController _controller;
@ -44,8 +44,8 @@ class _AutoCompleteModelFieldState extends State<AutoCompleteModelField> {
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_devicesProvider = Provider.of<DevicesProvider>(context);
//
_devicesProvider = Provider.of<AssetProvider>(context);
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(

@ -1,99 +0,0 @@
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
class DeviceButton extends StatelessWidget {
final Function(Device) onDevicePick;
final Device device;
const DeviceButton({Key key, this.device, this.onDevicePick}) : super(key: key);
@override
Widget build(BuildContext context) {
return ElevatedButton(
style: ElevatedButton.styleFrom(
elevation: 0,
padding: EdgeInsets.symmetric(horizontal: 16, vertical: device == null ? 12 : 8),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
),
foregroundColor: AColors.primaryColor,
backgroundColor: AColors.inputFieldBackgroundColor,
),
child: Row(
children: [
FaIcon(
FontAwesomeIcons.hardDrive,
size: 28,
color: AColors.black,
),
device == null
? Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 6),
child: Text(
context.translation.pickDevice,
style: Theme.of(context).textTheme.subtitle1,
textScaleFactor: AppStyle.getScaleFactor(context),
textDirection: TextDirection.rtl,
textAlign: TextAlign.left,
),
),
)
: Expanded(
child: ListTile(
contentPadding: EdgeInsets.all(0),
title: Text(
"${context.translation.sn} : " + device.serialNumber,
style: Theme.of(context).textTheme.subtitle1,
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Divider(
color: Theme.of(context).textTheme.subtitle1.color,
),
Text(
"${context.translation.assetNumber} : ${device.number}",
style: Theme.of(context).textTheme.subtitle2,
),
Divider(
color: Theme.of(context).textTheme.subtitle1.color,
),
Text(
"${context.translation.assetName} : ${device.modelDefinition.assetName}",
style: Theme.of(context).textTheme.subtitle2,
),
Divider(
color: Theme.of(context).textTheme.subtitle1.color,
),
Text(
"${context.translation.brand} : ${device.modelDefinition.manufacturerName}",
style: Theme.of(context).textTheme.subtitle2,
),
Divider(
color: Theme.of(context).textTheme.subtitle1.color,
),
Text(
"${context.translation.model} : ${device.modelDefinition.modelName}",
style: Theme.of(context).textTheme.subtitle2,
),
],
),
)),
const Icon(Icons.keyboard_arrow_down, size: 28, color: AColors.grey3A),
],
),
onPressed: () async {
Device _device = await Navigator.of(context).pushNamed(SingleDevicePicker.id) as Device;
onDevicePick(_device);
});
}
}

@ -6,6 +6,8 @@ import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import '../../../models/device/device.dart';
class DeviceItem extends StatelessWidget {
final Device device;
final Function(Device) onPressed;
@ -39,7 +41,7 @@ class DeviceItem extends StatelessWidget {
color: Theme.of(context).scaffoldBackgroundColor,
),
Text(
"${context.translation.assetNumber} : ${device.number}",
"${context.translation.assetNumber} : ${device.assetNumber}",
style: Theme.of(context).textTheme.subtitle1.copyWith(color: AColors.white),
),
Divider(

@ -0,0 +1,112 @@
import 'package:flutter/material.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/translation_keys.dart';
import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart';
import 'package:test_sa/views/widgets/equipment/single_device_picker.dart';
import '../../../models/device/device.dart';
class PickAsset extends StatelessWidget {
final Function(Device) onPickAsset;
final Device device;
const PickAsset({Key key, this.device, this.onPickAsset}) : super(key: key);
@override
Widget build(BuildContext context) {
return Column(
children: [
AppTextFormField(
enable: false,
labelText: TranslationKeys.device,
initialValue: context.translate(TranslationKeys.site),
suffixIcon: "qr".toSvgAsset(height: 24, fit: BoxFit.fitHeight).paddingOnly(end: 16),
).onPress(() async {
Device device = await Navigator.of(context).pushNamed(SingleDevicePicker.id) as Device;
onPickAsset(device);
}),
if (device != null) 8.height,
if (device != null)
Card(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
context.translate(TranslationKeys.myAssets).heading5(context),
8.height,
"${context.translate(TranslationKeys.assetNo)}: ${device.assetNumber}".bodyText(context),
"${context.translate(TranslationKeys.manufacture)}: ${device.modelDefinition?.manufacturerName}".bodyText(context),
"${context.translate(TranslationKeys.model)}: ${device.modelDefinition?.modelName}".bodyText(context),
"${context.translate(TranslationKeys.serialNumber)}: ${device.assetNumber}".bodyText(context),
const Divider().defaultStyle(context),
"${context.translate(TranslationKeys.department)}: ${device.department?.departmentName}".bodyText(context),
"${context.translate(TranslationKeys.site)}: ${device.site?.custName}".bodyText(context),
],
).paddingAll(16),
),
],
);
// return ElevatedButton(
// style: ElevatedButton.styleFrom(
// elevation: 0,
// padding: EdgeInsets.symmetric(horizontal: 16, vertical: device == null ? 12 : 8),
// shape: RoundedRectangleBorder(
// borderRadius: BorderRadius.circular(AppStyle.borderRadius * AppStyle.getScaleFactor(context)),
// ),
// foregroundColor: AColors.primaryColor,
// backgroundColor: AColors.inputFieldBackgroundColor,
// ),
// child: Row(
// children: [
// Expanded(
// child: ListTile(
// contentPadding: const EdgeInsets.all(0),
// title: Text(
// "${"context"} : ${device.serialNumber}",
// style: Theme.of(context).textTheme.subtitle1,
// ),
// subtitle: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Divider(
// color: Theme.of(context).textTheme.subtitle1.color,
// ),
// Text(
// "${_subtitle.assetNumber} : ${device.number}",
// style: Theme.of(context).textTheme.subtitle2,
// ),
// Divider(
// color: Theme.of(context).textTheme.subtitle1.color,
// ),
// Text(
// "${_subtitle.assetName} : ${device.modelDefinition.assetName}",
// style: Theme.of(context).textTheme.subtitle2,
// ),
// Divider(
// color: Theme.of(context).textTheme.subtitle1.color,
// ),
// Text(
// "${_subtitle.brand} : ${device.modelDefinition.manufacturerName}",
// style: Theme.of(context).textTheme.subtitle2,
// ),
// Divider(
// color: Theme.of(context).textTheme.subtitle1.color,
// ),
// Text(
// "${_subtitle.model} : ${device.modelDefinition.modelName}",
// style: Theme.of(context).textTheme.subtitle2,
// ),
// ],
// ),
// )),
// const Icon(Icons.keyboard_arrow_down, size: 28, color: AColors.grey3A),
// ],
// ),
// onPressed: () async {
// Device _device = await Navigator.of(context).pushNamed(SingleDevicePicker.id) as Device;
// onDevicePick(_device);
// });
}
}

@ -5,13 +5,12 @@ import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/views/widgets/equipment/device_item.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/loaders/no_item_found.dart';
import '../../../models/device/device.dart';
import '../app_text_form_field.dart';
import '../qr/scan_qr.dart';
@ -24,7 +23,7 @@ class SingleDevicePicker extends StatefulWidget {
}
class _SingleDevicePickerState extends State<SingleDevicePicker> {
DevicesProvider _devicesProvider;
AssetProvider _devicesProvider;
UserProvider _userProvider;
SettingProvider _settingProvider;
List<Device> _searchableList = [];
@ -73,7 +72,7 @@ class _SingleDevicePickerState extends State<SingleDevicePicker> {
@override
Widget build(BuildContext context) {
_devicesProvider = Provider.of<DevicesProvider>(context);
_devicesProvider = Provider.of<AssetProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_settingProvider = Provider.of<SettingProvider>(context);

@ -4,11 +4,12 @@ import 'package:provider/provider.dart';
import 'package:test_sa/controllers/providers/api/devices_provider.dart';
import 'package:test_sa/controllers/providers/api/user_provider.dart';
import 'package:test_sa/controllers/providers/settings/setting_provider.dart';
import 'package:test_sa/models/device/device.dart';
import 'package:test_sa/models/lookup.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import '../../../../models/device/device.dart';
class AutoCompleteDeviceNumberField extends StatefulWidget {
final Lookup initialValue;
final int hospitalId;
@ -22,7 +23,7 @@ class AutoCompleteDeviceNumberField extends StatefulWidget {
class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumberField> {
SettingProvider _settingProvider;
DevicesProvider _devicesProvider;
AssetProvider _devicesProvider;
UserProvider _userProvider;
TextEditingController _controller;
@ -42,8 +43,8 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
Widget build(BuildContext context) {
_settingProvider = Provider.of<SettingProvider>(context);
_userProvider = Provider.of<UserProvider>(context);
_devicesProvider = Provider.of<DevicesProvider>(context);
//
_devicesProvider = Provider.of<AssetProvider>(context);
return Container(
padding: const EdgeInsets.symmetric(horizontal: 16),
decoration: BoxDecoration(
@ -74,13 +75,13 @@ class _AutoCompleteDeviceNumberFieldState extends State<AutoCompleteDeviceNumber
},
itemBuilder: (context, device) {
return ListTile(
title: Text(device.number),
title: Text(device.assetNumber),
subtitle: Text("${device.modelDefinition.modelName}/${device.modelDefinition.manufacturerName}"),
);
},
onSuggestionSelected: (device) {
_controller.text = device.number;
widget.onPick(Lookup(id: device.id, name: device.number));
_controller.text = device.assetNumber;
widget.onPick(Lookup(id: device.id, name: device.assetNumber));
},
),
);

@ -1,5 +1,4 @@
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
@ -11,14 +10,10 @@ import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/enums/translation_keys.dart';
import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/models/subtitle.dart';
import 'package:test_sa/models/user.dart';
import 'package:test_sa/views/app_style/colors.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/pages/user/requests/report/create_service_report.dart';
import 'package:test_sa/views/widgets/loaders/image_loader.dart';
import 'package:test_sa/views/widgets/requests/request_status.dart';
class ServiceRequestItem extends StatelessWidget {
@ -71,7 +66,7 @@ class ServiceRequestItem extends StatelessWidget {
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(
'${context.translation.assetNumber}: ${request.device.number}',
'${context.translation.assetNumber}: ${request.device.assetNumber}',
style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)),
),
Text(

@ -2,24 +2,19 @@ import 'package:flutter/material.dart';
import 'package:test_sa/controllers/localization/localization.dart';
import 'package:test_sa/extensions/context_extension.dart';
import 'package:test_sa/models/device/device_transfer_search.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/views/app_style/sizing.dart';
import 'package:test_sa/views/widgets/buttons/app_button.dart';
import 'package:test_sa/views/widgets/buttons/app_small_button.dart';
import 'package:test_sa/views/widgets/equipment/device_button.dart';
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
import '../../../controllers/providers/api/hospitals_provider.dart';
import '../../../models/device/asset_transfer_search.dart';
import '../app_text_form_field.dart';
import '../gas_refill/building_type_menu.dart';
import '../gas_refill/department_type_menu.dart';
import '../gas_refill/floor_type_menu.dart';
import '../hospitals/hospital_auto_complete_field.dart';
import '../switch_button.dart';
class AssetTransferSearchDialog extends StatefulWidget {
final DeviceTransferSearch initialSearchValue;
final AssetTransfer initialSearchValue;
final bool expandedSearch;
final Function(DeviceTransferSearch) onSearch;
final Function(AssetTransfer) onSearch;
const AssetTransferSearchDialog({Key key, this.initialSearchValue, this.expandedSearch, this.onSearch}) : super(key: key);
@override
@ -27,15 +22,15 @@ class AssetTransferSearchDialog extends StatefulWidget {
}
class AssetTransferSearchDialogState extends State<AssetTransferSearchDialog> with TickerProviderStateMixin {
DeviceTransferSearch _search;
AssetTransferSearch _search;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
bool _isLoading = false;
@override
void initState() {
super.initState();
_search = DeviceTransferSearch();
_search.fromSearch(widget.initialSearchValue);
_search = AssetTransferSearch();
// _search.fromSearch(widget.initialSearchValue);
}
@override
@ -85,16 +80,16 @@ class AssetTransferSearchDialogState extends State<AssetTransferSearchDialog> wi
},
),
SizedBox(height: 8.0 * AppStyle.getScaleFactor(context)),
DeviceButton(
device: _search.device,
onDevicePick: (device) {
_search.device = device;
PickAsset(
device: _search.asset,
onPickAsset: (device) {
_search.asset = device;
setState(() {});
},
),
SizedBox(height: 8.0 * AppStyle.getScaleFactor(context)),
ATextFormField(
initialValue: _search.title,
initialValue: "_search.title",
hintText: context.translation.title,
style: Theme.of(context).textTheme.titleLarge,
textInputAction: TextInputAction.search,
@ -106,64 +101,64 @@ class AssetTransferSearchDialogState extends State<AssetTransferSearchDialog> wi
Navigator.of(context).pop(_search);
},
onSaved: (value) {
_search.title = value;
// _search.title = value;
},
),
SizedBox(height: 8.0 * AppStyle.getScaleFactor(context)),
HospitalAutoCompleteField(
initialValue: _search?.hospital?.name,
onSearch: (selected) async {
_search.building = null;
_search.floor = null;
_search.department = null;
_search.buildingsList = null;
_search.floorsList = null;
_search.departmentsList = null;
_isLoading = true;
setState(() {});
await HospitalsProvider().getHospitalsListByVal(searchVal: selected?.name ?? "").then((value) {
_search.hospital = value?.firstWhere((element) => element.name == selected.name, orElse: () => null);
_search.buildingsList = _search.hospital?.buildings;
});
_isLoading = false;
setState(() {});
},
),
// HospitalAutoCompleteField(
// initialValue: _search?.hospital?.name,
// onSearch: (selected) async {
// _search.building = null;
// _search.floor = null;
// _search.department = null;
// _search.buildingsList = null;
// _search.floorsList = null;
// _search.departmentsList = null;
// _isLoading = true;
// setState(() {});
// await HospitalsProvider().getHospitalsListByVal(searchVal: selected?.name ?? "").then((value) {
// _search.hospital = value?.firstWhere((element) => element.name == selected.name, orElse: () => null);
// _search.buildingsList = _search.hospital?.buildings;
// });
// _isLoading = false;
// setState(() {});
// },
// ),
const SizedBox(height: 8),
BuildingTypeMenu(
initialValue: _search?.building,
building: _search.buildingsList,
enabled: !_isLoading,
onSelect: (status) {
_search.building = status;
_search.floorsList = status?.floors;
setState(() {});
},
),
// BuildingTypeMenu(
// initialValue: _search?.building,
// building: _search.buildingsList,
// enabled: !_isLoading,
// onSelect: (status) {
// _search.building = status;
// _search.floorsList = status?.floors;
// setState(() {});
// },
// ),
const SizedBox(height: 8),
FloorTypeMenu(
initialValue: _search?.floor,
floors: _search.floorsList,
enabled: !_isLoading,
onSelect: (status) {
_search.floor = status;
_search.departmentsList = _search.floor?.departments;
setState(() {});
},
),
// FloorTypeMenu(
// initialValue: _search?.floor,
// floors: _search.floorsList,
// enabled: !_isLoading,
// onSelect: (status) {
// _search.floor = status;
// _search.departmentsList = _search.floor?.departments;
// setState(() {});
// },
// ),
const SizedBox(height: 8),
DepartmentTypeMenu(
initialValue: _search?.department,
departments: _search.departmentsList,
enabled: !_isLoading,
onSelect: (status) {
_search.department = status;
setState(() {});
},
),
// DepartmentTypeMenu(
// initialValue: _search?.department,
// departments: _search.departmentsList,
// enabled: !_isLoading,
// onSelect: (status) {
// _search.department = status;
// setState(() {});
// },
// ),
SizedBox(height: 8.0 * AppStyle.getScaleFactor(context)),
ATextFormField(
initialValue: _search.room,
initialValue: "_search.room",
hintText: context.translation.room,
style: Theme.of(context).textTheme.titleLarge,
textInputAction: TextInputAction.search,
@ -175,24 +170,24 @@ class AssetTransferSearchDialogState extends State<AssetTransferSearchDialog> wi
Navigator.of(context).pop(_search);
},
onSaved: (value) {
_search.room = value;
// _search.room = value;
},
),
SizedBox(height: 16.0 * AppStyle.getScaleFactor(context)),
Visibility(
visible: (_search.toMap()..remove("mostRecent"))?.isNotEmpty ?? false,
child: Padding(
padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
child: AButton(
padding: EdgeInsets.zero,
text: context.translation.clearSearch,
onPressed: () {
_search = DeviceTransferSearch();
Navigator.of(context).pop(_search);
},
),
),
),
// Visibility(
// visible: (_search.toMap()..remove("mostRecent"))?.isNotEmpty ?? false,
// child: Padding(
// padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 16),
// child: AButton(
// padding: EdgeInsets.zero,
// text: context.translation.clearSearch,
// onPressed: () {
// _search = DeviceTransferSearch();
// Navigator.of(context).pop(_search);
// },
// ),
// ),
// ),
],
),
),

Loading…
Cancel
Save