Merge branch 'development_sikander' into 'master'

Development sikander

See merge request mirza.shafique/mohem_flutter_app!81
merge-requests/1/merge
Sikander Saleem 3 years ago
commit e0088a515b

@ -135,4 +135,14 @@ class LoginApiClient {
return responseData; return responseData;
}, url, postParams); }, url, postParams);
} }
Future<GenericResponseModel?> changePasswordFromActiveSession(String pOldPassword, String pNewPassword, String pConfirmNewPassword) async {
String url = "${ApiConsts.erpRest}ChangePassword_FromActiveSession";
Map<String, dynamic> postParams = {"P_OLD_PASSWORD": pOldPassword, "P_Confirm_NEW_PASSWORD": pConfirmNewPassword, "P_NEW_PASSWORD": pNewPassword};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel responseData = GenericResponseModel.fromJson(json);
return responseData;
}, url, postParams);
}
} }

@ -1,3 +1,5 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:mohem_flutter_app/models/itg_forms_models/request_detail_model.dart'; import 'package:mohem_flutter_app/models/itg_forms_models/request_detail_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart';
@ -30,17 +32,27 @@ class AppState {
String? get getForgetPasswordTokenID => forgetPasswordTokenID; String? get getForgetPasswordTokenID => forgetPasswordTokenID;
//Wifi info //Wifi info
String? mohemmWifiSSID; String? _mohemmWifiSSID;
set setMohemmWifiSSID(v) => _mohemmWifiSSID = v;
set setMohemmWifiSSID(v) => mohemmWifiSSID = mohemmWifiSSID; String? get getMohemmWifiSSID => _mohemmWifiSSID;
String? get getMohemmWifiSSID => mohemmWifiSSID; String? _mohemmWifiPassword;
String? mohemmWifiPassword; set setMohemmWifiPassword(v) => _mohemmWifiPassword = v;
set setMohemmWifiPassword(v) => mohemmWifiPassword = v; String? get getMohemmWifiPassword => _mohemmWifiPassword;
String? get getMohemmWifiPassword => mohemmWifiPassword; final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.0, mobileType: Platform.isAndroid ? "android" : "ios");
void setPostParamsInitConfig() {
isAuthenticated = false;
isLogged = false;
_memberLoginList = null;
_memberInformationList = null;
_postParams = _postParamsInitConfig;
}
PostParamsModel? _postParams; PostParamsModel? _postParams;

@ -129,9 +129,10 @@ class Utils {
static Widget getNoDataWidget(BuildContext context) { static Widget getNoDataWidget(BuildContext context) {
return Column( return Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0), SvgPicture.asset('assets/images/not_found.svg', width: 110.0, height: 110.0),
Container(margin: const EdgeInsets.only(top: 15.0), child: LocaleKeys.noDataAvailable.tr().toText16().center), LocaleKeys.noDataAvailable.tr().toText16().paddingOnly(top: 15),
], ],
).center; ).center;
} }

