FMS- engineer can create CM request, hide priority for nurse.

design_3.0_task_module_new
Sikander Saleem 6 months ago
parent 6004ed1a27
commit 8dc35a20af

@ -7,6 +7,7 @@ import 'package:local_auth/local_auth.dart';
import 'package:shared_preferences/shared_preferences.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/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.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 'package:test_sa/models/user.dart';
import '../settings/app_settings.dart'; import '../settings/app_settings.dart';
@ -31,9 +32,11 @@ class SettingProvider extends ChangeNotifier {
String password = ""; String password = "";
bool isLocalAuthEnable = false; 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 // Local authentication instance
final LocalAuthentication auth = LocalAuthentication(); final LocalAuthentication auth = LocalAuthentication();

@ -1,4 +1,6 @@
import 'package:flutter/material.dart'; 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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
@ -84,6 +86,9 @@ class CreateRequestModel {
static List<CreateRequestModel> requestsList(BuildContext context, bool isEngineer) { static List<CreateRequestModel> requestsList(BuildContext context, bool isEngineer) {
List<CreateRequestModel> list = []; List<CreateRequestModel> list = [];
if (isEngineer) { if (isEngineer) {
if (Provider.of<SettingProvider>(context, listen: false).engineerCanCreateCM) {
list.add(CreateRequestModel(context.translation.correctiveMaintenance, "add_icon", CreateNewRequest.id));
}
list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id)); list.add(CreateRequestModel(context.translation.task, "add_icon", CreateTaskView.id));
} else { } else {
list.add(CreateRequestModel(context.translation.correctiveMaintenance, "add_icon", CreateNewRequest.id)); list.add(CreateRequestModel(context.translation.correctiveMaintenance, "add_icon", CreateNewRequest.id));

@ -33,12 +33,14 @@ class ServiceRequestItemView extends StatelessWidget {
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
StatusLabel( if (Provider.of<SettingProvider>(context, listen: false).showPriority) ...[
label: requestData!.priorityName!, StatusLabel(
textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.priorityName!), label: requestData!.priorityName!,
backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.priorityName!), textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.priorityName!),
), backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.priorityName!),
8.width, ),
8.width,
],
StatusLabel( StatusLabel(
label: requestData!.statusName!, label: requestData!.statusName!,
textColor: AppColor.getHistoryLogStatusTextColorByName(requestData!.statusName!), textColor: AppColor.getHistoryLogStatusTextColorByName(requestData!.statusName!),
@ -94,12 +96,14 @@ class ServiceRequestItemView extends StatelessWidget {
Row( Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
StatusLabel( if (Provider.of<SettingProvider>(context, listen: false).showPriority) ...[
label: requestDetails!.priority, StatusLabel(
textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.priority), label: requestDetails!.priority,
backgroundColor: AppColor.getRequestStatusColorByName(context, requestDetails!.priority), textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.priority),
), backgroundColor: AppColor.getRequestStatusColorByName(context, requestDetails!.priority),
8.width, ),
8.width,
],
StatusLabel( StatusLabel(
label: requestDetails!.status, label: requestDetails!.status,
textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.status), textColor: AppColor.getRequestStatusTextColorByName(context, requestDetails!.status),

@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:test_sa/controllers/api_routes/urls.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/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/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_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/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/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/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/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/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import 'package:test_sa/views/widgets/loaders/no_data_found.dart';
@ -106,14 +106,16 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
StatusLabel( if (Provider.of<SettingProvider>(context, listen: false).showPriority) ...[
label: workOrder.priority?.name, StatusLabel(
id: workOrder.priority!.id!, label: workOrder.priority?.name,
radius: 4, id: workOrder.priority!.id!,
textColor: AppColor.getPriorityStatusTextColor(context, workOrder.priority!.id!), radius: 4,
backgroundColor: AppColor.getPriorityStatusColor(context, workOrder.priority!.id!), textColor: AppColor.getPriorityStatusTextColor(context, workOrder.priority!.id!),
), backgroundColor: AppColor.getPriorityStatusColor(context, workOrder.priority!.id!),
8.width, ),
8.width,
],
StatusLabel( StatusLabel(
radius: 4, radius: 4,
label: workOrder.status!.name, label: workOrder.status!.name,

@ -1,5 +1,6 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.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/images/multi_image_picker.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/sound/TextSpeechRecordWidget.dart'; import 'package:test_sa/views/widgets/sound/TextSpeechRecordWidget.dart';
import '../../../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../../../../new_views/common_widgets/default_app_bar.dart';
class CreateNewRequest extends StatefulWidget { class CreateNewRequest extends StatefulWidget {
@ -81,15 +83,17 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
isFirstActionSubmitted = _serviceRequest.firstAction != null; isFirstActionSubmitted = _serviceRequest.firstAction != null;
// _isLoading = true; // _isLoading = true;
} }
Future<void> getInitialData() async { Future<void> getInitialData() async {
WidgetsBinding.instance.addPostFrameCallback((_) async{ WidgetsBinding.instance.addPostFrameCallback((_) async {
await Provider.of<PriorityProvider>(context,listen: false).getDate(); if(Provider.of<SettingProvider>(context, listen: false).showPriority) {
await Provider.of<EquipmentStatusProvider>(context,listen: false).getDate(); await Provider.of<PriorityProvider>(context, listen: false).getDate();
await Provider.of<RequestedThroughProvider>(context,listen: false).getDate(); }
await Provider.of<TypeOfRequestProvider>(context,listen: false).getDate();
await Provider.of<EquipmentStatusProvider>(context, listen: false).getDate();
await Provider.of<RequestedThroughProvider>(context, listen: false).getDate();
await Provider.of<TypeOfRequestProvider>(context, listen: false).getDate();
}); });
} }
@override @override
@ -143,9 +147,11 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
showPendingRequests(); showPendingRequests();
}), }),
], ],
21.height, if (Provider.of<SettingProvider>(context, listen: false).showPriority) ...[
highPriorityWidget(), 16.height,
20.height, highPriorityWidget(),
],
16.height,
assetStatusWidget(context), assetStatusWidget(context),
24.height, 24.height,
MultiFilesPicker( MultiFilesPicker(
@ -167,9 +173,9 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
// label: context.translation.submitRequest, // label: context.translation.submitRequest,
buttonColor: AppColor.primary10, buttonColor: AppColor.primary10,
label: label:
// (pendingAssetServiceRequest != null && (pendingAssetServiceRequest!.details?.isNotEmpty ?? false)) // (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.duplicateRequest : // @FM said show create work order button text to create request not duplicate request
context.translation.createWorkOrder, context.translation.createWorkOrder,
onPressed: checkPendingRequest ? null : _submit, onPressed: checkPendingRequest ? null : _submit,
// buttonColor: AppColor.primary10, // buttonColor: AppColor.primary10,
), ),
@ -210,7 +216,7 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
height: 24, height: 24,
child: Radio( child: Radio(
value: element, value: element,
activeColor:AppColor.primary10, activeColor: AppColor.primary10,
fillColor: WidgetStateColor.resolveWith((states) { fillColor: WidgetStateColor.resolveWith((states) {
if (states.contains(WidgetState.selected)) { if (states.contains(WidgetState.selected)) {
return AppColor.primary10; // Thumb color when selected return AppColor.primary10; // Thumb color when selected
@ -225,7 +231,7 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
}), }),
), ),
8.width, 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<CreateNewRequest> with TickerProvider
children: [ children: [
context.translation.highPriority.bodyText(context).custom(color: AppColor.black20), context.translation.highPriority.bodyText(context).custom(color: AppColor.black20),
Consumer<PriorityProvider>(builder: (cxt, snapshot, _) { Consumer<PriorityProvider>(builder: (cxt, snapshot, _) {
if(snapshot.items.isNotEmpty){ if (snapshot.items.isNotEmpty) {
_serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: () => Lookup()); _serviceRequest.priority ??= snapshot.items.firstWhere((element) => element.value == 0, orElse: () => Lookup());
} }
return CupertinoSwitch( 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), activeColor: AppColor.red30.withOpacity(0.4),
value: _serviceRequest.priority?.value != 0, value: _serviceRequest.priority?.value != 0,
onChanged: (state) { onChanged: (state) {
@ -287,8 +293,7 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
serviceRequest?.audio = audio; serviceRequest?.audio = audio;
}, },
enabled: serviceRequest == null ? true : false, enabled: serviceRequest == null ? true : false,
) ).paddingOnly(start: 16, end: 16, bottom: 16);
.paddingOnly(start: 16, end: 16,bottom: 16);
} }
bool checkPendingRequest = false; bool checkPendingRequest = false;
@ -329,7 +334,7 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
_serviceRequest.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null); _serviceRequest.requestedThrough = Provider.of<RequestedThroughProvider>(context, listen: false).items.firstWhere((element) => element.value == 3, orElse: null);
_serviceRequest.type = Provider.of<TypeOfRequestProvider>(context, listen: false).items.firstWhere((element) => element.value == 1, orElse: null); _serviceRequest.type = Provider.of<TypeOfRequestProvider>(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(); _formKey.currentState!.save();
// bool canSubmitRequest = await checkAssetForPendingServiceRequest(_serviceRequest.device.id); // bool canSubmitRequest = await checkAssetForPendingServiceRequest(_serviceRequest.device.id);
@ -337,7 +342,7 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
// return; // 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 (_serviceRequest.audio != null) {
if (_isLocalUrl(_serviceRequest.audio!)) { if (_isLocalUrl(_serviceRequest.audio!)) {
final File file = File(_serviceRequest.audio!); final File file = File(_serviceRequest.audio!);
@ -348,27 +353,26 @@ class _CreateNewRequestState extends State<CreateNewRequest> with TickerProvider
for (var item in _deviceImages) { for (var item in _deviceImages) {
attachement.add(WorkOrderAttachments(id: 0, name: "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}")); attachement.add(WorkOrderAttachments(id: 0, name: "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}"));
} }
_requestDetailProvider.workOrderHelperModel = WorkOrderHelperModel( _requestDetailProvider.workOrderHelperModel = WorkOrderHelperModel(
assetId: _serviceRequest.device?.id, assetId: _serviceRequest.device?.id,
priorityId: _serviceRequest.priority?.id, priorityId: _serviceRequest.priority?.id,
equipmentStatusId: _serviceRequest.defectType?.id, equipmentStatusId: _serviceRequest.defectType?.id,
voiceNote: _serviceRequest.audio, voiceNote: _serviceRequest.audio,
workOrderAttachments: attachement, workOrderAttachments: attachement,
comments: _serviceRequest.callComments, comments: _serviceRequest.callComments,
//add attachments also... //add attachments also...
); );
showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading());
int status = await _requestDetailProvider.createWorkOrder(); int status = await _requestDetailProvider.createWorkOrder();
if(status==200){ if (status == 200) {
DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context,listen: false); DashBoardProvider dashBoardProvider = Provider.of<DashBoardProvider>(context, listen: false);
dashBoardProvider.refreshDashboard(context: context,userType: UsersTypes.nurse); dashBoardProvider.refreshDashboard(context: context, userType: UsersTypes.nurse);
Navigator.pop(context); Navigator.pop(context);
Navigator.pop(context); Navigator.pop(context);
} } else {
else{ Navigator.pop(context);
Navigator.pop(context); }
}
// await _serviceRequestsProvider.createRequest( // await _serviceRequestsProvider.createRequest(
// context: context, // context: context,

Loading…
Cancel
Save