From 824f46b0e353725da4a30784d69829469da38d95 Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 Date: Sun, 4 May 2025 14:23:59 +0300 Subject: [PATCH] ATOMS-823, ATOMS-825, ATOMS-782, ATOMS-784, ATOMS-807, issues fixed --- lib/models/device/device_transfer.dart | 13 ++ .../device_transfer_details.dart | 158 +++++++++++------- .../update_device_transfer.dart | 48 +++--- 3 files changed, 136 insertions(+), 83 deletions(-) diff --git a/lib/models/device/device_transfer.dart b/lib/models/device/device_transfer.dart index ce8ed217..2ee23b24 100644 --- a/lib/models/device/device_transfer.dart +++ b/lib/models/device/device_transfer.dart @@ -40,6 +40,7 @@ class DeviceTransfer { this.senderAttachments, this.receiverAssignedEmployeeId, this.receiverMachineStatusId, + this.senderMachineStatusValue, this.receiverComment, this.receiverStartDate, this.receiverEndDate, @@ -70,6 +71,7 @@ class DeviceTransfer { this.modifiedOn, this.receiverAssignedEmployeeName, this.receiverEngSignatureUrl, + this.receiverMachineStatusValue, this.receiverMachineStatusName, this.senderAssignedEmployeeName, this.senderBuildingName, @@ -110,6 +112,7 @@ class DeviceTransfer { senderRoom = json['senderRoom']; senderAssignedEmployeeId = json['senderAssignedEmployeeId']; senderMachineStatusId = json['senderMachineStatusId']; + senderMachineStatusValue = json['senderMachineStatusValue']; senderComment = json['senderComment']; comment = json['comment']; receiverEndUserId = json['receiverEndUserId']; @@ -133,6 +136,7 @@ class DeviceTransfer { } receiverAssignedEmployeeId = json['receiverAssignedEmployeeId']; receiverMachineStatusId = json['receiverMachineStatusId']; + receiverMachineStatusValue = json['receiverMachineStatusValue']; receiverComment = json['receiverComment']; receiverStartDate = json['receiverStartDate']; receiverEndDate = json['receiverEndDate']; @@ -242,6 +246,7 @@ class DeviceTransfer { String? senderRoom; String? senderAssignedEmployeeId; num? senderMachineStatusId; + int? senderMachineStatusValue; String? senderComment; String? comment; String? receiverEndUserId; @@ -256,6 +261,7 @@ class DeviceTransfer { List? assetTransferAttachments; String? receiverAssignedEmployeeId; num? receiverMachineStatusId; + int? receiverMachineStatusValue; String? receiverComment; String? receiverStartDate; String? receiverEndDate; @@ -351,6 +357,8 @@ class DeviceTransfer { String? senderEngSignatureUrl, String? receiverAssignedEmployeeName, String? receiverMachineStatusName, + int? receiverMachineStatusValue, + int? senderMachineStatusValue, String? receiverEngSignatureUrl, bool? applied, dynamic extensionNo, @@ -419,10 +427,12 @@ class DeviceTransfer { senderDepartmentName: senderDepartmentName ?? this.senderDepartmentName, senderAssignedEmployeeName: senderAssignedEmployeeName ?? this.senderAssignedEmployeeName, senderMachineStatusName: senderMachineStatusName ?? this.senderMachineStatusName, + senderMachineStatusValue: senderMachineStatusValue ?? this.senderMachineStatusValue, senderEngSignatureUrl: senderEngSignatureUrl ?? this.senderEngSignatureUrl, receiverAssignedEmployeeName: receiverAssignedEmployeeName ?? this.receiverAssignedEmployeeName, receiverMachineStatusName: receiverMachineStatusName ?? this.receiverMachineStatusName, receiverEngSignatureUrl: receiverEngSignatureUrl ?? this.receiverEngSignatureUrl, + receiverMachineStatusValue: receiverMachineStatusValue ?? this.receiverMachineStatusValue, applied: applied ?? this.applied, extensionNo: extensionNo ?? this.extensionNo, employeeId: employeeId ?? this.employeeId, @@ -683,8 +693,11 @@ class DeviceTransfer { manufacturerName = assetTransfer.manufacturerName; senderVisitTimers = assetTransfer.senderVisitTimers; receiverVisitTimers = assetTransfer.receiverVisitTimers; + assetTransferAttachments=assetTransfer.assetTransferAttachments; assetTransferAssistantEmployeesReceiver = assetTransfer.assetTransferAssistantEmployeesReceiver; assetTransferAssistantEmployeesSender = assetTransfer.assetTransferAssistantEmployeesSender; + senderMachineStatusValue = assetTransfer.senderMachineStatusValue; + receiverMachineStatusValue = assetTransfer.receiverMachineStatusValue; } Future validate(BuildContext context) async { diff --git a/lib/views/pages/device_transfer/device_transfer_details.dart b/lib/views/pages/device_transfer/device_transfer_details.dart index d8d11fdd..1b8a69cb 100644 --- a/lib/views/pages/device_transfer/device_transfer_details.dart +++ b/lib/views/pages/device_transfer/device_transfer_details.dart @@ -134,40 +134,53 @@ class _DeviceTransferDetailsState extends State { ], ).toShadowContainer(context), 8.height, - // sender card - _buildCard( - isSender: true, - site: _model?.senderSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - dept: _model?.senderDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - building: _model?.senderBuildingName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - floor: _model?.senderFloorName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - comment: _model?.senderComment ?? "", - statusLabel: _model?.senderMachineStatusName != null - ? StatusLabel( - label: _model!.senderMachineStatusName!, - id: _model!.senderMachineStatusId!.toInt(), - textColor: AppColor.getRequestStatusTextColorByName(context, _model!.senderMachineStatusName!), - backgroundColor: AppColor.getRequestStatusColorByName(context, _model!.senderMachineStatusName!), - ) - : null, - ), - 8.height, - // receiver card - _buildCard( - isSender: false, - site: _model?.destSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - dept: _model?.destDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - building: _model?.destBuildingName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - floor: _model?.destFloorName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", - comment: _model?.receiverComment ?? "", - statusLabel: _model?.receiverMachineStatusName != null - ? StatusLabel( - label: _model!.receiverMachineStatusName ?? "", - id: _model!.receiverMachineStatusId!.toInt(), - textColor: AppColor.getRequestStatusTextColorByName(context, _model!.receiverMachineStatusName!), - backgroundColor: AppColor.getRequestStatusColorByName(context, _model!.receiverMachineStatusName!)) - : null, - ), + if (_model?.transferType?.value == 1) ...[ + _internalRequestDetailsCard( + statusLabel: _model?.senderMachineStatusName != null + ? StatusLabel( + label: _model!.senderMachineStatusName!, + id: _model!.senderMachineStatusId!.toInt(), + textColor: AppColor.getRequestStatusTextColorByName(context, _model!.senderMachineStatusName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, _model!.senderMachineStatusName!), + ) + : null, + ) + ] else ...[ + // sender card + _buildCard( + isSender: true, + site: _model?.senderSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + dept: _model?.senderDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + building: _model?.senderBuildingName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + floor: _model?.senderFloorName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + comment: _model?.senderComment ?? "", + statusLabel: _model?.senderMachineStatusName != null + ? StatusLabel( + label: _model!.senderMachineStatusName!, + id: _model!.senderMachineStatusId!.toInt(), + textColor: AppColor.getRequestStatusTextColorByName(context, _model!.senderMachineStatusName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, _model!.senderMachineStatusName!), + ) + : null, + ), + 8.height, + // receiver card + _buildCard( + isSender: false, + site: _model?.destSiteName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + dept: _model?.destDepartmentName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + building: _model?.destBuildingName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + floor: _model?.destFloorName?.cleanupWhitespace.capitalizeFirstOfEach ?? "", + comment: _model?.receiverComment ?? "", + statusLabel: _model?.receiverMachineStatusName != null + ? StatusLabel( + label: _model!.receiverMachineStatusName ?? "", + id: _model!.receiverMachineStatusId!.toInt(), + textColor: AppColor.getRequestStatusTextColorByName(context, _model!.receiverMachineStatusName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, _model!.receiverMachineStatusName!)) + : null, + ), + ], ], ).paddingAll(16), ), @@ -180,39 +193,67 @@ class _DeviceTransferDetailsState extends State { ); } - // Widget attachmentWidget() { - // _attachments.forEach((abc) { - // print(abc); - // }); - // - // return Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // 8.height, - // if (_attachments.isNotEmpty) ...[ - // const Divider().defaultStyle(context), - // context.translation.attachments.bodyText(context), - // 8.height, - // MultiFilesPicker( - // label: context.translation.attachments, - // files: _attachments, - // enabled: false, - // onlyImages: false, - // ), - // ], - // ], - // ); - // } _buildTextWidget(String text) { return text.bodyText(context); } + _internalRequestDetailsCard({StatusLabel? statusLabel}) { + bool isCurrentEngineerEligibleForEdit = _model?.senderAssignedEmployeeId == _userProvider!.user?.userID; + + // bool isCurrentRequestEditAble = ((_model?.senderMachineStatusName?.toLowerCase().contains("close") ?? false)); + bool isCurrentRequestEditAble = (!(_model?.senderMachineStatusValue==3)); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + statusLabel ?? Container(), + if (statusLabel != null) 8.height, + + ], + ), + if ((_userProvider!.user?.type == UsersTypes.engineer)) + if (isCurrentEngineerEligibleForEdit && isCurrentRequestEditAble) + "edit".toSvgAsset(height: 40, width: 40).onPress(() async { + bool isReload = (await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model!, isSender: true)))) as bool; + if (isReload ?? false) { + setState(() {}); + } + }), + ], + ), + context.translation.details.heading5(context), + infoText(label: context.translation.site, value: _model?.senderSiteName), + infoText(label: "Sender Building".addTranslation, value: _model?.senderBuildingName), + infoText(label: "Sender Floor".addTranslation, value: _model?.senderFloorName), + infoText(label: "Sender Department".addTranslation, value: _model?.senderDepartmentName), + infoText(label: "Receiver Building".addTranslation, value: _model?.destBuildingName), + infoText(label: "Receiver Floor".addTranslation, value: _model?.destFloorName), + infoText(label: "Receiver Department".addTranslation, value: _model?.destDepartmentName), + if (_model!.comment != null && _model!.comment!.isNotEmpty) ...[ + 8.height, + const Divider().defaultStyle(context), + Text( + "Technical Comments".addTranslation, + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + _buildTextWidget(_model?.comment ?? ''), + ] + ], + ).toShadowContainer(context); + } + _buildCard({required String site, String? building, String? dept, String? floor, required String comment, required bool isSender, StatusLabel? statusLabel}) { bool isCurrentEngineerEligibleForEdit = isSender ? _model?.senderAssignedEmployeeId == _userProvider!.user?.userID : _model?.receiverAssignedEmployeeId == _userProvider!.user?.userID; bool isCurrentRequestClosed = - isSender ? ((_model?.senderMachineStatusName?.toLowerCase().contains("close") ?? false)) : ((_model?.receiverMachineStatusName?.toLowerCase().contains("close") ?? false)); + isSender ? ((_model?.senderMachineStatusValue==3)) : ((_model?.receiverMachineStatusValue==3)); return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -235,7 +276,6 @@ class _DeviceTransferDetailsState extends State { // ? (!(_model?.senderMachineStatusName?.toLowerCase()?.contains("close") ?? false) && !(_model?.senderMachineStatusName?.toLowerCase()?.contains("complete") ?? false)) // : (!(_model?.receiverMachineStatusName?.toLowerCase()?.contains("close") ?? false) && !(_model?.receiverMachineStatusName?.toLowerCase()?.contains("complete") ?? false))) // - "edit".toSvgAsset(height: 48, width: 48).onPress(() async { bool isReload = (await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdateDeviceTransfer(model: _model!, isSender: isSender)))) as bool; if (isReload ?? false) { diff --git a/lib/views/pages/device_transfer/update_device_transfer.dart b/lib/views/pages/device_transfer/update_device_transfer.dart index d44d17a7..049ddb1c 100644 --- a/lib/views/pages/device_transfer/update_device_transfer.dart +++ b/lib/views/pages/device_transfer/update_device_transfer.dart @@ -401,9 +401,9 @@ class _UpdateDeviceTransferState extends State { _formModel.statusValue = status; _formModel.isSender = widget.isSender; + _formModel.assetTransferAttachments = []; if (widget.isSender) { - _formModel.senderAttachments = []; _formModel.senderVisitTimers?.add( VisitTimers( id: 0, @@ -414,7 +414,6 @@ class _UpdateDeviceTransferState extends State { ); _formModel.assetTransferEngineerTimers = _formModel.senderVisitTimers; } else { - _formModel.receiverAttachments = []; _formModel.receiverVisitTimers?.add( VisitTimers( id: 0, @@ -432,13 +431,14 @@ class _UpdateDeviceTransferState extends State { attachmentName = file.path.split("/").last; attachmentName = "$attachmentName|${base64Encode(file.readAsBytesSync())}"; } - if (widget.isSender) { - _formModel.senderAttachments!.add(AssetTransferAttachment(id: 0, attachmentName: attachmentName)); - _formModel.attachments = _formModel.senderAttachments; - } else { - _formModel.receiverAttachments!.add(AssetTransferAttachment(id: 0, attachmentName: attachmentName)); - _formModel.attachments = _formModel.receiverAttachments; - } + // if (widget.isSender) { + _formModel.assetTransferAttachments!.add(AssetTransferAttachment(id: 0, attachmentName: attachmentName)); + _formModel.attachments = _formModel.assetTransferAttachments; + // } + // else { + // _formModel.receiverAttachments!.add(AssetTransferAttachment(id: 0, attachmentName: attachmentName)); + // _formModel.attachments = _formModel.receiverAttachments; + // } } } catch (error) { print(error); @@ -450,12 +450,7 @@ class _UpdateDeviceTransferState extends State { @override void initState() { _formModel.fromDetails(widget.model); - - if (widget.isSender) { - _files = widget.model.senderAttachments?.map((e) => File(e.attachmentName!)).toList() ?? []; - } else { - _files = widget.model.receiverAttachments?.map((e) => File(e.attachmentName!)).toList() ?? []; - } + _files = widget.model.assetTransferAttachments?.map((e) => File(e.attachmentName!)).toList() ?? []; super.initState(); } @@ -474,10 +469,7 @@ class _UpdateDeviceTransferState extends State { double totalWorkingHours = widget.isSender ? (widget.model.senderVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0) : (widget.model.receiverVisitTimers?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endDateTime!).difference(DateTime.parse(item.startDateTime!)).inSeconds) ?? 0); - bool isTimerEnable = widget.isSender - ? (!(_formModel.senderMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.senderMachineStatusName?.toLowerCase().contains("complete") ?? false)) - : (!(_formModel.receiverMachineStatusName?.toLowerCase().contains("close") ?? false) || !(_formModel.receiverMachineStatusName?.toLowerCase().contains("complete") ?? false)); - + bool isTimerEnable = widget.isSender ? (!(_formModel.senderMachineStatusValue == 3)) : (!(_formModel.receiverMachineStatusValue == 3)); return Scaffold( appBar: DefaultAppBar(title: context.translation.transferAsset), key: _scaffoldKey, @@ -542,11 +534,19 @@ class _UpdateDeviceTransferState extends State { onPressed: () => _update(status: 0), ).expanded, 12.width, - AppFilledButton( - label: context.translation.complete, - buttonColor: AppColor.primary10, - onPressed: () => _update(status: 1), - ).expanded, + if (!widget.isSender && _formModel.senderMachineStatusValue == 3) ...[ + AppFilledButton( + label: context.translation.complete, + buttonColor: AppColor.primary10, + onPressed: () => _update(status: 1), + ).expanded, + ] else if (widget.isSender) ...[ + AppFilledButton( + label: context.translation.complete, + buttonColor: AppColor.primary10, + onPressed: () => _update(status: 1), + ).expanded, + ], ], ), ),