@ -7,6 +7,7 @@ import 'package:mohem_flutter_app/ui/landing/dashboard_screen.dart';
import 'package:mohem_flutter_app/ui/landing/today_attendance_screen.dart'; import 'package:mohem_flutter_app/ui/landing/today_attendance_screen.dart';
import 'package:mohem_flutter_app/ui/leave_balance/add_leave_balance_screen.dart'; import 'package:mohem_flutter_app/ui/leave_balance/add_leave_balance_screen.dart';
import 'package:mohem_flutter_app/ui/leave_balance/leave_balance_screen.dart'; import 'package:mohem_flutter_app/ui/leave_balance/leave_balance_screen.dart';
import 'package:mohem_flutter_app/ui/login/change_password_screen.dart';
import 'package:mohem_flutter_app/ui/login/forgot_password_screen.dart'; import 'package:mohem_flutter_app/ui/login/forgot_password_screen.dart';
import 'package:mohem_flutter_app/ui/login/login_screen.dart'; import 'package:mohem_flutter_app/ui/login/login_screen.dart';
import 'package:mohem_flutter_app/ui/login/new_password_screen.dart'; import 'package:mohem_flutter_app/ui/login/new_password_screen.dart';
@ -16,6 +17,7 @@ import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
import 'package:mohem_flutter_app/ui/my_attendance/services_menu_list_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/services_menu_list_screen.dart';
// import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart'; // import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart';
import 'package:mohem_flutter_app/ui/my_team/create_request.dart'; import 'package:mohem_flutter_app/ui/my_team/create_request.dart';
import 'package:mohem_flutter_app/ui/my_team/employee_details.dart'; import 'package:mohem_flutter_app/ui/my_team/employee_details.dart';
@ -57,8 +59,6 @@ import 'package:mohem_flutter_app/ui/work_list/item_history_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/itg_detail_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/work_list_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/work_list_screen.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_detail_screen.dart';
import 'package:mohem_flutter_app/ui/my_team/my_team.dart';
import 'package:mohem_flutter_app/ui/my_team/create_request.dart';
import 'package:mohem_flutter_app/ui/work_list/worklist_settings.dart'; import 'package:mohem_flutter_app/ui/work_list/worklist_settings.dart';
class AppRoutes { class AppRoutes {
@ -148,6 +148,7 @@ class AppRoutes {
//performance evaluation //performance evaluation
static const String performanceEvaluation = "/performanceEvaluation"; static const String performanceEvaluation = "/performanceEvaluation";
//My Team //My Team
static const String myTeam = "/myTeam"; static const String myTeam = "/myTeam";
static const String employeeDetails = "/employeeDetails"; static const String employeeDetails = "/employeeDetails";
@ -157,6 +158,8 @@ class AppRoutes {
static const String createRequest = "/createRequest"; static const String createRequest = "/createRequest";
static const String subordinateLeave = "/subordinateLeave"; static const String subordinateLeave = "/subordinateLeave";
static const String changePassword = "/changePassword";
static final Map<String, WidgetBuilder> routes = { static final Map<String, WidgetBuilder> routes = {
login: (context) => LoginScreen(), login: (context) => LoginScreen(),
verifyLogin: (context) => VerifyLoginScreen(), verifyLogin: (context) => VerifyLoginScreen(),
@ -247,5 +250,7 @@ class AppRoutes {
teamMembers: (context) => TeamMembers(), teamMembers: (context) => TeamMembers(),
createRequest: (context) => CreateRequest(), createRequest: (context) => CreateRequest(),
subordinateLeave: (context) => SubordinateLeave(), subordinateLeave: (context) => SubordinateLeave(),
changePassword: (context) => ChangePasswordScreen(),
}; };
} }

@ -6,7 +6,6 @@ import 'package:logger/logger.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/generated/codegen_loader.g.dart'; import 'package:mohem_flutter_app/generated/codegen_loader.g.dart';
import 'package:mohem_flutter_app/models/post_params_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/provider/eit_provider_model.dart'; import 'package:mohem_flutter_app/provider/eit_provider_model.dart';
import 'package:mohem_flutter_app/theme/app_theme.dart'; import 'package:mohem_flutter_app/theme/app_theme.dart';
@ -30,9 +29,7 @@ class MyHttpOverrides extends HttpOverrides {
Future<void> main() async { Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await EasyLocalization.ensureInitialized(); await EasyLocalization.ensureInitialized();
AppState().setPostParamsModel( AppState().setPostParamsInitConfig();
PostParamsModel(channel: 31, versionID: 5.0, mobileType: Platform.isAndroid ? "android" : "ios"),
);
HttpOverrides.global = MyHttpOverrides(); HttpOverrides.global = MyHttpOverrides();
runApp( runApp(
EasyLocalization( EasyLocalization(

@ -88,86 +88,86 @@ class MemberInformationListModel {
MemberInformationListModel( MemberInformationListModel(
{this.aCTUALTERMINATIONDATE, {this.aCTUALTERMINATIONDATE,
this.aSSIGNMENTENDDATE, this.aSSIGNMENTENDDATE,
this.aSSIGNMENTID, this.aSSIGNMENTID,
this.aSSIGNMENTNUMBER, this.aSSIGNMENTNUMBER,
this.aSSIGNMENTSTARTDATE, this.aSSIGNMENTSTARTDATE,
this.aSSIGNMENTSTATUSTYPEID, this.aSSIGNMENTSTATUSTYPEID,
this.aSSIGNMENTTYPE, this.aSSIGNMENTTYPE,
this.bUSINESSGROUPID, this.bUSINESSGROUPID,
this.bUSINESSGROUPNAME, this.bUSINESSGROUPNAME,
this.businessCardQR, this.businessCardQR,
this.cURRENTEMPLOYEEFLAG, this.cURRENTEMPLOYEEFLAG,
this.eMPLOYEEDISPLAYNAME, this.eMPLOYEEDISPLAYNAME,
this.eMPLOYEEDISPLAYNAMEAr, this.eMPLOYEEDISPLAYNAMEAr,
this.eMPLOYEEDISPLAYNAMEEn, this.eMPLOYEEDISPLAYNAMEEn,
this.eMPLOYEEEMAILADDRESS, this.eMPLOYEEEMAILADDRESS,
this.eMPLOYEEIMAGE, this.eMPLOYEEIMAGE,
this.eMPLOYEEMOBILENUMBER, this.eMPLOYEEMOBILENUMBER,
this.eMPLOYEENAME, this.eMPLOYEENAME,
this.eMPLOYEENAMEAr, this.eMPLOYEENAMEAr,
this.eMPLOYEENAMEEn, this.eMPLOYEENAMEEn,
this.eMPLOYEENUMBER, this.eMPLOYEENUMBER,
this.eMPLOYEEWORKNUMBER, this.eMPLOYEEWORKNUMBER,
this.eMPLOYMENTCATEGORY, this.eMPLOYMENTCATEGORY,
this.eMPLOYMENTCATEGORYMEANING, this.eMPLOYMENTCATEGORYMEANING,
this.employeeQR, this.employeeQR,
this.fREQUENCY, this.fREQUENCY,
this.fREQUENCYMEANING, this.fREQUENCYMEANING,
this.fROMROWNUM, this.fROMROWNUM,
this.gRADEID, this.gRADEID,
this.gRADENAME, this.gRADENAME,
this.hIREDATE, this.hIREDATE,
this.jOBID, this.jOBID,
this.jOBNAME, this.jOBNAME,
this.jOBNAMEAr, this.jOBNAMEAr,
this.jOBNAMEEn, this.jOBNAMEEn,
this.lEDGERID, this.lEDGERID,
this.lOCATIONID, this.lOCATIONID,
this.lOCATIONNAME, this.lOCATIONNAME,
this.mANUALTIMECARDFLAG, this.mANUALTIMECARDFLAG,
this.mANUALTIMECARDMEANING, this.mANUALTIMECARDMEANING,
this.mobileNumberWithZipCode, this.mobileNumberWithZipCode,
this.nATIONALITYCODE, this.nATIONALITYCODE,
this.nATIONALITYMEANING, this.nATIONALITYMEANING,
this.nATIONALIDENTIFIER, this.nATIONALIDENTIFIER,
this.nORMALHOURS, this.nORMALHOURS,
this.nOOFROWS, this.nOOFROWS,
this.oRGANIZATIONID, this.oRGANIZATIONID,
this.oRGANIZATIONNAME, this.oRGANIZATIONNAME,
this.pAYROLLCODE, this.pAYROLLCODE,
this.pAYROLLID, this.pAYROLLID,
this.pAYROLLNAME, this.pAYROLLNAME,
this.pERSONID, this.pERSONID,
this.pERSONTYPE, this.pERSONTYPE,
this.pERSONTYPEID, this.pERSONTYPEID,
this.pERINFORMATIONCATEGORY, this.pERINFORMATIONCATEGORY,
this.pOSITIONID, this.pOSITIONID,
this.pOSITIONNAME, this.pOSITIONNAME,
this.pRIMARYFLAG, this.pRIMARYFLAG,
this.rOWNUM, this.rOWNUM,
this.sERVICEDAYS, this.sERVICEDAYS,
this.sERVICEMONTHS, this.sERVICEMONTHS,
this.sERVICEYEARS, this.sERVICEYEARS,
this.sUPERVISORASSIGNMENTID, this.sUPERVISORASSIGNMENTID,
this.sUPERVISORDISPLAYNAME, this.sUPERVISORDISPLAYNAME,
this.sUPERVISOREMAILADDRESS, this.sUPERVISOREMAILADDRESS,
this.sUPERVISORID, this.sUPERVISORID,
this.sUPERVISORMOBILENUMBER, this.sUPERVISORMOBILENUMBER,
this.sUPERVISORNAME, this.sUPERVISORNAME,
this.sUPERVISORNUMBER, this.sUPERVISORNUMBER,
this.sUPERVISORWORKNUMBER, this.sUPERVISORWORKNUMBER,
this.sWIPESEXEMPTEDFLAG, this.sWIPESEXEMPTEDFLAG,
this.sWIPESEXEMPTEDMEANING, this.sWIPESEXEMPTEDMEANING,
this.sYSTEMPERSONTYPE, this.sYSTEMPERSONTYPE,
this.tKEMAILADDRESS, this.tKEMAILADDRESS,
this.tKEMPLOYEEDISPLAYNAME, this.tKEMPLOYEEDISPLAYNAME,
this.tKEMPLOYEENAME, this.tKEMPLOYEENAME,
this.tKEMPLOYEENUMBER, this.tKEMPLOYEENUMBER,
this.tKPERSONID, this.tKPERSONID,
this.tOROWNUM, this.tOROWNUM,
this.uNITNUMBER, this.uNITNUMBER,
this.uSERSTATUS}); this.uSERSTATUS});
MemberInformationListModel.fromJson(Map<String, dynamic> json) { MemberInformationListModel.fromJson(Map<String, dynamic> json) {
aCTUALTERMINATIONDATE = json['ACTUAL_TERMINATION_DATE']; aCTUALTERMINATIONDATE = json['ACTUAL_TERMINATION_DATE'];
@ -339,6 +339,19 @@ class MemberInformationListModel {
return data; return data;
} }
String getPositionName() {
String positionName = "";
List<String> list = pOSITIONNAME?.split(".") ?? [];
if (list.isNotEmpty) {
if (list.length > 1) {
positionName = list[0] + " " + list[1];
} else {
positionName = list.first;
}
}
return positionName;
}
static Future<List<MemberInformationListModel>> getFromPrefs() async { static Future<List<MemberInformationListModel>> getFromPrefs() async {
SharedPreferences prefs = await SharedPreferences.getInstance(); SharedPreferences prefs = await SharedPreferences.getInstance();
List encodedList = prefs.getStringList(SharedPrefsConsts.memberInformation) ?? []; List encodedList = prefs.getStringList(SharedPrefsConsts.memberInformation) ?? [];
@ -350,4 +363,4 @@ class MemberInformationListModel {
List<String> encodedList = list.map((e) => jsonEncode(e.toJson())).toList(); List<String> encodedList = list.map((e) => jsonEncode(e.toJson())).toList();
await prefs.setStringList(SharedPrefsConsts.memberInformation, encodedList); await prefs.setStringList(SharedPrefsConsts.memberInformation, encodedList);
} }
} }

@ -56,17 +56,13 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
Future<bool> fetchAttendanceTracking(context) async { Future<bool> fetchAttendanceTracking(context) async {
try { try {
attendanceTracking = await DashboardApiClient().getAttendanceTracking(); attendanceTracking = await DashboardApiClient().getAttendanceTracking();
print("attendanceTracking:" + (attendanceTracking!.pRemainingHours).toString());
isAttendanceTrackingLoading = false; isAttendanceTrackingLoading = false;
// isTimeRemainingInSeconds = calculateSeconds( "00:00:00"); // isTimeRemainingInSeconds = calculateSeconds( "00:00:00");
if (attendanceTracking?.pSwipeIn != null) { if (attendanceTracking?.pSwipeIn != null) {
isTimeRemainingInSeconds = calculateSeconds(attendanceTracking!.pRemainingHours ?? "00:00:00"); isTimeRemainingInSeconds = calculateSeconds(attendanceTracking!.pRemainingHours ?? "00:00:00");
int totalShiftTimeInSeconds = calculateSeconds(attendanceTracking!.pScheduledHours ?? "00:00:00"); int totalShiftTimeInSeconds = calculateSeconds(attendanceTracking!.pScheduledHours ?? "00:00:00");
print("totalShiftTimeInSeconds: " + totalShiftTimeInSeconds.toString());
print("isTimeRemainingInSeconds: " + isTimeRemainingInSeconds.toString());
progress = (isTimeRemainingInSeconds / totalShiftTimeInSeconds); progress = (isTimeRemainingInSeconds / totalShiftTimeInSeconds);
endTime = DateTime.now().millisecondsSinceEpoch + Duration(seconds: isTimeRemainingInSeconds).inMilliseconds; endTime = DateTime.now().millisecondsSinceEpoch + Duration(seconds: isTimeRemainingInSeconds).inMilliseconds;
print("endTime " + endTime.toString());
} }
notifyListeners(); notifyListeners();
@ -155,17 +151,17 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
DrawerMenuItem("assets/images/drawer/performance_evaluation.svg", LocaleKeys.performanceEvaluation.tr(), AppRoutes.performanceEvaluation), DrawerMenuItem("assets/images/drawer/performance_evaluation.svg", LocaleKeys.performanceEvaluation.tr(), AppRoutes.performanceEvaluation),
DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi), DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi),
DrawerMenuItem("assets/images/drawer/pending_trasactions.svg", LocaleKeys.pendingTransactions.tr(), AppRoutes.pendingTransactions), DrawerMenuItem("assets/images/drawer/pending_trasactions.svg", LocaleKeys.pendingTransactions.tr(), AppRoutes.pendingTransactions),
DrawerMenuItem("assets/images/drawer/change_password.svg", LocaleKeys.changePassword.tr(), ""), DrawerMenuItem("assets/images/drawer/change_password.svg", LocaleKeys.changePassword.tr(), AppRoutes.changePassword),
]; ];
void fetchListMenu() async { void fetchListMenu() async {
try { try {
List<ListMenu> menuList = await DashboardApiClient().getListMenu(); List<ListMenu> menuList = await DashboardApiClient().getListMenu();
List findMyRequest = menuList.where((element) => element.menuName == "My Requests").toList(); List findMyRequest = menuList.where((element) => element.menuType == "E").toList();
if (findMyRequest.isNotEmpty) { if (findMyRequest.isNotEmpty) {
drawerMenuItemList.insert(3, DrawerMenuItem("assets/images/drawer/my_requests.svg", LocaleKeys.myRequest.tr(), AppRoutes.myRequests)); drawerMenuItemList.insert(3, DrawerMenuItem("assets/images/drawer/my_requests.svg", LocaleKeys.myRequest.tr(), AppRoutes.myRequests));
} }
List findMyTeam = menuList.where((element) => element.menuName == "My Team").toList(); List findMyTeam = menuList.where((element) => element.menuType == "M").toList();
if (findMyTeam.isNotEmpty) { if (findMyTeam.isNotEmpty) {
drawerMenuItemList.insert(2, DrawerMenuItem("assets/images/drawer/my_team.svg", LocaleKeys.myTeamMembers.tr(), AppRoutes.myTeam)); drawerMenuItemList.insert(2, DrawerMenuItem("assets/images/drawer/my_team.svg", LocaleKeys.myTeamMembers.tr(), AppRoutes.myTeam));
} }

@ -1,65 +1,67 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
class BusinessCardDialog extends StatelessWidget { class BusinessCardDialog extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return RotatedBox( return RotatedBox(
quarterTurns: 1, quarterTurns: 1,
child: Container( child: AspectRatio(
width: MediaQuery.of(context).size.height / 2, aspectRatio: 3.5 / 2,
color: Colors.white, child: Container(
margin: EdgeInsets.all(20), // width: MediaQuery.of(context).size.height / 2,
child: Column( color: Colors.white,
mainAxisSize: MainAxisSize.min, margin: EdgeInsets.all(21),
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.min,
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Row( mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
mainAxisAlignment: MainAxisAlignment.start, Row(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Expanded( mainAxisAlignment: MainAxisAlignment.start,
child: Column( children: [
crossAxisAlignment: CrossAxisAlignment.start, Expanded(
mainAxisAlignment: MainAxisAlignment.start, child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
Image.asset( mainAxisAlignment: MainAxisAlignment.start,
"assets/images/logos/bn_cloud_soloution.jpg", children: [
width: 80, Image.asset(
height: 80, "assets/images/logos/bn_cloud_soloution.jpg",
), width: 80,
12.height, height: 80,
(AppState().memberInformationList!.eMPLOYEENAME ?? "").toText20(), ),
], 12.height,
(AppState().memberInformationList!.eMPLOYEENAME ?? "").toText20(isBold: true),
],
),
),
Image.memory(
Utils.getPostBytes(AppState().memberInformationList!.businessCardQR ?? ""),
width: 100,
height: 100,
), ),
), ],
Image.memory( ),
Utils.getPostBytes(AppState().memberInformationList!.businessCardQR ?? ""), Column(
width: 100, crossAxisAlignment: CrossAxisAlignment.start,
height: 100, mainAxisAlignment: MainAxisAlignment.start,
), children: [
], 1.height,
), (AppState().memberInformationList!.getPositionName() ?? "").toText13(),
Column( 12.height,
crossAxisAlignment: CrossAxisAlignment.start, (AppState().memberInformationList!.eMPLOYEENUMBER ?? "").toText13(),
mainAxisAlignment: MainAxisAlignment.start, 1.height,
children: [ (AppState().memberInformationList!.eMPLOYEEEMAILADDRESS ?? "").toText13(),
1.height, 1.height,
(AppState().memberInformationList!.pOSITIONNAME ?? "").toText12(isBold: false), (AppState().memberInformationList!.jOBNAME ?? "").toText13(),
12.height, ],
(AppState().memberInformationList!.eMPLOYEENUMBER ?? "").toText12(isBold: false), ),
1.height, ],
(AppState().memberInformationList!.eMPLOYEEEMAILADDRESS ?? "").toText12(isBold: false), ),
1.height,
(AppState().memberInformationList!.jOBNAME ?? "").toText12(isBold: false),
],
),
],
), ),
), ),
); );

@ -5,6 +5,7 @@ import 'package:flutter_svg/flutter_svg.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
@ -15,6 +16,7 @@ import 'package:mohem_flutter_app/ui/dialogs/id/business_card_dialog.dart';
import 'package:mohem_flutter_app/ui/dialogs/id/employee_digital_id_dialog.dart'; import 'package:mohem_flutter_app/ui/dialogs/id/employee_digital_id_dialog.dart';
import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart'; import 'package:mohem_flutter_app/widgets/dialogs/dialogs.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
class AppDrawer extends StatefulWidget { class AppDrawer extends StatefulWidget {
@override @override
@ -43,22 +45,23 @@ class _AppDrawerState extends State<AppDrawer> {
).paddingOnly(left: 4, right: 14), ).paddingOnly(left: 4, right: 14),
Row( Row(
children: [ children: [
AppState().memberInformationList!.eMPLOYEEIMAGE == null AppState().memberInformationList!.eMPLOYEEIMAGE == null
? SvgPicture.asset( ? SvgPicture.asset(
"assets/images/user.svg", "assets/images/user.svg",
height: 52, height: 52,
width: 52,) width: 52,
: CircleAvatar( )
radius: 52 / 2, : CircleAvatar(
backgroundImage: MemoryImage(Utils.getPostBytes(AppState().memberInformationList!.eMPLOYEEIMAGE)), radius: 52 / 2,
backgroundColor: Colors.black, backgroundImage: MemoryImage(Utils.getPostBytes(AppState().memberInformationList!.eMPLOYEEIMAGE)),
), backgroundColor: Colors.black,
),
12.width, 12.width,
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
AppState().memberInformationList!.eMPLOYEENAME!.toText18(isBold: true), AppState().memberInformationList!.eMPLOYEENAME!.toText18(isBold: true),
AppState().memberInformationList!.jOBNAME!.toText14(weight: FontWeight.w500), AppState().memberInformationList!.getPositionName().toText14(weight: FontWeight.w500),
], ],
).expanded ).expanded
], ],
@ -83,7 +86,7 @@ class _AppDrawerState extends State<AppDrawer> {
}), }),
menuItem("assets/images/drawer/employee_id.svg", LocaleKeys.employeeDigitalID.tr(), "", closeDrawer: false, onPress: () => showMDialog(context, child: EmployeeDigitialIdDialog())), menuItem("assets/images/drawer/employee_id.svg", LocaleKeys.employeeDigitalID.tr(), "", closeDrawer: false, onPress: () => showMDialog(context, child: EmployeeDigitialIdDialog())),
menuItem("assets/images/drawer/view_business_card.svg", LocaleKeys.viewBusinessCard.tr(), "", closeDrawer: false, onPress: () => showMDialog(context, child: BusinessCardDialog())), menuItem("assets/images/drawer/view_business_card.svg", LocaleKeys.viewBusinessCard.tr(), "", closeDrawer: false, onPress: () => showMDialog(context, child: BusinessCardDialog())),
menuItem("assets/images/drawer/logout.svg", LocaleKeys.logout.tr(), "", color: MyColors.redA3Color, closeDrawer: false, onPress: () {}), menuItem("assets/images/drawer/logout.svg", LocaleKeys.logout.tr(), "", color: MyColors.redA3Color, closeDrawer: false, onPress: performLogout),
], ],
).expanded, ).expanded,
const Divider( const Divider(
@ -128,7 +131,12 @@ class _AppDrawerState extends State<AppDrawer> {
: onPress!); : onPress!);
} }
void drawerNavigator(context, routeName) { void performLogout() async {
Navigator.of(context).pushNamed(routeName); AppState().isAuthenticated = false;
AppState().isLogged = false;
AppState().setPostParamsInitConfig();
SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.clear();
Navigator.pushNamedAndRemoveUntil(context, AppRoutes.login, (Route<dynamic> route) => false, arguments: false);
} }
} }

