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/views/components/action_button/footer_action_button.dart b/lib/service_request_latest/views/components/action_button/footer_action_button.dart index fcf30010..38fff28c 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 @@ -65,9 +65,9 @@ class FooterActionButton { onPressed: () async { //TODO need to discuss getData is not called by default... if (context.mounted) { - RejectReasonProvider rejectionReasonProvider = Provider.of(context, listen: false); - rejectionReasonProvider.reset(); - rejectionReasonProvider.getDate(); + RejectReasonProvider rejectionReasonProvider = Provider.of(context, listen: false); + rejectionReasonProvider.reset(); + //rejectionReasonProvider.getDate(); } ServiceRequestBottomSheet.rejectRequestBottomSheet(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 bd2d8dc7..225fafd6 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 @@ -468,7 +468,7 @@ class ServiceRequestBottomSheet { SingleItemDropDownMenu( context: context, title: context.translation.reason, - backgroundColor: AppColor.neutral100, + backgroundColor: AppColor.neutral100,showShadow: false, initialValue: requestDetailProvider.engineerRejectHelperModel?.rejectionReason, onSelect: (value) { if (value != null) { @@ -482,7 +482,7 @@ class ServiceRequestBottomSheet { backgroundColor: AppColor.neutral100, labelText: context.translation.comments, textInputType: TextInputType.multiline, - alignLabelWithHint: true, + alignLabelWithHint: true,showShadow: false, labelStyle: AppTextStyles.textFieldLabelStyle, onChange: (text) { requestDetailProvider.engineerRejectHelperModel?.feedback = text; 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..4e6a013e 100644 --- a/lib/service_request_latest/views/components/request_detail_view.dart +++ b/lib/service_request_latest/views/components/request_detail_view.dart @@ -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 870726ea..11c15d65 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 @@ -23,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'; @@ -53,185 +52,177 @@ 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(); + + Provider.of(context, listen: false).getFaultDescriptionList(assetId: _requestDetailProvider?.currentWorkOrder?.data?.asset?.id).then((List? data) { + if (data?.isNotEmpty ?? false) { + _faults = data!; + setState(() {}); + } + }); + //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; } @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); + getInitialData(); + } + 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 { - await requestDetailProvider.engineerUpdateWorkOrder(); - 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); + }, ), ), - ), + ], ); }), );