diff --git a/lib/controllers/api_routes/urls.dart b/lib/controllers/api_routes/urls.dart index 2028d9d7..b95d637f 100644 --- a/lib/controllers/api_routes/urls.dart +++ b/lib/controllers/api_routes/urls.dart @@ -3,8 +3,8 @@ class URLs { static const String appReleaseBuildNumber = "50"; - static const host1 = "https://atomsm.hmg.com"; // production url - // static const host1 = "https://atomsmdev.hmg.com"; // local DEV url + // 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 final String _baseUrl = "$_host/mobile"; // host local UAT @@ -604,4 +604,7 @@ class URLs { static get submitApplicationDemoRequest => "$_baseUrl/DemoUser/CreateDemoUser"; // post submit application demo request// get application demo request history static get sendDemoUserOtp => "$_baseUrl/DemoUser/EmailVerification"; // post send OTP to user static get verifyDemoUserOtp => "$_baseUrl/DemoUser/VerifyOtp"; // post verify OTP + +//permission urls + static get getUserPermissions => "$_baseUrl/PermissionNew/GetPermission"; } diff --git a/lib/controllers/providers/settings/setting_provider.dart b/lib/controllers/providers/settings/setting_provider.dart index 63cd4a28..78af465f 100644 --- a/lib/controllers/providers/settings/setting_provider.dart +++ b/lib/controllers/providers/settings/setting_provider.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -9,6 +10,7 @@ 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/field_permission_model.dart'; import 'package:test_sa/models/user.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; @@ -42,6 +44,16 @@ class SettingProvider extends ChangeNotifier { bool get showPriority => !(isUserFMS && user?.type == UsersTypes.normal_user); + Map fieldPermissions = {}; + + FieldPermissionModel getField(String code) => fieldPermissions[code]!; + + String getFieldLabel(String code) { + String label = fieldPermissions[code]?.text ?? code; + print("getFieldLabel: $code => $label"); + return label; + } + // Local authentication instance final LocalAuthentication auth = LocalAuthentication(); @@ -220,4 +232,25 @@ class SettingProvider extends ChangeNotifier { return isValid; } } + + Future getUserPermission() async { + try { + final response = await ApiManager.instance.get( + URLs.getUserPermissions, + ); + log('permission response: ${response.body}'); + if (response.statusCode >= 200 && response.statusCode < 300) { + List perList = (jsonDecode(response.body)["data"]); + for (var per in perList) { + // user?.permissions[per['code']] = per['selectedAction'] != null ? per['selectedAction']['code'] : null; + fieldPermissions[per['code']] = FieldPermissionModel.fromJson(per); + } + // return isValid; + } else { + // return false; + } + } catch (error) { + // return false; + } + } } diff --git a/lib/extensions/enum_extensions.dart b/lib/extensions/enum_extensions.dart index 5039329c..142452d1 100644 --- a/lib/extensions/enum_extensions.dart +++ b/lib/extensions/enum_extensions.dart @@ -179,6 +179,27 @@ extension IntExtensionsAssetDeliveryStage on int { } } } +enum PermissionActionEnum { + hide, + view, + edit, + click; + + static PermissionActionEnum? fromCode(String? code) { + switch (code) { + case 'hide': + return PermissionActionEnum.hide; + case 'view': + return PermissionActionEnum.view; + case 'edit': + return PermissionActionEnum.edit; + case 'click': + return PermissionActionEnum.click; + default: + return null; + } + } +} enum DropDownMatchType { identifier, diff --git a/lib/models/field_permission_model.dart b/lib/models/field_permission_model.dart new file mode 100644 index 00000000..88f95f26 --- /dev/null +++ b/lib/models/field_permission_model.dart @@ -0,0 +1,54 @@ +import 'package:test_sa/extensions/enum_extensions.dart'; + +class FieldPermissionModel { + int? id; + String? code; + String? text; + SelectedAction? selectedAction; + + FieldPermissionModel({this.id, this.code, this.text, this.selectedAction}); + + FieldPermissionModel.fromJson(Map json) { + id = json['id']; + code = json['code']; + text = json['text']; + selectedAction = json['selectedAction'] != null + ? new SelectedAction.fromJson(json['selectedAction']) + : null; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['code'] = this.code; + data['text'] = this.text; + if (this.selectedAction != null) { + data['selectedAction'] = this.selectedAction!.toJson(); + } + return data; + } +} + +class SelectedAction { + int? id; + String? code; + String? name; + PermissionActionEnum? actionCodeEnum; + + SelectedAction({this.id, this.code, this.name,this.actionCodeEnum}); + + SelectedAction.fromJson(Map json) { + id = json['id']; + code = json['code']; + name = json['name']; + actionCodeEnum = json['code'] == null ? null : (json['code']).fromCode(); + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['code'] = this.code; + data['name'] = this.name; + return data; + } +} diff --git a/lib/modules/cm_module/cm_detail_page.dart b/lib/modules/cm_module/cm_detail_page.dart index 7dd2ba42..13e163eb 100644 --- a/lib/modules/cm_module/cm_detail_page.dart +++ b/lib/modules/cm_module/cm_detail_page.dart @@ -88,7 +88,7 @@ class _CMDetailPageState extends State { child: Scaffold( backgroundColor: Theme.of(context).scaffoldBackgroundColor, appBar: DefaultAppBar( - title: context.translation.cmDetails, + title: context.settingProvider.getFieldLabel("cm-details"), onBackPress: () { stopTimer(); Navigator.pop(context); diff --git a/lib/modules/cm_module/views/components/service_request_detail_view.dart b/lib/modules/cm_module/views/components/service_request_detail_view.dart index 73a7f9ea..5c044210 100644 --- a/lib/modules/cm_module/views/components/service_request_detail_view.dart +++ b/lib/modules/cm_module/views/components/service_request_detail_view.dart @@ -227,7 +227,7 @@ class _ServiceRequestDetailViewState extends State { //... request details starts here.... InfoHeader16Widget(context.translation.callDetails), - InfoTextWidget(label: context.translation.cmNumber, value: workOrder.workOrderNo, copyValue: true), + InfoTextWidget(label: context.translation.cmNumber, value: workOrder.workOrderNo, copyValue: true,code: "wo.cm.list.cm-number"), InfoTextWidget(label: context.translation.createdBy, value: workOrder.workOrderCreatedBy?.userName ?? "-"), InfoTextWidget(label: context.translation.arrivedDate, value: workOrder.iHaveArrivedDate != null ? workOrder.iHaveArrivedDate.toString().toServiceRequestDetailsFormat : '-'), InfoTextWidget(label: context.translation.closedDate, value: workOrder.closedDate != null ? workOrder.closedDate!.toString().toServiceRequestDetailsFormat : '-'), 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 1a576f1c..54e20abf 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 @@ -52,8 +52,9 @@ class ServiceRequestItemView extends StatelessWidget { InfoDateWidget(requestData!.transactionDate!), ], ), + //CM Number InfoHeaderWidget(requestData?.typeTransaction ?? context.translation.correctiveMaintenance), - InfoTextWidget(label: "CM Number", value: requestData!.requestNo), + InfoTextWidget(label: "CM Number", value: requestData!.requestNo,code: "wo",), InfoTextWidget(label: context.translation.assetNumber, value: requestData!.assetNumber), InfoTextWidget(label: context.translation.assetName, value: requestData?.assetName?.cleanupWhitespace.capitalizeFirstOfEach, showArrow: requestData?.statusName == 'Canceled' ? false : true), if (requestData?.statusName == 'Canceled') ...[ @@ -94,7 +95,7 @@ class ServiceRequestItemView extends StatelessWidget { ], ), InfoHeaderWidget(requestDetails?.nameOfType ?? context.translation.correctiveMaintenance), - InfoTextWidget(label: "CM Number", value: requestDetails!.requestNo), + InfoTextWidget(label: "CM Number", value: requestDetails!.requestNo,code: "wo",), InfoTextWidget(label: context.translation.assetNumber, value: requestDetails!.assetNo), InfoTextWidget(label: context.translation.serialNo, value: requestDetails!.assetSN, showEmptyValue: true), InfoTextWidget(label: context.translation.assetName, value: requestDetails!.assetName?.cleanupWhitespace.capitalizeFirstOfEach, showArrow: true), diff --git a/lib/new_views/pages/login_page.dart b/lib/new_views/pages/login_page.dart index b9c78e6e..2a0b2b09 100644 --- a/lib/new_views/pages/login_page.dart +++ b/lib/new_views/pages/login_page.dart @@ -313,6 +313,7 @@ class _LoginPageState extends State { if (status >= 200 && status < 300 && _userProvider.user!.isAuthenticated! ?? false) { await _userProvider.getMobilePermissionByUser(); await _settingProvider!.setUser(_userProvider.user!); + await _settingProvider!.getUserPermission(); Navigator.pop(context); // (await SharedPreferences.getInstance()).remove(ASettings.localAuth); await _settingProvider!.setRememberMe(_user.userName!, _user.password!, rememberMe); diff --git a/lib/views/widgets/item_views/info_text_widget.dart b/lib/views/widgets/item_views/info_text_widget.dart index 29f3fba0..58130b68 100644 --- a/lib/views/widgets/item_views/info_text_widget.dart +++ b/lib/views/widgets/item_views/info_text_widget.dart @@ -2,10 +2,13 @@ import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:test_sa/extensions/context_extension.dart'; +import 'package:test_sa/extensions/enum_extensions.dart'; 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/field_permission_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; class InfoTextWidget extends StatelessWidget { @@ -16,12 +19,40 @@ class InfoTextWidget extends StatelessWidget { final bool copyValue; final bool isMsg; - InfoTextWidget({required this.label, this.value, this.showEmptyValue = false, this.copyValue = false, this.showArrow = false, this.isMsg = false, Key? key}) : super(key: key); + // final FieldPermissionModel? field; + final String code; + + InfoTextWidget({required this.label, this.value, this.showEmptyValue = false, this.copyValue = false, this.code = "", this.showArrow = false, this.isMsg = false, Key? key}) : super(key: key); @override Widget build(BuildContext context) { Widget text; - String aLabel = label + (isMsg ? "" : ":"); + String aLabel = '$label${isMsg ? "" : ":"}'; + + if (code.isNotEmpty) { + final permission = context.settingProvider.getField(code); + final action = permission.selectedAction; + if (action == null || action.actionCodeEnum == PermissionActionEnum.hide) { + return const SizedBox(); + } + if ( action.actionCodeEnum == PermissionActionEnum.view) { + aLabel = '${permission.text ?? label}${isMsg ? "" : ":"}'; + } + } + // String aLabel = label + (isMsg ? "" : ":"); + // if (code.isNotEmpty) { + // FieldPermissionModel _fieldP = context.settingProvider.getField(code); + // if (_fieldP.selectedAction?.code?.isNotEmpty ?? false) { + // if (_fieldP.selectedAction?.code == "hide") { + // return const SizedBox(); + // } else if (_fieldP.selectedAction?.code == "view") { + // aLabel = _fieldP.text! + (isMsg ? "" : ":"); + // } + // } else { + // return const SizedBox(); + // } + // } + if (showEmptyValue) { text = Text('$aLabel ${value ?? ""}', style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context))); } else if (value?.isNotEmpty ?? false) {