@ -39,13 +39,7 @@ class ServicesWidget extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Row( data.homeMenus![parentIndex].menuEntry.prompt!.toSectionHeading().paddingOnly(left: 21, right: 21),
crossAxisAlignment: CrossAxisAlignment.center,
children: [
data.homeMenus![parentIndex].menuEntry.prompt!.toSectionHeading().expanded,
LocaleKeys.viewAllServices.tr().toText12(isUnderLine: true),
],
).paddingOnly(left: 21, right: 21),
SizedBox( SizedBox(
height: 105 + 26, height: 105 + 26,
child: ListView.separated( child: ListView.separated(

@ -0,0 +1,174 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/login_api_client.dart';
import 'package:mohem_flutter_app/classes/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/input_widget.dart';
class ChangePasswordScreen extends StatefulWidget {
ChangePasswordScreen({Key? key}) : super(key: key);
@override
_ChangePasswordScreenState createState() {
return _ChangePasswordScreenState();
}
}
class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
TextEditingController oldPassword = TextEditingController();
TextEditingController password = TextEditingController();
TextEditingController confirmPassword = TextEditingController();
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
void setNewPassword() async {
Utils.showLoading(context);
try {
var genericResponseModel = await LoginApiClient().changePasswordFromActiveSession(oldPassword.text, password.text, confirmPassword.text);
Utils.hideLoading(context);
Utils.showToast(LocaleKeys.passwordChangedSuccessfully.tr());
Navigator.pop(context);
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) {
Utils.confirmDialog(context, msg);
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
leading: IconButton(
icon: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
onPressed: () => Navigator.pop(context),
),
),
body: Column(
children: [
ListView(
padding: const EdgeInsets.all(21),
children: [
"Change Password".toText24(isBold: true),
"Type Your Current password below".toText16(),
16.height,
InputWidget(
"Current password",
"**********",
oldPassword,
onChange: (value) {
setState(() {});
},
),
16.height,
LocaleKeys.typeYourNewPasswordBelow.tr().toText16(),
16.height,
InputWidget(
LocaleKeys.password.tr(),
"**********",
password,
onChange: (value) {
setState(() {});
},
),
12.height,
InputWidget(
LocaleKeys.confirmPassword.tr(),
"**********",
confirmPassword,
isObscureText: true,
onChange: (value) {
setState(() {});
},
),
16.height,
passwordConstraintsUI(LocaleKeys.doNotUseRecentPassword.tr(), true),
8.height,
passwordConstraintsUI(LocaleKeys.atLeastOneLowercase.tr(), checkRegEx(r'[a-z]')),
8.height,
passwordConstraintsUI(LocaleKeys.atLeastOneUppercase.tr(), checkRegEx(r'[A-Z]')),
8.height,
passwordConstraintsUI(LocaleKeys.atLeastOneNumeric.tr(), checkRegEx(r'[0-9]')),
8.height,
passwordConstraintsUI(LocaleKeys.minimum8Characters.tr(), password.text.length >= 8),
8.height,
passwordConstraintsUI(LocaleKeys.doNotAddRepeatingLetters.tr(), checkRepeatedChars(password.text)),
8.height,
passwordConstraintsUI(LocaleKeys.itShouldContainSpecialCharacter.tr(), checkRegEx(r'[!@#$%^&*(),.?":{}|<>]')),
8.height,
passwordConstraintsUI(LocaleKeys.confirmPasswordMustMatch.tr(), password.text.isNotEmpty && password.text == confirmPassword.text),
],
).expanded,
DefaultButton(LocaleKeys.changePassword.tr(), (!isPasswordCompliant(password.text, 8)) ? null : setNewPassword).insideContainer
],
),
);
}
bool checkRegEx(String pattern) {
return RegExp(pattern).hasMatch(password.text);
}
String recentPassword = "";
bool isPasswordCompliant(String? password, int minLength) {
if (password == null || password.isEmpty) {
return false;
}
bool hasUppercase = password.contains(RegExp(r'[A-Z]'));
bool hasDigits = password.contains(RegExp(r'[0-9]'));
bool hasLowercase = password.contains(RegExp(r'[a-z]'));
bool hasSpecialCharacters = password.contains(RegExp(r'[!@#$%^&*(),.?":{}|<>]'));
bool hasMinLength = password.length >= minLength;
bool isMatched = password == confirmPassword.text;
return hasDigits && hasUppercase && hasLowercase && hasSpecialCharacters && hasMinLength && isMatched && checkRepeatedChars(password);
}
bool checkRepeatedChars(String password) {
bool isNonRepeatedLetters = true;
if (password.length > 2) {
for (int i = 0; i < password.length; i++) {
String char = password[i];
try {
if (char == password[i + 1]) {
isNonRepeatedLetters = false;
break;
}
} catch (ex) {}
}
}
return isNonRepeatedLetters;
}
Widget passwordConstraintsUI(String description, bool check) {
return Row(
children: [
4.width,
SizedBox(
width: 12,
height: 12,
child: Checkbox(fillColor: MaterialStateProperty.all(MyColors.gradiantEndColor), shape: const CircleBorder(), value: check, onChanged: null),
),
8.width,
description.toText14()
],
);
}
}

@ -45,11 +45,12 @@ class _LoginScreenState extends State<LoginScreen> {
bool _autoLogin = false; bool _autoLogin = false;
bool? isAppOpenBySystem;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
checkFirebaseToken(); // checkFirebaseToken();
//checkPrefs();
} }
@override @override
@ -57,18 +58,6 @@ class _LoginScreenState extends State<LoginScreen> {
super.dispose(); super.dispose();
} }
Future<void> checkPrefs() async {
String username = await Utils.getStringFromPrefs(SharedPrefsConsts.username);
if (username.isNotEmpty) {
String password = await Utils.getStringFromPrefs(SharedPrefsConsts.password);
// String firebaseToken = await Utils.getStringFromPrefs(SharedPrefsConsts.firebaseToken);
// print("firebaseToken:$firebaseToken");
this.username.text = username;
this.password.text = password;
_autoLogin = true;
}
}
String? firebaseToken; String? firebaseToken;
GetMobileLoginInfoListModel? loginInfo; GetMobileLoginInfoListModel? loginInfo;
@ -90,16 +79,21 @@ class _LoginScreenState extends State<LoginScreen> {
} }
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (errorMsg){}); Utils.handleException(ex, context, (errorMsg) {});
} }
} }
// Future<void> getFirebaseToken() async { Future<void> checkPrefs() async {
// String? firebaseToken = await _firebaseMessaging.getToken(); String username = await Utils.getStringFromPrefs(SharedPrefsConsts.username);
// if (firebaseToken != null) { if (username.isNotEmpty) {
// await Utils.saveStringFromPrefs(SharedPrefsConsts.firebaseToken, firebaseToken); String password = await Utils.getStringFromPrefs(SharedPrefsConsts.password);
// } // String firebaseToken = await Utils.getStringFromPrefs(SharedPrefsConsts.firebaseToken);
// } // print("firebaseToken:$firebaseToken");
this.username.text = username;
this.password.text = password;
_autoLogin = true;
}
}
void performLogin() async { void performLogin() async {
Utils.showLoading(context); Utils.showLoading(context);
@ -114,8 +108,8 @@ class _LoginScreenState extends State<LoginScreen> {
AppState().setPrivilegeListModel = await PrivilegeListModel.getFromPrefs(); AppState().setPrivilegeListModel = await PrivilegeListModel.getFromPrefs();
String mohemmWifiSSID = await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiSSID); String mohemmWifiSSID = await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiSSID);
String mohemmWifiPassword = await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiPassword); String mohemmWifiPassword = await Utils.getStringFromPrefs(SharedPrefsConsts.mohemmWifiPassword);
AppState().mohemmWifiSSID = mohemmWifiSSID; AppState().setMohemmWifiSSID = mohemmWifiSSID;
AppState().mohemmWifiPassword = mohemmWifiPassword; AppState().setMohemmWifiPassword = mohemmWifiPassword;
} }
Utils.hideLoading(context); Utils.hideLoading(context);
if (_autoLogin) { if (_autoLogin) {
@ -124,7 +118,6 @@ class _LoginScreenState extends State<LoginScreen> {
Navigator.pushNamed(context, AppRoutes.verifyLogin, arguments: "$firebaseToken"); Navigator.pushNamed(context, AppRoutes.verifyLogin, arguments: "$firebaseToken");
} }
} catch (ex) { } catch (ex) {
print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, (msg) {
Utils.confirmDialog(context, msg); Utils.confirmDialog(context, msg);
@ -134,8 +127,14 @@ class _LoginScreenState extends State<LoginScreen> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
username.text = "15153"; if (isAppOpenBySystem == null) {
password.text = "Abcd@12345"; isAppOpenBySystem = (ModalRoute.of(context)!.settings.arguments ?? true) as bool;
print('isAppOpenBySystem:$isAppOpenBySystem');
username.text = "15153";
password.text = "Abcd@12345";
if (isAppOpenBySystem!) checkFirebaseToken();
}
// username.text = "15444"; // username.text = "15444";
return Scaffold( return Scaffold(

@ -46,7 +46,7 @@ class _NewPasswordScreenState extends State<NewPasswordScreen> {
} catch (ex) { } catch (ex) {
print(ex); print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, (msg) {
Utils.confirmDialog(context, msg); Utils.confirmDialog(context, msg);
}); });
} }
@ -66,54 +66,48 @@ class _NewPasswordScreenState extends State<NewPasswordScreen> {
), ),
body: Column( body: Column(
children: [ children: [
//const SizedBox(height: 23), ListView(
Expanded( padding: const EdgeInsets.all(21),
child: ListView( children: [
// mainAxisSize: MainAxisSize.min, LocaleKeys.setTheNewPassword.tr().toText24(isBold: true),
// crossAxisAlignment: CrossAxisAlignment.start, LocaleKeys.typeYourNewPasswordBelow.tr().toText16(),
// mainAxisAlignment: MainAxisAlignment.center, 16.height,
children: [ InputWidget(
LocaleKeys.setTheNewPassword.tr().toText24(isBold: true), LocaleKeys.password.tr(),
LocaleKeys.typeYourNewPasswordBelow.tr().toText16(), "**********",
16.height, password,
InputWidget( onChange: (value) {
LocaleKeys.password.tr(), setState(() {});
"**********", },
password, ),
onChange: (value) { 12.height,
setState(() {}); InputWidget(
}, LocaleKeys.confirmPassword.tr(),
), "**********",
12.height, confirmPassword,
InputWidget( isObscureText: true,
LocaleKeys.confirmPassword.tr(), onChange: (value) {
"**********", setState(() {});
confirmPassword, },
isObscureText: true, ),
onChange: (value) { 16.height,
setState(() {}); passwordConstraintsUI(LocaleKeys.doNotUseRecentPassword.tr(), true),
}, 8.height,
), passwordConstraintsUI(LocaleKeys.atLeastOneLowercase.tr(), checkRegEx(r'[a-z]')),
12.height, 8.height,
passwordConstraintsUI(LocaleKeys.doNotUseRecentPassword.tr(), true), passwordConstraintsUI(LocaleKeys.atLeastOneUppercase.tr(), checkRegEx(r'[A-Z]')),
8.height, 8.height,
passwordConstraintsUI(LocaleKeys.atLeastOneLowercase.tr(), checkRegEx(r'[a-z]')), passwordConstraintsUI(LocaleKeys.atLeastOneNumeric.tr(), checkRegEx(r'[0-9]')),
8.height, 8.height,
passwordConstraintsUI(LocaleKeys.atLeastOneUppercase.tr(), checkRegEx(r'[A-Z]')), passwordConstraintsUI(LocaleKeys.minimum8Characters.tr(), password.text.length >= 8),
8.height, 8.height,
passwordConstraintsUI(LocaleKeys.atLeastOneNumeric.tr(), checkRegEx(r'[0-9]')), passwordConstraintsUI(LocaleKeys.doNotAddRepeatingLetters.tr(), checkRepeatedChars(password.text)),
8.height, 8.height,
passwordConstraintsUI(LocaleKeys.minimum8Characters.tr(), password.text.length >= 8), passwordConstraintsUI(LocaleKeys.itShouldContainSpecialCharacter.tr(), checkRegEx(r'[!@#$%^&*(),.?":{}|<>]')),
8.height, 8.height,
passwordConstraintsUI(LocaleKeys.doNotAddRepeatingLetters.tr(), checkRepeatedChars(password.text)), passwordConstraintsUI(LocaleKeys.confirmPasswordMustMatch.tr(), password.text.isNotEmpty && password.text == confirmPassword.text),
8.height, ],
passwordConstraintsUI(LocaleKeys.itShouldContainSpecialCharacter.tr(), checkRegEx(r'[!@#$%^&*(),.?":{}|<>]')), ).expanded,
8.height,
passwordConstraintsUI(LocaleKeys.confirmPasswordMustMatch.tr(), password.text.isNotEmpty && password.text == confirmPassword.text),
12.height,
],
).paddingAll(21),
),
DefaultButton( DefaultButton(
LocaleKeys.update.tr(), LocaleKeys.update.tr(),
(!isPasswordCompliant(password.text, 8)) (!isPasswordCompliant(password.text, 8))

@ -58,116 +58,113 @@ class _VerifyLastLoginScreenState extends State<VerifyLastLoginScreen> {
), ),
body: Column( body: Column(
children: [ children: [
Expanded( ListView(
child: ListView( padding: const EdgeInsets.all(21),
padding: const EdgeInsets.all(21), physics: const BouncingScrollPhysics(),
physics: const BouncingScrollPhysics(), children: [
children: [ //12.height,
//12.height, if (true)
if (true) Column(
Column( mainAxisSize: MainAxisSize.min,
mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ LocaleKeys.welcomeBack.tr().toText12(),
LocaleKeys.welcomeBack.tr().toText12(), mobileLoginInfoListModel!.employeeName!.toText24(isBold: true),
mobileLoginInfoListModel!.employeeName!.toText24(isBold: true), 10.height,
10.height, LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16(),
LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16(), Container(
Container( height: 72,
height: 72, margin: const EdgeInsets.only(top: 23, bottom: 23),
margin: const EdgeInsets.only(top: 23, bottom: 23), alignment: Alignment.center,
alignment: Alignment.center, padding: const EdgeInsets.only(left: 17, right: 12),
padding: const EdgeInsets.only(left: 17, right: 12), decoration: BoxDecoration(
decoration: BoxDecoration( borderRadius: BorderRadius.circular(10),
borderRadius: BorderRadius.circular(10), color: Colors.white,
color: Colors.white, border: Border.all(
border: Border.all( color: const Color(0xffefefef),
color: const Color(0xffefefef), width: 1,
width: 1,
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
LocaleKeys.lastLoginDetails.tr().toText16(),
DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!), false).toText12(),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color),
getVerificationType(mobileLoginInfoListModel!.loginType!).toText12(),
Expanded(child: SizedBox()),
DateUtil.formatDateToTime(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!)).toText12(),
],
)
],
), ),
), ),
LocaleKeys.pleaseVerify.tr().toText16(), child: Column(
GridView( mainAxisSize: MainAxisSize.min,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
physics: const NeverScrollableScrollPhysics(),
padding: const EdgeInsets.only(top: 9),
shrinkWrap: true,
children: [ children: [
getButton(3), Row(
getButton(4), mainAxisAlignment: MainAxisAlignment.spaceBetween,
getButton(2), crossAxisAlignment: CrossAxisAlignment.center,
getButton(1), children: [
LocaleKeys.lastLoginDetails.tr().toText16(),
DateUtil.formatDateToDate(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!), false).toText12(),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color),
getVerificationType(mobileLoginInfoListModel!.loginType!).toText12(),
Expanded(child: SizedBox()),
DateUtil.formatDateToTime(DateUtil.convertStringToDate(mobileLoginInfoListModel!.editedOn!)).toText12(),
],
)
], ],
) ),
], ),
) LocaleKeys.pleaseVerify.tr().toText16(),
// else GridView(
// Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[ gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
// Image.asset( physics: const NeverScrollableScrollPhysics(),
// 'assets/images/habib-logo.png', padding: const EdgeInsets.only(top: 9),
// height: 90, shrinkWrap: true,
// width: 90, children: [
// ), getButton(3),
// SizedBox(height: 23), getButton(4),
// this.onlySMSBox == false getButton(2),
// ? Text( getButton(1),
// TranslationBase.of(context).verifyLoginWith, ],
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16), )
// ) ],
// : Text( )
// TranslationBase.of(context).verifyFingerprint2, // else
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16), // Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
// ), // Image.asset(
// SizedBox(height: 23), // 'assets/images/habib-logo.png',
// Text( // height: 90,
// TranslationBase.of(context).pleaseVerify, // width: 90,
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64), // ),
// ), // SizedBox(height: 23),
// GridView( // this.onlySMSBox == false
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9), // ? Text(
// physics: NeverScrollableScrollPhysics(), // TranslationBase.of(context).verifyLoginWith,
// padding: EdgeInsets.only(top: 9), // style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16),
// shrinkWrap: true, // )
// children: [ // : Text(
// if (onlySMSBox == false) getButton(3), // TranslationBase.of(context).verifyFingerprint2,
// if (onlySMSBox == false) getButton(2), // style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16),
// getButton(1), // ),
// getButton(4), // SizedBox(height: 23),
// ], // Text(
// ), // TranslationBase.of(context).pleaseVerify,
// ]), // style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64),
], // ),
), // GridView(
), // gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
12.height, // physics: NeverScrollableScrollPhysics(),
// padding: EdgeInsets.only(top: 9),
// shrinkWrap: true,
// children: [
// if (onlySMSBox == false) getButton(3),
// if (onlySMSBox == false) getButton(2),
// getButton(1),
// getButton(4),
// ],
// ),
// ]),
],
).expanded,
DefaultButton( DefaultButton(
LocaleKeys.useAnotherAccount.tr(), LocaleKeys.useAnotherAccount.tr(),
() => { () {
//Navigator.of(context).pushNamed(LOGIN_TYPE) Navigator.pushNamedAndRemoveUntil(context, AppRoutes.login, (Route<dynamic> route) => false,arguments: false);
}, },
).insideContainer, ).insideContainer,
], ],

