diff --git a/lib/controllers/api_routes/api_manager.dart b/lib/controllers/api_routes/api_manager.dart index 20c55464..c2a121a9 100644 --- a/lib/controllers/api_routes/api_manager.dart +++ b/lib/controllers/api_routes/api_manager.dart @@ -41,7 +41,7 @@ class ApiManager { } else { if (jsonDecode(response.body) is Map) { final message = jsonDecode(response.body)["message"]; - if (message != null && message.toString().isNotEmpty) { + if (message != null && message.toString().isNotEmpty && enableToastMessage) { Fluttertoast.showToast(msg: message ?? "", toastLength: Toast.LENGTH_LONG); } } diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 9b1ef1e3..ecdb42e2 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -6,7 +6,6 @@ class URLs { // static const host1 = "https://atomsm.hmg.com"; // production url // static const host1 = "https://atomsmdev.hmg.com"; // local DEV url static const host1 = "https://atomsmuat.hmg.com"; // local UAT url - // static const host1 = "http://10.201.111.125:9495"; // temporary Server UAT url // static String _baseUrl = "$_host/mobile"; static final String _baseUrl = "$_host/v2/mobile"; // new V2 apis @@ -30,6 +29,8 @@ class URLs { static get getUserInfo => "$_baseUrl/MobileAuth/GetUserInfo"; + static get getMobilePermissionByUser => "$_baseUrl/Permission/GetMobilePermissionByUser"; + static get logout => "$_baseUrl/MobileAuth/Logout"; static get enableFaceId => "$_baseUrl/MobileAuth/EnabledFaceId"; diff --git a/lib/controllers/providers/api/all_requests_provider.dart b/lib/controllers/providers/api/all_requests_provider.dart index 470f803d..8f9be2aa 100644 --- a/lib/controllers/providers/api/all_requests_provider.dart +++ b/lib/controllers/providers/api/all_requests_provider.dart @@ -138,7 +138,6 @@ class AllRequestsProvider extends ChangeNotifier { list = [9]; return list; } - if (!context.userProvider.isNurse) { list.add(5); } @@ -147,9 +146,13 @@ class AllRequestsProvider extends ChangeNotifier { if (context.settingProvider.isUserFlowMedical && !context.userProvider.isNurse) { list.add(7); // task mod } - if (!context.userProvider.isNurse) { - list.add(8); // - } + + // switching asset inventory to users permissions + context.userProvider.modulesPermissionsList.forEach((module) { + if (module.module!.value! == 8) { + list.add(module.module!.value!); + } + }); if (context.userProvider.isNurse) { list.add(9); // diff --git a/lib/controllers/providers/api/user_provider.dart b/lib/controllers/providers/api/user_provider.dart index 481d06d5..e4c1b025 100644 --- a/lib/controllers/providers/api/user_provider.dart +++ b/lib/controllers/providers/api/user_provider.dart @@ -9,6 +9,7 @@ import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/enums/user_types.dart'; +import 'package:test_sa/models/module_permissions_model.dart'; import 'package:test_sa/models/new_models/general_response_model.dart'; import 'package:test_sa/models/new_models/update_password.dart'; import 'package:test_sa/models/new_models/verify_otp_model.dart'; @@ -50,6 +51,7 @@ class UserProvider extends ChangeNotifier { SwipeTransaction _swipeTransactionModel = SwipeTransaction(); List _swipeHistory = []; List _siteContactList = []; + List _modulesPermissionsModel = []; UserContactInfoModel userInfoModel = UserContactInfoModel(); SwipeTransaction get swipeTransactionModel => _swipeTransactionModel; @@ -58,6 +60,10 @@ class UserProvider extends ChangeNotifier { List get siteContactList => _siteContactList; + List get modulesPermissionsList => _modulesPermissionsModel; + + ModulesPermissionsModel currentModelPermission(int moduleId) => ModulesPermissionsModel.fromJson(_modulesPermissionsModel.singleWhere((module) => module.module!.value == moduleId).toJson()); + set swipeHistory(List value) { _swipeHistory = value; notifyListeners(); @@ -111,7 +117,7 @@ class UserProvider extends ChangeNotifier { notifyListeners(); Response response; try { - showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + // showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); response = await ApiManager.instance.post(URLs.login, body: await user.toLoginJson()); _loading = false; @@ -121,16 +127,16 @@ class UserProvider extends ChangeNotifier { _user!.profilePhotoName = URLs.getFileUrl(_user!.profilePhotoName); ApiManager.instance.user = _user; notifyListeners(); - Navigator.pop(context); + // Navigator.pop(context); return response.statusCode; } notifyListeners(); - Navigator.pop(context); + // Navigator.pop(context); return response.statusCode; } catch (error) { // debugPrint(error); print('SSL or Network Error: $error'); - Navigator.pop(context); + // Navigator.pop(context); _loading = false; notifyListeners(); return -1; @@ -171,6 +177,24 @@ class UserProvider extends ChangeNotifier { } } + Future getMobilePermissionByUser() async { + _modulesPermissionsModel = []; + Response response; + try { + response = await ApiManager.instance.get(URLs.getMobilePermissionByUser, enableToastMessage: false); + if (response.statusCode >= 200 && response.statusCode < 300) { + List dataList = json.decode(response.body)["data"] ?? []; + _modulesPermissionsModel = List.generate(dataList.length, (index) => ModulesPermissionsModel.fromJson(dataList[index])).where((module) => module.canView!).toList(); + if (response.statusCode == 200) { + return true; + } + } + return false; + } catch (error) { + return false; + } + } + Future logout(BuildContext context) async { Response response; try { diff --git a/lib/dashboard_latest/widgets/app_bar_widget.dart b/lib/dashboard_latest/widgets/app_bar_widget.dart index a716fd58..5134875a 100644 --- a/lib/dashboard_latest/widgets/app_bar_widget.dart +++ b/lib/dashboard_latest/widgets/app_bar_widget.dart @@ -95,6 +95,7 @@ class AppBarWidget extends StatelessWidget { bool isSuccess = await context.userProvider.userChangeAssetGroup(); Utils.hideLoading(context); if (isSuccess) { + await context.userProvider.getMobilePermissionByUser(); settingProvider.setAssetGroup(newValue); WidgetsBinding.instance.addPostFrameCallback((_) { context.settingProvider.setUser(ApiManager.instance.user!); diff --git a/lib/models/module_permissions_model.dart b/lib/models/module_permissions_model.dart new file mode 100644 index 00000000..49275de1 --- /dev/null +++ b/lib/models/module_permissions_model.dart @@ -0,0 +1,51 @@ +class ModulesPermissionsModel { + bool? canAdd; + bool? canEdit; + bool? canView; + bool? canDelete; + Module? module; + + ModulesPermissionsModel({this.canAdd, this.canEdit, this.canView, this.canDelete, this.module}); + + ModulesPermissionsModel.fromJson(Map json) { + canAdd = json['canAdd']; + canEdit = json['canEdit']; + canView = json['canView']; + canDelete = json['canDelete']; + module = json['module'] != null ? new Module.fromJson(json['module']) : null; + } + + Map toJson() { + final Map data = new Map(); + data['canAdd'] = this.canAdd; + data['canEdit'] = this.canEdit; + data['canView'] = this.canView; + data['canDelete'] = this.canDelete; + if (this.module != null) { + data['module'] = this.module!.toJson(); + } + return data; + } +} + +class Module { + int? id; + String? name; + int? value; + + Module({this.id, this.name, this.value}); + + Module.fromJson(Map json) { + id = json['id']; + name = json['name']; + value = json['value']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + data['value'] = this.value; + return data; + } +} diff --git a/lib/models/ppm/recurrent_wo.dart b/lib/models/ppm/recurrent_wo.dart index 903e5968..3a689553 100644 --- a/lib/models/ppm/recurrent_wo.dart +++ b/lib/models/ppm/recurrent_wo.dart @@ -44,6 +44,7 @@ class RecurrentWoData { String? scheduleDate; Status? status; Site? site; + PlanRecurrent? planRecurrent; Lookup? building; Lookup? floor; Lookup? department; @@ -64,6 +65,7 @@ class RecurrentWoData { this.scheduleDate, this.status, this.site, + this.planRecurrent, this.building, this.recurrentWoTimerModel, this.floor, @@ -72,7 +74,7 @@ class RecurrentWoData { this.planRecurrentMedicalTaskRooms, this.planRecurrentTaskTimers, this.timerModelList, - this.recurrentWoTimePicker, + this.recurrentWoTimePicker, this.comment, this.totalWorkingHours}); @@ -83,6 +85,7 @@ class RecurrentWoData { engineer = json['engineer'] != null ? new Engineer.fromJson(json['engineer']) : null; scheduleDate = json['scheduleDate']; status = json['status'] != null ? Status.fromJson(json['status']) : null; + planRecurrent = json['status'] != null ? PlanRecurrent.fromJson(json['planRecurrent']) : null; site = json['site'] != null ? Site.fromJson(json['site']) : null; building = json["building"] == null ? null : Lookup.fromJson(json["building"]); floor = json["floor"] == null ? null : Lookup.fromJson(json["floor"]); @@ -354,3 +357,124 @@ class PlanRecurrentTaskTimers { return data; } } + +class PlanRecurrent { + int? taskTypeId; + Lookup? taskType; + String? planNo; + String? planName; + int? planSequence; + int? frequencyId; + String? frequency; + bool? autoConverstion; + String? comment; + String? scheduleDateFrom1; + String? scheduleDateFrom2; + Site? site; + Lookup? building; + Lookup? floor; + Lookup? department; + Lookup? room; + + // List? planRecurrentMedicalRooms; + bool? friday; + bool? saturday; + bool? sunday; + bool? monday; + bool? tuesday; + bool? wednesday; + bool? thursday; + + PlanRecurrent( + {this.taskTypeId, + this.taskType, + this.planNo, + this.planName, + this.planSequence, + this.frequencyId, + this.frequency, + this.autoConverstion, + this.comment, + this.scheduleDateFrom1, + this.scheduleDateFrom2, + this.site, + this.building, + this.floor, + this.department, + this.room, + // this.planRecurrentMedicalRooms, + this.friday, + this.saturday, + this.sunday, + this.monday, + this.tuesday, + this.wednesday, + this.thursday}); + + PlanRecurrent.fromJson(Map json) { + taskTypeId = json['taskTypeId']; + taskType = json['taskType'] != null ? new Lookup.fromJson(json['taskType']) : null; + planNo = json['planNo']; + planName = json['planName']; + planSequence = json['planSequence']; + frequencyId = json['frequencyId']; + frequency = json['frequency']; + autoConverstion = json['autoConverstion']; + comment = json['comment']; + scheduleDateFrom1 = json['scheduleDateFrom1']; + scheduleDateFrom2 = json['scheduleDateFrom2']; + site = json['site'] != null ? Site.fromJson(json['site']) : null; + building = json["building"] == null ? null : Lookup.fromJson(json["building"]); + floor = json["floor"] == null ? null : Lookup.fromJson(json["floor"]); + department = json["department"] == null ? null : Lookup.fromJson(json["department"]); + room = json["room"] == null ? null : Lookup.fromJson(json["room"]); + // if (json['planRecurrentMedicalRooms'] != null) { + // planRecurrentMedicalRooms = []; + // json['planRecurrentMedicalRooms'].forEach((v) { + // planRecurrentMedicalRooms!.add(new Null.fromJson(v)); + // }); + // } + friday = json['friday']; + saturday = json['saturday']; + sunday = json['sunday']; + monday = json['monday']; + tuesday = json['tuesday']; + wednesday = json['wednesday']; + thursday = json['thursday']; + } + + Map toJson() { + final Map data = new Map(); + data['taskTypeId'] = this.taskTypeId; + if (this.taskType != null) { + data['lookUp'] = this.taskType!.toJson(); + } + data['planNo'] = this.planNo; + data['planName'] = this.planName; + data['planSequence'] = this.planSequence; + data['frequencyId'] = this.frequencyId; + data['frequency'] = this.frequency; + data['autoConverstion'] = this.autoConverstion; + data['comment'] = this.comment; + data['scheduleDateFrom1'] = this.scheduleDateFrom1; + data['scheduleDateFrom2'] = this.scheduleDateFrom2; + if (this.site != null) { + data['site'] = this.site!.toJson(); + } + data['building'] = this.building; + data['floor'] = this.floor; + data['department'] = this.department; + data['room'] = this.room; + // if (this.planRecurrentMedicalRooms != null) { + // data['planRecurrentMedicalRooms'] = this.planRecurrentMedicalRooms!.map((v) => v.toJson()).toList(); + // } + data['friday'] = this.friday; + data['saturday'] = this.saturday; + data['sunday'] = this.sunday; + data['monday'] = this.monday; + data['tuesday'] = this.tuesday; + data['wednesday'] = this.wednesday; + data['thursday'] = this.thursday; + return data; + } +} diff --git a/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart b/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart index 9d128718..60a5c710 100644 --- a/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart @@ -14,11 +14,13 @@ import 'package:test_sa/views/widgets/loaders/image_loader.dart'; class AssetDetailCardView extends StatelessWidget { AssetInventoryModel assetInventoryModel; VoidCallback onDeletePress; + bool canDelete; AssetDetailCardView({ super.key, required this.assetInventoryModel, required this.onDeletePress, + this.canDelete = false, }); @override @@ -32,9 +34,10 @@ class AssetDetailCardView extends StatelessWidget { context.translation.assetInformation, style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ).expanded, - 'delete_icon'.toSvgAsset().onPress(() { - onDeletePress(); - }), + if (canDelete) + 'delete_icon'.toSvgAsset().onPress(() { + onDeletePress(); + }), ], ), 8.height, @@ -45,7 +48,8 @@ class AssetDetailCardView extends StatelessWidget { Text( '${context.translation.assetNumber}: ${assetInventoryModel.assetNumber ?? '-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), Text( + ), + Text( '${context.translation.assetName}: ${assetInventoryModel.assetName ?? '-'}', style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart index 6240373c..444ad34a 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart @@ -7,6 +7,7 @@ import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/models/module_permissions_model.dart'; import 'package:test_sa/modules/asset_inventory_module/models/session_model.dart'; import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_detail_view.dart'; import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart'; @@ -19,8 +20,9 @@ import '../provider/asset_inventory_provider.dart'; class AssetInventoryPage extends StatefulWidget { final int sessionId; + final int moduleId; - const AssetInventoryPage({Key? key, required this.sessionId}) : super(key: key); + const AssetInventoryPage({Key? key, required this.sessionId, required this.moduleId}) : super(key: key); @override _AssetInventoryPageState createState() { @@ -35,6 +37,7 @@ class _AssetInventoryPageState extends State { void initState() { super.initState(); _assetInventoryProvider = Provider.of(context, listen: false); + WidgetsBinding.instance.addPostFrameCallback((_) { getInitialData(); }); @@ -42,6 +45,7 @@ class _AssetInventoryPageState extends State { Future getInitialData() async { _assetInventoryProvider.reset(); + _assetInventoryProvider.modelPermission = context.userProvider.currentModelPermission(widget.moduleId); await _assetInventoryProvider.getSessionById(id: widget.sessionId); await _assetInventoryProvider.getAssetsInSession( sessionId: widget.sessionId, @@ -100,15 +104,16 @@ class _AssetInventoryPageState extends State { AssetInventoryScanAssetView(sessionId: provider.sessionModel?.id ?? 0), ], ).expanded, - FooterActionButton.footerContainer( - context: context, - child: AppFilledButton( - buttonColor: AppColor.primary10, - label: 'Scan Assets'.addTranslation, - onPressed: () => _scanAsset(provider: provider), - // buttonColor: AppColor.primary10, - ), - ) + if (provider.modelPermission?.canEdit ?? false) + FooterActionButton.footerContainer( + context: context, + child: AppFilledButton( + buttonColor: AppColor.primary10, + label: 'Scan Assets'.addTranslation, + onPressed: () => _scanAsset(provider: provider), + // buttonColor: AppColor.primary10, + ), + ) ], ), ); diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart index 4bf38915..d127791b 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart @@ -65,6 +65,7 @@ class _AssetInventoryScanAssetViewState extends State { itemCount: assets.length, itemBuilder: (context, index) { return AssetDetailCardView( + canDelete: (provider.modelPermission?.canEdit ?? false), assetInventoryModel: assets[index], onDeletePress: () async { await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async { diff --git a/lib/modules/asset_inventory_module/pages/inventory_session_item_view.dart b/lib/modules/asset_inventory_module/pages/inventory_session_item_view.dart index 12adb610..2ad678fe 100644 --- a/lib/modules/asset_inventory_module/pages/inventory_session_item_view.dart +++ b/lib/modules/asset_inventory_module/pages/inventory_session_item_view.dart @@ -58,7 +58,7 @@ class InventorySessionItemView extends StatelessWidget { ), ], ).toShadowContainer(context, withShadow: showShadow).onPress(() async { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => AssetInventoryPage(sessionId: requestData!.id!))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => AssetInventoryPage(sessionId: requestData!.id!, moduleId: requestData!.transactionNo!))); }); } return Column( @@ -99,7 +99,7 @@ class InventorySessionItemView extends StatelessWidget { ), ], ).toShadowContainer(context, withShadow: showShadow).onPress(() async { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => AssetInventoryPage(sessionId: requestDetails!.id!))); + Navigator.of(context).push(MaterialPageRoute(builder: (_) => AssetInventoryPage(sessionId: requestDetails!.id!, moduleId: requestDetails!.transactionType!))); }); } diff --git a/lib/modules/asset_inventory_module/provider/asset_inventory_provider.dart b/lib/modules/asset_inventory_module/provider/asset_inventory_provider.dart index c712c26c..354370d0 100644 --- a/lib/modules/asset_inventory_module/provider/asset_inventory_provider.dart +++ b/lib/modules/asset_inventory_module/provider/asset_inventory_provider.dart @@ -11,6 +11,7 @@ import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/models/device/asset.dart'; import 'package:test_sa/models/device/asset_search.dart'; import 'package:test_sa/models/lookup.dart'; +import 'package:test_sa/models/module_permissions_model.dart'; import 'package:test_sa/models/service_request/pending_service_request_model.dart'; import 'package:test_sa/models/service_request/service_report.dart'; import 'package:test_sa/models/service_request/service_request.dart'; @@ -46,8 +47,11 @@ class AssetInventoryProvider extends ChangeNotifier { List sessionAssetList = []; List siteFilterAssetList = []; + ModulesPermissionsModel? modelPermission; + void reset() { pageNo = 1; + modelPermission = null; assetInventoryResponse = null; sessionModel = null; sessionAssetList = []; diff --git a/lib/modules/pm_module/recurrent_wo/components/task_info_widget.dart b/lib/modules/pm_module/recurrent_wo/components/task_info_widget.dart index 19c77bdf..0b46a6a3 100644 --- a/lib/modules/pm_module/recurrent_wo/components/task_info_widget.dart +++ b/lib/modules/pm_module/recurrent_wo/components/task_info_widget.dart @@ -78,6 +78,7 @@ class _RecurrentTaskInfoWidgetState extends State { widget.model!.title!.bodyText(context).custom(color: AppColor.textColor(context)), 2.height, '${context.translation.taskNo}: ${widget.model!.taskNo!}'.bodyText2(context).custom(color: AppColor.neutral120), + 'Plan Name: ${widget.model?.planRecurrent?.planName ?? "-"}'.bodyText2(context).custom(color: AppColor.neutral120), '${context.translation.site}: ${widget.model!.site!.siteName!}'.bodyText2(context).custom(color: AppColor.neutral120), '${context.translation.assignedEmployee}: ${widget.model!.engineer!.userName ?? ""}'.bodyText2(context).custom(color: AppColor.neutral120), '${context.translation.scheduledDate}: ${widget.model!.scheduleDate!.toMonthYearFormat}'.bodyText2(context).custom(color: AppColor.neutral120), @@ -95,7 +96,7 @@ class _RecurrentTaskInfoWidgetState extends State { 8.height, buildingInfoWidget(label: context.translation.room, value: widget.model!.room?.name?.cleanupWhitespace.capitalizeFirstOfEach, context: context), 8.height, - _timerWidget(context,totalWorkingHours), + _timerWidget(context, totalWorkingHours), 8.height, _commentWidget(context: context, model: widget.model) ], 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 2ba89428..6d256354 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 @@ -90,7 +90,22 @@ class CreateRequestModel { static List requestsList(BuildContext context) { List list = []; - + // switching to users permissions + // context.userProvider.modulesPermissionsList.where((module) => module.canAdd!).toList().forEach((module) { + // switch (module.module!.value) { + // case 1: + // list.add(CreateRequestModel(module.module!.name!, "add_icon", CreateNewRequest.id)); + // + // case 2: + // list.add(CreateRequestModel(module.module!.name!, "add_icon", GasRefillRequestForm.routeName)); + // + // case 3: + // list.add(CreateRequestModel(module.module!.name!, "add_icon", CreateDeviceTransferRequest.id)); + // + // case 4: + // list.add(CreateRequestModel(module.module!.name!, "add_icon", CreateTaskView.id)); + // } + // }); if (context.userProvider.isAssessor) { list.add(CreateRequestModel("TRAF".addTranslation, "add_icon", CreateTRAFRequestPage.id)); } else if (context.userProvider.isEngineer) { diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index 9cfce9d4..d0f91aed 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -61,7 +61,14 @@ class _AllRequestsFilterPageState extends State { ); search!.searchBySelectedValue = search?.requestNumber; } - var types = { + Map types = {}; + + // switching to users permissions + // context.userProvider.modulesPermissionsList.forEach((module) { + // types[module.module!.name!] = module.module!.value!; + // }); + + types = { context.translation.correctiveMaintenance: 1, context.translation.gasRefill: 2, context.translation.transferAsset: 3, @@ -77,6 +84,13 @@ class _AllRequestsFilterPageState extends State { types['Recall and Alert'] = 7; } + // switching asset inventory to users permissions + context.userProvider.modulesPermissionsList.forEach((module) { + if (module.module!.value! == 8) { + types[module.module!.name!] = module.module!.value!; + } + }); + if (!isEngineer) { types['TRAF'] = 9; } diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index f24d1719..bde89210 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -52,9 +52,13 @@ class _MyRequestsPageState extends State { if (context.settingProvider.isUserFlowMedical && Provider.of(context, listen: false).user!.type != UsersTypes.normal_user) { requestsList.add(Request(7, 'Recall and Alert')); } - if (Provider.of(context, listen: false).user!.type != UsersTypes.normal_user) { - requestsList.add(Request(8, 'Inventory Session'.addTranslation)); - } + + // switching asset inventory to users permissions + context.userProvider.modulesPermissionsList.forEach((module) { + if (module.module!.value! == 8) { + requestsList.add(Request(module.module!.value!, module.module!.name!.addTranslation)); + } + }); if (context.userProvider.user!.type == UsersTypes.normal_user) { requestsList.add(Request(9, 'TRAF')); } diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index 8c54e927..991674fa 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -22,6 +22,7 @@ import '../../controllers/providers/settings/setting_provider.dart'; import '../../controllers/validator/validator.dart'; import '../../models/user.dart'; import '../common_widgets/app_filled_button.dart'; +import '../common_widgets/app_lazy_loading.dart'; import '../common_widgets/app_text_form_field.dart'; class LoginPage extends StatefulWidget { @@ -232,10 +233,13 @@ class _LoginPageState extends State { return; } _formKey.currentState!.save(); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); int status = await _userProvider.login(context: context, user: _user); + if (status >= 200 && status < 300 && _userProvider.user!.isAuthenticated! ?? false) { + await _userProvider.getMobilePermissionByUser(); await _settingProvider!.setUser(_userProvider.user!); - + Navigator.pop(context); // (await SharedPreferences.getInstance()).remove(ASettings.localAuth); await _settingProvider!.setRememberMe(_user.userName!, _user.password!, rememberMe); //TODO need to verify this here... @@ -246,6 +250,7 @@ class _LoginPageState extends State { } Navigator.pushReplacementNamed(context, LandPage.routeName); } else { + Navigator.pop(context); Fluttertoast.showToast(msg: _userProvider.user?.message ?? context.translation.failedToCompleteRequest); } } diff --git a/lib/new_views/pages/splash_page.dart b/lib/new_views/pages/splash_page.dart index f3954a99..b62392cb 100644 --- a/lib/new_views/pages/splash_page.dart +++ b/lib/new_views/pages/splash_page.dart @@ -116,6 +116,7 @@ class _SplashPageState extends State { }); if (status && _userProvider.refreshedUser != null) { _userProvider.refreshedUser!.token = _settingProvider.user?.token; + await _userProvider.getMobilePermissionByUser(); await _settingProvider.setUser(_userProvider.refreshedUser!); _userProvider.setUser(_userProvider.refreshedUser!); await _settingProvider.setAuth(_settingProvider.user?.isEnabledFaceId ?? false);