From b51ee155c0c0a4c5763067da14f9ee7997142ff7 Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Thu, 8 Jun 2023 13:11:51 +0300 Subject: [PATCH 1/4] track transfer complete --- assets/subtitles/ar_subtitle.json | 1 + assets/subtitles/en_subtitle.json | 1 + lib/models/subtitle.dart | 3 ++ .../device_transfer_details.dart | 28 +++++++++++++++++++ 4 files changed, 33 insertions(+) diff --git a/assets/subtitles/ar_subtitle.json b/assets/subtitles/ar_subtitle.json index 9e86e092..f9962db6 100644 --- a/assets/subtitles/ar_subtitle.json +++ b/assets/subtitles/ar_subtitle.json @@ -192,6 +192,7 @@ "assignedEmployee": "الموظف المعين", "assetSN": "رقم تسلسلي للاصل ", "assetName": "اسم الاصل", + "assetNumber": "رقم الاصل", "site": "الموقع", "maintenanceSituation": "موقع الصيانه", "currentSituation": "الموقع الحالي", diff --git a/assets/subtitles/en_subtitle.json b/assets/subtitles/en_subtitle.json index d66d2e7c..8f43f43d 100644 --- a/assets/subtitles/en_subtitle.json +++ b/assets/subtitles/en_subtitle.json @@ -187,6 +187,7 @@ "assignedEmployee": "Assigned Employee", "assetSN": "Asset S.N", "assetName": "Asset Name", + "assetNumber": "Asset Number", "site": "Site", "maintenanceSituation": "Maintenance Situation", "currentSituation": "Current Situation", diff --git a/lib/models/subtitle.dart b/lib/models/subtitle.dart index 47613fe2..f5eb3011 100644 --- a/lib/models/subtitle.dart +++ b/lib/models/subtitle.dart @@ -213,6 +213,7 @@ class Subtitle { String assignedEmployee; String assetSN; String assetName; + String assetNumber; String site; String maintenanceSituation; String currentSituation; @@ -431,6 +432,7 @@ class Subtitle { @required this.travelingExpense, @required this.startDate, @required this.endDate, + @required this.assetNumber }); factory Subtitle.fromJson(Map parsedJson) { @@ -620,6 +622,7 @@ class Subtitle { assignedEmployee: parsedJson["assignedEmployee"], assetSN: parsedJson["assetSN"], assetName: parsedJson["assetName"], + assetNumber: parsedJson["assetNumber"], site: parsedJson["site"], maintenanceSituation: parsedJson["maintenanceSituation"], currentSituation: parsedJson["currentSituation"], diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index 184cc4b2..9d48ad3a 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -93,6 +93,34 @@ class _DeviceTransferDetailsState extends State { title: _subtitle.device, info: widget.model.device.serialNumber, ), + RequestInfoRow( + title: _subtitle.assetNumber, + info: widget.model.device.number, + ), + RequestInfoRow( + title: "Destination Site", + info: widget.model.device.serialNumber, + ), + RequestInfoRow( + title: "Building", + info: widget.model.device.serialNumber, + ), + RequestInfoRow( + title: "Floor", + info: widget.model.device.serialNumber, + ), + RequestInfoRow( + title: "Department", + info: widget.model.device.serialNumber, + ), + RequestInfoRow( + title: "Room", + info: widget.model.device.serialNumber, + ), + RequestInfoRow( + title: "Actions", + info: widget.model.device.serialNumber, + ), const SizedBox(height: 8), Row( children: [ From 8c0ef0acf082e8ec40ee0ecc846df4d6d874b4eb Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Mon, 12 Jun 2023 12:39:37 +0300 Subject: [PATCH 2/4] 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, From 1b7c1a3692e18f6d7a754fdd6e450acec4a6a566 Mon Sep 17 00:00:00 2001 From: nextwo <1234> Date: Mon, 12 Jun 2023 18:02:51 +0300 Subject: [PATCH 3/4] editing in working hours in update transfer device --- .../api/device_transfer_provider.dart | 5 +- .../update_device_transfer.dart | 83 ++++++++++++++++--- 2 files changed, 76 insertions(+), 12 deletions(-) diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index ace715d4..f9ed081d 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -48,6 +48,8 @@ class DeviceTransferProvider extends ChangeNotifier { Floors floor; Departments department; String room; + DateTime startDate; + DateTime endDate; /// return -2 if request in progress /// return -1 if error happen when sending request @@ -207,8 +209,6 @@ class DeviceTransferProvider extends ChangeNotifier { }); } - print(body["senderWorkingHours"]); - body.addAll(newModel.toJson(isSender)); print(body); Response response; @@ -237,4 +237,5 @@ class DeviceTransferProvider extends ChangeNotifier { return -1; } } + } diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index ce0f827c..eaaafded 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -19,6 +19,8 @@ import 'package:test_sa/views/widgets/status/gas_refill/gas_status.dart'; import 'package:test_sa/views/widgets/titles/app_sub_title.dart'; import '../../../../controllers/localization/localization.dart'; +import '../../../controllers/validator/validator.dart'; +import '../../widgets/date_and_time/time_picker.dart'; class UpdateDeviceTransfer extends StatefulWidget { final DeviceTransfer model; @@ -66,10 +68,10 @@ class _UpdateDeviceTransferState extends State { } } - @override - void setState(VoidCallback fn) { - if (!mounted) super.setState(() {}); - } + // @override + // void setState(VoidCallback fn) { + // if (!mounted) super.setState(() {}); + // } @override void initState() { @@ -147,21 +149,82 @@ class _UpdateDeviceTransferState extends State { }, ), const SizedBox( - height: 8, + height: 16, ), - ASubTitle(_subtitle.workingHours), - const SizedBox( - height: 4, + Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const ASubTitle("Start of Work"), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), + ADateTimePicker( + date: _deviceTransferProvider.startDate, + from: DateTime.now().subtract(const Duration(days: 365)), + to: DateTime.now().add(const Duration(days: 365)), + onDateTimePicker: (date) { + _deviceTransferProvider.startDate = date; + _formModel.workingHours=((_deviceTransferProvider.endDate?.difference(_deviceTransferProvider.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? 0; + setState(() {}); + }, + ), + ], + ), + ), + const SizedBox(width: 8), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + const ASubTitle("End of Work"), + SizedBox( + height: 8 * AppStyle.getScaleFactor(context), + ), + ADateTimePicker( + date: _deviceTransferProvider.endDate, + from: DateTime.now().subtract(const Duration(days: 365)), + to: DateTime.now().add(const Duration(days: 365)), + onDateTimePicker: (date) { + _deviceTransferProvider.endDate = date; + _formModel.workingHours=((_deviceTransferProvider.endDate?.difference(_deviceTransferProvider.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? 0; + setState(() {}); + }, + ), + ], + ), + ), + ], ), ATextFormField( - initialValue: _formModel?.workingHours, + initialValue: null, textAlign: TextAlign.center, + hintText: _deviceTransferProvider.startDate == null + ? "0" + : ((_deviceTransferProvider.endDate?.difference(_deviceTransferProvider.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? "0", + enable: false, style: Theme.of(context).textTheme.subtitle1, + //validator: (value) => Validator.isNumeric(value) ? null : _subtitle.requiredWord, textInputType: TextInputType.number, onSaved: (value) { - _formModel.workingHours = value; + // _serviceReport.workHours = value; }, ), + // ASubTitle(_subtitle.workingHours), + // const SizedBox( + // height: 4, + // ), + // ATextFormField( + // initialValue: _formModel?.workingHours, + // textAlign: TextAlign.center, + // style: Theme.of(context).textTheme.subtitle1, + // textInputType: TextInputType.number, + // onSaved: (value) { + // _formModel.workingHours = value; + // }, + // ), // const SizedBox(height: 8,), // const ASubTitle("Sender Department"), // if(_validate && _formModel.senderDepartment == null) From ffacf3949e3d9937dbcdb72832830a4cd384fa95 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 13 Jun 2023 11:32:57 +0300 Subject: [PATCH 4/4] startdate, end date & working hours fixed. --- .../api/device_transfer_provider.dart | 10 ++++++++++ lib/models/device/device_transfer.dart | 4 ++++ lib/models/device/device_transfer_info.dart | 10 ++++++++++ lib/models/engineer.dart | 3 ++- .../update_device_transfer.dart | 20 ++++++++++--------- .../report/create_service_report.dart | 2 +- 6 files changed, 38 insertions(+), 11 deletions(-) diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index f9ed081d..a534fbc0 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -24,6 +24,8 @@ class DeviceTransferProvider extends ChangeNotifier { floor = null; department = null; room=""; + startDate = null; + endDate = null; } // state code of current request to defied error message @@ -177,6 +179,8 @@ class DeviceTransferProvider extends ChangeNotifier { "senderMachineStatusId": newModel.status.id, "senderComment": newModel.comment, "senderWorkingHours": newModel.workingHours, + "senderStartDate": newModel.startDate?.toIso8601String(), + "senderEndDate": newModel.endDate?.toIso8601String(), "senderTravelingHours": newModel.travelingHours, "senderAttachmentName": "${newModel.signature}.png", "destSiteId": oldModel.receiver.client.id, @@ -185,6 +189,8 @@ class DeviceTransferProvider extends ChangeNotifier { "receiverMachineStatusId": oldModel.receiver.status.id ?? "", "receiverComment": oldModel.receiver.comment, "receiverWorkingHours": oldModel.receiver.workingHours, + "receiverStartDate": oldModel.receiver.startDate?.toIso8601String(), + "receiverEndDate": oldModel.receiver.endDate?.toIso8601String(), "receiverTravelingHours": oldModel.receiver.travelingHours, "receiverAttachmentName": "${oldModel.receiver.signature}.png", }); @@ -196,6 +202,8 @@ class DeviceTransferProvider extends ChangeNotifier { "senderMachineStatusId": oldModel.sender.status.id, "senderComment": oldModel.sender.comment, "senderWorkingHours": oldModel.sender.workingHours, + "senderStartDate": oldModel.sender.startDate?.toIso8601String(), + "senderEndDate": oldModel.sender.endDate?.toIso8601String(), "senderTravelingHours": oldModel.sender.travelingHours, "senderAttachmentName": "${oldModel.sender.signature}.png", "destSiteId": newModel.client.id, @@ -204,6 +212,8 @@ class DeviceTransferProvider extends ChangeNotifier { "receiverMachineStatusId": newModel.status?.id ?? "", "receiverComment": newModel.comment, "receiverWorkingHours": newModel.workingHours, + "receiverStartDate": newModel.startDate?.toIso8601String(), + "receiverEndDate": newModel.endDate?.toIso8601String(), "receiverTravelingHours": newModel.travelingHours, "receiverAttachmentName": "${newModel.signature}.png", }); diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index d4d062b4..a8202f42 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -59,6 +59,8 @@ class DeviceTransfer { travelingHours: parsedJson["senderTravelingHours"], comment: parsedJson["senderComment"], workingHours: parsedJson["senderWorkingHours"], + 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"], @@ -78,6 +80,8 @@ class DeviceTransfer { travelingHours: parsedJson["receiverTravelingHours"], comment: parsedJson["receiverComment"], workingHours: parsedJson["receiverWorkingHours"], + 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"], diff --git a/lib/models/device/device_transfer_info.dart b/lib/models/device/device_transfer_info.dart index 74365ce0..41d0843a 100644 --- a/lib/models/device/device_transfer_info.dart +++ b/lib/models/device/device_transfer_info.dart @@ -8,6 +8,8 @@ class DeviceTransferInfo { Hospital client; Department department; String workingHours; + DateTime startDate; + DateTime endDate; String travelingHours; String userName; String signature; @@ -21,6 +23,8 @@ class DeviceTransferInfo { this.client, this.userName, this.travelingHours, + this.startDate, + this.endDate, this.workingHours, this.signature, this.status, @@ -33,6 +37,8 @@ class DeviceTransferInfo { if (comment != null && comment.isNotEmpty) body["${baseKey}comment"] = comment; if (workingHours != null && workingHours.isNotEmpty) body["${baseKey}working_hours"] = workingHours; + if (startDate != null) body["${baseKey}start_date"] = startDate?.toIso8601String(); + if (endDate != null) body["${baseKey}end_date"] = endDate?.toIso8601String(); if (travelingHours != null && travelingHours.isNotEmpty) body["${baseKey}travel_hours"] = travelingHours; if (status != null) body["${baseKey}status"] = status.id.toString(); if (signature != null && signature.isNotEmpty) body["${baseKey}image"] = signature; @@ -51,6 +57,8 @@ class DeviceTransferInfo { client = Hospital.fromHospital(old.client); department = Department.fromDepartment(old.department); workingHours = old.workingHours; + startDate = old.startDate; + endDate = old.endDate; travelingHours = old.travelingHours; comment = old.comment; if (withSignature) signature = old.signature; @@ -60,6 +68,8 @@ class DeviceTransferInfo { factory DeviceTransferInfo.fromJson(Map parsedJson, String key) { return DeviceTransferInfo( workingHours: parsedJson["${key}working_hours"], + startDate: parsedJson["${key}start_date"], + endDate: parsedJson["${key}end_date"], travelingHours: parsedJson["${key}travel_hours"], userName: parsedJson["${key}name"], signature: parsedJson["${key}image"], diff --git a/lib/models/engineer.dart b/lib/models/engineer.dart index 096dd316..ffedca72 100644 --- a/lib/models/engineer.dart +++ b/lib/models/engineer.dart @@ -8,8 +8,9 @@ class Engineer { }); factory Engineer.fromJson(Map parsedJson) { + if(parsedJson==null) return Engineer(); return Engineer( - id: parsedJson["userId"] ?? parsedJson["id"], + id: parsedJson["userId"] ?? parsedJson["id"], name: parsedJson["userName"] ?? parsedJson["name"], ); } diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index eaaafded..9b2c8033 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -25,6 +25,7 @@ import '../../widgets/date_and_time/time_picker.dart'; class UpdateDeviceTransfer extends StatefulWidget { final DeviceTransfer model; final bool isSender; + const UpdateDeviceTransfer({Key key, this.model, this.isSender}) : super(key: key); @override @@ -162,12 +163,12 @@ class _UpdateDeviceTransferState extends State { height: 8 * AppStyle.getScaleFactor(context), ), ADateTimePicker( - date: _deviceTransferProvider.startDate, + date: _formModel.startDate, from: DateTime.now().subtract(const Duration(days: 365)), to: DateTime.now().add(const Duration(days: 365)), onDateTimePicker: (date) { - _deviceTransferProvider.startDate = date; - _formModel.workingHours=((_deviceTransferProvider.endDate?.difference(_deviceTransferProvider.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? 0; + _formModel.startDate = date; + _formModel.workingHours = ((_formModel.endDate?.difference(_formModel.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? 0; setState(() {}); }, ), @@ -184,12 +185,12 @@ class _UpdateDeviceTransferState extends State { height: 8 * AppStyle.getScaleFactor(context), ), ADateTimePicker( - date: _deviceTransferProvider.endDate, + date: _formModel.endDate, from: DateTime.now().subtract(const Duration(days: 365)), to: DateTime.now().add(const Duration(days: 365)), onDateTimePicker: (date) { - _deviceTransferProvider.endDate = date; - _formModel.workingHours=((_deviceTransferProvider.endDate?.difference(_deviceTransferProvider.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? 0; + _formModel.endDate = date; + _formModel.workingHours = ((_formModel.endDate?.difference(_formModel.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? 0; setState(() {}); }, ), @@ -198,12 +199,13 @@ class _UpdateDeviceTransferState extends State { ), ], ), + const SizedBox(height: 4), + ASubTitle(_subtitle.workingHours), + const SizedBox(height: 4), ATextFormField( initialValue: null, textAlign: TextAlign.center, - hintText: _deviceTransferProvider.startDate == null - ? "0" - : ((_deviceTransferProvider.endDate?.difference(_deviceTransferProvider.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? "0", + hintText: _formModel.startDate == null ? "0" : ((_formModel.endDate?.difference(_formModel.startDate)?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? "0", enable: false, style: Theme.of(context).textTheme.subtitle1, //validator: (value) => Validator.isNumeric(value) ? null : _subtitle.requiredWord, diff --git a/lib/views/pages/user/requests/report/create_service_report.dart b/lib/views/pages/user/requests/report/create_service_report.dart index ad6647e6..d94ddb69 100644 --- a/lib/views/pages/user/requests/report/create_service_report.dart +++ b/lib/views/pages/user/requests/report/create_service_report.dart @@ -94,7 +94,7 @@ class _CreateServiceReportState extends State with TickerPr _isLoading = true; setState(() {}); _callRequestForWorkOrder = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: widget.request.id); - _serviceReport.engineer = Engineer.fromJson(_callRequestForWorkOrder.assignedEmployee?.toJson()); + _serviceReport.engineer = Engineer.fromJson(_callRequestForWorkOrder?.assignedEmployee?.toJson()); await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); _isLoading = false; setState(() {});