diff --git a/lib/controllers/providers/settings/setting_provider.dart b/lib/controllers/providers/settings/setting_provider.dart index fbbeae29..f9d007b4 100644 --- a/lib/controllers/providers/settings/setting_provider.dart +++ b/lib/controllers/providers/settings/setting_provider.dart @@ -7,6 +7,7 @@ import 'package:local_auth/local_auth.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; +import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/user.dart'; import '../settings/app_settings.dart'; @@ -31,9 +32,11 @@ class SettingProvider extends ChangeNotifier { String password = ""; bool isLocalAuthEnable = false; - bool get isFlowMedical => _assetGroup?.id == 1; + bool get isUserFlowMedical => _assetGroup?.id == 1; - bool get isFMS => _assetGroup?.id == 2; + bool get isUserFMS => _assetGroup?.id == 2; + bool get engineerCanCreateCM => isUserFMS; + bool get showPriority => !(isUserFMS && user?.type == UsersTypes.normal_user); // Local authentication instance final LocalAuthentication auth = LocalAuthentication(); diff --git a/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart b/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart index f5c4f483..7a7f1ba0 100644 --- a/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart +++ b/lib/new_views/pages/land_page/create_request-type_bottomsheet.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:provider/provider.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/text_extensions.dart'; @@ -84,6 +86,9 @@ class CreateRequestModel { static List requestsList(BuildContext context, bool isEngineer) { List list = []; if (isEngineer) { + if (Provider.of(context, listen: false).engineerCanCreateCM) { + list.add(CreateRequestModel(context.translation.correctiveMaintenance, "add_icon", CreateNewRequest.id)); + } list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); } else { list.add(CreateRequestModel(context.translation.correctiveMaintenance, "add_icon", CreateNewRequest.id)); diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart index e3fabae7..3f888da7 100644 --- a/lib/new_views/pages/land_page/requests/service_request_item_view.dart +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -33,12 +33,14 @@ class ServiceRequestItemView extends StatelessWidget { Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - StatusLabel( - label: requestData!.priorityName!, - textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.priorityName!), - backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.priorityName!), - ), - 8.width, + if (Provider.of(context, listen: false).showPriority) ...[ + StatusLabel( + label: requestData!.priorityName!, + textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.priorityName!), + backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.priorityName!), + ), + 8.width, + ], StatusLabel( label: requestData!.statusName!, textColor: AppColor.getHistoryLogStatusTextColorByName(requestData!.statusName!), @@ -94,12 +96,14 @@ class ServiceRequestItemView extends StatelessWidget { Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - StatusLabel( - label: requestDetails!.priority, - textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.priority), - backgroundColor: AppColor.getRequestStatusColorByName(context, requestDetails!.priority), - ), - 8.width, + if (Provider.of(context, listen: false).showPriority) ...[ + StatusLabel( + label: requestDetails!.priority, + textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.priority), + backgroundColor: AppColor.getRequestStatusColorByName(context, requestDetails!.priority), + ), + 8.width, + ], StatusLabel( label: requestDetails!.status, textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.status), diff --git a/lib/service_request_latest/views/components/service_request_detail_view.dart b/lib/service_request_latest/views/components/service_request_detail_view.dart index c4d25e0e..9e7eee14 100644 --- a/lib/service_request_latest/views/components/service_request_detail_view.dart +++ b/lib/service_request_latest/views/components/service_request_detail_view.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/controllers/providers/api/user_provider.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'; @@ -19,7 +20,6 @@ import 'package:test_sa/service_request_latest/service_request_detail_provider.d import 'package:test_sa/service_request_latest/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/service_request_latest/views/components/asset_detail_card.dart'; import 'package:test_sa/service_request_latest/views/components/initial_visit_card.dart'; -import 'package:test_sa/service_request_latest/views/components/timer_widget.dart'; import 'package:test_sa/service_request_latest/views/forms/asset_retired/asset_retired.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; @@ -106,14 +106,16 @@ class _ServiceRequestDetailViewState extends State { Row( mainAxisSize: MainAxisSize.min, children: [ - StatusLabel( - label: workOrder.priority?.name, - id: workOrder.priority!.id!, - radius: 4, - textColor: AppColor.getPriorityStatusTextColor(context, workOrder.priority!.id!), - backgroundColor: AppColor.getPriorityStatusColor(context, workOrder.priority!.id!), - ), - 8.width, + if (Provider.of(context, listen: false).showPriority) ...[ + StatusLabel( + label: workOrder.priority?.name, + id: workOrder.priority!.id!, + radius: 4, + textColor: AppColor.getPriorityStatusTextColor(context, workOrder.priority!.id!), + backgroundColor: AppColor.getPriorityStatusColor(context, workOrder.priority!.id!), + ), + 8.width, + ], StatusLabel( radius: 4, label: workOrder.status!.name, diff --git a/lib/service_request_latest/views/nurse/create_new_request_view.dart b/lib/service_request_latest/views/nurse/create_new_request_view.dart index f0761905..86637776 100644 --- a/lib/service_request_latest/views/nurse/create_new_request_view.dart +++ b/lib/service_request_latest/views/nurse/create_new_request_view.dart @@ -1,5 +1,6 @@ import 'dart:convert'; import 'dart:io'; + import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -31,6 +32,7 @@ import 'package:test_sa/views/widgets/equipment/asset_picker.dart'; import 'package:test_sa/views/widgets/images/multi_image_picker.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/sound/TextSpeechRecordWidget.dart'; + import '../../../../../../new_views/common_widgets/default_app_bar.dart'; class CreateNewRequest extends StatefulWidget { @@ -81,15 +83,17 @@ class _CreateNewRequestState extends State with TickerProvider isFirstActionSubmitted = _serviceRequest.firstAction != null; // _isLoading = true; } + Future getInitialData() async { - WidgetsBinding.instance.addPostFrameCallback((_) async{ - await Provider.of(context,listen: false).getDate(); - await Provider.of(context,listen: false).getDate(); - await Provider.of(context,listen: false).getDate(); - await Provider.of(context,listen: false).getDate(); + WidgetsBinding.instance.addPostFrameCallback((_) async { + if(Provider.of(context, listen: false).showPriority) { + await Provider.of(context, listen: false).getDate(); + } + await Provider.of(context, listen: false).getDate(); + await Provider.of(context, listen: false).getDate(); + await Provider.of(context, listen: false).getDate(); }); - } @override @@ -143,9 +147,11 @@ class _CreateNewRequestState extends State with TickerProvider showPendingRequests(); }), ], - 21.height, - highPriorityWidget(), - 20.height, + if (Provider.of(context, listen: false).showPriority) ...[ + 16.height, + highPriorityWidget(), + ], + 16.height, assetStatusWidget(context), 24.height, MultiFilesPicker( @@ -167,9 +173,9 @@ class _CreateNewRequestState extends State with TickerProvider // label: context.translation.submitRequest, buttonColor: AppColor.primary10, label: - // (pendingAssetServiceRequest != null && (pendingAssetServiceRequest!.details?.isNotEmpty ?? false)) - // ? context.translation.duplicateRequest : // @FM said show create work order button text to create request not duplicate request - context.translation.createWorkOrder, + // (pendingAssetServiceRequest != null && (pendingAssetServiceRequest!.details?.isNotEmpty ?? false)) + // ? context.translation.duplicateRequest : // @FM said show create work order button text to create request not duplicate request + context.translation.createWorkOrder, onPressed: checkPendingRequest ? null : _submit, // buttonColor: AppColor.primary10, ), @@ -210,7 +216,7 @@ class _CreateNewRequestState extends State with TickerProvider height: 24, child: Radio( value: element, - activeColor:AppColor.primary10, + activeColor: AppColor.primary10, fillColor: WidgetStateColor.resolveWith((states) { if (states.contains(WidgetState.selected)) { return AppColor.primary10; // Thumb color when selected @@ -225,7 +231,7 @@ class _CreateNewRequestState extends State with TickerProvider }), ), 8.width, - Text(element.name??'', style: AppTextStyles.tinyFont.copyWith(color:AppColor.neutral120)), + Text(element.name ?? '', style: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral120)), ], ) ], @@ -257,11 +263,11 @@ class _CreateNewRequestState extends State with TickerProvider children: [ context.translation.highPriority.bodyText(context).custom(color: AppColor.black20), Consumer(builder: (cxt, snapshot, _) { - if(snapshot.items.isNotEmpty){ + if (snapshot.items.isNotEmpty) { _serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: () => Lookup()); } return CupertinoSwitch( - thumbColor:_serviceRequest.priority?.value != 0? AppColor.red70:AppColor.neutral10, + thumbColor: _serviceRequest.priority?.value != 0 ? AppColor.red70 : AppColor.neutral10, activeColor: AppColor.red30.withOpacity(0.4), value: _serviceRequest.priority?.value != 0, onChanged: (state) { @@ -287,8 +293,7 @@ class _CreateNewRequestState extends State with TickerProvider serviceRequest?.audio = audio; }, enabled: serviceRequest == null ? true : false, - ) - .paddingOnly(start: 16, end: 16,bottom: 16); + ).paddingOnly(start: 16, end: 16, bottom: 16); } bool checkPendingRequest = false; @@ -329,7 +334,7 @@ class _CreateNewRequestState extends State with TickerProvider _serviceRequest.requestedThrough = Provider.of(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null); _serviceRequest.type = Provider.of(context, listen: false).items.firstWhere((element) => element.value == 1, orElse: null); - if (_formKey.currentState!.validate() && await _serviceRequest.validateNewRequest(context)) { + if (_formKey.currentState!.validate() && await _serviceRequest.validateNewRequest(context)) { _formKey.currentState!.save(); // bool canSubmitRequest = await checkAssetForPendingServiceRequest(_serviceRequest.device.id); @@ -337,7 +342,7 @@ class _CreateNewRequestState extends State with TickerProvider // return; // } - // _serviceRequest.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList(); + // _serviceRequest.devicePhotos = _deviceImages.map((e) => _isLocalUrl(e.path) ? "${e.path.split("/").last}|${base64Encode(e.readAsBytesSync())}" : e.path).toList(); if (_serviceRequest.audio != null) { if (_isLocalUrl(_serviceRequest.audio!)) { final File file = File(_serviceRequest.audio!); @@ -348,27 +353,26 @@ class _CreateNewRequestState extends State with TickerProvider for (var item in _deviceImages) { attachement.add(WorkOrderAttachments(id: 0, name: "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}")); } - _requestDetailProvider.workOrderHelperModel = WorkOrderHelperModel( - assetId: _serviceRequest.device?.id, - priorityId: _serviceRequest.priority?.id, - equipmentStatusId: _serviceRequest.defectType?.id, - voiceNote: _serviceRequest.audio, - workOrderAttachments: attachement, - comments: _serviceRequest.callComments, - //add attachments also... - ); - showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + _requestDetailProvider.workOrderHelperModel = WorkOrderHelperModel( + assetId: _serviceRequest.device?.id, + priorityId: _serviceRequest.priority?.id, + equipmentStatusId: _serviceRequest.defectType?.id, + voiceNote: _serviceRequest.audio, + workOrderAttachments: attachement, + comments: _serviceRequest.callComments, + //add attachments also... + ); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - int status = await _requestDetailProvider.createWorkOrder(); - if(status==200){ - DashBoardProvider dashBoardProvider = Provider.of(context,listen: false); - dashBoardProvider.refreshDashboard(context: context,userType: UsersTypes.nurse); - Navigator.pop(context); - Navigator.pop(context); - } - else{ - Navigator.pop(context); - } + int status = await _requestDetailProvider.createWorkOrder(); + if (status == 200) { + DashBoardProvider dashBoardProvider = Provider.of(context, listen: false); + dashBoardProvider.refreshDashboard(context: context, userType: UsersTypes.nurse); + Navigator.pop(context); + Navigator.pop(context); + } else { + Navigator.pop(context); + } // await _serviceRequestsProvider.createRequest( // context: context,