From 8ae51480f94ee6cd89f3c2f05de1c8b1e716c7f3 Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 Date: Thu, 22 May 2025 12:36:38 +0300 Subject: [PATCH] added nurse signature for device transfer request and tested on uat --- lib/controllers/api_routes/urls.dart | 4 +- .../api/device_transfer_provider.dart | 15 +- lib/models/device/device_transfer.dart | 3 + .../service_request_bottomsheet.dart | 250 +++++++++--------- .../update_device_transfer.dart | 15 +- 5 files changed, 154 insertions(+), 133 deletions(-) diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 263efa1a..57683e7c 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -7,9 +7,9 @@ class URLs { // static const host1 = "https://atomsmdev.hmg.com"; // local DEV url static const host1 = "https://atomsmuat.hmg.com"; // local UAT url - static String _baseUrl = "$_host/mobile"; + // static String _baseUrl = "$_host/mobile"; // static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis - // static final String _baseUrl = "$_host/mobile"; // host local UAT + static final String _baseUrl = "$_host/mobile"; // host local UAT // static final String _baseUrl = "$_host/v3/mobile"; // new V3 apis static String _host = host1; diff --git a/lib/controllers/providers/api/device_transfer_provider.dart b/lib/controllers/providers/api/device_transfer_provider.dart index 30a0ed12..b3191c18 100644 --- a/lib/controllers/providers/api/device_transfer_provider.dart +++ b/lib/controllers/providers/api/device_transfer_provider.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; @@ -22,14 +23,15 @@ class DeviceTransferProvider extends ChangeNotifier { DeviceTransfer transferModel = DeviceTransfer(); bool isSiteLoading = false; - Asset ?_internalAssetDestination = Asset(); + Asset? _internalAssetDestination = Asset(); - Asset ?get internalAssetDestination => _internalAssetDestination; + Asset? get internalAssetDestination => _internalAssetDestination; set internalAssetDestination(Asset? value) { _internalAssetDestination = value; notifyListeners(); } //reset provider data + void reset() { items = null; isSiteLoading = false; @@ -134,7 +136,7 @@ class DeviceTransferProvider extends ChangeNotifier { Future checkAssetPendingRequest(int assetId) async { Response response; try { - response = await ApiManager.instance.post(URLs.CheckIfAssetHasAnotherServiceRequest + "?assetId=$assetId",body: {}); + response = await ApiManager.instance.post(URLs.CheckIfAssetHasAnotherServiceRequest + "?assetId=$assetId", body: {}); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) {} return PendingAssetServiceRequest.fromJson(json.decode(response.body)["data"]); @@ -190,11 +192,12 @@ class DeviceTransferProvider extends ChangeNotifier { return response.statusCode; } catch (error) { Navigator.pop(context); - print(error); + log('error $error'); return -1; } } - Future getSiteData({required int? siteId}) async { + + Future getSiteData({required int? siteId}) async { isSiteLoading = true; notifyListeners(); try { @@ -219,6 +222,4 @@ class DeviceTransferProvider extends ChangeNotifier { return -1; } } - - } diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index 3886b9a5..6e0d50bb 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -26,6 +26,7 @@ class DeviceTransfer { this.senderAssignedEmployeeId, this.senderMachineStatusId, this.senderComment, + this.nurseSignature, this.comment, this.receiverEndUserId, this.receiverEndUserName, @@ -229,6 +230,7 @@ class DeviceTransfer { num? transferNo; String? transferCode; int? statusValue; + String? nurseSignature; Lookup? transferType; String? assetSerialNo; num? assetId; @@ -558,6 +560,7 @@ class DeviceTransfer { map['statusValue'] = statusValue; map['isSender'] = isSender; map['techComment'] = isSender! ? senderComment : receiverComment; + map['nurseSignature'] = nurseSignature; map['assetTransferAssistantEmployees'] = modelAssistantEmployees; map['assetTransferEngineerTimers'] = assetTransferEngineerTimers; if (attachments != null) { diff --git a/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart index 4b3148fd..e6c57453 100644 --- a/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/modules/cm_module/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -705,7 +705,7 @@ class ServiceRequestBottomSheet { ); Navigator.pushReplacement( context, - MaterialPageRoute(builder: (context) => MaintenanceRequestForm()), + MaterialPageRoute(builder: (context) => MaintenanceRequestForm()), ); break; } @@ -850,7 +850,6 @@ class ServiceRequestBottomSheet { } static Future feedBackBottomSheet({required BuildContext context}) { - String feedback = ''; TextEditingController _commentController = TextEditingController(); return buildBottomSheetParent( @@ -1185,122 +1184,133 @@ class ServiceRequestBottomSheet { })); } - //TODO need to modify this accroding to FM requirements.... - - // static Future nurseVerifyAssetTransferBottomSheet({required BuildContext context}) { - // bool acknowledge = false; - // Uint8List? newSignature; - // String? nurseSignature; - // return buildBottomSheetParent( - // context: context, - // childWidget: Consumer(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) { - // return Column( - // crossAxisAlignment: CrossAxisAlignment.center, - // children: [ - // const SizedBox().indicatorWidget(), - // 8.height, - // Align( - // alignment: AlignmentDirectional.centerStart, - // child: context.translation.pleaseConfirmTheIssueHasBeenResolved.bottomSheetHeadingTextStyle(context), - // ), - // 10.height, - // StatefulBuilder( - // builder: (context, setState) { - // return Column( - // children: [ - // Row( - // children: [ - // InkWell( - // child: acknowledge - // ? const Icon( - // Icons.check_box, - // color: AppColor.primary10, - // ) - // : const Icon( - // Icons.check_box_outline_blank, - // color: AppColor.neutral120, - // ), - // onTap: () { - // setState(() { - // acknowledge = !acknowledge; - // }); - // }, - // ), - // 6.width, - // Flexible( - // child: context.translation.nurseAcknowledge.bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral120), - // ), - // ], - // ), - // 17.height, - // ESignature( - // title: '', - // oldSignature: '', - // newSignature: newSignature, - // backgroundColor: AppColor.neutral100, - // showShadow: false, - // onChange: (signature) { - // if (signature == null || signature.isEmpty) return; - // setState(() { - // newSignature = signature; - // nurseSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; - // }); - // }, - // onSaved: (signature) { - // if (signature == null || signature.isEmpty) return; - // setState(() { - // newSignature = signature; - // nurseSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; - // }); - // }, - // ), - // ], - // ); - // }, - // ), - // 36.height, - // Row( - // mainAxisAlignment: MainAxisAlignment.spaceBetween, - // mainAxisSize: MainAxisSize.min, - // children: [ - // AppFilledButton( - // label: context.translation.reject, - // maxWidth: true, - // buttonColor: Colors.white54, - // textColor: AppColor.red30, - // showBorder: true, - // onPressed: () async { - // Navigator.pop(context); - // nurseRejectBackBottomSheet(context: context); - // }, - // ).expanded, - // const SizedBox( - // width: 20, - // ), - // AppFilledButton( - // label: context.translation.confirm, - // maxWidth: true, - // loading: requestDetailProvider.isLoading, - // buttonColor: AppColor.green70, - // onPressed: () async { - // if (newSignature != null) { - // requestDetailProvider.nurseActionHelperModel = NurseActionHelperModel(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, signatureNurse: nurseSignature); - // WorkOrderDetail? data = await requestDetailProvider.nurseConfirm(); - // if (data != null) { - // if (requestDetailProvider.currentWorkOrder!.data!.requestId != null) { - // requestDetailProvider.updateCurrentWorkOrder(data); - // } - // Navigator.pop(context); - // } - // } else { - // context.translation.signaturesAreRequired.showToast; - // } - // }, - // ).expanded, - // ], - // ) - // ], - // ); - // })); - // } + static Future nurseVerifyAssetTransferBottomSheet({required BuildContext context, required Function(String? value) onAckhnowledgePress}) { + bool acknowledge = false; + Uint8List? newSignature; + String? nurseSignature; + return buildBottomSheetParent( + context: context, + childWidget: Consumer(builder: (context, ServiceRequestDetailProvider requestDetailProvider, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + const SizedBox().indicatorWidget(), + 8.height, + Align( + alignment: AlignmentDirectional.centerStart, + child: context.translation.nurseSignature.bottomSheetHeadingTextStyle(context), + ), + 10.height, + StatefulBuilder( + builder: (context, setState) { + return Column( + children: [ + // Row( + // children: [ + // InkWell( + // child: acknowledge + // ? const Icon( + // Icons.check_box, + // color: AppColor.primary10, + // ) + // : const Icon( + // Icons.check_box_outline_blank, + // color: AppColor.neutral120, + // ), + // onTap: () { + // setState(() { + // acknowledge = !acknowledge; + // }); + // }, + // ), + // 6.width, + // Flexible( + // child: context.translation.nurseAcknowledge.bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral120), + // ), + // ], + // ), + // 17.height, + ESignature( + title: '', + oldSignature: '', + newSignature: newSignature, + backgroundColor: AppColor.neutral100, + showShadow: false, + onChange: (signature) { + if (signature.isEmpty) return; + setState(() { + newSignature = signature; + nurseSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }); + }, + onSaved: (signature) { + if (signature == null || signature.isEmpty) return; + setState(() { + newSignature = signature; + nurseSignature = "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}"; + }); + }, + ), + ], + ); + }, + ), + 36.height, + AppFilledButton( + label: context.translation.confirm, + maxWidth: true, + loading: requestDetailProvider.isLoading, + buttonColor: AppColor.green70, + onPressed: () async { + if (newSignature != null) { + Navigator.pop(context); + onAckhnowledgePress(nurseSignature); + } else { + context.translation.signaturesAreRequired.showToast; + } + }, + ) + // Row( + // mainAxisAlignment: MainAxisAlignment.spaceBetween, + // mainAxisSize: MainAxisSize.min, + // children: [ + // // AppFilledButton( + // // label: context.translation.cancel, + // // maxWidth: true, + // // buttonColor: AppColor.white60, + // // textColor: AppColor.black10, + // // showBorder: true, + // // onPressed: () async { + // // Navigator.pop(context); + // // }, + // // ).expanded, + // // const SizedBox( + // // width: 20, + // // ), + // AppFilledButton( + // label: context.translation.confirm, + // maxWidth: true, + // loading: requestDetailProvider.isLoading, + // buttonColor: AppColor.green70, + // onPressed: () async { + // if (newSignature != null) { + // requestDetailProvider.nurseActionHelperModel = NurseActionHelperModel(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, signatureNurse: nurseSignature); + // WorkOrderDetail? data = await requestDetailProvider.nurseConfirm(); + // if (data != null) { + // if (requestDetailProvider.currentWorkOrder!.data!.requestId != null) { + // requestDetailProvider.updateCurrentWorkOrder(data); + // } + // Navigator.pop(context); + // } + // } else { + // context.translation.signaturesAreRequired.showToast; + // } + // }, + // ).expanded, + // ], + // ) + ], + ); + })); + } } diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index e7d862b2..9ef24388 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -59,7 +59,6 @@ class _UpdateDeviceTransferState extends State { _formModel.isSender = widget.isSender; _formModel.assetTransferAttachments = []; int workingHours = _formModel.tbsTimer?.endAt!.difference(_formModel.tbsTimer!.startAt!).inSeconds ?? 0; - if (widget.isSender) { _formModel.senderVisitTimers?.add( VisitTimers( @@ -94,7 +93,17 @@ class _UpdateDeviceTransferState extends State { } catch (error) { print(error); } - await _deviceTransferProvider.updateRequest(context, model: _formModel); + if(status ==1){ + ServiceRequestBottomSheet.nurseVerifyAssetTransferBottomSheet(context: context,onAckhnowledgePress: (signature) async { + //TODO NEED TO CALL API HERE WITH ADDED PARAMETER FOR SIGNATURE FROM BACKEND.. + if(signature!=null){ + _formModel.nurseSignature = signature; + await _deviceTransferProvider.updateRequest(context, model: _formModel); + } + }); + }else { + await _deviceTransferProvider.updateRequest(context, model: _formModel); + } } } @@ -217,7 +226,6 @@ class _UpdateDeviceTransferState extends State { label: context.translation.complete, buttonColor: AppColor.primary10, onPressed: (){ - // ServiceRequestBottomSheet.nurseVerifyAssetTransferBottomSheet(context: context); _update(status: 1); } ).expanded, @@ -226,7 +234,6 @@ class _UpdateDeviceTransferState extends State { label: context.translation.complete, buttonColor: AppColor.primary10, onPressed: () { - // ServiceRequestBottomSheet.nurseVerifyAssetTransferBottomSheet(context: context); _update(status: 1); }, ).expanded,