@ -13,14 +13,12 @@ import 'package:mohem_flutter_app/classes/consts.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/dialogs/otp_dialog.dart'; import 'package:mohem_flutter_app/dialogs/otp_dialog.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/basic_member_information_model.dart'; import 'package:mohem_flutter_app/models/basic_member_information_model.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart';
import 'package:mohem_flutter_app/models/member_information_list_model.dart'; import 'package:mohem_flutter_app/models/member_information_list_model.dart';
import 'package:mohem_flutter_app/models/privilege_list_model.dart'; import 'package:mohem_flutter_app/models/privilege_list_model.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
class VerifyLoginScreen extends StatefulWidget { class VerifyLoginScreen extends StatefulWidget {
VerifyLoginScreen({Key? key}) : super(key: key); VerifyLoginScreen({Key? key}) : super(key: key);
@ -56,142 +54,23 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
), ),
// actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width], // actions: [Center(child: "Employee Digital ID".toText12(color: MyColors.textMixColor, isUnderLine: true).onPress(() {})), 21.width],
), ),
body: Column( body: ListView(
padding: const EdgeInsets.all(21),
physics: const BouncingScrollPhysics(),
children: [ children: [
Expanded( LocaleKeys.pleaseVerify.tr().toText16(),
child: ListView( GridView(
padding: const EdgeInsets.all(21), gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
physics: const BouncingScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
children: [ padding: const EdgeInsets.only(top: 9),
//12.height, shrinkWrap: true,
if (true) children: [
Column( getButton(3),
mainAxisSize: MainAxisSize.min, getButton(4),
crossAxisAlignment: CrossAxisAlignment.start, getButton(2),
children: [ getButton(1),
// LocaleKeys.welcomeBack.tr().toText12(), ],
// "Mohammad Hussain".toText24(isBold: true), )
// 10.height,
// LocaleKeys.wouldYouLikeToLoginWithCurrentUsername.tr().toText16(),
// Container(
// height: 72,
// margin: const EdgeInsets.only(top: 23, bottom: 23),
// alignment: Alignment.center,
// padding: EdgeInsets.only(left: 17, right: 12),
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),
// color: Colors.white,
// border: Border.all(
// color: Color(0xffefefef),
// width: 1,
// ),
// ),
// child: Column(
// mainAxisSize: MainAxisSize.min,
// children: [
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// LocaleKeys.lastLoginDetails.tr().toText16(),
// // Text(
// // user.editedOn != null
// // ? DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(user.editedOn))
// // : user.createdOn != null
// // ? DateUtil.getDayMonthYearDateFormatted(DateUtil.convertStringToDate(user.createdOn))
// // : '--',
// // style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.48),
// // ),
// ],
// ),
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// LocaleKeys.verificationType.tr().toText10(color: MyColors.grey57Color),
// Text(
// "SMS",
// // " " + getType(user.logInType, context),
// style: TextStyle(
// fontSize: 12,
// fontWeight: FontWeight.w600,
// color: Color(0xff2B353E),
// ),
// ),
// Expanded(child: SizedBox()),
// // Text(
// // user.editedOn != null
// // ? DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(user.editedOn), false)
// // : user.createdOn != null
// // ? DateUtil.formatDateToTimeLang(DateUtil.convertStringToDate(user.createdOn), false)
// // : '--',
// // style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, color: Color(0xff575757), letterSpacing: -0.48),
// // ),
// ],
// )
// ],
// ),
// ),
LocaleKeys.pleaseVerify.tr().toText16(),
GridView(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
physics: const NeverScrollableScrollPhysics(),
padding: const EdgeInsets.only(top: 9),
shrinkWrap: true,
children: [
getButton(3),
getButton(4),
getButton(2),
getButton(1),
],
)
],
)
// else
// Column(mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: <Widget>[
// Image.asset(
// 'assets/images/habib-logo.png',
// height: 90,
// width: 90,
// ),
// SizedBox(height: 23),
// this.onlySMSBox == false
// ? Text(
// TranslationBase.of(context).verifyLoginWith,
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16),
// )
// : Text(
// TranslationBase.of(context).verifyFingerprint2,
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.64, height: 25 / 16),
// ),
// SizedBox(height: 23),
// Text(
// TranslationBase.of(context).pleaseVerify,
// style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: Color(0xff2E303A), letterSpacing: -0.64),
// ),
// GridView(
// gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, crossAxisSpacing: 13, mainAxisSpacing: 9),
// physics: NeverScrollableScrollPhysics(),
// padding: EdgeInsets.only(top: 9),
// shrinkWrap: true,
// children: [
// if (onlySMSBox == false) getButton(3),
// if (onlySMSBox == false) getButton(2),
// getButton(1),
// getButton(4),
// ],
// ),
// ]),
],
),
),
12.height,
DefaultButton(
LocaleKeys.useAnotherAccount.tr(),
() => {
//Navigator.of(context).pushNamed(LOGIN_TYPE)
},
).insideContainer,
], ],
), ),
); );
@ -686,8 +565,8 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
print(element.serviceName.toString() + " " + element.previlege.toString()); // Check availability print(element.serviceName.toString() + " " + element.previlege.toString()); // Check availability
}); });
PrivilegeListModel.saveToPrefs(genericResponseModel.privilegeList ?? []); PrivilegeListModel.saveToPrefs(genericResponseModel.privilegeList ?? []);
AppState().mohemmWifiSSID = genericResponseModel.mohemmWifiSSID; AppState().setMohemmWifiSSID = genericResponseModel.mohemmWifiSSID;
AppState().mohemmWifiPassword = genericResponseModel.mohemmWifiPassword; AppState().setMohemmWifiPassword = genericResponseModel.mohemmWifiPassword;
Utils.saveStringFromPrefs(SharedPrefsConsts.username, AppState().getUserName!); Utils.saveStringFromPrefs(SharedPrefsConsts.username, AppState().getUserName!);
Utils.saveStringFromPrefs(SharedPrefsConsts.password, AppState().password!); Utils.saveStringFromPrefs(SharedPrefsConsts.password, AppState().password!);
Utils.saveStringFromPrefs(SharedPrefsConsts.mohemmWifiSSID, genericResponseModel.mohemmWifiSSID!); Utils.saveStringFromPrefs(SharedPrefsConsts.mohemmWifiSSID, genericResponseModel.mohemmWifiSSID!);
@ -707,7 +586,6 @@ class _VerifyLoginScreenState extends State<VerifyLoginScreen> {
}, },
).displayDialog(context); ).displayDialog(context);
} catch (ex) { } catch (ex) {
print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);
} }

