permission api added

main_production_permission
WaseemAbbasi22 2 weeks ago
parent e714fed62c
commit 70966cf539

@ -3,8 +3,8 @@ class URLs {
static const String appReleaseBuildNumber = "50"; static const String appReleaseBuildNumber = "50";
static const host1 = "https://atomsm.hmg.com"; // production url // static const host1 = "https://atomsm.hmg.com"; // production url
// static const host1 = "https://atomsmdev.hmg.com"; // local DEV url static const host1 = "https://atomsmdev.hmg.com"; // local DEV url
// static const host1 = "https://atomsmuat.hmg.com"; // local UAT url // static const host1 = "https://atomsmuat.hmg.com"; // local UAT url
static final String _baseUrl = "$_host/mobile"; // host local UAT 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 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 sendDemoUserOtp => "$_baseUrl/DemoUser/EmailVerification"; // post send OTP to user
static get verifyDemoUserOtp => "$_baseUrl/DemoUser/VerifyOtp"; // post verify OTP static get verifyDemoUserOtp => "$_baseUrl/DemoUser/VerifyOtp"; // post verify OTP
//permission urls
static get getUserPermissions => "$_baseUrl/PermissionNew/GetPermission";
} }

@ -1,5 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.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/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/enums/user_types.dart';
import 'package:test_sa/models/field_permission_model.dart';
import 'package:test_sa/models/user.dart'; import 'package:test_sa/models/user.dart';
import 'package:test_sa/new_views/app_style/app_color.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); bool get showPriority => !(isUserFMS && user?.type == UsersTypes.normal_user);
Map<String, FieldPermissionModel> 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 // Local authentication instance
final LocalAuthentication auth = LocalAuthentication(); final LocalAuthentication auth = LocalAuthentication();
@ -220,4 +232,25 @@ class SettingProvider extends ChangeNotifier {
return isValid; return isValid;
} }
} }
Future<void> 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;
}
}
} }

@ -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 { enum DropDownMatchType {
identifier, identifier,

@ -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<String, dynamic> json) {
id = json['id'];
code = json['code'];
text = json['text'];
selectedAction = json['selectedAction'] != null
? new SelectedAction.fromJson(json['selectedAction'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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<String, dynamic> json) {
id = json['id'];
code = json['code'];
name = json['name'];
actionCodeEnum = json['code'] == null ? null : (json['code']).fromCode();
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['code'] = this.code;
data['name'] = this.name;
return data;
}
}

@ -88,7 +88,7 @@ class _CMDetailPageState extends State<CMDetailPage> {
child: Scaffold( child: Scaffold(
backgroundColor: Theme.of(context).scaffoldBackgroundColor, backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: DefaultAppBar( appBar: DefaultAppBar(
title: context.translation.cmDetails, title: context.settingProvider.getFieldLabel("cm-details"),
onBackPress: () { onBackPress: () {
stopTimer(); stopTimer();
Navigator.pop(context); Navigator.pop(context);

@ -227,7 +227,7 @@ class _ServiceRequestDetailViewState extends State<ServiceRequestDetailView> {
//... request details starts here.... //... request details starts here....
InfoHeader16Widget(context.translation.callDetails), 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.createdBy, value: workOrder.workOrderCreatedBy?.userName ?? "-"),
InfoTextWidget(label: context.translation.arrivedDate, value: workOrder.iHaveArrivedDate != null ? workOrder.iHaveArrivedDate.toString().toServiceRequestDetailsFormat : '-'), 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 : '-'), InfoTextWidget(label: context.translation.closedDate, value: workOrder.closedDate != null ? workOrder.closedDate!.toString().toServiceRequestDetailsFormat : '-'),

@ -52,8 +52,9 @@ class ServiceRequestItemView extends StatelessWidget {
InfoDateWidget(requestData!.transactionDate!), InfoDateWidget(requestData!.transactionDate!),
], ],
), ),
//CM Number
InfoHeaderWidget(requestData?.typeTransaction ?? context.translation.correctiveMaintenance), 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.assetNumber, value: requestData!.assetNumber),
InfoTextWidget(label: context.translation.assetName, value: requestData?.assetName?.cleanupWhitespace.capitalizeFirstOfEach, showArrow: requestData?.statusName == 'Canceled' ? false : true), InfoTextWidget(label: context.translation.assetName, value: requestData?.assetName?.cleanupWhitespace.capitalizeFirstOfEach, showArrow: requestData?.statusName == 'Canceled' ? false : true),
if (requestData?.statusName == 'Canceled') ...[ if (requestData?.statusName == 'Canceled') ...[
@ -94,7 +95,7 @@ class ServiceRequestItemView extends StatelessWidget {
], ],
), ),
InfoHeaderWidget(requestDetails?.nameOfType ?? context.translation.correctiveMaintenance), 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.assetNumber, value: requestDetails!.assetNo),
InfoTextWidget(label: context.translation.serialNo, value: requestDetails!.assetSN, showEmptyValue: true), InfoTextWidget(label: context.translation.serialNo, value: requestDetails!.assetSN, showEmptyValue: true),
InfoTextWidget(label: context.translation.assetName, value: requestDetails!.assetName?.cleanupWhitespace.capitalizeFirstOfEach, showArrow: true), InfoTextWidget(label: context.translation.assetName, value: requestDetails!.assetName?.cleanupWhitespace.capitalizeFirstOfEach, showArrow: true),

@ -313,6 +313,7 @@ class _LoginPageState extends State<LoginPage> {
if (status >= 200 && status < 300 && _userProvider.user!.isAuthenticated! ?? false) { if (status >= 200 && status < 300 && _userProvider.user!.isAuthenticated! ?? false) {
await _userProvider.getMobilePermissionByUser(); await _userProvider.getMobilePermissionByUser();
await _settingProvider!.setUser(_userProvider.user!); await _settingProvider!.setUser(_userProvider.user!);
await _settingProvider!.getUserPermission();
Navigator.pop(context); Navigator.pop(context);
// (await SharedPreferences.getInstance()).remove(ASettings.localAuth); // (await SharedPreferences.getInstance()).remove(ASettings.localAuth);
await _settingProvider!.setRememberMe(_user.userName!, _user.password!, rememberMe); await _settingProvider!.setRememberMe(_user.userName!, _user.password!, rememberMe);

@ -2,10 +2,13 @@ import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.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/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart'; import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_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'; import 'package:test_sa/new_views/app_style/app_color.dart';
class InfoTextWidget extends StatelessWidget { class InfoTextWidget extends StatelessWidget {
@ -16,12 +19,40 @@ class InfoTextWidget extends StatelessWidget {
final bool copyValue; final bool copyValue;
final bool isMsg; 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 @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Widget text; 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) { if (showEmptyValue) {
text = Text('$aLabel ${value ?? ""}', style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context))); text = Text('$aLabel ${value ?? ""}', style: AppTextStyles.bodyText2.copyWith(color: AppColor.lightTextColor(context)));
} else if (value?.isNotEmpty ?? false) { } else if (value?.isNotEmpty ?? false) {

Loading…
Cancel
Save