diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 43ad4bf3..1072bbe9 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -44,6 +44,7 @@ class URLs { static get engineerNeedVisitUrl=> '$_baseUrl/ServiceRequest/EngineerNeedVisit'; static get engineerUpdateNeedVisitUrl=> '$_baseUrl/ServiceRequest/EngineerUpdateNeedVisit'; static get engineerMarkAsFixUrl=> '$_baseUrl/ServiceRequest/EngineerMarkAsFix'; + static get reOrderActivity=> '$_baseUrl/ServiceRequest/ReOrderActivity'; static get engineerConfirmArriveUrl=> '$_baseUrl/ServiceRequest/EngineerConfirmArrive'; static get engineerUpdateWorkOrderUrl=> '$_baseUrl/ServiceRequest/EngineerUpdateWorkOrder'; static get getWorkOrderByIdUrl=> '$_baseUrl/ServiceRequest/GetWorkOrderById'; diff --git a/lib/new_views/app_style/app_color.dart b/lib/new_views/app_style/app_color.dart index 66a1d70d..bb7aa2ee 100644 --- a/lib/new_views/app_style/app_color.dart +++ b/lib/new_views/app_style/app_color.dart @@ -141,6 +141,8 @@ class AppColor { return green70.withOpacity(.5); case "fixed": return green70.withOpacity(.5); + case "reject": + return red30; default: return Colors.white; } @@ -209,7 +211,7 @@ class AppColor { switch (id) { //low priority case 81: - return Colors.white; + return green15; case 370: return green15; case 82: diff --git a/lib/providers/service_request_providers/loan_availability_provider.dart b/lib/providers/service_request_providers/loan_availability_provider.dart index 7229acd0..391183a9 100644 --- a/lib/providers/service_request_providers/loan_availability_provider.dart +++ b/lib/providers/service_request_providers/loan_availability_provider.dart @@ -11,8 +11,7 @@ class LoanAvailabilityProvider extends LoadingListNotifier { @override Future getDate() async { if (loading == true) return -2; - loading = true; - notifyListeners(); + loading = true; notifyListeners(); try { diff --git a/lib/providers/work_order/reason_provider.dart b/lib/providers/work_order/reason_provider.dart index 7176ad35..bde828de 100644 --- a/lib/providers/work_order/reason_provider.dart +++ b/lib/providers/work_order/reason_provider.dart @@ -16,8 +16,6 @@ class ReasonProvider extends LoadingListNotifier { if (loading == true) return -2; loading = true; notifyListeners(); - loading = true; - notifyListeners(); try { Response response = await ApiManager.instance.get(URLs.getServiceReportReasonsNew+"&serviceRequestId=$serviceRequestId"); stateCode = response.statusCode; diff --git a/lib/service_request_latest/request_detail_provider.dart b/lib/service_request_latest/request_detail_provider.dart index f6be2652..143c7864 100644 --- a/lib/service_request_latest/request_detail_provider.dart +++ b/lib/service_request_latest/request_detail_provider.dart @@ -147,6 +147,7 @@ class RequestDetailProvider extends ChangeNotifier { //create workOrder nurse ..... Future createWorkOrder() async { isLoading = true; + notifyListeners(); try { final response = await ApiManager.instance.post( URLs.createWorkOrderUrl, @@ -156,7 +157,6 @@ class RequestDetailProvider extends ChangeNotifier { print('response of create request is ${response.body}'); if (response.statusCode >= 200 && response.statusCode < 300) { // request.engineerName = employee.name; - notifyListeners(); } isLoading = false; notifyListeners(); @@ -192,18 +192,13 @@ class RequestDetailProvider extends ChangeNotifier { Future engineerAcceptWorkOrder({required String id}) async { Response response; try { - final body = { - "workOrderId": id, - }; + final body = {"workOrderId": id}; isLoading = true; + notifyListeners(); response = await ApiManager.instance.post(URLs.engineerAcceptUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - updateCurrentWorkOrder(currentWorkOrder); - notifyListeners(); - isLoading = false; - return response.statusCode; } isLoading = false; notifyListeners(); @@ -221,15 +216,11 @@ class RequestDetailProvider extends ChangeNotifier { Response response; try { isLoading = true; + notifyListeners(); response = await ApiManager.instance.post(URLs.engineerRejectUrl, body: engineerRejectHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - print('engineer reject workOrder response is ${response.body}'); currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - updateCurrentWorkOrder(currentWorkOrder); - notifyListeners(); - isLoading = false; - return response.statusCode; } isLoading = false; notifyListeners(); @@ -247,13 +238,11 @@ class RequestDetailProvider extends ChangeNotifier { Response response; try { isLoading = true; + notifyListeners(); response = await ApiManager.instance.post(URLs.engineerFixRemotlyUrl, body: fixRemotelyHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - updateCurrentWorkOrder(WorkOrderDetail.fromJson(json.decode(response.body))); - notifyListeners(); - isLoading = false; - return response.statusCode; + currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); @@ -271,14 +260,11 @@ class RequestDetailProvider extends ChangeNotifier { Response response; try { isLoading = true; + notifyListeners(); response = await ApiManager.instance.post(URLs.engineerNeedVisitUrl, body: needVisitHelperModel!.toJson()); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - updateCurrentWorkOrder(currentWorkOrder); - notifyListeners(); - isLoading = false; - return response.statusCode; } isLoading = false; notifyListeners(); @@ -296,16 +282,13 @@ class RequestDetailProvider extends ChangeNotifier { Response response; try { isLoading = true; + notifyListeners(); response = await ApiManager.instance.post(URLs.engineerUpdateNeedVisitUrl, body: needVisitHelperModel!.toJson()); stateCode = response.statusCode; print('body i got is ${needVisitHelperModel?.toJson()}'); print('response i got is ${response.body}'); if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - updateCurrentWorkOrder(currentWorkOrder); - notifyListeners(); - isLoading = false; - return response.statusCode; } isLoading = false; notifyListeners(); @@ -322,16 +305,37 @@ class RequestDetailProvider extends ChangeNotifier { Future engineerMarkAsFixed({required int workOrderId, required String feedback}) async { Response response; try { - Map body = {'workOrderId': workOrderId, 'feedback': feedback}; isLoading = true; + notifyListeners(); + Map body = {'workOrderId': workOrderId, 'feedback': feedback}; + response = await ApiManager.instance.post(URLs.engineerMarkAsFixUrl, body: body); stateCode = response.statusCode; print('engineer mark as fixed response is ${response.body}'); if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - notifyListeners(); - isLoading = false; - return response.statusCode; + } + isLoading = false; + notifyListeners(); + return response.statusCode; + } catch (e) { + log("engineer mark as fixed [error] : $e"); + isLoading = false; + notifyListeners(); + return -1; + } + } + + Future reOrderActivities({required int workOrderId, required List> reOrderActivityDTOs}) async { + Response response; + try { + isLoading = true; + notifyListeners(); + Map body = {'workOrderId': workOrderId, 'reOrderActivityDTOs': reOrderActivityDTOs}; + response = await ApiManager.instance.post(URLs.reOrderActivity, body: body); + stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); @@ -345,18 +349,16 @@ class RequestDetailProvider extends ChangeNotifier { } //engineer Confirm Arrive...... - Future engineerConfirmArrival({required int workOrderId, required int verificationTypeId, required String photoInfo, required String otp, String ?assetNo}) async { + Future engineerConfirmArrival({required int workOrderId, required int verificationTypeId, required String photoInfo, required String otp, String? assetNo}) async { Response response; try { Map body = {"workOrderId": workOrderId, "verificationTypeId": verificationTypeId, "photoInfo": photoInfo, "otp": otp, "assetNumber": assetNo}; isLoading = true; + notifyListeners(); response = await ApiManager.instance.post(URLs.engineerConfirmArriveUrl, body: body); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { - print('response of Engineer confirm arrival ${response.body}'); - notifyListeners(); - isLoading = false; - return response.statusCode; + // print('response of Engineer confirm arrival ${response.body}'); } isLoading = false; notifyListeners(); @@ -372,22 +374,18 @@ class RequestDetailProvider extends ChangeNotifier { //assignEngineerToWorkOrder...... Future assignEngineerWorkOrder({required String workOrderId, required String engineerId}) async { try { - final body = { - "workOrderId": workOrderId, - "assignedEngineerId": engineerId, - }; + final body = {"workOrderId": workOrderId, "assignedEngineerId": engineerId}; isLoading = true; + notifyListeners(); final response = await ApiManager.instance.post(URLs.assignEngineerToWorkOrderUrl, body: body); stateCode = response.statusCode; + CommonResponseModel commonResponseModel = CommonResponseModel(); if (response.statusCode >= 200 && response.statusCode < 300) { - CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); - notifyListeners(); - isLoading = false; - return commonResponseModel; + commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); - return CommonResponseModel(); + return commonResponseModel; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; @@ -398,41 +396,37 @@ class RequestDetailProvider extends ChangeNotifier { //engineerUpdateWorkOrder...... Future engineerUpdateWorkOrder() async { - // try { - isLoading = true; - final response = await ApiManager.instance.post(URLs.engineerUpdateWorkOrderUrl, body: engineerUpdateWorkOrderHelperModel!.toJson()); - stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - updateCurrentWorkOrder(currentWorkOrder); + try { + isLoading = true; notifyListeners(); + final response = await ApiManager.instance.post(URLs.engineerUpdateWorkOrderUrl, body: engineerUpdateWorkOrderHelperModel!.toJson()); + stateCode = response.statusCode; + if (response.statusCode >= 200 && response.statusCode < 300) { + currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); + } isLoading = false; + notifyListeners(); + } catch (e) { + log("engineer update workorder [error] : $e"); + isLoading = false; + notifyListeners(); } - isLoading = false; - notifyListeners(); - // } - // catch (e) { - // log("engineer update workorder [error] : $e"); - // isLoading = false; - // notifyListeners(); - // } } //Nurse confirm reopen Future nurseReject() async { try { isLoading = true; + notifyListeners(); final response = await ApiManager.instance.post(URLs.nurseRejectUrl, body: nurseActionHelperModel!.toJson()); stateCode = response.statusCode; + CommonResponseModel commonResponseModel = CommonResponseModel(); if (response.statusCode >= 200 && response.statusCode < 300) { - CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); - notifyListeners(); - isLoading = false; - return commonResponseModel; + commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); - return CommonResponseModel(); + return commonResponseModel; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; @@ -445,19 +439,17 @@ class RequestDetailProvider extends ChangeNotifier { Future nurseConfirm() async { try { isLoading = true; + notifyListeners(); final response = await ApiManager.instance.post(URLs.nurseConfirmUrl, body: nurseActionHelperModel!.toJson()); - print('response i got is ${response.body}'); stateCode = response.statusCode; + CommonResponseModel commonResponseModel = CommonResponseModel(); if (response.statusCode >= 200 && response.statusCode < 300) { - CommonResponseModel commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); - notifyListeners(); - isLoading = false; - return commonResponseModel; + commonResponseModel = CommonResponseModel.fromJson(json.decode(response.body)); } isLoading = false; notifyListeners(); - return CommonResponseModel(); + return commonResponseModel; } catch (e) { log("engineer accept [error] : $e"); isLoading = false; @@ -468,16 +460,13 @@ class RequestDetailProvider extends ChangeNotifier { Future updateActivitySparePart() async { isLoading = true; + notifyListeners(); try { - final response = await ApiManager.instance.post( - URLs.updateActivitySparePartUrl, - body: sparePartHelperModel!.toJson(), - ); + final response = await ApiManager.instance.post(URLs.updateActivitySparePartUrl, body: sparePartHelperModel!.toJson()); stateCode = response.statusCode; print('update response i got is ${response.body}'); if (response.statusCode >= 200 && response.statusCode < 300) { // request.engineerName = employee.name; - notifyListeners(); } isLoading = false; notifyListeners(); @@ -491,16 +480,13 @@ class RequestDetailProvider extends ChangeNotifier { Future updateActivityMaintenance() async { isLoading = true; + notifyListeners(); try { - final response = await ApiManager.instance.put( - URLs.updateActivityMaintenanceUrl, - body: activityMaintenanceHelperModel!.toJson(), - ); + final response = await ApiManager.instance.put(URLs.updateActivityMaintenanceUrl, body: activityMaintenanceHelperModel!.toJson()); stateCode = response.statusCode; - print('update response i got is ${response.statusCode}'); + if (response.statusCode >= 200 && response.statusCode < 300) { // request.engineerName = employee.name; - notifyListeners(); } isLoading = false; notifyListeners(); @@ -533,21 +519,16 @@ class RequestDetailProvider extends ChangeNotifier { Future deleteActivitySparePart({required int id, required int workOrderId}) async { isLoading = true; - var body = { - 'id': id, - 'workOrderId': workOrderId, - }; + notifyListeners(); + var body = {'id': id, 'workOrderId': workOrderId}; try { - final response = await ApiManager.instance.post( - URLs.deleteActivitySparePartUrl, - body: body, - ); + final response = await ApiManager.instance.post(URLs.deleteActivitySparePartUrl, body: body); stateCode = response.statusCode; print('response of delete activity spare part is ${response.statusCode}'); if (response.statusCode >= 200 && response.statusCode < 300) { //map to the model... - notifyListeners(); + // notifyListeners(); } isLoading = false; notifyListeners(); @@ -561,22 +542,17 @@ class RequestDetailProvider extends ChangeNotifier { Future deleteActivityMaintenance({required int id, required int workOrderId}) async { isLoading = true; - var body = { - 'id': id, - 'workOrderId': workOrderId, - }; + notifyListeners(); + var body = {'id': id, 'workOrderId': workOrderId}; try { - //TODO replace with delete model... final response = await ApiManager.instance.delete( URLs.deleteActivityMaintenanceUrl, body: body, ); stateCode = response.statusCode; - print('response of delete activity spare part is ${response.body}'); + if (response.statusCode >= 200 && response.statusCode < 300) { //map to the model... - - notifyListeners(); } isLoading = false; notifyListeners(); @@ -590,6 +566,7 @@ class RequestDetailProvider extends ChangeNotifier { Future createActivitySparePart() async { isLoading = true; + notifyListeners(); try { final response = await ApiManager.instance.post( URLs.createActivitySparePartUrl, @@ -599,8 +576,8 @@ class RequestDetailProvider extends ChangeNotifier { print('add sparepart activity response i got is ${response.body}'); if (response.statusCode >= 200 && response.statusCode < 300) { // currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - // updateCurrentWorkOrder(currentWorkOrder); - notifyListeners(); + // // updateCurrentWorkOrder(currentWorkOrder); + // notifyListeners(); } isLoading = false; notifyListeners(); @@ -614,43 +591,40 @@ class RequestDetailProvider extends ChangeNotifier { Future createActivityMaintenanceRequest() async { isLoading = true; - // try { - final response = await ApiManager.instance.post( - URLs.createActivityMaintenanceUrl, - body: activityMaintenanceHelperModel!.toJson(), - ); - stateCode = response.statusCode; - print('add maintenance activity response i got is ${response.body}'); - if (response.statusCode >= 200 && response.statusCode < 300) { - // currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - // updateCurrentWorkOrder(currentWorkOrder); + notifyListeners(); + try { + final response = await ApiManager.instance.post( + URLs.createActivityMaintenanceUrl, + body: activityMaintenanceHelperModel!.toJson(), + ); + stateCode = response.statusCode; + print('add maintenance activity response i got is ${response.body}'); + if (response.statusCode >= 200 && response.statusCode < 300) { + // currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); + // updateCurrentWorkOrder(currentWorkOrder); + } + isLoading = false; notifyListeners(); return response.statusCode; + } catch (error) { + isLoading = false; + notifyListeners(); + return -1; } - isLoading = false; - notifyListeners(); - return response.statusCode; - // } catch (error) { - // isLoading = false; - // notifyListeners(); - // return -1; - // } } //create asset retired request.. Future createActivityAssetToBeRetired() async { isLoading = true; + notifyListeners(); try { final response = await ApiManager.instance.post( URLs.createActivityAssetToBeRetiredUrl, body: assetRetiredHelperModel!.toJson(), ); stateCode = response.statusCode; - print('response of asset retired is ${response.body}'); if (response.statusCode >= 200 && response.statusCode < 300) { currentWorkOrder = WorkOrderDetail.fromJson(json.decode(response.body)); - updateCurrentWorkOrder(currentWorkOrder); - notifyListeners(); } isLoading = false; notifyListeners(); @@ -687,6 +661,7 @@ class RequestDetailProvider extends ChangeNotifier { //send otp.. Future sendOtp({required int workOrderId}) async { isLoading = true; + notifyListeners(); try { final response = await ApiManager.instance.postWithOutBody( URLs.sendOtpUrl + "$workOrderId", @@ -695,9 +670,7 @@ class RequestDetailProvider extends ChangeNotifier { stateCode = response.statusCode; print('response i got is ${response.body}'); - if (response.statusCode >= 200 && response.statusCode < 300) { - notifyListeners(); - } + if (response.statusCode >= 200 && response.statusCode < 300) {} isLoading = false; notifyListeners(); return response.statusCode; @@ -711,15 +684,12 @@ class RequestDetailProvider extends ChangeNotifier { //verify otp.. Future verifyOtp({required int workOrderId, required String otpCode}) async { isLoading = true; + notifyListeners(); try { - final response = await ApiManager.instance.postWithOutBody( - URLs.verifyOtpUrl + '$workOrderId&$otpCode', - ); - print('response i got is ${response.body}'); + final response = await ApiManager.instance.postWithOutBody(URLs.verifyOtpUrl + '$workOrderId&$otpCode'); + stateCode = response.statusCode; - if (response.statusCode >= 200 && response.statusCode < 300) { - notifyListeners(); - } + if (response.statusCode >= 200 && response.statusCode < 300) {} isLoading = false; notifyListeners(); return response.statusCode; 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 89137703..41017883 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 @@ -8,6 +8,7 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/work_order_next_step.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; +import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart'; @@ -29,9 +30,12 @@ class FooterActionButton { ); } - static Widget requestDetailsFooterWidget({required WorkOrderNextStepEnum workOrderNextStepStatus, required BuildContext context, required UserProvider userProvider}) { + static Widget requestDetailsFooterWidget( + {required WorkOrderNextStepEnum workOrderNextStepStatus, List activities = const [], required BuildContext context, required UserProvider userProvider}) { RequestDetailProvider requestDetailProvider = Provider.of(context, listen: false); + bool showMarkAsFixedButton = activities.isEmpty ? true : activities.every((object) => object.activityStatus!.name!.toLowerCase() == "completed"); + if (userProvider.user?.type == UsersTypes.engineer) { switch (workOrderNextStepStatus) { case WorkOrderNextStepEnum.onlyView: @@ -67,7 +71,7 @@ class FooterActionButton { if (context.mounted) { RejectReasonProvider rejectionReasonProvider = Provider.of(context, listen: false); rejectionReasonProvider.reset(); - rejectionReasonProvider.getDate(); + //rejectionReasonProvider.getDate(); } ServiceRequestBottomSheet.rejectRequestBottomSheet(context: context); }, @@ -148,16 +152,17 @@ class FooterActionButton { Navigator.push(context, MaterialPageRoute(builder: (context) => const ActivitiesListView())); }, ), - 8.height, - AppFilledButton( - label: context.translation.markAsFixed, - // maxWidth: true, - buttonColor: AppColor.green70, - onPressed: () async { - - ServiceRequestBottomSheet.feedBackBottomSheet(context: context); - }, - ), + if (showMarkAsFixedButton) ...[ + 8.height, + AppFilledButton( + label: context.translation.markAsFixed, + // maxWidth: true, + buttonColor: AppColor.green70, + onPressed: () async { + ServiceRequestBottomSheet.feedBackBottomSheet(context: context); + }, + ), + ] ], )); case WorkOrderNextStepEnum.endWorkFlow: 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 27a645c6..49beec9b 100644 --- a/lib/service_request_latest/views/components/activities_list_view.dart +++ b/lib/service_request_latest/views/components/activities_list_view.dart @@ -54,15 +54,15 @@ class _ActivitiesListViewState extends State { List reOrderActivities = []; + List activities = []; + @override Widget build(BuildContext context) { - //TODO add the check for type of activity after completing maintenance activity flow. - List activities = []; UserProvider userProvider = Provider.of(context); return Scaffold( appBar: DefaultAppBar( title: context.translation.activities, - actions: [if (!showReorderView) IconButton(onPressed: () => setState(() => showReorderView = true), icon: const Icon(Icons.reorder_rounded))], + actions: [if (!showReorderView) IconButton(onPressed: () => activities.isEmpty ? null : setState(() => showReorderView = true), icon: const Icon(Icons.reorder_rounded))], ), //backgroundColor: const Color(0xfff8f9fb), body: Consumer(builder: (context, RequestDetailProvider requestDetailProvider, child) { @@ -126,8 +126,12 @@ class _ActivitiesListViewState extends State { if (showReorderView) { requestDetailProvider.currentWorkOrder!.data!.activities = reOrderActivities; reOrderActivities = []; + List> data = []; + for (int i = 0; i < reOrderActivities.length; i++) { + data.add({"id": reOrderActivities[i].id, "orderNo": i}); + } + requestDetailProvider.reOrderActivities(workOrderId: requestDetailProvider.currentWorkOrder!.data!.requestId!, reOrderActivityDTOs: data); showReorderView = false; - setState(() {}); return; } ServiceRequestBottomSheet.activityTypeBottomSheet(context: context); diff --git a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart index ecc5b728..964a2596 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -1,10 +1,9 @@ import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/app_strings/app_asset.dart'; -import 'package:test_sa/controllers/providers/settings/setting_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; @@ -15,17 +14,14 @@ import 'package:test_sa/models/helper_data_models/maintenance_request/activity_m import 'package:test_sa/models/helper_data_models/spare_part/activity_spare_part_model.dart'; import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_models.dart'; import 'package:test_sa/models/lookup.dart'; -import 'package:test_sa/models/service_request/service_request.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; -import 'package:test_sa/providers/service_request_providers/first_action_provider.dart'; import 'package:test_sa/providers/service_request_providers/reject_reason_provider.dart'; -import 'package:test_sa/providers/work_order/reason_provider.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart'; import 'package:test_sa/service_request_latest/views/forms/spare_part/spare_part_request.dart'; -import 'package:test_sa/service_request_latest/views/components/verify_arrival_view.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; + import '../../../../controllers/providers/api/service_requests_provider.dart'; import '../../../../new_views/app_style/app_color.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart'; @@ -205,11 +201,10 @@ class ServiceRequestBottomSheet { loading: false, onPressed: () async { requestDetailProvider.fixRemotelyHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder?.data?.requestId; - requestDetailProvider.engineerFixRemotely(); + requestDetailProvider.engineerFixRemotely(); //TODO context issue to show message.. Navigator.pop(context); - // const SizedBox().flushBar(context: context, title: '', message: context.translation.youMarkedThisIssueAsFixedWaitingForTheRequesterToConfirm); - + // const SizedBox().flushBar(context: context, title: '', message: context.translation.youMarkedThisIssueAsFixedWaitingForTheRequesterToConfirm); }, ), ), @@ -298,7 +293,7 @@ class ServiceRequestBottomSheet { requestDetailProvider.engineerUpdateNeedVisit(); } else { requestDetailProvider.needVisitHelperModel?.workOrderId = requestDetailProvider.currentWorkOrder!.data!.requestId; - requestDetailProvider.engineerNeedVisit(); + requestDetailProvider.engineerNeedVisit(); requestDetailProvider.needVisitHelperModel = NeedVisitHelperModel(); } Navigator.pop(context); @@ -326,6 +321,7 @@ class ServiceRequestBottomSheet { context: context, title: context.translation.reason, backgroundColor: AppColor.neutral100, + showShadow: false, initialValue: requestDetailProvider.engineerRejectHelperModel?.rejectionReason, onSelect: (value) { if (value != null) { @@ -340,6 +336,7 @@ class ServiceRequestBottomSheet { labelText: context.translation.comments, textInputType: TextInputType.multiline, alignLabelWithHint: true, + showShadow: false, labelStyle: AppTextStyles.textFieldLabelStyle, onChange: (text) { requestDetailProvider.engineerRejectHelperModel?.feedback = text; @@ -524,8 +521,9 @@ class ServiceRequestBottomSheet { static Future addAnotherSpareRequestBottomSheet({required BuildContext context}) { return buildBottomSheetParent( - context: context, - childWidget: Consumer(builder: (context, serviceRequestProvider, child) { + context: context, + childWidget: Consumer( + builder: (context, serviceRequestProvider, child) { return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -533,7 +531,7 @@ class ServiceRequestBottomSheet { 8.height, Align( alignment: AlignmentDirectional.centerStart, - child: context.translation.doYouWantToCreateAnotherSparePartRequest.heading6(context), + child: context.translation.doYouWantToCreateAnotherSparePartRequest.bottomSheetHeadingTextStyle(context), ), 41.height, Row( @@ -562,10 +560,13 @@ class ServiceRequestBottomSheet { }, ).expanded, ], - ) + ), + 16.height, ], ); - })); + }, + ), + ); } static Future feedBackBottomSheet({required BuildContext context}) { diff --git a/lib/service_request_latest/views/components/history_log_view.dart b/lib/service_request_latest/views/components/history_log_view.dart index 20b8bb03..4847767b 100644 --- a/lib/service_request_latest/views/components/history_log_view.dart +++ b/lib/service_request_latest/views/components/history_log_view.dart @@ -16,18 +16,6 @@ class HistoryLogView extends StatelessWidget { @override Widget build(BuildContext context) { - List dummyList = [ - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: 'Status update to In Progress'), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: 'Status updated to Closed'), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), - HistoryLogModel(message: 'Requester acknowledged adc dld a', date: DateTime.now(), status: null), - ]; - return Consumer(builder: (context, requestProvider, _) { String status = ""; return requestProvider.isLoading @@ -119,6 +107,8 @@ class HistoryLogView extends StatelessWidget { return "Status update to Completed".addTranslation; } else if (status == "fixed") { return "Status update to Fixed".addTranslation; + } else if (status == "reject") { + return "Status update to Rejected".addTranslation; } else return status; } 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 89092003..0dd66e37 100644 --- a/lib/service_request_latest/views/components/request_detail_view.dart +++ b/lib/service_request_latest/views/components/request_detail_view.dart @@ -50,7 +50,7 @@ class WorkOrderDetailView extends StatelessWidget { ), ).expanded, FooterActionButton.requestDetailsFooterWidget( - workOrderNextStepStatus: requestProvider.currentWorkOrder!.data!.nextStep!.workOrderNextStepEnum!, userProvider: _userProvider, context: context), + workOrderNextStepStatus: requestProvider.currentWorkOrder!.data!.nextStep!.workOrderNextStepEnum!,activities:requestProvider.currentWorkOrder!.data?.activities??[], userProvider: _userProvider, context: context), ], ), // const TimerWidget(), @@ -209,62 +209,62 @@ class WorkOrderDetailView extends StatelessWidget { ], ], ).paddingOnly(start: 16, end: 16, top: 16, bottom: 8), - (userProvider.user!.type == UsersTypes.normal_user - ? Container( - height: 50, - padding: const EdgeInsets.only(left: 16, right: 16), - alignment: Alignment.center, - width: double.infinity, - decoration: ShapeDecoration( - color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - bottomLeft: Radius.circular(20), - bottomRight: Radius.circular(20), - ), - ), - ), - child: Row( - children: [ - Text( - '${context.translation.commentHere}...', - style: AppTextStyles.heading6.copyWith( - color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(.6), - ), - ).expanded, - "comment_send".toSvgAsset(width: 24, color: context.isDark ? AppColor.primary50 : AppColor.primary70), - ], - ), - ) - : Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Divider().defaultStyle(context), - 16.height, - Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - context.translation.viewComments, - style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)), - ), - 4.width, - Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14) - ], - ), - ], - ).paddingOnly(bottom: 16, start: 16, end: 16)) - .onPress(() { - // showModalBottomSheet( - // context: context, - // useSafeArea: true, - // isScrollControlled: true, - // useRootNavigator: true, - // backgroundColor: Colors.transparent, - // builder: (context) => CommentsBottomSheet(requestId: serviceRequest.id!), - // ); - }), + // (userProvider.user!.type == UsersTypes.normal_user + // ? Container( + // height: 50, + // padding: const EdgeInsets.only(left: 16, right: 16), + // alignment: Alignment.center, + // width: double.infinity, + // decoration: ShapeDecoration( + // color: context.isDark ? AppColor.neutral50 : AppColor.neutral30, + // shape: const RoundedRectangleBorder( + // borderRadius: BorderRadius.only( + // bottomLeft: Radius.circular(20), + // bottomRight: Radius.circular(20), + // ), + // ), + // ), + // child: Row( + // children: [ + // Text( + // '${context.translation.commentHere}...', + // style: AppTextStyles.heading6.copyWith( + // color: (context.isDark ? AppColor.neutral30 : AppColor.neutral50).withOpacity(.6), + // ), + // ).expanded, + // "comment_send".toSvgAsset(width: 24, color: context.isDark ? AppColor.primary50 : AppColor.primary70), + // ], + // ), + // ) + // : Column( + // mainAxisSize: MainAxisSize.min, + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // const Divider().defaultStyle(context), + // 16.height, + // Row( + // mainAxisSize: MainAxisSize.min, + // children: [ + // Text( + // context.translation.viewComments, + // style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)), + // ), + // 4.width, + // Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14) + // ], + // ), + // ], + // ).paddingOnly(bottom: 16, start: 16, end: 16)) + // .onPress(() { + // // showModalBottomSheet( + // // context: context, + // // useSafeArea: true, + // // isScrollControlled: true, + // // useRootNavigator: true, + // // backgroundColor: Colors.transparent, + // // builder: (context) => CommentsBottomSheet(requestId: serviceRequest.id!), + // // ); + // }), //set condition for show asset detail button... if (workOrder.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.verifyAssetDetail || workOrder.nextStep!.workOrderNextStepEnum == WorkOrderNextStepEnum.activity && userProvider.user?.type == UsersTypes.engineer) ...[ 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 9838cfa0..7efcf22c 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 @@ -14,7 +14,6 @@ import 'package:test_sa/models/helper_data_models/workorder/work_order_helper_mo import 'package:test_sa/models/new_models/work_order_detail_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; -import 'package:test_sa/new_views/common_widgets/app_lazy_loading.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/service_request_providers/equipment_status_provider.dart'; @@ -24,7 +23,6 @@ import 'package:test_sa/providers/work_order/reason_provider.dart'; import 'package:test_sa/service_request_latest/request_detail_provider.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import 'package:test_sa/views/widgets/equipment/pick_asset.dart'; -import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import '../../../../../../models/lookup.dart'; import '../../../../../../new_views/common_widgets/default_app_bar.dart'; @@ -54,188 +52,172 @@ class _VerifyAssetDetailsState extends State with TickerProv @override void initState() { super.initState(); - scheduleMicrotask(() async { - await getInitialData(); - }); - // WidgetsBinding.instance.addPostFrameCallback((_) { - - // }); } - Future getInitialData() async { - //TODO ask skinder how to called getdata methods automatically... - _isLoading = true; - _requestDetailProvider = Provider.of(context, listen: false); - _reasonProvider = Provider.of(context, listen: false); - _faultDescriptionProvider = Provider.of(context, listen: false); - _loanAvailabilityProvider = Provider.of(context, listen: false); - _equipmentStatusProvider = Provider.of(context, listen: false); - _reasonProvider?.serviceRequestId = _requestDetailProvider?.currentWorkOrder!.data!.requestId.toString(); - _faults = await Provider.of(context, listen: false).getFaultDescriptionList(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id); - _reasonProvider?.getDate(); - _equipmentStatusProvider?.getDate(); - _loanAvailabilityProvider?.getDate(); - //TODO no need to create seprate models just write a method in workorder model... - WorkOrderData currentWorkOrderData = _requestDetailProvider!.currentWorkOrder!.data!; - _requestDetailProvider?.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel( - workOrderId: currentWorkOrderData.requestId, - equipmentStatus: currentWorkOrderData.equipmentStatus, - loanAvailability: currentWorkOrderData.loanAvailablity, - failureReason: currentWorkOrderData.failureReasone, - // faultDescription: currentWorkOrderData.problemDescription, - solution: currentWorkOrderData.solution?.name, - returnToService: currentWorkOrderData.returnToService, - serviceType: currentWorkOrderData.serviceType, - ); - _requestDetailProvider?.updateEngineerUpdateWorkOrderHelperModel(_requestDetailProvider?.engineerUpdateWorkOrderHelperModel); - _isLoading = false; + Future getFaultDescription() async { + Provider.of(context, listen: false).getFaultDescriptionList(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id).then((List? data) { + if (data?.isNotEmpty ?? false) { + _faults = data!; + setState(() {}); + } + }); } @override Widget build(BuildContext context) { + if (_requestDetailProvider == null) { + _requestDetailProvider = Provider.of(context, listen: false); + _reasonProvider = Provider.of(context, listen: false); + _reasonProvider!.reset(); + _loanAvailabilityProvider = Provider.of(context, listen: false); + _loanAvailabilityProvider!.reset(); + _faultDescriptionProvider = Provider.of(context, listen: false); + _equipmentStatusProvider = Provider.of(context, listen: false); + _equipmentStatusProvider!.reset(); + _equipmentStatusProvider!.getDate(); + _reasonProvider?.serviceRequestId = _requestDetailProvider?.currentWorkOrder!.data!.requestId.toString(); + WorkOrderData currentWorkOrderData = _requestDetailProvider!.currentWorkOrder!.data!; + _requestDetailProvider?.engineerUpdateWorkOrderHelperModel = EngineerUpdateWorkOrderHelperModel( + workOrderId: currentWorkOrderData.requestId, + equipmentStatus: currentWorkOrderData.equipmentStatus, + loanAvailability: currentWorkOrderData.loanAvailablity, + failureReason: currentWorkOrderData.failureReasone, + // faultDescription: currentWorkOrderData.problemDescription, + solution: currentWorkOrderData.solution?.name, + returnToService: currentWorkOrderData.returnToService, + serviceType: currentWorkOrderData.serviceType, + ); + _requestDetailProvider?.updateEngineerUpdateWorkOrderHelperModel(_requestDetailProvider?.engineerUpdateWorkOrderHelperModel); + getFaultDescription(); + } + return Scaffold( key: _scaffoldKey, appBar: DefaultAppBar(title: context.translation.verify_asset_details), body: Consumer(builder: (context, RequestDetailProvider requestDetailProvider, child) { - return SafeArea( - child: LoadingManager( - isLoading: _isLoading, - isFailedLoading: false, - stateCode: 200, - onRefresh: () async {}, - child: Form( - key: _formKey, - child: Column( - children: [ - SingleChildScrollView( - child: Card( - child: Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - equipmentStatusWidget(context: context, workOrderData: requestDetailProvider.engineerUpdateWorkOrderHelperModel!), - 24.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; - } - 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(() { - 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) { - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault; - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault?.workPerformed; - if (mounted) { - requestDetailProvider.updateEngineerUpdateWorkOrderHelperModel(requestDetailProvider.engineerUpdateWorkOrderHelperModel); - } - }, - ), - 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(), - ], - ).paddingOnly(start: 13, end: 13, top: 16, bottom: 16), - ).paddingOnly(top: 17, start: 14, end: 14), - ).expanded, - Container( - padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight), - color: AppColor.white10, - child: AppFilledButton( - label: context.translation.verify_asset_details, - buttonColor: AppColor.primary10, - onPressed: () async { - //TODO add loader - // showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - requestDetailProvider.engineerUpdateWorkOrder(); - // Navigator.pop(context); - Navigator.pop(context); - }, - ), + return Column( + 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; + } + 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(() { + 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) { + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.faultDescription = fault; + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution = fault?.workPerformed; + if (mounted) { + requestDetailProvider.updateEngineerUpdateWorkOrderHelperModel(requestDetailProvider.engineerUpdateWorkOrderHelperModel); + } + }, + ), + 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), + Container( + padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 16.toScreenHeight), + color: AppColor.white10, + child: AppFilledButton( + label: context.translation.verify_asset_details, + buttonColor: AppColor.primary10, + onPressed: () async { + await requestDetailProvider.engineerUpdateWorkOrder(); + Navigator.pop(context); + }, ), ), - ), + ], ); }), );