@ -44,8 +44,16 @@ class _BasicDetailsState extends State<BasicDetails> {
super.initState(); super.initState();
memberInformationList = AppState().memberInformationList!; memberInformationList = AppState().memberInformationList!;
List<GetMenuEntriesList> menuData = Provider.of<DashboardProviderModel>(context, listen: false).getMenuEntriesList!; List<GetMenuEntriesList> menuData = Provider.of<DashboardProviderModel>(context, listen: false).getMenuEntriesList!;
for( int i=0;i<menuData.length;i++) {
menuData[i].icon == "";
print(menuData[i].requestType);
}
var filterList = menuData.where((e) => e.requestType == 'BASIC_DETAILS').toList();
if(filterList.isNotEmpty) {
menuEntries = filterList.first;
}
menuEntries = menuData.where((e) => e.requestType == 'BASIC_DETAILS').toList()[0];
getEmployeeBasicDetails(); getEmployeeBasicDetails();
} }

@ -44,8 +44,16 @@ class _ContactDetailsState extends State<ContactDetails> {
super.initState(); super.initState();
List<GetMenuEntriesList> menuData = Provider.of<DashboardProviderModel>(context, listen: false).getMenuEntriesList!; List<GetMenuEntriesList> menuData = Provider.of<DashboardProviderModel>(context, listen: false).getMenuEntriesList!;
menuEntriesPhone = menuData.where((GetMenuEntriesList e) => e.requestType == 'PHONE_NUMBERS').toList()[0]; var filterList = menuData.where((GetMenuEntriesList e) => e.requestType == 'PHONE_NUMBERS').toList();
menuEntriesAddress = menuData.where((GetMenuEntriesList e) => e.requestType == 'ADDRESS').toList()[0];
if (filterList.isNotEmpty) {
menuEntriesPhone = filterList.first;
}
filterList = menuData.where((GetMenuEntriesList e) => e.requestType == 'ADDRESS').toList();
if (filterList.isNotEmpty) {
menuEntriesAddress = filterList.first;
}
getEmployeePhones(); getEmployeePhones();
} }

