diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 8022814..1518147 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -2,7 +2,7 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.mohem_flutter_app">
-
+
diff --git a/android/build.gradle b/android/build.gradle
index abef75b..2c90dbd 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext.kotlin_version = '1.8.20'
+ ext.kotlin_version = '1.9.10'
repositories {
google()
mavenCentral()
@@ -11,6 +11,7 @@ buildscript {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.8'
classpath 'com.huawei.agconnect:agcp:1.8.0.300'
+ classpath "com.android.tools:r8:8.2.33"
}
}
diff --git a/android/gradle.properties b/android/gradle.properties
index 2260f45..54e1a43 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -1,3 +1,4 @@
-org.gradle.jvmargs=-Xmx1836M
+org.gradle.jvmargs=-Xmx2048M
android.useAndroidX=true
android.enableJetifier=true
+org.gradle.java.home=/Users/user/Library/Java/JavaVirtualMachines/jbr-17.0.12/Contents/Home/
\ No newline at end of file
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 2f8758c..1e830b7 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Fri Jun 23 08:50:38 CEST 2017
+#Thu Mar 06 11:40:30 AST 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
\ No newline at end of file
diff --git a/assets/icons/itg/alert.svg b/assets/icons/itg/alert.svg
new file mode 100644
index 0000000..6f0f0ca
--- /dev/null
+++ b/assets/icons/itg/alert.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/itg/calendar-remove.svg b/assets/icons/itg/calendar-remove.svg
new file mode 100644
index 0000000..965a40c
--- /dev/null
+++ b/assets/icons/itg/calendar-remove.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/itg/calendar.svg b/assets/icons/itg/calendar.svg
new file mode 100644
index 0000000..2ac497c
--- /dev/null
+++ b/assets/icons/itg/calendar.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/itg/coming-soon.svg b/assets/icons/itg/coming-soon.svg
new file mode 100644
index 0000000..52d5ffc
--- /dev/null
+++ b/assets/icons/itg/coming-soon.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/itg/finger-print-remove.svg b/assets/icons/itg/finger-print-remove.svg
new file mode 100644
index 0000000..bc6fe65
--- /dev/null
+++ b/assets/icons/itg/finger-print-remove.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/itg/knight-shield.svg b/assets/icons/itg/knight-shield.svg
new file mode 100644
index 0000000..e0bf799
--- /dev/null
+++ b/assets/icons/itg/knight-shield.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/itg/money-not-found.svg b/assets/icons/itg/money-not-found.svg
new file mode 100644
index 0000000..01121a6
--- /dev/null
+++ b/assets/icons/itg/money-not-found.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/icons/itg/stethoscope.svg b/assets/icons/itg/stethoscope.svg
new file mode 100644
index 0000000..31c4638
--- /dev/null
+++ b/assets/icons/itg/stethoscope.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/itg/time-quarter-pass.svg b/assets/icons/itg/time-quarter-pass.svg
new file mode 100644
index 0000000..5a8a758
--- /dev/null
+++ b/assets/icons/itg/time-quarter-pass.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/icons/itg/time-quarter.svg b/assets/icons/itg/time-quarter.svg
new file mode 100644
index 0000000..7eaf056
--- /dev/null
+++ b/assets/icons/itg/time-quarter.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/images/biometrics.svg b/assets/images/biometrics.svg
new file mode 100644
index 0000000..5d61575
--- /dev/null
+++ b/assets/images/biometrics.svg
@@ -0,0 +1,33 @@
+
diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist
index 9625e10..7c56964 100644
--- a/ios/Flutter/AppFrameworkInfo.plist
+++ b/ios/Flutter/AppFrameworkInfo.plist
@@ -21,6 +21,6 @@
CFBundleVersion
1.0
MinimumOSVersion
- 11.0
+ 12.0
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 12dc0e6..a1fa803 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -144,6 +144,7 @@
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
C4CFBC4C5CAC00182015ACD5 /* [CP] Embed Pods Frameworks */,
+ EF29CE25BB57F5AA48CE1136 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -160,7 +161,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 1300;
+ LastUpgradeCheck = 1510;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@@ -232,6 +233,7 @@
files = (
);
inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
);
name = "Thin Binary";
outputPaths = (
@@ -272,6 +274,23 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
+ EF29CE25BB57F5AA48CE1136 /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@@ -362,6 +381,7 @@
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
@@ -500,6 +520,7 @@
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
@@ -530,6 +551,7 @@
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
diff --git a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
index c87d15a..5e31d3d 100644
--- a/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
+++ b/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -1,6 +1,6 @@
postParams = {};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData.getAttendanceTrackingList;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData.getAttendanceTrackingList;
+ },
+ url,
+ postParams,
+ );
}
Future getOpenNotifications() async {
String url = "${ApiConsts.erpRest}GET_OPEN_NOTIFICATIONS";
Map postParams = {};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
Future getCOCNotifications() async {
String url = "${ApiConsts.cocRest}Mohemm_ITG_ReviewerAdmin_Pending_Tasks";
Map postParams = {"Date": DateUtil.getISODateFormat(DateTime.now()), "EmployeeNumber": AppState().memberInformationList?.eMPLOYEENUMBER};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
Future getItgFormsPendingTask() async {
String url = "${ApiConsts.cocRest}ITGFormsPendingTasks";
Map postParams = {};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- ItgFormsModel responseData = ItgFormsModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ ItgFormsModel responseData = ItgFormsModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
Future> getAccrualBalances(String effectiveDate, {String? empID}) async {
@@ -67,20 +85,28 @@ class DashboardApiClient {
Map postParams = {"P_EFFECTIVE_DATE": effectiveDate};
postParams.addAll(AppState().postParamsJson);
if (empID != null) postParams["P_SELECTED_EMPLOYEE_NUMBER"] = empID;
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData.getAccrualBalancesList ?? [];
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData.getAccrualBalancesList ?? [];
+ },
+ url,
+ postParams,
+ );
}
Future getOpenMissingSwipes() async {
String url = "${ApiConsts.erpRest}GET_OPEN_MISSING_SWIPES";
Map postParams = {};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
//Menus List
@@ -88,10 +114,14 @@ class DashboardApiClient {
String url = "${ApiConsts.erpRest}GET_MENU";
Map postParams = {};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData.listMenu ?? [];
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData.listMenu ?? [];
+ },
+ url,
+ postParams,
+ );
}
//GET_MENU_ENTRIES
@@ -99,24 +129,40 @@ class DashboardApiClient {
String url = "${ApiConsts.erpRest}GET_MENU_ENTRIES";
Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E"};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
Future getEventActivity() async {
String url = "${ApiConsts.erpRest}Get_EventActivity";
Map postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E"};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
//Mark Attendance
- Future markAttendance({String lat = "0", String? long = "0", required int pointType, String nfcValue = "", bool isGpsRequired = false, String QRValue = "", String payrollCode = ""}) async {
+ Future markAttendance({
+ String lat = "0",
+ String? long = "0",
+ required int pointType,
+ String nfcValue = "",
+ bool isGpsRequired = false,
+ String QRValue = "",
+ String payrollCode = "",
+ }) async {
String url = "${ApiConsts.swpRest}AuthenticateAndSwipeUserSupportNFC";
var uuid = Uuid();
// Generate a v4 (random) id
@@ -131,13 +177,17 @@ class DashboardApiClient {
"NFCValue": nfcValue,
"WifiValue": pointType == 3 ? "100" : "",
"IsGpsRequired": isGpsRequired,
- "PayrollCodeStr": AppState().postParamsObject?.payrollCodeStr.toString() ?? ""
+ "PayrollCodeStr": AppState().postParamsObject?.payrollCodeStr.toString() ?? "",
};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
//Mark Fake Location
@@ -156,10 +206,14 @@ class DashboardApiClient {
"EmployeeID": AppState().memberInformationList!.eMPLOYEENUMBER,
};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
//Check ITG Type
@@ -169,15 +223,19 @@ class DashboardApiClient {
Map postParams = {
"EmployeeNumber": AppState().getUserName,
"ItgEnableAt": "After Service Submission", //Mobile Id
- "ItgServiceName": "Login"
+ "ItgServiceName": "Login",
};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- GenericResponseModel responseData = GenericResponseModel.fromJson(json);
- MohemmItgResponseItem res = MohemmItgResponseItem.fromJson(jsonDecode(responseData.mohemmITGResponseItem ?? ""));
- // var jsonDecodedData = jsonDecode(jsonDecode(responseData.mohemmITGResponseItem!)['result']['data']);
- return res;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GenericResponseModel responseData = GenericResponseModel.fromJson(json);
+ MohemmItgResponseItem res = MohemmItgResponseItem.fromJson(jsonDecode(responseData.mohemmITGResponseItem ?? ""));
+ // var jsonDecodedData = jsonDecode(jsonDecode(responseData.mohemmITGResponseItem!)['result']['data']);
+ return res;
+ },
+ url,
+ postParams,
+ );
}
//Submit ITG
@@ -189,13 +247,17 @@ class DashboardApiClient {
"ItgComments": comment,
"ItgNotificationMasterId": masterId,
"ItgQuestionResponses": itgList,
- "ItgSurveyId": serviceId
+ "ItgSurveyId": serviceId,
};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- ItgMainRes responseData = ItgMainRes.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ ItgMainRes responseData = ItgMainRes.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
Future getAdvertisementDetail(String masterID) async {
@@ -206,10 +268,14 @@ class DashboardApiClient {
"ItgNotificationMasterId": masterID, //Mobile Id
};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- ItgMainRes responseData = ItgMainRes.fromJson(json);
- return responseData;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ ItgMainRes responseData = ItgMainRes.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
}
Future setAdvertisementViewed(String masterID, int advertisementId, String? ackValue) async {
@@ -223,9 +289,27 @@ class DashboardApiClient {
// "ItgAdvertisement": {"ItgAdvertisementId": advertisementId, "ItgAcknowledgment": ackValue} //Mobile Id
};
postParams.addAll(AppState().postParamsJson);
- return await ApiClient().postJsonForObject((json) {
- // ItgMainRes responseData = ItgMainRes.fromJson(json);
- return json;
- }, url, postParams);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ // ItgMainRes responseData = ItgMainRes.fromJson(json);
+ return json;
+ },
+ url,
+ postParams,
+ );
}
+
+ // Future getItgTimeCardDetails() async {
+ // String url = "${ApiConsts.cocRest}ITG_TimeCard_Get";
+ // Map postParams = {};
+ // postParams.addAll(AppState().postParamsJson);
+ // return await ApiClient().postJsonForObject(
+ // (json) {
+ // ItgTimeCardModel responseData = ItgTimeCardModel.fromJson(json);
+ // return responseData;
+ // },
+ // url,
+ // postParams,
+ // );
+ // }
}
diff --git a/lib/api/my_attendance_api_client.dart b/lib/api/my_attendance_api_client.dart
index 37bf9e8..3978c2d 100644
--- a/lib/api/my_attendance_api_client.dart
+++ b/lib/api/my_attendance_api_client.dart
@@ -91,7 +91,31 @@ class MyAttendanceApiClient {
return responseData.getValueSetValuesList ?? [];
}, url, postParams);
}
-
+ Future> getValueSetValuesSearch(String pSegmentName, String pDescFlexContextCode, String pDescFlexName, List