From 8c0ef0acf082e8ec40ee0ecc846df4d6d874b4eb Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Mon, 12 Jun 2023 12:39:37 +0300 Subject: [PATCH] transfer device + track transfer device --- assets/subtitles/ar_subtitle.json | 8 +- assets/subtitles/en_subtitle.json | 10 +- .../api/device_transfer_provider.dart | 58 +++++--- lib/models/device/device.dart | 15 +++ lib/models/device/device_transfer.dart | 7 + lib/models/device/device_transfer_info.dart | 3 + lib/models/subtitle.dart | 21 ++- .../device_transfer_details.dart | 24 ++-- .../request_device_transfer.dart | 124 ++++++++++++++---- .../device_transfer_info_section.dart | 4 + 10 files changed, 218 insertions(+), 56 deletions(-) diff --git a/assets/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json index f9962db6..271c9c1b 100644 --- a/assets/subtitles/ar_subtitle.json +++ b/assets/subtitles/ar_subtitle.json @@ -201,5 +201,11 @@ "repairLocation" : "موقع الإصلاح", "travelingExpense" : "مصاريف التنقل", "startDate" : "وقت البدء", - "endDate" : "وقت الانتهاء" + "endDate" : "وقت الانتهاء", + "destinationSite": "موقع الوجهه", + "building": "بناء", + "floor": "طابق", + "department": "قسم", + "room": "غرفه", + "actions": "اجراءات" } \ No newline at end of file diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json index 8f43f43d..ee7b0c25 100644 --- a/assets/subtitles/en_subtitle.json +++ b/assets/subtitles/en_subtitle.json @@ -201,5 +201,13 @@ "repairLocation" : "Repair Location", "travelingExpense": "Traveling Expense", "startDate" : "Start Date", - "endDate" : "End Date" + "endDate" : "End Date", + "destinationSite": "Destination Site", + "building": "Building", + "floor": "Floor", + "department": "Department", + "room": "Room", + "actions": "Actions" + + } \ No newline at end of file diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index b0140531..ace715d4 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -8,6 +8,8 @@ import 'package:test_sa/models/device/device_transfer.dart'; import 'package:test_sa/models/device/device_transfer_info.dart'; import 'package:test_sa/models/user.dart'; +import '../../../models/hospital.dart'; + class DeviceTransferProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 12; @@ -17,6 +19,11 @@ class DeviceTransferProvider extends ChangeNotifier { items = null; nextPage = true; stateCode = null; + hospital = null; + building = null; + floor = null; + department = null; + room=""; } // state code of current request to defied error message @@ -35,6 +42,13 @@ class DeviceTransferProvider extends ChangeNotifier { // failed _loading = false bool isLoading; + + Hospital hospital; + Buildings building; + Floors floor; + Departments department; + String room; + /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 @@ -46,21 +60,6 @@ class DeviceTransferProvider extends ChangeNotifier { }) async { if (isLoading == true) return -2; isLoading = true; - - // isLoading = false; - // stateCode = 200; - // items = []; - // items.addAll(List.generate(20, (index) => DeviceTransfer( - // title: "ddddd", - // id: "5", - // device: Device(id: "1",brand: "brand",model: "model"), - // destinationClient: Hospital(name: "hospital name",id: "1"), - // destinationDepartment: Department(id: "5",name: "destination Department"), - // senderDepartment: Department(id: "5",name: "sender Department"), - // userId: "5" - // ))); - // notifyListeners(); - // return 200; Response response; try { Map body = {}; @@ -103,12 +102,36 @@ class DeviceTransferProvider extends ChangeNotifier { @required DeviceTransfer model, }) async { Map body = { - // "uid": user.id.toString(), - // "token": user.token ?? "", + "id": 0, "assetId": model.device.id ?? "", "destSiteId": model.receiver.client.id ?? "", "destDepartmentId": model.receiver.department.id ?? "", "senderSiteId": model.receiver.client.id ?? "", + // "transferNo": 0, + // "transferCode": "string", + "destBuildingId": building?.id, + "destFloorId": floor.id, + "destRoom": room, + // "senderBuildingId": 0, + // "senderFloorId": 0, + // "senderDepartmentId": 0, + // "senderRoom": "string", + // "senderAssignedEmployeeId": "string", + // "senderMachineStatusId": 0, + // "senderComment": "string", + // "senderStartDate": "2023-06-11T09:21:56.453Z", + // "senderEndDate": "2023-06-11T09:21:56.453Z", + // "senderWorkingHours": "string", + // "senderTravelingHours": "string", + // "senderAttachmentName": "string", + // "receiverAssignedEmployeeId": "string", + // "receiverMachineStatusId": 0, + // "receiverComment": "string", + // "receiverStartDate": "2023-06-11T09:21:56.453Z", + // "receiverEndDate": "2023-06-11T09:21:56.453Z", + // "receiverWorkingHours": "string", + // "receiverTravelingHours": "string", + // "receiverAttachmentName": "string" }; Response response; @@ -118,6 +141,7 @@ class DeviceTransferProvider extends ChangeNotifier { if (response.statusCode >= 200 && response.statusCode < 300) { if (items != null) { items.insert(0, DeviceTransfer.fromJson(json.decode(utf8.decode(response.bodyBytes))[0])); + reset(); notifyListeners(); } } diff --git a/lib/models/device/device.dart b/lib/models/device/device.dart index 001289e2..72f9d120 100644 --- a/lib/models/device/device.dart +++ b/lib/models/device/device.dart @@ -7,6 +7,11 @@ class Device { int id; String serialNumber; String number; + String destBuildingName; + String destDepartmentName; + String destRoom; + String destFloor; + String destSiteName; // String brand; // String model; ModelDefinition modelDefinition; @@ -17,6 +22,11 @@ class Device { this.serialNumber, this.number, this.hospital, + this.destBuildingName, + this.destDepartmentName, + this.destRoom, + this.destFloor, + this.destSiteName, // this.brand, // this.model, this.modelDefinition, @@ -29,6 +39,11 @@ class Device { number: parsedJson["assetNumber"], modelDefinition: ModelDefinition.fromJson(parsedJson["modelDefinition"]), hospital: Hospital.fromJson(parsedJson["site"]), + destBuildingName: parsedJson["destBuildingName"], + destDepartmentName: parsedJson["destDepartmentName"], + destRoom: parsedJson["destRoom"], + destFloor: parsedJson["destFloor"], + destSiteName:parsedJson['destSiteName'] // parsedJson["modelDefinition"] == null ? "" : // parsedJson["modelDefinition"]["manufacturerName"], // model: parsedJson["modelDefinition"] == null ? "" : diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index acda1187..d4d062b4 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -49,6 +49,11 @@ class DeviceTransfer { id: parsedJson["assetId"], number: parsedJson["assetNumber"], serialNumber: parsedJson["assetSerialNo"], + destBuildingName: parsedJson["destBuildingName"], + destDepartmentName: parsedJson["destDepartmentName"], + destFloor: parsedJson["destFloor"], + destRoom: parsedJson["destRoom"], + destSiteName: parsedJson["destSiteName"] ), sender: DeviceTransferInfo( travelingHours: parsedJson["senderTravelingHours"], @@ -56,6 +61,7 @@ class DeviceTransfer { workingHours: parsedJson["senderWorkingHours"], userId: parsedJson["senderAssignedEmployeeId"], userName: parsedJson["senderAssignedEmployeeName"], + assignedEmployeeName: parsedJson["senderAssignedEmployeeName"], client: Hospital(id: parsedJson["senderSiteId"], name: parsedJson["senderSiteName"]), department: Department( id: parsedJson["senderDepartmentId"], @@ -74,6 +80,7 @@ class DeviceTransfer { workingHours: parsedJson["receiverWorkingHours"], userId: parsedJson["receiverAssignedEmployeeId"], userName: parsedJson["receiverAssignedEmployeeName"], + assignedEmployeeName: parsedJson["receiverAssignedEmployeeName"], client: Hospital(id: parsedJson["destSiteId"], name: parsedJson["destSiteName"]), department: Department( id: parsedJson["destDepartmentId"], diff --git a/lib/models/device/device_transfer_info.dart b/lib/models/device/device_transfer_info.dart index ca20907e..74365ce0 100644 --- a/lib/models/device/device_transfer_info.dart +++ b/lib/models/device/device_transfer_info.dart @@ -11,6 +11,7 @@ class DeviceTransferInfo { String travelingHours; String userName; String signature; + String assignedEmployeeName; Lookup status; DeviceTransferInfo({ @@ -23,6 +24,7 @@ class DeviceTransferInfo { this.workingHours, this.signature, this.status, + this.assignedEmployeeName }); Map toJson(bool isSender) { @@ -63,6 +65,7 @@ class DeviceTransferInfo { signature: parsedJson["${key}image"], userId: parsedJson["${key}id"], comment: parsedJson["${key}comment"], + assignedEmployeeName:parsedJson["${key}AssignedEmployeeName"], client: Hospital(id: parsedJson["${key}SiteId"], name: parsedJson["${key}SiteName"]), department: Department( id: parsedJson["${key}DepartmentId"], diff --git a/lib/models/subtitle.dart b/lib/models/subtitle.dart index f5eb3011..7b015170 100644 --- a/lib/models/subtitle.dart +++ b/lib/models/subtitle.dart @@ -229,6 +229,13 @@ class Subtitle { String travelingExpense; String startDate; String endDate; + String destinationSite; + String building; + String floor; + String department; + String room; + String actions; + void setIssues(List issues) { issues.clear(); @@ -432,7 +439,13 @@ class Subtitle { @required this.travelingExpense, @required this.startDate, @required this.endDate, - @required this.assetNumber + @required this.assetNumber, + @required this.destinationSite, + @required this.building, + @required this.floor, + @required this.department, + @required this.room, + @required this.actions, }); factory Subtitle.fromJson(Map parsedJson) { @@ -630,6 +643,12 @@ class Subtitle { travelingExpense: parsedJson["travelingExpense"], startDate: parsedJson["startDate"], endDate: parsedJson["endDate"], + destinationSite: parsedJson["destinationSite"], + building: parsedJson["building"], + floor: parsedJson["floor"], + department: parsedJson["department"], + room: parsedJson["room"], + actions: parsedJson["actions"], ); } } diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 9d48ad3a..b7726ff6 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -98,28 +98,28 @@ class _DeviceTransferDetailsState extends State { info: widget.model.device.number, ), RequestInfoRow( - title: "Destination Site", - info: widget.model.device.serialNumber, + title: _subtitle.destinationSite, + info: widget.model.device.destSiteName, ), RequestInfoRow( - title: "Building", - info: widget.model.device.serialNumber, + title: _subtitle.building, + info: widget.model.device.destBuildingName, ), RequestInfoRow( - title: "Floor", - info: widget.model.device.serialNumber, + title: _subtitle.floor, + info: widget.model.device.destFloor, ), RequestInfoRow( - title: "Department", - info: widget.model.device.serialNumber, + title: _subtitle.department, + info: widget.model.device.destDepartmentName, ), RequestInfoRow( - title: "Room", - info: widget.model.device.serialNumber, + title: _subtitle.room, + info: widget.model.device.destRoom, ), RequestInfoRow( - title: "Actions", - info: widget.model.device.serialNumber, + title: _subtitle.actions, + info: "", ), const SizedBox(height: 8), Row( diff --git a/lib/views/pages/device_transfer/request_device_transfer.dart b/lib/views/pages/device_transfer/request_device_transfer.dart index 9deba1eb..3d0cb755 100644 --- a/lib/views/pages/device_transfer/request_device_transfer.dart +++ b/lib/views/pages/device_transfer/request_device_transfer.dart @@ -6,6 +6,7 @@ import 'package:test_sa/controllers/providers/api/device_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/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/subtitle.dart'; @@ -18,6 +19,12 @@ import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../../../../controllers/localization/localization.dart'; +import '../../../controllers/validator/validator.dart'; +import '../../widgets/app_text_form_field.dart'; +import '../../widgets/gas_refill/building_type_menu.dart'; +import '../../widgets/gas_refill/department_type_menu.dart'; +import '../../widgets/gas_refill/floor_type_menu.dart'; +import '../../widgets/hospitals/hospital_auto_complete_field_new.dart'; class RequestDeviceTransfer extends StatefulWidget { static const String id = "/request-device-transfer"; @@ -84,6 +91,7 @@ class _RequestDeviceTransferState extends State { @override void dispose() { _requestedQuantityController.dispose(); + _deviceTransferProvider.reset(); super.dispose(); } @@ -158,36 +166,104 @@ class _RequestDeviceTransferState extends State { // setState(() {}); // }, // ), - 12.height, - const ASubTitle("Destination Client"), - if (_validate && _formModel.receiver.client == null) - ASubTitle( - _subtitle.requiredWord, - color: Colors.red, - ), - 6.height, - HospitalButton( - hospital: _formModel.receiver.client, - onHospitalPick: (hospital) { - _formModel.receiver.client = hospital; + // 12.height, + // const ASubTitle("Destination Client"), + // if (_validate && _formModel.receiver.client == null) + // ASubTitle( + // _subtitle.requiredWord, + // color: Colors.red, + // ), + // 6.height, + // HospitalButton( + // hospital: _formModel.receiver.client, + // onHospitalPick: (hospital) { + // _formModel.receiver.client = hospital; + // setState(() {}); + // }, + // ), + // 12.height, + // const ASubTitle("Destination Department"), + // if (_validate && _formModel.receiver.department == null) + // ASubTitle( + // _subtitle.requiredWord, + // color: Colors.red, + // ), + // 6.height, + // DepartmentButton( + // department: _formModel.receiver.department, + // onDepartmentPick: (department) { + // _formModel.receiver.department = department; + // setState(() {}); + // }, + // ), + const SizedBox( + height: 4, + ), + Divider( + color: Theme.of(context).colorScheme.primary, + ), + const SizedBox( + height: 4, + ), + HospitalAutoCompleteField( + initialValue: _deviceTransferProvider.hospital?.name, + // onSave: (value){ + // _search.hospital = value; + // }, + onSearch: (value) { + _deviceTransferProvider.hospital = value; + _deviceTransferProvider.building = null; + _deviceTransferProvider.floor = null; + _deviceTransferProvider.department = null; + _formModel.receiver.client = value; setState(() {}); }, ), - 12.height, - const ASubTitle("Destination Department"), - if (_validate && _formModel.receiver.department == null) - ASubTitle( - _subtitle.requiredWord, - color: Colors.red, - ), - 6.height, - DepartmentButton( - department: _formModel.receiver.department, - onDepartmentPick: (department) { - _formModel.receiver.department = department; + const SizedBox( + height: 8, + ), + BuildingTypeMenu( + initialValue: _deviceTransferProvider?.building, + building: _deviceTransferProvider?.hospital?.buildings, + onSelect: (status) { + _deviceTransferProvider.building = status; setState(() {}); }, ), + const SizedBox(height: 8), + FloorTypeMenu( + initialValue: _deviceTransferProvider?.floor, + floors: _deviceTransferProvider?.building?.floors, + onSelect: (status) { + _deviceTransferProvider.floor = status; + setState(() {}); + }, + ), + const SizedBox(height: 8), + DepartmentTypeMenu( + initialValue: _deviceTransferProvider?.department, + departments: _deviceTransferProvider?.floor?.departments, + onSelect: (status) { + _deviceTransferProvider.department = status; + _formModel.receiver.department = Department(id: status.id, name: status.name) ; + setState(() {}); + }, + ), + const SizedBox(height: 8), + ASubTitle("Room"), + SizedBox( + height: 4, + ), + ATextFormField( + textAlign: TextAlign.center, + controller: _requestedQuantityController, + style: Theme.of(context).textTheme.subtitle1, + validator: (value) => Validator.isNumeric(value) ? null : "allow numbers only", + textInputType: TextInputType.number, + onSaved: (value) { + _deviceTransferProvider.room=value; + }, + ), 12.height, AButton( text: _subtitle.submit, diff --git a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart index 55e6b1d3..a311cb14 100644 --- a/lib/views/widgets/device_trancfer/device_transfer_info_section.dart +++ b/lib/views/widgets/device_trancfer/device_transfer_info_section.dart @@ -40,6 +40,10 @@ class DeviceTransferInfoSection extends StatelessWidget { title: "Comment", info: info.comment, ), + RequestInfoRow( + title: "Assigned FE", + info: info.assignedEmployeeName, + ), RequestInfoRow( title: "Signature", info: info.signature?.isEmpty != false ? subtitle.noDateFound : null,