@ -30,7 +30,7 @@ class ProfileInFo extends StatelessWidget {
children: [ children: [
16.height, 16.height,
memberInfo.eMPLOYEENAME!.toText22(), memberInfo.eMPLOYEENAME!.toText22(),
("${memberInfo.eMPLOYEENUMBER!} | ${memberInfo.jOBNAME!}").toText13(color: MyColors.grey80Color), ("${memberInfo.eMPLOYEENUMBER!} | ${memberInfo.getPositionName()}").toText13(color: MyColors.grey80Color),
memberInfo.eMPLOYEEEMAILADDRESS!.toText13(), memberInfo.eMPLOYEEEMAILADDRESS!.toText13(),
12.height, 12.height,
const Divider(height: 8, thickness: 8, color: MyColors.lightGreyEFColor), const Divider(height: 8, thickness: 8, color: MyColors.lightGreyEFColor),

@ -50,56 +50,54 @@ class _MowadhafhiHomeState extends State<MowadhafhiHome> {
context, context,
title: LocaleKeys.mowadhafhiRequest.tr(), title: LocaleKeys.mowadhafhiRequest.tr(),
), ),
body: getTicketsByEmployeeList == null body: Column(
? const SizedBox() children: [
: (getTicketsByEmployeeList!.isEmpty) (getTicketsByEmployeeList == null
? const SizedBox()
: (getTicketsByEmployeeList!.isEmpty)
? Utils.getNoDataWidget(context) ? Utils.getNoDataWidget(context)
: Column( : ListView.separated(
crossAxisAlignment: CrossAxisAlignment.start, physics: const BouncingScrollPhysics(),
mainAxisSize: MainAxisSize.min, padding: const EdgeInsets.all(21),
children: [ itemBuilder: (BuildContext context, int index) {
ListView.separated( return InkWell(
physics: const BouncingScrollPhysics(), onTap: () {
padding: const EdgeInsets.all(21), Navigator.pushNamed(context, AppRoutes.mowadhafhiDetails, arguments: getTicketsByEmployeeList![index].ticketId);
itemBuilder: (BuildContext context, int index) { },
return InkWell( child: Column(
onTap: () { crossAxisAlignment: CrossAxisAlignment.start,
Navigator.pushNamed(context, AppRoutes.mowadhafhiDetails, arguments: getTicketsByEmployeeList![index].ticketId); children: [
}, Row(
child: Column( crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, children: [
children: [ getTicketsByEmployeeList![index].ticketTypeName!.toText14(color: MyColors.darkTextColor).expanded,
Row( getTicketsByEmployeeList![index].created!.split(" ")[0].toText12(color: MyColors.grey70Color),
crossAxisAlignment: CrossAxisAlignment.start, ],
children: [ ),
getTicketsByEmployeeList![index].ticketTypeName!.toText14(color: MyColors.darkTextColor).expanded, getTicketsByEmployeeList![index].description!.toText12(color: MyColors.grey57Color),
getTicketsByEmployeeList![index].created!.split(" ")[0].toText12(color: MyColors.grey70Color), Row(
], mainAxisAlignment: MainAxisAlignment.spaceBetween,
), children: [
getTicketsByEmployeeList![index].description!.toText12(color: MyColors.grey57Color), getTicketsByEmployeeList![index].ticketStatusInternalName!.toText14(color: MyColors.textMixColor),
Row( SvgPicture.asset(
mainAxisAlignment: MainAxisAlignment.spaceBetween, "assets/images/arrow_next.svg",
children: [ color: MyColors.darkIconColor,
getTicketsByEmployeeList![index].ticketStatusInternalName!.toText14(color: MyColors.textMixColor), )
SvgPicture.asset( ],
"assets/images/arrow_next.svg", ),
color: MyColors.darkIconColor, ],
) ).objectContainerView(),
], );
), },
], separatorBuilder: (BuildContext context, int index) => 12.height,
).objectContainerView(), itemCount: getTicketsByEmployeeList!.length))
); .expanded,
}, DefaultButton(LocaleKeys.createRequest.tr(), () async {
separatorBuilder: (BuildContext context, int index) => 12.height, await Navigator.pushNamed(context, AppRoutes.mowadhafhiHRRequest);
itemCount: getTicketsByEmployeeList!.length) getOpenTickets();
.expanded, }).insideContainer
DefaultButton(LocaleKeys.createRequest.tr(), () async { ],
await Navigator.pushNamed(context, AppRoutes.mowadhafhiHRRequest); ),
getOpenTickets();
}).insideContainer
],
),
); );
} }
} }

