From 4be1bd2e8a49ff34ef1737e5ed34647fb05b594f Mon Sep 17 00:00:00 2001 From: WaseemAbbasi22 Date: Mon, 21 Oct 2024 12:01:07 +0300 Subject: [PATCH] verify asset detail form changes --- .../widgets/request_category_fragment.dart | 8 +- lib/l10n/app_ar.arb | 3 +- lib/l10n/app_en.arb | 1 + .../activity_maintenance_model.dart | 5 +- .../workorder/work_order_helper_models.dart | 2 - .../new_models/work_order_detail_model.dart | 89 +++--- .../action_button/footer_action_button.dart | 2 +- .../components/activities_list_view.dart | 45 ++- .../views/components/asset_detail_card.dart | 24 +- .../views/components/request_detail_view.dart | 64 +++-- .../asset_retired/verify_asset_detail.dart | 264 ++++++++++-------- .../components/internal_request.dart | 32 +-- .../maintenance_request_main.dart | 4 +- .../forms/spare_part/spare_part_request.dart | 24 +- 14 files changed, 312 insertions(+), 255 deletions(-) diff --git a/lib/dashboard_latest/widgets/request_category_fragment.dart b/lib/dashboard_latest/widgets/request_category_fragment.dart index 0770664d..6e797797 100644 --- a/lib/dashboard_latest/widgets/request_category_fragment.dart +++ b/lib/dashboard_latest/widgets/request_category_fragment.dart @@ -23,7 +23,7 @@ class RequestCategoryFragment extends StatelessWidget { getTabs( requestsProvider: dashboardProvider, context: context, - userType: Provider.of(context, listen: false).user!.type!, + userType: Provider.of(context, listen: false).user?.type!, ), dashboardProvider.isDetailLoading || dashboardProvider.requestDetailList == null ? Column( @@ -41,8 +41,8 @@ class RequestCategoryFragment extends StatelessWidget { }); } - Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes userType}) { - List tabs = CategoryTabs.getTabs(userType: userType, context: context); + Widget getTabs({required BuildContext context, required DashBoardProvider requestsProvider, required UsersTypes? userType}) { + List tabs = CategoryTabs.getTabs(userType: userType??UsersTypes.normal_user, context: context); return SizedBox( height: 44 + 16, child: ListView.separated( @@ -58,7 +58,7 @@ class RequestCategoryFragment extends StatelessWidget { onPressed: () async { requestsProvider.currentListIndex = index; requestsProvider.resetRequestDataList(); - requestsProvider.getRequestDetail(usersType: userType, showLoader: true, status: tabs[index].tag); + requestsProvider.getRequestDetail(usersType: userType??UsersTypes.normal_user, showLoader: true, status: tabs[index].tag); }, ); }, diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index 212b47f0..81f406cd 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -494,5 +494,6 @@ "lastPmDate" : "موعد الزيارة الوقائية الأخيرة", "assetScan" : "مسح الجهاز", "pickManually" : "اختر يدويا", - "searchAsset" : "ابحث عن جهاز" + "searchAsset" : "ابحث عن جهاز", + "callResponse": "استجابة الاتصال" } \ No newline at end of file diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 1ae4aa65..2c852de7 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -351,6 +351,7 @@ "priority" : "Request Priority", "equipmentStatus" : "Equipment Status", "requestSparePart": "Request Spare Part", + "callResponse": "Call Response", "selectAction": "Select Action", "requestSparePartForYourAsset": "Request spare part for your asset", "addNewActivity": "Add New Activity", diff --git a/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart b/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart index 7945dc38..94fd3d88 100644 --- a/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart +++ b/lib/models/helper_data_models/maintenance_request/activity_maintenance_model.dart @@ -73,8 +73,9 @@ class ActivityMaintenanceHelperModel { data['supplierStartTime'] = supplierStartTime?.toIso8601String(); data['supplierEndTime'] = supplierEndTime?.toIso8601String(); data['supplierWorkingHour'] = supplierWorkingHour; - if(lastSituation!=null){ - data['lastSituationId'] = lastSituation?.id; + //TODO remove this when backend fix this on their side.. + if(activityStatus!=null){ + data['lastSituationId'] = activityStatus?.id; } if (assistantEmployees != null&&assistantEmployees!.isNotEmpty) { data['assistantEmployees'] = [modelAssistantEmployees?.toJson()]; diff --git a/lib/models/helper_data_models/workorder/work_order_helper_models.dart b/lib/models/helper_data_models/workorder/work_order_helper_models.dart index 81bc0e19..911f1b88 100644 --- a/lib/models/helper_data_models/workorder/work_order_helper_models.dart +++ b/lib/models/helper_data_models/workorder/work_order_helper_models.dart @@ -89,13 +89,11 @@ class EngineerUpdateWorkOrderHelperModel { Map toJson() { final Map data = {}; - data['workOrderId'] = workOrderId; data['equipmentStatusId'] = equipmentStatus?.id; data['returnToService'] = returnToService; //TODO Bhaa need to confirm about this for testing use internal id 65 data['serviceTypeId'] = serviceType?.id; - data['serviceTypeId'] = 65; data['loanAvailabilityId'] = loanAvailability?.id; data['loanAssetId'] = loanAssetId; data['failureReasonId'] = failureReason?.id; diff --git a/lib/models/new_models/work_order_detail_model.dart b/lib/models/new_models/work_order_detail_model.dart index b003c57e..03b3bbd5 100644 --- a/lib/models/new_models/work_order_detail_model.dart +++ b/lib/models/new_models/work_order_detail_model.dart @@ -102,7 +102,7 @@ class WorkOrderData { int? room; Lookup? assetType; WorkOrderAssignedEmployee? assignedEmployee; - String? lastActivityStatus; + Lookup? lastActivityStatus; Lookup? status; Lookup? nextStep; int? assetVerificationType; @@ -112,7 +112,7 @@ class WorkOrderData { Lookup? requestedThrough; Lookup? typeofRequest; Lookup? loanAvailablity; - Lookup? assetLoan; + AssetLoan? assetLoan; Lookup? safety; Lookup? problemDescription; String? comments; @@ -147,7 +147,7 @@ class WorkOrderData { room: json["room"], assetType: json["assetType"] == null ? null : Lookup.fromJson(json["assetType"]), assignedEmployee: json["assignedEmployee"] == null ? null : WorkOrderAssignedEmployee.fromJson(json["assignedEmployee"]), - lastActivityStatus: json["lastActivityStatus"], + lastActivityStatus: json["lastActivityStatus"]!=null?Lookup.fromJson(json["lastActivityStatus"]):null, status: json["status"] == null ? null : Lookup.fromJson(json["status"]), nextStep: json["nextStep"] == null ? null : Lookup.fromJson(json["nextStep"]), assetVerificationType: json["assetVerificationType"], @@ -157,7 +157,7 @@ class WorkOrderData { requestedThrough: json["requestedThrough"] == null ? null : Lookup.fromJson(json["requestedThrough"]), typeofRequest: json["typeofRequest"] == null ? null : Lookup.fromJson(json["typeofRequest"]), loanAvailablity: json["loanAvailablity"] == null ? null : Lookup.fromJson(json["loanAvailablity"]), - assetLoan: json["assetLoan"] == null ? null : Lookup.fromJson(json["assetLoan"]), + assetLoan: json["assetLoan"] == null ? null : AssetLoan.fromJson(json["assetLoan"]), safety: json["safety"] == null ? null : Lookup.fromJson(json["safety"]), problemDescription: json["problemDescription"] == null ? null : Lookup.fromJson(json["problemDescription"]), comments: json["comments"], @@ -219,44 +219,6 @@ class WorkOrderData { "activities": activities.map((x) => x.toJson()).toList(), "activityAssetToBeRetireds": activityAssetToBeRetireds.map((x) => x).toList(), }; - - Map toFixRemotelyJson() { - return { - 'workOrderId': workOrderNo, - 'startDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].fixRemotlyStartTime : '', - 'endDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].fixRemotlyEndTime : '', - 'workingHour': '', - 'comment': comments - }; - } - - //TODO feedback not defined... - Map toMarkAsFixedJson() { - return {'workOrderId': workOrderNo, 'feedback': comments}; - } - - Map toNeedVisitJson() { - return {'workOrderId': workOrderNo, 'visitDate': workOrderHistory.isNotEmpty ? workOrderHistory[0].needAVisitDateTime : '', 'comment': comments}; - } - - //TODO signatureNurse not defined... - Map toNurseActionJson() { - return {'workOrderId': workOrderNo, 'feedback': '', 'signatureNurse': 'signatureNurse'}; - } - - Map toWorkOrderJson() { - final Map data = {}; - data['workOrderId'] = requestId; - data['equipmentStatusId'] = equipmentStatus?.id; - data['returnToService'] = returnToService; - data['serviceTypeId'] = serviceType?.id; - data['loanAvailabilityId'] = loanAvailablity?.id; - data['loanAssetId'] = assetLoan?.id; - data['failureReasonId'] = failureReasone?.id; - data['faultDescriptionId'] = problemDescription?.id; - data['solution'] = solution; - return data; - } } class WorkOrderAsset { @@ -333,6 +295,46 @@ class WorkOrderAssignedEmployee { }; } +class AssetLoan { + int? id; + String? assetSerialNo; + String? assetNumber; + dynamic tagCode; + dynamic systemId; + dynamic assetName; + + AssetLoan({ + this.id, + this.assetSerialNo, + this.assetNumber, + this.tagCode, + this.systemId, + this.assetName, + }); + + factory AssetLoan.fromJson(Map json) { + return AssetLoan( + id: json['id'], + assetSerialNo: json['assetSerialNo'], + assetNumber: json['assetNumber'], + tagCode: json['tagCode'], + systemId: json['systemId'], + assetName: json['assetName'], + ); + } + + Map toJson() { + return { + 'id': id, + 'assetSerialNo': assetSerialNo, + 'assetNumber': assetNumber, + 'tagCode': tagCode, + 'systemId': systemId, + 'assetName': assetName, + }; + } +} + class Activities { int? id; int? orderNo; @@ -440,7 +442,7 @@ class PartCatalogItem { String? partNumber; String? oracleCode; - PartCatalogItem({this.id, this.partName, this.partNumber,this.oracleCode}); + PartCatalogItem({this.id, this.partName, this.partNumber, this.oracleCode}); PartCatalogItem.fromJson(Map json) { id = json['id']; @@ -632,6 +634,7 @@ class ActivityMaintenance { repairLocation = json['repairLocation'] != null ? Lookup.fromJson(json['repairLocation']) : null; assignedEmployee = json['assignedEmployee'] != null ? AssignedEmployee.fromJson(json['assignedEmployee']) : null; technicalComment = json['technicalComment']; + //json["supplier"] == null ? null : Lookup.fromJson(json["supplier"]), supplier = json["supplier"] == null ? null : Lookup.fromJson(json["supplier"]); supplierEngineer = json["supplierEngineer"] == null ? null : Lookup.fromJson(json["supplierEngineer"]); diff --git a/lib/service_request_latest/views/components/action_button/footer_action_button.dart b/lib/service_request_latest/views/components/action_button/footer_action_button.dart index 90e769bd..aac26800 100644 --- a/lib/service_request_latest/views/components/action_button/footer_action_button.dart +++ b/lib/service_request_latest/views/components/action_button/footer_action_button.dart @@ -138,7 +138,7 @@ class FooterActionButton { // maxWidth: true, buttonColor: AppColor.primary10, onPressed: () async { - Navigator.push(context, MaterialPageRoute(builder: (context) => const VerifyAssetDetails())); + Navigator.push(context, MaterialPageRoute(builder: (context) => VerifyAssetDetails(isEdit: false,))); }, )); case WorkOrderNextStepEnum.activity: diff --git a/lib/service_request_latest/views/components/activities_list_view.dart b/lib/service_request_latest/views/components/activities_list_view.dart index ce9e4d7c..3ddf45d5 100644 --- a/lib/service_request_latest/views/components/activities_list_view.dart +++ b/lib/service_request_latest/views/components/activities_list_view.dart @@ -253,6 +253,7 @@ class _ActivitiesListViewState extends State { Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + //TODO will be here when fixed from backend.. StatusLabel( label: activity.activityStatus?.name, textColor: AppColor.getHistoryLogStatusTextColorByName(activity.activityStatus!.name!), @@ -290,41 +291,33 @@ class _ActivitiesListViewState extends State { ), 3.height, Text( - '${context.translation.callLastSituation}: ${activity.activityMaintenance?.lastSituation?.name}', + '${context.translation.workingHours}: ${activity.activityMaintenance?.workingHours??'-'}', style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), ), 2.height, - Text( - '${context.translation.partNo}: ${activity.activitySparePart?.partCatalogItem?.partNumber}', - style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), - ), + if(activity.activityMaintenance?.assignedEmployee!=null&&activity.activityMaintenance!.assistantEmployees!.isNotEmpty)...[ + Text( + '${context.translation.assistantEmployee}: ${activity.activityMaintenance?.assistantEmployees?.first.user?.userName}', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + ]else...[ + Text( + '${context.translation.assignedEmployee}: ${activity.activityMaintenance?.assignedEmployee?.userName}', + style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), + ), + ], + 2.height, -//TODO description text not in api. -// Text( -// '${context.translation.date}: ${activity.currentSituation?.date}', -// style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), -// ), - if (activity.activitySparePart?.comment?.isNotEmpty ?? false) ...[ + if (activity.activityMaintenance?.technicalComment?.isNotEmpty ?? false) ...[ const Divider().defaultStyle(context), 2.height, Text( - activity.activitySparePart?.comment ?? "", + activity.activityMaintenance?.technicalComment ?? "", style: AppTextStyles.bodyText2.copyWith(color: AppColor.neutral120), ), ], - if (activity.activitySparePart?.acitiySparePartAttachments?.isNotEmpty ?? false) ...[ - 2.height, - const Divider().defaultStyle(context), - FilesList(images: activity.activitySparePart!.acitiySparePartAttachments!.map((toElement) => URLs.getFileUrl(toElement.name!)!).toList()), - ], ], - ).toShadowContainer(context, padding: 12, showShadow: false).onPress(() { -//TODO write onview detail method.. -// Navigator.push( -// context, -// MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: activity, serviceRequest: ServiceRequest())), -// ); - }); + ).toShadowContainer(context, padding: 12, showShadow: false); } void onEditMaintenanceRequestPress({required BuildContext context, required RequestDetailProvider requestDetailProvider, required Activities activity}) async { @@ -347,11 +340,11 @@ class _ActivitiesListViewState extends State { workOrderId: requestDetailProvider.currentWorkOrder?.data?.requestId, startTime: activity.activityMaintenance?.startTime != null ? DateTime.parse(activity.activityMaintenance!.startTime!) : null, endTime: activity.activityMaintenance?.endTime != null ? DateTime.parse(activity.activityMaintenance!.endTime!) : null, - activityStatus: activity.activityStatus, + activityStatus: activity.activityMaintenance?.lastSituation, workingHour: activity.activityMaintenance?.workingHours ?? 0, travelHours: activity.activityMaintenance?.travelHours ?? 0, repairLocation: activity.activityMaintenance?.repairLocation, - lastSituation: activity.activityMaintenance?.lastSituation, + // lastSituation: activity.activityMaintenance?.lastSituation, assignedEmployee: activity.activityMaintenance?.assignedEmployee != null ? WorkOrderAssignedEmployee.fromJson(activity.activityMaintenance!.assignedEmployee!.toJson()) : null, technicalComment: activity.activityMaintenance?.technicalComment, assistantEmployees: diff --git a/lib/service_request_latest/views/components/asset_detail_card.dart b/lib/service_request_latest/views/components/asset_detail_card.dart index 46f70274..e3862243 100644 --- a/lib/service_request_latest/views/components/asset_detail_card.dart +++ b/lib/service_request_latest/views/components/asset_detail_card.dart @@ -37,27 +37,41 @@ class AssetDetailCard extends StatelessWidget { backgroundColor: AppColor.getEquipmentStatusColor(context, requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.id ?? 0), ), "edit_icon".toSvgAsset(height: 21, width: 21).onPress(() { - Navigator.push(context, MaterialPageRoute(builder: (context) => const VerifyAssetDetails())); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => VerifyAssetDetails( + isEdit: true, + ))); }), ]), 6.height, context.translation.assetSituation.heading6(context).custom(color: AppColor.black20), 6.height, Text( - '${context.translation.returnToService}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService?.toAssetDetailsFormat}', + '${context.translation.returnToService}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService?.toAssetDetailsFormat ?? '-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), 6.height, Text( - '${context.translation.loanAvailability}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.name}', + '${context.translation.loanAvailability}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.name ?? '-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), 6.height, Text( - '${context.translation.failureReason}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason?.name}', + '${context.translation.failureReason}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason?.name ?? '-'}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + 6.height, + Text( + '${context.translation.faultDescription}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.name ?? '-'}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + 6.height, + Text( + '${context.translation.solutions}: ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution ?? '-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), - ], ), ); diff --git a/lib/service_request_latest/views/components/request_detail_view.dart b/lib/service_request_latest/views/components/request_detail_view.dart index 9488d534..4982aac2 100644 --- a/lib/service_request_latest/views/components/request_detail_view.dart +++ b/lib/service_request_latest/views/components/request_detail_view.dart @@ -176,10 +176,10 @@ class WorkOrderDetailView extends StatelessWidget { style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), 8.height, - Text( - '${context.translation.requestType}: ${workOrder.typeofRequest?.name}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), + // Text( + // '${context.translation.requestType}: ${workOrder.typeofRequest?.name}', + // style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + // ), Text( '${context.translation.requestNo}: ${workOrder.workOrderNo}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), @@ -197,6 +197,32 @@ class WorkOrderDetailView extends StatelessWidget { '${context.translation.cmNumber}: ${workOrder.workOrderNo}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral120), ), + const Divider().defaultStyle(context), + + //... call response details starts here.... + Text( + context.translation.callResponse, + style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + 8.height, + Text( + '${context.translation.serviceType}: ${workOrder.serviceType?.name ?? '-'}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.userName ?? '-'}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + + Text( + '${context.translation.assetStatus}: ${workOrder.equipmentStatus?.name ?? "-"}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + //TODO need to confirm from backend.. + Text( + '${context.translation.activityStatus}: ${workOrder.lastActivityStatus?.name ?? "-"}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), 8.height, if ((workOrder.comments ?? "").isNotEmpty) ...[ @@ -326,22 +352,20 @@ class WorkOrderDetailView extends StatelessWidget { Widget assetDetailCard({required RequestDetailProvider requestDetailProvider, required UserProvider userProvider}) { //TODO add proper check to hide and show that widget - if (userProvider.user?.type == UsersTypes.engineer && - requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) { - WorkOrderData currentWorkOrderData = requestDetailProvider.currentWorkOrder!.data!; - requestDetailProvider.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel( - workOrderId: currentWorkOrderData.requestId, - equipmentStatus: currentWorkOrderData.equipmentStatus, - loanAvailability: currentWorkOrderData.loanAvailablity, - failureReason: currentWorkOrderData.failureReasone, - // faultDescription: currentWorkOrderData.fa, - solution: currentWorkOrderData.solution?.name, - returnToService: currentWorkOrderData.returnToService, - serviceType: currentWorkOrderData.serviceType, - ); - return const AssetDetailCard(); - } - else { + if (userProvider.user?.type == UsersTypes.engineer && requestDetailProvider.currentWorkOrder?.data?.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity) { + WorkOrderData currentWorkOrderData = requestDetailProvider.currentWorkOrder!.data!; + requestDetailProvider.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel( + workOrderId: currentWorkOrderData.requestId, + equipmentStatus: currentWorkOrderData.equipmentStatus, + loanAvailability: currentWorkOrderData.loanAvailablity, + failureReason: currentWorkOrderData.failureReasone, + // faultDescription: currentWorkOrderData.fa, + solution: currentWorkOrderData.solution?.name, + returnToService: currentWorkOrderData.returnToService, + serviceType: currentWorkOrderData.serviceType, + ); + return const AssetDetailCard(); + } else { return const SizedBox(); } } diff --git a/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart b/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart index d00e5b1f..afb6ebb8 100644 --- a/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart +++ b/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart @@ -1,6 +1,7 @@ import 'dart:async'; import 'package:flutter/material.dart'; +import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_report_fault_description_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; @@ -31,8 +32,9 @@ import '../../../../../../new_views/common_widgets/default_app_bar.dart'; //TODO Have some details need to confirm from backend fault description, class VerifyAssetDetails extends StatefulWidget { static const String id = "/verify-asset-detail"; + bool isEdit = false; - const VerifyAssetDetails({Key? key}) : super(key: key); + VerifyAssetDetails({Key? key, required this.isEdit}) : super(key: key); @override _VerifyAssetDetailsState createState() => _VerifyAssetDetailsState(); @@ -41,13 +43,10 @@ class VerifyAssetDetails extends StatefulWidget { class _VerifyAssetDetailsState extends State with TickerProviderStateMixin { RequestDetailProvider? _requestDetailProvider; LoanAvailabilityProvider? _loanAvailabilityProvider; - ServiceRequestFaultDescriptionProvider? _faultDescriptionProvider; EquipmentStatusProvider? _equipmentStatusProvider; ReasonProvider? _reasonProvider; - bool _isLoading = false; Asset? loanAvailabilityAsset; List _faults = []; - final GlobalKey _formKey = GlobalKey(); final GlobalKey _scaffoldKey = GlobalKey(); @override @@ -73,11 +72,22 @@ class _VerifyAssetDetailsState extends State with TickerProv equipmentStatus: currentWorkOrderData.equipmentStatus, loanAvailability: currentWorkOrderData.loanAvailablity, failureReason: currentWorkOrderData.failureReasone, - // faultDescription: currentWorkOrderData.fa, + faultDescription: FaultDescription(), + loanAssetId: currentWorkOrderData.assetLoan?.id, solution: currentWorkOrderData.solution?.name, returnToService: currentWorkOrderData.returnToService, serviceType: currentWorkOrderData.serviceType, ); + if (currentWorkOrderData.assetLoan != null) { + loanAvailabilityAsset = Asset( + id: currentWorkOrderData.assetLoan?.id, + assetNumber: currentWorkOrderData.assetLoan?.assetNumber, + assetSerialNo: currentWorkOrderData.assetLoan?.assetSerialNo, + systemID: currentWorkOrderData.assetLoan?.systemId, + tagCode: currentWorkOrderData.assetLoan?.tagCode, + ); + setState(() {}); + } getFaultDescription(assetId: requestDetailProvider.currentWorkOrder?.data?.asset?.id); } @@ -89,7 +99,6 @@ class _VerifyAssetDetailsState extends State with TickerProv _reasonProvider!.reset(); _loanAvailabilityProvider = Provider.of(context, listen: false); _loanAvailabilityProvider!.reset(); - _faultDescriptionProvider = Provider.of(context, listen: false); _equipmentStatusProvider = Provider.of(context, listen: false); _equipmentStatusProvider!.reset(); WidgetsBinding.instance.addPostFrameCallback((_) { @@ -102,122 +111,121 @@ class _VerifyAssetDetailsState extends State with TickerProv key: _scaffoldKey, appBar: DefaultAppBar(title: context.translation.verify_asset_details), body: Consumer(builder: (context, RequestDetailProvider requestDetailProvider, child) { - print('description model i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.toJson()}'); - return Column( + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - equipmentStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!), - 12.height, - ADatePicker( - label: context.translation.returnToService, - hideShadow: true, - backgroundColor: AppColor.neutral100, - date: DateTime.tryParse(requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService ?? ""), - formatDateWithTime: true, - onDatePicker: (selectedDate) { - showTimePicker( - context: context, - initialTime: TimeOfDay.now(), - ).then((selectedTime) { - // Handle the selected date and time here. - if (selectedTime != null) { - DateTime? selectedDateTime = DateTime( - selectedDate.year, - selectedDate.month, - selectedDate.day, - selectedTime.hour, - selectedTime.minute, - ); - if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService != null && - selectedDateTime.isBefore(DateTime.parse(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService!))) { - "Visit Date time must be greater then previous date".showToast; - return; + if (widget.isEdit) ...[ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + assetStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!), + 12.height, + ADatePicker( + label: context.translation.returnToService, + hideShadow: true, + backgroundColor: AppColor.neutral100, + date: DateTime.tryParse(requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService ?? ""), + formatDateWithTime: true, + onDatePicker: (selectedDate) { + showTimePicker( + context: context, + initialTime: TimeOfDay.now(), + ).then((selectedTime) { + // Handle the selected date and time here. + if (selectedTime != null) { + DateTime? selectedDateTime = DateTime( + selectedDate.year, + selectedDate.month, + selectedDate.day, + selectedTime.hour, + selectedTime.minute, + ); + // if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService != null && + // selectedDateTime.isBefore(DateTime.parse(requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService!))) { + // "Return To Service Date time must be greater then previous date".showToast; + // return; + // } + setState(() { + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService = selectedDateTime.toIso8601String(); + }); + } + }); + }, + ), + 12.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.loanAvailability, + backgroundColor: AppColor.neutral100, + height: 56.toScreenHeight, + showShadow: false, + initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability, + onSelect: (status) { + if (status != null) { + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability = status; + if (status.value != 1) { + loanAvailabilityAsset = null; + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = null; } + setState(() {}); + } + }, + ), + if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) 8.height, + if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) + PickAsset( + device: loanAvailabilityAsset, // ?? _serviceReport.device, + cardColor: AppColor.neutral100, + onPickAsset: (asset) { + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = asset.id; setState(() { - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.returnToService = selectedDateTime.toIso8601String(); + loanAvailabilityAsset = asset; }); + }, + ), + 12.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.failureReason, + backgroundColor: AppColor.neutral100, + height: 56.toScreenHeight, + showShadow: false, + initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason, + onSelect: (value) { + if (value != null) { + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason = value; } - }); - }, - ), - 12.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.loanAvailability, - backgroundColor: AppColor.neutral100, - height: 56.toScreenHeight, - showShadow: false, - initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability, - onSelect: (status) { - if (status != null) { - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability = status; - if (status.value != 1) { - loanAvailabilityAsset = null; - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = null; - } - } - // setState(() {}); - }, - ), - if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) 8.height, - if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAvailability?.value == 1) - PickAsset( - device: loanAvailabilityAsset, // ?? _serviceReport.device, - cardColor: AppColor.neutral100, - onPickAsset: (asset) { - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.loanAssetId = asset.id; - //setState(() { - loanAvailabilityAsset = asset; - // }); }, ), - 12.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.failureReason, - backgroundColor: AppColor.neutral100, - height: 56.toScreenHeight, - showShadow: false, - initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason, - onSelect: (value) { - if (value != null) { - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.failureReason = value; - } - }, - ), - 12.height, - SingleItemDropDownMenu( - context: context, - title: context.translation.faultDescription, - backgroundColor: AppColor.neutral100, - staticData: _faults, - showShadow: false, - initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription, - onSelect: (fault) { - if (fault != null) { - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault; - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault.workPerformed; - if (mounted) { - print('model updated...'); - requestDetailProvider.updateEngineerUpdateWorkOrderHelperModel(requestDetailProvider.engineerUpdateWorkOrderHelperModel); + 12.height, + SingleItemDropDownMenu( + context: context, + title: context.translation.faultDescription, + backgroundColor: AppColor.neutral100, + staticData: _faults, + showShadow: false, + initialValue: requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription, + onSelect: (fault) { + if (fault != null) { + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault; + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault.workPerformed; + setState(() {}); } - print('description i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.toJson()}'); - } - }, - ), - 12.height, - context.translation.solutions.heading6(context).custom(color: AppColor.neutral50), - 8.height, - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution != null - ? requestDetailProvider.engineerUpdateWorkOrderHelperModel!.solution!.bodyText2(context).custom(color: AppColor.neutral120) - : const SizedBox(), - ], - ).toShadowContainer(context).paddingAll(16), + }, + ), + 12.height, + context.translation.solutions.heading6(context).custom(color: AppColor.neutral50), + 8.height, + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution != null + ? requestDetailProvider.engineerUpdateWorkOrderHelperModel!.solution!.bodyText2(context).custom(color: AppColor.neutral120) + : const SizedBox(), + ], + ).toShadowContainer(context).paddingAll(16), + ] else ...[ + assetStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!).toShadowContainer(context).paddingAll(16), + ], Container( padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight), color: AppColor.white10, @@ -225,12 +233,12 @@ class _VerifyAssetDetailsState extends State with TickerProv label: context.translation.verify_asset_details, buttonColor: AppColor.primary10, onPressed: () async { - print('description model i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription?.toJson()}'); - print('update model i got is ${requestDetailProvider.engineerUpdateWorkOrderHelperModel?.toJson()}'); - // showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - // await requestDetailProvider.engineerUpdateWorkOrder(); - // Navigator.pop(context); - // Navigator.pop(context); + if (validateForm(requestDetailProvider: requestDetailProvider)) { + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + await requestDetailProvider.engineerUpdateWorkOrder(); + Navigator.pop(context); + Navigator.pop(context); + } }, ), ), @@ -240,13 +248,29 @@ class _VerifyAssetDetailsState extends State with TickerProv ); } - Widget equipmentStatusWidget({required BuildContext context, required EngineerUpdateWorkOrderHelperModel workOrderData}) { + bool validateForm({required RequestDetailProvider requestDetailProvider}) { + bool isValid = true; + if (!widget.isEdit) { + return true; + } + if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus != null) { + if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 1 || requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 2) { + if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService == null) { + Fluttertoast.showToast(msg: "Return to service is required ", toastLength: Toast.LENGTH_LONG); + return false; + } + } + } + return isValid; + } + + Widget assetStatusWidget({required BuildContext context, required EngineerUpdateWorkOrderHelperModel workOrderData}) { return Consumer(builder: (cxt, snapshot, _) { return Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - context.translation.equipmentStatus.bodyText(context).custom(color: AppColor.black20), + context.translation.assetStatus.bodyText(context).custom(color: AppColor.black20), 8.height, Wrap( runSpacing: 8, diff --git a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart index a94a62ba..3824fb0b 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart @@ -88,30 +88,30 @@ class _InternalMaintenanceRequestState extends State child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - SingleItemDropDownMenu( - context: context, - height: 56.toScreenHeight, - title: context.translation.activityStatus, - showShadow: false, - backgroundColor: AppColor.neutral100, - initialValue: requestDetailProvider.activityMaintenanceHelperModel?.activityStatus, - onSelect: (status) { - print('status i got is ${status?.toJson()}'); - requestDetailProvider.activityMaintenanceHelperModel?.activityStatus = status; - }, - ), - 8.height, + // SingleItemDropDownMenu( + // context: context, + // height: 56.toScreenHeight, + // title: context.translation.activityStatus, + // showShadow: false, + // backgroundColor: AppColor.neutral100, + // initialValue: requestDetailProvider.activityMaintenanceHelperModel?.activityStatus, + // onSelect: (status) { + // print('status i got is ${status?.toJson()}'); + // requestDetailProvider.activityMaintenanceHelperModel?.activityStatus = status; + // }, + // ), + // 8.height, SingleItemDropDownMenu( context: context, height: 56.toScreenHeight, - title: context.translation.lastSituationStatus, + title: context.translation.activityStatus, showShadow: false, backgroundColor: AppColor.neutral100, showAsBottomSheet: true, - initialValue: requestDetailProvider.activityMaintenanceHelperModel?.lastSituation, + initialValue: requestDetailProvider.activityMaintenanceHelperModel?.activityStatus, onSelect: (status) { if (status != null) { - requestDetailProvider.activityMaintenanceHelperModel?.lastSituation = status; + requestDetailProvider.activityMaintenanceHelperModel?.activityStatus = status; setState(() {}); } }, diff --git a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart index e0946a97..1bbe449b 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart @@ -103,18 +103,16 @@ class _MaintenanceRequestFormState extends State with Si print('model is ${requestDetailProvider.activityMaintenanceHelperModel?.toJson()}'); if (validate(model: requestDetailProvider.activityMaintenanceHelperModel!)) { + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); int status = -1; if (requestDetailProvider.activityMaintenanceHelperModel?.id == 0) { status = await requestDetailProvider.createActivityMaintenanceRequest(); - print('status i got is $status'); } else { - print('going to update..'); status = await requestDetailProvider.updateActivityMaintenance(); } if (status == 200) { requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); - print('workorder activities list i got is ${requestDetailProvider.currentWorkOrder?.data?.activities.length}'); Navigator.pop(context); Navigator.pop(context); } else { diff --git a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart index e4bffbae..70dfba35 100644 --- a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart +++ b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart @@ -123,18 +123,18 @@ class _SparePartRequestState extends State with TickerProvider crossAxisAlignment: CrossAxisAlignment.stretch, children: [ context.translation.sparePartDetails.heading5(context), - 12.height, - SingleItemDropDownMenu( - context: context, - height: 56.toScreenHeight, - title: context.translation.activityStatus, - showShadow: false, - backgroundColor: AppColor.neutral100, - initialValue: requestDetailProvider.sparePartHelperModel?.activityStatus, - onSelect: (status) { - requestDetailProvider.sparePartHelperModel?.activityStatus = status; - }, - ), + // 12.height, + // SingleItemDropDownMenu( + // context: context, + // height: 56.toScreenHeight, + // title: context.translation.activityStatus, + // showShadow: false, + // backgroundColor: AppColor.neutral100, + // initialValue: requestDetailProvider.sparePartHelperModel?.activityStatus, + // onSelect: (status) { + // requestDetailProvider.sparePartHelperModel?.activityStatus = status; + // }, + // ), 12.height, SingleItemDropDownMenu( context: context,