@ -5,7 +5,7 @@ import 'package:mohem_flutter_app/extensions/int_extensions.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeButton = false, bool showNotificationButton = false, bool showMemberButton = false}) { AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeButton = true, bool showNotificationButton = false, bool showMemberButton = false}) {
return AppBar( return AppBar(
leadingWidth: 0, leadingWidth: 0,
// leading: GestureDetector( // leading: GestureDetector(
@ -32,11 +32,7 @@ AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeB
if (showHomeButton) if (showHomeButton)
IconButton( IconButton(
onPressed: () { onPressed: () {
// Navigator.pushAndRemoveUntil( Navigator.popUntil(context, ModalRoute.withName(AppRoutes.dashboard));
// context,
// MaterialPageRoute(builder: (context) => LandingPage()),
// (Route<dynamic> route) => false,
// );
}, },
icon: const Icon(Icons.home, color: MyColors.darkIconColor), icon: const Icon(Icons.home, color: MyColors.darkIconColor),
), ),
@ -47,7 +43,7 @@ AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeB
}, },
icon: const Icon(Icons.notifications, color: MyColors.textMixColor), icon: const Icon(Icons.notifications, color: MyColors.textMixColor),
), ),
if(showMemberButton) if (showMemberButton)
IconButton( IconButton(
onPressed: () { onPressed: () {
Navigator.pushNamed(context, AppRoutes.subordinateLeave); Navigator.pushNamed(context, AppRoutes.subordinateLeave);

@ -1,9 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
void showMDialog( void showMDialog(context, {Widget? child}) async {
context, {
Widget? child,
}) async {
return showDialog( return showDialog(
context: context, context: context,
barrierDismissible: true, barrierDismissible: true,

@ -155,10 +155,11 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
print("wifi not location enabled"); print("wifi not location enabled");
} }
bool v = await WiFiForIoTPlugin.connect(AppState().mohemmWifiSSID ?? "", password: AppState().mohemmWifiPassword ?? "", joinOnce: true, security: NetworkSecurity.WPA, withInternet: false); bool isConnected =
if (v) { await WiFiForIoTPlugin.connect(AppState().getMohemmWifiSSID ?? "", password: AppState().getMohemmWifiPassword ?? "", joinOnce: true, security: NetworkSecurity.WPA, withInternet: false);
if (isConnected) {
await WiFiForIoTPlugin.forceWifiUsage(true); await WiFiForIoTPlugin.forceWifiUsage(true);
print("connected");
Utils.showLoading(context); Utils.showLoading(context);
try { try {
GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 3, nfcValue: "", isGpsRequired: isWifiLocationEnabled, lat: lat, long: lng); GenericResponseModel? g = await DashboardApiClient().markAttendance(pointType: 3, nfcValue: "", isGpsRequired: isWifiLocationEnabled, lat: lat, long: lng);
@ -166,7 +167,6 @@ class _MarkAttendanceWidgetState extends State<MarkAttendanceWidget> {
Utils.hideLoading(context); Utils.hideLoading(context);
await closeWifiRequest(); await closeWifiRequest();
} catch (ex) { } catch (ex) {
print(ex);
await closeWifiRequest(); await closeWifiRequest();
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, (msg) { Utils.handleException(ex, context, (msg) {

Loading…
Cancel
Save