From 9764747e0277e25c0f408288c948eb7fd3c44416 Mon Sep 17 00:00:00 2001 From: SurendarSuri30 Date: Sat, 15 Nov 2025 17:22:00 +0530 Subject: [PATCH] backup changes and email and mobile number same --- .env.production | 0 .env.test | 0 .env.uat | 0 .gitignore | 0 .metadata | 0 README.md | 0 analysis_options.yaml | 0 android/.gitignore | 0 android/app/build.gradle | 0 android/app/google-services.json | 0 android/app/src/debug/AndroidManifest.xml | 0 android/app/src/main/AndroidManifest.xml | 0 .../com/example/nhancepolicy/MainActivity.kt | 0 .../res/drawable-v21/launch_background.xml | 0 .../main/res/drawable/launch_background.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../app/src/main/res/values-night/styles.xml | 0 android/app/src/main/res/values/styles.xml | 0 android/app/src/profile/AndroidManifest.xml | 0 android/build.gradle | 0 android/gradle.properties | 0 .../gradle/wrapper/gradle-wrapper.properties | 0 android/settings.gradle | 0 assets/Group_3.png | Bin assets/Nhance-Logo-Final 1.png | Bin assets/Solid_gray.png | Bin assets/Template_File.xlsx | Bin 7622 -> 89706 bytes assets/Vector.png | Bin assets/hrLogin.jpg | Bin assets/login_web.jpg | Bin assets/mobileViewLogo.png | Bin assets/navbarLogo.png | Bin assets/nhance-loader.gif | Bin assets/nhance_client_logo.png | Bin assets/policy.png | Bin build_web_test.sh | 0 build_web_uat.sh | 0 ios/.gitignore | 0 ios/Flutter/AppFrameworkInfo.plist | 0 ios/Flutter/Debug.xcconfig | 0 ios/Flutter/Release.xcconfig | 0 ios/Runner/AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../Icon-App-1024x1024@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin .../Icon-App-83.5x83.5@2x.png | Bin .../LaunchImage.imageset/Contents.json | 0 .../LaunchImage.imageset/LaunchImage.png | Bin .../LaunchImage.imageset/LaunchImage@2x.png | Bin .../LaunchImage.imageset/LaunchImage@3x.png | Bin .../LaunchImage.imageset/README.md | 0 ...storyboard => LaunchScreen.storyboard.xml} | 0 .../{Main.storyboard => Main.storyboard.xml} | 0 ios/Runner/Info.plist | 0 ios/Runner/Runner-Bridging-Header.h | 0 ios/RunnerTests/RunnerTests.swift | 0 lib.zip | Bin lib/addons.dart | 0 lib/branch/branch_selection_page.dart | 2 +- lib/customAppBar/customAppBar.dart | 0 lib/customAppBar/customAppBarChatbot.dart | 0 lib/customAppBar/customFooter.dart | 0 lib/customAppBar/enrollmentAppBar.dart | 0 lib/customAppBar/toastHelper.dart | 0 lib/email_verify.dart | 19 +- lib/empDetails.dart | 0 lib/empReview.dart | 0 lib/excel_verification.dart | 24 + lib/firebase-config.dart | 0 lib/home.dart | 0 lib/hrDashboard.dart | 434 +++++++++++------- lib/hrHome.dart | 0 lib/hrLogin.dart | 316 ++++++------- lib/hrPolicyDetails.dart | 23 +- lib/hrVerify.dart | 0 lib/main.dart | 0 lib/models/environment.dart | 0 lib/models/platform_helper_mobile.dart | 0 lib/models/platform_helper_other.dart | 0 lib/oldPolicy.dart | 0 lib/phone.dart | 0 lib/responsive.dart | 0 lib/service/api_service.dart | 30 ++ .../hrDashboardTabs/activePolicies.dart | 2 +- lib/service/hrDashboardTabs/cd.dart | 2 +- lib/service/hrDashboardTabs/claims.dart | 5 +- .../hrDashboardTabs/preEnrollment.dart | 10 +- lib/service/token_storage_service.dart | 4 + lib/verify.dart | 0 linux/.gitignore | 0 linux/CMakeLists.txt | 0 linux/flutter/CMakeLists.txt | 0 linux/flutter/generated_plugin_registrant.cc | 0 linux/flutter/generated_plugin_registrant.h | 0 linux/flutter/generated_plugins.cmake | 0 linux/main.cc | 0 linux/my_application.cc | 0 linux/my_application.h | 0 macos/.gitignore | 0 macos/Flutter/Flutter-Debug.xcconfig | 0 macos/Flutter/Flutter-Release.xcconfig | 0 macos/Flutter/GeneratedPluginRegistrant.swift | 2 + macos/Podfile | 2 +- macos/Runner/AppDelegate.swift | 6 +- .../AppIcon.appiconset/Contents.json | 0 .../AppIcon.appiconset/app_icon_1024.png | Bin .../AppIcon.appiconset/app_icon_128.png | Bin .../AppIcon.appiconset/app_icon_16.png | Bin .../AppIcon.appiconset/app_icon_256.png | Bin .../AppIcon.appiconset/app_icon_32.png | Bin .../AppIcon.appiconset/app_icon_512.png | Bin .../AppIcon.appiconset/app_icon_64.png | Bin macos/Runner/Base.lproj/MainMenu.xib | 0 macos/Runner/Configs/AppInfo.xcconfig | 0 macos/Runner/Configs/Debug.xcconfig | 0 macos/Runner/Configs/Release.xcconfig | 0 macos/Runner/Configs/Warnings.xcconfig | 0 ...tlements => DebugProfile.entitlements.xml} | 0 macos/Runner/Info.plist | 0 macos/Runner/MainFlutterWindow.swift | 0 ....entitlements => Release.entitlements.xml} | 0 macos/RunnerTests/RunnerTests.swift | 0 pubspec.yaml | 0 test/widget_test.dart | 0 web/assets/Sample.xlsx | Bin web/assets/nhance-loader.gif | Bin web/favicon.png | Bin web/icons/Icon-192.png | Bin web/icons/Icon-512.png | Bin web/icons/Icon-maskable-192.png | Bin web/icons/Icon-maskable-512.png | Bin web/index.html | 0 web/manifest.json | 0 windows/.gitignore | 0 windows/CMakeLists.txt | 0 windows/flutter/CMakeLists.txt | 0 .../flutter/generated_plugin_registrant.cc | 0 windows/flutter/generated_plugin_registrant.h | 0 windows/flutter/generated_plugins.cmake | 0 windows/runner/CMakeLists.txt | 0 windows/runner/Runner.rc | 0 windows/runner/flutter_window.cpp | 0 windows/runner/flutter_window.h | 0 windows/runner/main.cpp | 0 windows/runner/resource.h | 0 windows/runner/resources/app_icon.ico | Bin ...r.exe.manifest => runner.exe.manifest.xml} | 0 windows/runner/utils.cpp | 0 windows/runner/utils.h | 0 windows/runner/win32_window.cpp | 0 windows/runner/win32_window.h | 0 167 files changed, 525 insertions(+), 356 deletions(-) mode change 100755 => 100644 .env.production mode change 100755 => 100644 .env.test mode change 100755 => 100644 .env.uat mode change 100755 => 100644 .gitignore mode change 100755 => 100644 .metadata mode change 100755 => 100644 README.md mode change 100755 => 100644 analysis_options.yaml mode change 100755 => 100644 android/.gitignore mode change 100755 => 100644 android/app/build.gradle mode change 100755 => 100644 android/app/google-services.json mode change 100755 => 100644 android/app/src/debug/AndroidManifest.xml mode change 100755 => 100644 android/app/src/main/AndroidManifest.xml mode change 100755 => 100644 android/app/src/main/kotlin/com/example/nhancepolicy/MainActivity.kt mode change 100755 => 100644 android/app/src/main/res/drawable-v21/launch_background.xml mode change 100755 => 100644 android/app/src/main/res/drawable/launch_background.xml mode change 100755 => 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png mode change 100755 => 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png mode change 100755 => 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png mode change 100755 => 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png mode change 100755 => 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png mode change 100755 => 100644 android/app/src/main/res/values-night/styles.xml mode change 100755 => 100644 android/app/src/main/res/values/styles.xml mode change 100755 => 100644 android/app/src/profile/AndroidManifest.xml mode change 100755 => 100644 android/build.gradle mode change 100755 => 100644 android/gradle.properties mode change 100755 => 100644 android/gradle/wrapper/gradle-wrapper.properties mode change 100755 => 100644 android/settings.gradle mode change 100755 => 100644 assets/Group_3.png mode change 100755 => 100644 assets/Nhance-Logo-Final 1.png mode change 100755 => 100644 assets/Solid_gray.png mode change 100755 => 100644 assets/Template_File.xlsx mode change 100755 => 100644 assets/Vector.png mode change 100755 => 100644 assets/hrLogin.jpg mode change 100755 => 100644 assets/login_web.jpg mode change 100755 => 100644 assets/mobileViewLogo.png mode change 100755 => 100644 assets/navbarLogo.png mode change 100755 => 100644 assets/nhance-loader.gif mode change 100755 => 100644 assets/nhance_client_logo.png mode change 100755 => 100644 assets/policy.png mode change 100755 => 100644 build_web_test.sh mode change 100755 => 100644 build_web_uat.sh mode change 100755 => 100644 ios/.gitignore mode change 100755 => 100644 ios/Flutter/AppFrameworkInfo.plist mode change 100755 => 100644 ios/Flutter/Debug.xcconfig mode change 100755 => 100644 ios/Flutter/Release.xcconfig mode change 100755 => 100644 ios/Runner/AppDelegate.swift mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json mode change 100755 => 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png mode change 100755 => 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md rename ios/Runner/Base.lproj/{LaunchScreen.storyboard => LaunchScreen.storyboard.xml} (100%) mode change 100755 => 100644 rename ios/Runner/Base.lproj/{Main.storyboard => Main.storyboard.xml} (100%) mode change 100755 => 100644 mode change 100755 => 100644 ios/Runner/Info.plist mode change 100755 => 100644 ios/Runner/Runner-Bridging-Header.h mode change 100755 => 100644 ios/RunnerTests/RunnerTests.swift mode change 100755 => 100644 lib.zip mode change 100755 => 100644 lib/addons.dart mode change 100755 => 100644 lib/customAppBar/customAppBar.dart mode change 100755 => 100644 lib/customAppBar/customAppBarChatbot.dart mode change 100755 => 100644 lib/customAppBar/customFooter.dart mode change 100755 => 100644 lib/customAppBar/enrollmentAppBar.dart mode change 100755 => 100644 lib/customAppBar/toastHelper.dart mode change 100755 => 100644 lib/empDetails.dart mode change 100755 => 100644 lib/empReview.dart mode change 100755 => 100644 lib/excel_verification.dart mode change 100755 => 100644 lib/firebase-config.dart mode change 100755 => 100644 lib/home.dart mode change 100755 => 100644 lib/hrDashboard.dart mode change 100755 => 100644 lib/hrHome.dart mode change 100755 => 100644 lib/hrLogin.dart mode change 100755 => 100644 lib/hrPolicyDetails.dart mode change 100755 => 100644 lib/hrVerify.dart mode change 100755 => 100644 lib/main.dart mode change 100755 => 100644 lib/models/environment.dart mode change 100755 => 100644 lib/models/platform_helper_mobile.dart mode change 100755 => 100644 lib/models/platform_helper_other.dart mode change 100755 => 100644 lib/oldPolicy.dart mode change 100755 => 100644 lib/phone.dart mode change 100755 => 100644 lib/responsive.dart mode change 100755 => 100644 lib/service/api_service.dart mode change 100755 => 100644 lib/verify.dart mode change 100755 => 100644 linux/.gitignore mode change 100755 => 100644 linux/CMakeLists.txt mode change 100755 => 100644 linux/flutter/CMakeLists.txt mode change 100755 => 100644 linux/flutter/generated_plugin_registrant.cc mode change 100755 => 100644 linux/flutter/generated_plugin_registrant.h mode change 100755 => 100644 linux/flutter/generated_plugins.cmake mode change 100755 => 100644 linux/main.cc mode change 100755 => 100644 linux/my_application.cc mode change 100755 => 100644 linux/my_application.h mode change 100755 => 100644 macos/.gitignore mode change 100755 => 100644 macos/Flutter/Flutter-Debug.xcconfig mode change 100755 => 100644 macos/Flutter/Flutter-Release.xcconfig mode change 100755 => 100644 macos/Flutter/GeneratedPluginRegistrant.swift mode change 100755 => 100644 macos/Runner/AppDelegate.swift mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png mode change 100755 => 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png mode change 100755 => 100644 macos/Runner/Base.lproj/MainMenu.xib mode change 100755 => 100644 macos/Runner/Configs/AppInfo.xcconfig mode change 100755 => 100644 macos/Runner/Configs/Debug.xcconfig mode change 100755 => 100644 macos/Runner/Configs/Release.xcconfig mode change 100755 => 100644 macos/Runner/Configs/Warnings.xcconfig rename macos/Runner/{DebugProfile.entitlements => DebugProfile.entitlements.xml} (100%) mode change 100755 => 100644 mode change 100755 => 100644 macos/Runner/Info.plist mode change 100755 => 100644 macos/Runner/MainFlutterWindow.swift rename macos/Runner/{Release.entitlements => Release.entitlements.xml} (100%) mode change 100755 => 100644 mode change 100755 => 100644 macos/RunnerTests/RunnerTests.swift mode change 100755 => 100644 pubspec.yaml mode change 100755 => 100644 test/widget_test.dart mode change 100755 => 100644 web/assets/Sample.xlsx mode change 100755 => 100644 web/assets/nhance-loader.gif mode change 100755 => 100644 web/favicon.png mode change 100755 => 100644 web/icons/Icon-192.png mode change 100755 => 100644 web/icons/Icon-512.png mode change 100755 => 100644 web/icons/Icon-maskable-192.png mode change 100755 => 100644 web/icons/Icon-maskable-512.png mode change 100755 => 100644 web/index.html mode change 100755 => 100644 web/manifest.json mode change 100755 => 100644 windows/.gitignore mode change 100755 => 100644 windows/CMakeLists.txt mode change 100755 => 100644 windows/flutter/CMakeLists.txt mode change 100755 => 100644 windows/flutter/generated_plugin_registrant.cc mode change 100755 => 100644 windows/flutter/generated_plugin_registrant.h mode change 100755 => 100644 windows/flutter/generated_plugins.cmake mode change 100755 => 100644 windows/runner/CMakeLists.txt mode change 100755 => 100644 windows/runner/Runner.rc mode change 100755 => 100644 windows/runner/flutter_window.cpp mode change 100755 => 100644 windows/runner/flutter_window.h mode change 100755 => 100644 windows/runner/main.cpp mode change 100755 => 100644 windows/runner/resource.h mode change 100755 => 100644 windows/runner/resources/app_icon.ico rename windows/runner/{runner.exe.manifest => runner.exe.manifest.xml} (100%) mode change 100755 => 100644 mode change 100755 => 100644 windows/runner/utils.cpp mode change 100755 => 100644 windows/runner/utils.h mode change 100755 => 100644 windows/runner/win32_window.cpp mode change 100755 => 100644 windows/runner/win32_window.h diff --git a/.env.production b/.env.production old mode 100755 new mode 100644 diff --git a/.env.test b/.env.test old mode 100755 new mode 100644 diff --git a/.env.uat b/.env.uat old mode 100755 new mode 100644 diff --git a/.gitignore b/.gitignore old mode 100755 new mode 100644 diff --git a/.metadata b/.metadata old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/analysis_options.yaml b/analysis_options.yaml old mode 100755 new mode 100644 diff --git a/android/.gitignore b/android/.gitignore old mode 100755 new mode 100644 diff --git a/android/app/build.gradle b/android/app/build.gradle old mode 100755 new mode 100644 diff --git a/android/app/google-services.json b/android/app/google-services.json old mode 100755 new mode 100644 diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml old mode 100755 new mode 100644 diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml old mode 100755 new mode 100644 diff --git a/android/app/src/main/kotlin/com/example/nhancepolicy/MainActivity.kt b/android/app/src/main/kotlin/com/example/nhancepolicy/MainActivity.kt old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/drawable-v21/launch_background.xml b/android/app/src/main/res/drawable-v21/launch_background.xml old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/drawable/launch_background.xml b/android/app/src/main/res/drawable/launch_background.xml old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/values-night/styles.xml b/android/app/src/main/res/values-night/styles.xml old mode 100755 new mode 100644 diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml old mode 100755 new mode 100644 diff --git a/android/app/src/profile/AndroidManifest.xml b/android/app/src/profile/AndroidManifest.xml old mode 100755 new mode 100644 diff --git a/android/build.gradle b/android/build.gradle old mode 100755 new mode 100644 diff --git a/android/gradle.properties b/android/gradle.properties old mode 100755 new mode 100644 diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties old mode 100755 new mode 100644 diff --git a/android/settings.gradle b/android/settings.gradle old mode 100755 new mode 100644 diff --git a/assets/Group_3.png b/assets/Group_3.png old mode 100755 new mode 100644 diff --git a/assets/Nhance-Logo-Final 1.png b/assets/Nhance-Logo-Final 1.png old mode 100755 new mode 100644 diff --git a/assets/Solid_gray.png b/assets/Solid_gray.png old mode 100755 new mode 100644 diff --git a/assets/Template_File.xlsx b/assets/Template_File.xlsx old mode 100755 new mode 100644 index e05bfdbaaa8877a65294c0982b705129c5e13b75..97cd3191d28915a6893bc17bd6223f18780690e6 GIT binary patch literal 89706 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 adl7e8O&7kQh{$Z=AuG&~@j>A=i2N^gnQi<4 delta 4461 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 diff --git a/assets/Vector.png b/assets/Vector.png old mode 100755 new mode 100644 diff --git a/assets/hrLogin.jpg b/assets/hrLogin.jpg old mode 100755 new mode 100644 diff --git a/assets/login_web.jpg b/assets/login_web.jpg old mode 100755 new mode 100644 diff --git a/assets/mobileViewLogo.png b/assets/mobileViewLogo.png old mode 100755 new mode 100644 diff --git a/assets/navbarLogo.png b/assets/navbarLogo.png old mode 100755 new mode 100644 diff --git a/assets/nhance-loader.gif b/assets/nhance-loader.gif old mode 100755 new mode 100644 diff --git a/assets/nhance_client_logo.png b/assets/nhance_client_logo.png old mode 100755 new mode 100644 diff --git a/assets/policy.png b/assets/policy.png old mode 100755 new mode 100644 diff --git a/build_web_test.sh b/build_web_test.sh old mode 100755 new mode 100644 diff --git a/build_web_uat.sh b/build_web_uat.sh old mode 100755 new mode 100644 diff --git a/ios/.gitignore b/ios/.gitignore old mode 100755 new mode 100644 diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist old mode 100755 new mode 100644 diff --git a/ios/Flutter/Debug.xcconfig b/ios/Flutter/Debug.xcconfig old mode 100755 new mode 100644 diff --git a/ios/Flutter/Release.xcconfig b/ios/Flutter/Release.xcconfig old mode 100755 new mode 100644 diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png old mode 100755 new mode 100644 diff --git a/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md old mode 100755 new mode 100644 diff --git a/ios/Runner/Base.lproj/LaunchScreen.storyboard b/ios/Runner/Base.lproj/LaunchScreen.storyboard.xml old mode 100755 new mode 100644 similarity index 100% rename from ios/Runner/Base.lproj/LaunchScreen.storyboard rename to ios/Runner/Base.lproj/LaunchScreen.storyboard.xml diff --git a/ios/Runner/Base.lproj/Main.storyboard b/ios/Runner/Base.lproj/Main.storyboard.xml old mode 100755 new mode 100644 similarity index 100% rename from ios/Runner/Base.lproj/Main.storyboard rename to ios/Runner/Base.lproj/Main.storyboard.xml diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist old mode 100755 new mode 100644 diff --git a/ios/Runner/Runner-Bridging-Header.h b/ios/Runner/Runner-Bridging-Header.h old mode 100755 new mode 100644 diff --git a/ios/RunnerTests/RunnerTests.swift b/ios/RunnerTests/RunnerTests.swift old mode 100755 new mode 100644 diff --git a/lib.zip b/lib.zip old mode 100755 new mode 100644 diff --git a/lib/addons.dart b/lib/addons.dart old mode 100755 new mode 100644 diff --git a/lib/branch/branch_selection_page.dart b/lib/branch/branch_selection_page.dart index cfc1529..168dda1 100644 --- a/lib/branch/branch_selection_page.dart +++ b/lib/branch/branch_selection_page.dart @@ -154,7 +154,7 @@ class _BranchSelectionPageState extends State { } else { // Desktop crossAxisCount = 3; - childAspectRatio = 5; + childAspectRatio = 5 ; } return Scaffold( backgroundColor: Color(0xFFEFF3F6), diff --git a/lib/customAppBar/customAppBar.dart b/lib/customAppBar/customAppBar.dart old mode 100755 new mode 100644 diff --git a/lib/customAppBar/customAppBarChatbot.dart b/lib/customAppBar/customAppBarChatbot.dart old mode 100755 new mode 100644 diff --git a/lib/customAppBar/customFooter.dart b/lib/customAppBar/customFooter.dart old mode 100755 new mode 100644 diff --git a/lib/customAppBar/enrollmentAppBar.dart b/lib/customAppBar/enrollmentAppBar.dart old mode 100755 new mode 100644 diff --git a/lib/customAppBar/toastHelper.dart b/lib/customAppBar/toastHelper.dart old mode 100755 new mode 100644 diff --git a/lib/email_verify.dart b/lib/email_verify.dart index cd54468..2f8c0e4 100644 --- a/lib/email_verify.dart +++ b/lib/email_verify.dart @@ -117,10 +117,23 @@ class _MyEmailVerifyState extends State { Map data = json.decode(response.body); print('Response data: $data'); + // ✅ Safely extract preEnrollmentData + List preEnrollmentData = []; + if (data['data'] is List) { + preEnrollmentData = data['data']; + } + + // ✅ Safely extract postEnrollmentData + final postEnrollment = data['post_enrollment'] ?? {}; + List postEnrollmentData = []; + if (postEnrollment['data'] is List) { + postEnrollmentData = postEnrollment['data']; + } + // Extract enrollment data - List preEnrollmentData = data['data'] ?? []; - Map postEnrollment = data['post_enrollment'] ?? {}; - List postEnrollmentData = postEnrollment['data'] ?? []; + // List preEnrollmentData = data['data'] ?? []; + // Map postEnrollment = data['post_enrollment'] ?? {}; + // List postEnrollmentData = postEnrollment['data'] ?? []; // Save to global storage final tokenStorage = TokenStorageService(); diff --git a/lib/empDetails.dart b/lib/empDetails.dart old mode 100755 new mode 100644 diff --git a/lib/empReview.dart b/lib/empReview.dart old mode 100755 new mode 100644 diff --git a/lib/excel_verification.dart b/lib/excel_verification.dart old mode 100755 new mode 100644 index 77dde9a..4200bad --- a/lib/excel_verification.dart +++ b/lib/excel_verification.dart @@ -20,6 +20,7 @@ import 'package:intl/intl.dart'; import 'package:csv/csv.dart'; import 'package:spreadsheet_decoder/spreadsheet_decoder.dart'; +import 'package:url_launcher/url_launcher.dart'; import 'customAppBar/customFooter.dart'; @@ -581,6 +582,29 @@ class _excelVerifyState extends State { anchor.click(); // Trigger a click on the anchor element } + // Future downloadSampleFile() async { + // + // final response = await apiService.getSampleFileDownload(widget.Token); + // print('check 1'); + // if (response['status'] == 'success') { + // final url = response['data']; + // _launchURL(url); + // } else { + // ToastHelper.showErrorToast(context, '⚠️ Unknown response format'); + // print('⚠️ Unknown response format'); + // } + // } + // + // Future _launchURL(String url) async { + // print('url $url'); + // try { + // final Uri uri = Uri.parse(url); + // await launchUrl(uri, mode: LaunchMode.externalApplication); + // } catch (e) { + // print('Could not launch URL: $e'); + // } + // } + resetErrorCount() { setState(() { fileBytes = null; diff --git a/lib/firebase-config.dart b/lib/firebase-config.dart old mode 100755 new mode 100644 diff --git a/lib/home.dart b/lib/home.dart old mode 100755 new mode 100644 diff --git a/lib/hrDashboard.dart b/lib/hrDashboard.dart old mode 100755 new mode 100644 index a0a84b1..3cb8e91 --- a/lib/hrDashboard.dart +++ b/lib/hrDashboard.dart @@ -48,6 +48,7 @@ class _hrDashboardState extends State String? _postToken = ''; late String _token; dynamic getPolicyNo; + dynamic branchName; // bool _isLoading = false; dynamic getPolicyNameDetails; dynamic enrollmentClient_id; @@ -131,7 +132,7 @@ class _hrDashboardState extends State _postToken = await tokenService.getCurrentToken(); print(enrollToken); print(_postToken); - + branchName = prefs.getString('branchName') ?? ''; if (enrollToken != null && enrollToken!.isNotEmpty) { // Map? decodedToken = Jwt.parseJwt(enrollToken!); @@ -499,10 +500,48 @@ class _hrDashboardState extends State }; }); + Future _showLogoutDialog() async { + return await showDialog( + context: context, + barrierDismissible: false, + builder: (context) => AlertDialog( + title: Text("Confirm Logout"), + content: Text("Do you want to logout?"), + actions: [ + TextButton( + onPressed: () => Navigator.of(context).pop(false), + child: Text("Cancel"), + ), + TextButton( + onPressed: () => Navigator.of(context).pop(true), + child: Text("Logout"), + ), + ], + ), + ) ?? + false; + } + @override Widget build(BuildContext context) { if (getCardArrays == []) { - return Scaffold( + return PopScope( + canPop: false, // ✅ Prevents automatic back navigation + onPopInvoked: (didPop) async { + // This is triggered when browser back button is pressed + bool logout = await _showLogoutDialog(); + + if (logout) { + // ✅ Clear storage & logout + // Example: + // await storage.clear(); + final prefs = await SharedPreferences.getInstance(); + prefs.clear(); + print('LocalStorage Cleared'); + Navigator.pushNamed(context, 'hrLogin'); + } + }, + child: Scaffold( appBar: CustomAppBar(), body: SingleChildScrollView( child: Container( @@ -515,7 +554,7 @@ class _hrDashboardState extends State ], ), ), - )); + ))); } else { int numCards = getCardArrays.length; int numExpanded = numCards < 4 ? numCards : 4; @@ -525,199 +564,238 @@ class _hrDashboardState extends State print("visibleTabAll - $visibleTabs"); print("tabViewsAll - $tabViews"); + return PopScope( + canPop: false, // ✅ Prevents automatic back navigation + onPopInvoked: (didPop) async { + // This is triggered when browser back button is pressed + bool logout = await _showLogoutDialog(); - return Scaffold( - appBar: CustomAppBar(), - body: Stack(children: [ - Container( - padding: const EdgeInsets.only( - top: 20, bottom: 40, left: 40, right: 40), + if (logout) { + // ✅ Clear storage & logout + // Example: + // await storage.clear(); + final prefs = await SharedPreferences.getInstance(); + prefs.clear(); + print('LocalStorage Cleared'); + Navigator.pushNamed(context, 'hrLogin'); + } + }, + child: Scaffold( + appBar: CustomAppBar(), + body: Stack(children: [ + Container( + padding: const EdgeInsets.only( + top: 20, bottom: 40, left: 40, right: 40), - // padding: const EdgeInsets.only( - // top: 20, bottom: 20, left: 50, right: 50), - color: const Color(0xFFEFF3F6), - child: Column( - children: [ - Container( - color: Colors.white, - width: double.infinity, - // height: 75, - height: MediaQuery.of(context).size.height * 0.12, + // padding: const EdgeInsets.only( + // top: 20, bottom: 20, left: 50, right: 50), + color: const Color(0xFFEFF3F6), + child: Column( + children: [ + Container( + color: Colors.white, + width: double.infinity, + // height: 75, + height: MediaQuery.of(context).size.height * 0.12, - padding: Responsive.isDesktop(context) - ? const EdgeInsets.only( + padding: Responsive.isDesktop(context) + ? const EdgeInsets.only( top: 10, bottom: 10, left: 20, right: 20) - : EdgeInsets.only( + : EdgeInsets.only( top: 10, bottom: 10, left: 10, right: 10), // Add padding to the container - child: Row( - children: [ - Expanded( - flex: 6, - child: Container( - width: 150, - height: 80, - alignment: Alignment.centerLeft, - child: Image.network( - Uri.encodeFull(clientLogo ?? ''), - width: 200, - height: 200, - fit: BoxFit.contain, - frameBuilder: (BuildContext context, Widget child, int? frame, bool wasSynchronouslyLoaded) { - if (wasSynchronouslyLoaded) { - return child; - } - return AnimatedOpacity( - opacity: frame == null ? 0 : 1, - duration: const Duration(milliseconds: 500), - curve: Curves.easeOut, - child: child, - ); - }, - loadingBuilder: (BuildContext context, Widget child, ImageChunkEvent? loadingProgress) { - if (loadingProgress == null) { - return child; - } - return Center( - child: SizedBox( - width: 30, - height: 30, - child: CircularProgressIndicator( - strokeWidth: 2, - valueColor: AlwaysStoppedAnimation(Colors.grey), - value: loadingProgress.expectedTotalBytes != null - ? loadingProgress.cumulativeBytesLoaded / - (loadingProgress.expectedTotalBytes ?? 1) - : null, + child: Row( + children: [ + Expanded( + flex: 6, + child: Container( + width: 150, + height: 80, + alignment: Alignment.centerLeft, + child: Image.network( + Uri.encodeFull(clientLogo ?? ''), + width: 200, + height: 200, + fit: BoxFit.contain, + frameBuilder: (BuildContext context, Widget child, int? frame, bool wasSynchronouslyLoaded) { + if (wasSynchronouslyLoaded) { + return child; + } + return AnimatedOpacity( + opacity: frame == null ? 0 : 1, + duration: const Duration(milliseconds: 500), + curve: Curves.easeOut, + child: child, + ); + }, + loadingBuilder: (BuildContext context, Widget child, ImageChunkEvent? loadingProgress) { + if (loadingProgress == null) { + return child; + } + return Center( + child: SizedBox( + width: 30, + height: 30, + child: CircularProgressIndicator( + strokeWidth: 2, + valueColor: AlwaysStoppedAnimation(Colors.grey), + value: loadingProgress.expectedTotalBytes != null + ? loadingProgress.cumulativeBytesLoaded / + (loadingProgress.expectedTotalBytes ?? 1) + : null, + ), + ), + ); + }, + errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) { + return Text(''); + // Image.asset( + // 'assets/Solid_gray.png', + // width: 80, + // height: 60, + // fit: BoxFit.cover, + // ); + }, + ), + ), + ), + Expanded( + flex: 9, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, // right aligned + mainAxisAlignment: MainAxisAlignment.center, + children: [ + // ⭐ Client Name + Text( + clientName ?? '', + textAlign: TextAlign.right, + style: GoogleFonts.poppins( + fontSize: Responsive.isDesktop(context) ? 20 : 18, + fontWeight: FontWeight.w600, ), ), - ); - }, - errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) { - return Text(''); - // Image.asset( - // 'assets/Solid_gray.png', - // width: 80, - // height: 60, - // fit: BoxFit.cover, - // ); - }, - ), - ), + + const SizedBox(height: 20), + + // ⭐ Branch Name (new line) + Text( + 'Branch: ${branchName}' ?? '', + textAlign: TextAlign.right, + style: GoogleFonts.poppins( + fontSize: Responsive.isDesktop(context) ? 16 : 14, + fontWeight: FontWeight.w400, + color: Colors.grey[700], + ), + ), + ], + ), + ) + + ], ), - Expanded( - flex: 9, - child: Text( - clientName ?? '', - textAlign: TextAlign.right, - style: GoogleFonts.poppins( - fontSize: Responsive.isDesktop(context) ? 20 : 18, - fontWeight: FontWeight.w600, - ), - ), - ) - ], - ), - ), - - SizedBox(height: 8), - - tabData.isNotEmpty - ? Container( - // padding: const EdgeInsets.all(5), - // height: MediaQuery.of(context).size.height * 0.08, - decoration: BoxDecoration( - color: Color( - 0xFFC4E3E6), // 🔹 Background behind the TabBar - borderRadius: BorderRadius.circular(12), - border: Border.all(color: Colors.transparent), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.15), - blurRadius: 4, - offset: const Offset(0, 4), - ), - ], - ), - child: Row( - // mainAxisAlignment: MainAxisAlignment.center, - // mainAxisSize: MainAxisSize.min, - children: [ - TabBar( - controller: _tabController, - isScrollable: true, - labelPadding: EdgeInsets.zero, - dividerColor: Colors.transparent, - indicatorColor: Colors.transparent, - indicatorPadding: EdgeInsets.zero, - labelColor: Colors.white, - unselectedLabelColor: const Color(0xFF828282), - // tabs: visibleTabs, - tabs: List.generate(tabData.length, (index) { - final data = tabData[index]; - return CustomTab( - icon: data['icon'], - label: data['label'], - isSelected: selectedIndex == index, - ); - }), - ), - ], - ), - ) - : Container( - height: MediaQuery.of(context).size.height * 0.6, - // color: Colors.white, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset( - 'assets/claimsData.png', // Replace 'default_image.png' with your default image asset path - width: 300, - height: 300, - fit: BoxFit.cover, - ), - const Text("No Data Available"), - ], - ), - ), - - SizedBox(height: 16), - // Expanded TabBarView - Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 5), - child: TabBarView( - controller: _tabController, - children: getTabViews(), - // children: tabViews, ), - ), + + SizedBox(height: 8), + + tabData.isNotEmpty + ? Container( + // padding: const EdgeInsets.all(5), + // height: MediaQuery.of(context).size.height * 0.08, + decoration: BoxDecoration( + color: Color( + 0xFFC4E3E6), // 🔹 Background behind the TabBar + borderRadius: BorderRadius.circular(12), + border: Border.all(color: Colors.transparent), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.15), + blurRadius: 4, + offset: const Offset(0, 4), + ), + ], + ), + child: Row( + // mainAxisAlignment: MainAxisAlignment.center, + // mainAxisSize: MainAxisSize.min, + children: [ + TabBar( + controller: _tabController, + isScrollable: true, + labelPadding: EdgeInsets.zero, + dividerColor: Colors.transparent, + indicatorColor: Colors.transparent, + indicatorPadding: EdgeInsets.zero, + labelColor: Colors.white, + unselectedLabelColor: const Color(0xFF828282), + // tabs: visibleTabs, + tabs: List.generate(tabData.length, (index) { + final data = tabData[index]; + return CustomTab( + icon: data['icon'], + label: data['label'], + isSelected: selectedIndex == index, + ); + }), + ), + ], + ), + ) + : Container( + height: MediaQuery.of(context).size.height * 0.6, + // color: Colors.white, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + 'assets/claimsData.png', // Replace 'default_image.png' with your default image asset path + width: 300, + height: 300, + fit: BoxFit.cover, + ), + const Text("No Data Available"), + ], + ), + ), + + SizedBox(height: 16), + // Expanded TabBarView + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 5), + child: TabBarView( + controller: _tabController, + children: getTabViews(), + // children: tabViews, + ), + ), + ), + ], ), - ], - ), - ), - if (isLoading) - Container( - color: Color(0x98FFFCE5), // Semi-transparent background - child: Center( - child: // Your GIF loader widget + ), + if (isLoading) + Container( + color: Color(0x98FFFCE5), // Semi-transparent background + child: Center( + child: // Your GIF loader widget Image.asset( height: 60, width: 60, 'assets/nhance-loader.gif'), // Adjust path to your GIF loader + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: Container( + width: double.infinity, // Make the footer full width + child: CustomFooter(), + ), ), - ), - Align( - alignment: Alignment.bottomCenter, - child: Container( - width: double.infinity, // Make the footer full width - child: CustomFooter(), - ), - ), - ])); + ])) + ); + + } } diff --git a/lib/hrHome.dart b/lib/hrHome.dart old mode 100755 new mode 100644 diff --git a/lib/hrLogin.dart b/lib/hrLogin.dart old mode 100755 new mode 100644 index 1167a26..6d9acd9 --- a/lib/hrLogin.dart +++ b/lib/hrLogin.dart @@ -24,9 +24,10 @@ class MyHrLogin extends StatefulWidget { } class _MyPhoneState extends State { - final TextEditingController emailController = TextEditingController(); - TextEditingController countryController = TextEditingController(); - TextEditingController mobileController = TextEditingController(); + final TextEditingController emailMobileController = TextEditingController(); + // final TextEditingController emailController = TextEditingController(); + // TextEditingController countryController = TextEditingController(); + // TextEditingController mobileController = TextEditingController(); final _formKey = GlobalKey(); bool _isCheckingToken = false; dynamic empMobileNo; @@ -42,7 +43,7 @@ class _MyPhoneState extends State { @override void initState() { print('vndbbcbdskbvkjs1'); - countryController.text = "+91"; + // countryController.text = "+91"; super.initState(); clearLocalStorageWhenStarts('initState'); } @@ -74,14 +75,30 @@ class _MyPhoneState extends State { _isLoading = true; }); + String input = emailMobileController.text.trim(); + + bool isEmail = RegExp(r'^[^@]+@[^@]+\.[^@]+$').hasMatch(input); + bool isMobile = RegExp(r'^[0-9]{10}$').hasMatch(input); + + if (isEmail) { + setState(() { + isEmailFieldVisible = true; + }); + print("User entered Email: $input"); + } else if (isMobile) { + isEmailFieldVisible = false; + print("User entered Mobile: $input"); + } + + // Determine the API and the payload based on the visible field String apiEndpoint = isEmailFieldVisible ? Environment.apiUrl + 'verifyHrWithEmail' : Environment.apiUrl + 'verifyHrWithMobileNumber'; Map payload = isEmailFieldVisible - ? {'email': emailController.text} - : {'mobile_number': mobileController.text}; + ? {'email': emailMobileController.text} + : {'mobile_number': emailMobileController.text}; // var enteredMobileNumber = mobileController.text; final response = await http.post( @@ -101,28 +118,28 @@ class _MyPhoneState extends State { await SharedPreferences.getInstance(); if (isEmailFieldVisible) { print('isEmailFieldVisible $isEmailFieldVisible'); - prefs.setString('empEmail', emailController.text); - print('${emailController.text}'); + prefs.setString('empEmail', emailMobileController.text); + print('${emailMobileController.text}'); ToastHelper.showSuccessToast( - context, 'Verification code sent to ${emailController.text}'); + context, 'Verification code sent to ${emailMobileController.text}'); Navigator.push( context, MaterialPageRoute( builder: (context) => MyEmailVerify( type: 'email', - value: emailController.text.trim(), // Pass the phone number + value: emailMobileController.text.trim(), // Pass the phone number ), ), ); } else { ToastHelper.showSuccessToast( - context, 'Verification code sent to ${emailController.text}'); + context, 'Verification code sent to ${emailMobileController.text}'); Navigator.push( context, MaterialPageRoute( builder: (context) => MyEmailVerify( type: 'mobile', - value: mobileController.text.trim(), // Pass the phone number + value: emailMobileController.text.trim(), // Pass the phone number ), ), ); @@ -556,140 +573,112 @@ class _MyPhoneState extends State { ), Column( children: [ - isEmailFieldVisible - ? Container( - height: 55, - margin: Responsive.isDesktop( - context) - ? EdgeInsets.symmetric( - horizontal: 150) - : EdgeInsets.symmetric( - horizontal: 0), - decoration: BoxDecoration( - border: Border.all( - width: 1, - color: Colors.grey), - borderRadius: - BorderRadius.circular(10), - ), - child: TextFormField( - controller: emailController, - keyboardType: TextInputType - .emailAddress, - decoration: InputDecoration( - border: InputBorder.none, - hintText: - "Enter your email", - contentPadding: - EdgeInsets.symmetric( - horizontal: 10), - ), - validator: (value) { - if (value == null || - value.isEmpty) { - return 'Please enter your email'; - } - if (!RegExp( - r'^[^@]+@[^@]+\.[^@]+') - .hasMatch(value)) { - return 'Please enter a valid email'; - } - return null; - }, - ), - ) - : Container( - height: 55, - margin: Responsive.isDesktop( - context) - ? EdgeInsets.symmetric( - horizontal: 150) - : EdgeInsets.symmetric( - horizontal: 0), - decoration: BoxDecoration( - border: Border.all( - width: 1, - color: Colors.grey), - borderRadius: - BorderRadius.circular(10), - ), - child: Row( - children: [ - SizedBox(width: 10), - SizedBox( - width: 40, - child: TextField( - controller: - countryController, - keyboardType: - TextInputType - .number, - decoration: - InputDecoration( - border: - InputBorder.none, - ), - ), - ), - Text( - "|", - style: TextStyle( - fontSize: 33, - color: Colors.grey), - ), - SizedBox(width: 10), - Expanded( - child: TextFormField( - controller: - mobileController, - keyboardType: - TextInputType.phone, - decoration: - InputDecoration( - border: - InputBorder.none, - hintText: - "Enter your mobile number", - ), - validator: (value) { - if (value == null || - value.isEmpty) { - return 'Please enter your mobile number'; - } - if (value.length != - 10) { - return 'Mobile number must be 10 digits'; - } - return null; - }, - inputFormatters: [ - FilteringTextInputFormatter - .digitsOnly, - LengthLimitingTextInputFormatter( - 10), - ], - ), - ), - ], - ), + Container( + height: 55, + margin: Responsive.isDesktop(context) + ? const EdgeInsets.symmetric(horizontal: 150) + : const EdgeInsets.symmetric(horizontal: 0), + decoration: BoxDecoration( + border: Border.all(width: 1, color: Colors.grey), + borderRadius: BorderRadius.circular(10), + ), + child: TextFormField( + controller: emailMobileController, + keyboardType: TextInputType.text, + decoration: const InputDecoration( + border: InputBorder.none, + hintText: "Email / Mobile Number ", + contentPadding: EdgeInsets.symmetric(horizontal: 10), ), + validator: (value) { + if (value == null || value.trim().isEmpty) { + return "Please enter email or mobile number"; + } + + String input = value.trim(); + + // ❌ Reject all spaces + if (input.contains(' ')) { + return "No spaces allowed"; + } + + final emailRegex = RegExp(r'^[^@]+@[^@]+\.[^@]+$'); + final mobileRegex = RegExp(r'^[0-9]{10}$'); + + bool isEmailFormat = emailRegex.hasMatch(input); + bool isMobileFormat = mobileRegex.hasMatch(input); + + // --------------------------- + // 🛑 MOBILE VALIDATION + // --------------------------- + if (RegExp(r'^[0-9]+$').hasMatch(input)) { + if (input.length != 10) { + return "Mobile number must be exactly 10 digits"; + } + } + + // --------------------------- + // 🛑 EMAIL VALIDATION + // --------------------------- + + // Reject anything that has '@' but is NOT a valid email format + if (input.contains('@') && !isEmailFormat) { + return "Enter a valid email address"; + } + + // Reject email with extra digits at the end + if (input.contains('@') && RegExp(r'\d+$').hasMatch(input)) { + return "Email cannot contain extra numbers"; + } + + // Reject email+mobile combination + if (input.contains('@') && RegExp(r'\d{10}$').hasMatch(input)) { + return "Enter only email OR mobile number"; + } + + // --------------------------- + // 🛑 MIXED CONTENT (letters + digits but NOT email) + // --------------------------- + bool hasLetters = RegExp(r'[A-Za-z]').hasMatch(input); + bool hasDigits = RegExp(r'[0-9]').hasMatch(input); + + if ((hasLetters && hasDigits) && !input.contains('@')) { + return "Enter only email OR 10-digit mobile number"; + } + + // --------------------------- + // 🟢 FINAL CHECK + // --------------------------- + if (!isEmailFormat && !isMobileFormat) { + return "Enter a valid email or 10-digit mobile number"; + } + + return null; + } + + ), + ), SizedBox(height: 15), Container( - margin: Responsive.isDesktop(context) + margin: Responsive.isDesktop( + context) ? EdgeInsets.symmetric( - horizontal: 150) + horizontal: 150) : EdgeInsets.symmetric( - horizontal: 0), + horizontal: 0), child: SizedBox( width: double.infinity, height: 45, child: ElevatedButton( - style: ElevatedButton.styleFrom( + style: ElevatedButton + .styleFrom( backgroundColor: - Color(0xFF00989E), - shape: RoundedRectangleBorder( + Color(0xFF00989E), + shape: + RoundedRectangleBorder( borderRadius: - BorderRadius.circular(10), + BorderRadius + .circular(10), ), ), onPressed: _isLoading @@ -697,40 +686,37 @@ class _MyPhoneState extends State { : verifyMobileAndEmailNumber, child: _isLoading ? CircularProgressIndicator( - valueColor: - AlwaysStoppedAnimation< - Color>( - Color(0xFF00989E), - ), - ) - : Text( - isEmailFieldVisible - ? "Login with Email OTP" - : "Login with Mobile OTP", - style: - GoogleFonts.poppins( - color: - Color(0xFFFFFFFF), - ), - ), - ), - ), - ), - SizedBox(height: 15), - MouseRegion( - cursor: SystemMouseCursors.click, - child: GestureDetector( - onTap: toggleField, - child: Text( - isEmailFieldVisible - ? "Login with Mobile No" - : "Login with Email", - style: TextStyle( - color: Color(0xFF00989E), + valueColor: + AlwaysStoppedAnimation< + Color>( + Color(0xFF00989E), + ), + ) + : Text( "Login with Email / Mobile OTP", + style: GoogleFonts + .poppins( + color: Color( + 0xFFFFFFFF), + ), ), ), ), ), + SizedBox(height: 15), + // MouseRegion( + // cursor: SystemMouseCursors.click, + // child: GestureDetector( + // onTap: toggleField, + // child: Text( + // isEmailFieldVisible + // ? "Login with Mobile No" + // : "Login with Email", + // style: TextStyle( + // color: Color(0xFF00989E), + // ), + // ), + // ), + // ), ], ), SizedBox( diff --git a/lib/hrPolicyDetails.dart b/lib/hrPolicyDetails.dart old mode 100755 new mode 100644 index 25349bd..9000e8b --- a/lib/hrPolicyDetails.dart +++ b/lib/hrPolicyDetails.dart @@ -174,6 +174,27 @@ class _HrPolicyDetailsState extends State } } + Future getEcardDownload(String? empCode,String? empId,String? clientPolicyId,String? policyNo) async { + final eCarDParams = { + 'id': empId, + 'emp_code': empCode, + 'client_policy_id': clientPolicyId, + 'policy_no': policyNo + }; + final response = await apiService.getEcardRequest(eCarDParams,widget.Token); + print('check 1'); + final ecardDownloadUrl = response['data']['eCardDownload']; + final message = response['data']['message']; + if (ecardDownloadUrl != null) { + print('✅ Link: $ecardDownloadUrl'); + await _launchURL(ecardDownloadUrl); // Only launch if status is success + // ToastHelper.showSuccessToast(context, message); + } else { + print('❌ Error: $message'); + ToastHelper.showErrorToast(context, message); + } + } + Future _launchURL(String url) async { final Uri uri = Uri.parse(url); // Parse the URL properly print('_launchURL $uri'); @@ -933,7 +954,7 @@ class _HrPolicyDetailsState extends State padding: const EdgeInsets.symmetric(horizontal: 4.0), child: GestureDetector( onTap: () { - _launchURL(item['ecard_download_link']); + getEcardDownload(item['emp_code'],item['employee_id'],item['client_policy_id'],item['policy_no']); }, child: Container( height: 40, diff --git a/lib/hrVerify.dart b/lib/hrVerify.dart old mode 100755 new mode 100644 diff --git a/lib/main.dart b/lib/main.dart old mode 100755 new mode 100644 diff --git a/lib/models/environment.dart b/lib/models/environment.dart old mode 100755 new mode 100644 diff --git a/lib/models/platform_helper_mobile.dart b/lib/models/platform_helper_mobile.dart old mode 100755 new mode 100644 diff --git a/lib/models/platform_helper_other.dart b/lib/models/platform_helper_other.dart old mode 100755 new mode 100644 diff --git a/lib/oldPolicy.dart b/lib/oldPolicy.dart old mode 100755 new mode 100644 diff --git a/lib/phone.dart b/lib/phone.dart old mode 100755 new mode 100644 diff --git a/lib/responsive.dart b/lib/responsive.dart old mode 100755 new mode 100644 diff --git a/lib/service/api_service.dart b/lib/service/api_service.dart old mode 100755 new mode 100644 index ca6332a..2b6a85d --- a/lib/service/api_service.dart +++ b/lib/service/api_service.dart @@ -612,6 +612,18 @@ class ApiService { } } + Future> getEcardRequest(eCardParam,String token) async { + final url = Uri.parse('${Environment.apiUrlPost}ecardRequest'); + final headers = { + 'Authorization': 'Bearer $token' ?? '', + 'Content-Type': 'application/json', // Ensure content type is JSON + }; + final jsonBody = jsonEncode(eCardParam); + // Send formDataJson as the body + final response = await _makePostRequestWithoutFormData(url,jsonBody, headers); + return response; + } + Future> getCdTransactionData( String clintID, String insurerId, String cd_ac_pk, String token) async { print("getCashDepositDetailsToApi1"); @@ -638,6 +650,17 @@ class ApiService { return response; } + Future> getSampleFileDownload(String token) async { + final url = Uri.parse( + '${Environment.apiUrl}downloadSampleExcel/enrollment'); + + final headers = { + 'Authorization': 'Bearer $token' ?? '', + }; + final response = await _makeGetRequest(url, headers); + return response; + } + Future> getEmployeeAndDependenceToApi( String clintID, String getPolicyNo, String empRefId, String token) async { print(_hrtoken); @@ -754,6 +777,13 @@ class ApiService { // return response; // } + Future> _makePostRequestWithoutFormData( + Uri url, String body, Map headers) async { + + final response = await http.post(url, headers: headers, body: body); + return _handleResponse(response); + } + Future> _makeGetRequest( Uri url, Map headers) async { final response = await http.get(url, headers: headers); diff --git a/lib/service/hrDashboardTabs/activePolicies.dart b/lib/service/hrDashboardTabs/activePolicies.dart index 35b5093..056d50d 100644 --- a/lib/service/hrDashboardTabs/activePolicies.dart +++ b/lib/service/hrDashboardTabs/activePolicies.dart @@ -228,7 +228,7 @@ class _ActivePolicieState extends State { child: getCardArrays.isEmpty ? Center( child: Text( - 'No data found', + 'No Policy Mapping Found', style: TextStyle( fontSize: 16, color: Colors.grey.shade600, diff --git a/lib/service/hrDashboardTabs/cd.dart b/lib/service/hrDashboardTabs/cd.dart index 91e55ea..852105a 100644 --- a/lib/service/hrDashboardTabs/cd.dart +++ b/lib/service/hrDashboardTabs/cd.dart @@ -323,7 +323,7 @@ class _CdPolicieState extends State { if (filteredData.isEmpty) { return const SizedBox( height: 50, - child: Center(child: Text('No available data')), + child: Center(child: Text('No CD Accout Mapped')), ); } diff --git a/lib/service/hrDashboardTabs/claims.dart b/lib/service/hrDashboardTabs/claims.dart index 5f92820..29e5d62 100644 --- a/lib/service/hrDashboardTabs/claims.dart +++ b/lib/service/hrDashboardTabs/claims.dart @@ -74,7 +74,7 @@ class _ClaimsPolicieState extends State { Map claim_Detials() { final data = { - "client_id": empClientId, + "client_id": widget.empClientId, "emp_code": controllers["empCode"]?.text ?? '', "from_date": controllers["from"]?.text ?? '', "to_date": controllers["to"]?.text ?? '', @@ -101,6 +101,9 @@ class _ClaimsPolicieState extends State { Map? postdecodedToken = Jwt.parseJwt(widget.postToken); empClientId = postdecodedToken['client_id'].toString(); + print("empClientId - $empClientId"); + + claim_Detials(); print("Empcoed1- ${widget.empCodeHrPolicy}"); print("EmpisHrcode- ${widget.isHrcode}"); diff --git a/lib/service/hrDashboardTabs/preEnrollment.dart b/lib/service/hrDashboardTabs/preEnrollment.dart index 2b28287..b48a744 100644 --- a/lib/service/hrDashboardTabs/preEnrollment.dart +++ b/lib/service/hrDashboardTabs/preEnrollment.dart @@ -107,8 +107,9 @@ class _PreEnrollmentState extends State { // clintID!, clintBranchId!, hr_id, token); print('IN1'); if (response['status'] == 'success') { - isLoading = false; + setState(() { + isLoading = false; print('response'); print(response['data']); @@ -122,7 +123,10 @@ class _PreEnrollmentState extends State { print('IN2'); print("getCardArrays9 - $getCardArrays"); } else { - isLoading = false; + setState(() { + isLoading = false; + }); + print('API request failed with status'); } } catch (e) { @@ -195,7 +199,7 @@ class _PreEnrollmentState extends State { fit: BoxFit.cover, ), Text( - 'No data found', + 'No Policy Mapping Found', style: TextStyle( fontSize: 16, color: Colors.grey.shade600, diff --git a/lib/service/token_storage_service.dart b/lib/service/token_storage_service.dart index 54f0aea..a71c975 100644 --- a/lib/service/token_storage_service.dart +++ b/lib/service/token_storage_service.dart @@ -111,6 +111,10 @@ class TokenStorageService { if (_decodedToken != null) { await prefs.setString(_decodedTokenKey, json.encode(_decodedToken)); } + + // ✅ Save branch name + String branchName = branch['branch_name']?.toString() ?? ''; + await prefs.setString('branchName', branchName); } // Decode JWT token diff --git a/lib/verify.dart b/lib/verify.dart old mode 100755 new mode 100644 diff --git a/linux/.gitignore b/linux/.gitignore old mode 100755 new mode 100644 diff --git a/linux/CMakeLists.txt b/linux/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/linux/flutter/CMakeLists.txt b/linux/flutter/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc old mode 100755 new mode 100644 diff --git a/linux/flutter/generated_plugin_registrant.h b/linux/flutter/generated_plugin_registrant.h old mode 100755 new mode 100644 diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake old mode 100755 new mode 100644 diff --git a/linux/main.cc b/linux/main.cc old mode 100755 new mode 100644 diff --git a/linux/my_application.cc b/linux/my_application.cc old mode 100755 new mode 100644 diff --git a/linux/my_application.h b/linux/my_application.h old mode 100755 new mode 100644 diff --git a/macos/.gitignore b/macos/.gitignore old mode 100755 new mode 100644 diff --git a/macos/Flutter/Flutter-Debug.xcconfig b/macos/Flutter/Flutter-Debug.xcconfig old mode 100755 new mode 100644 diff --git a/macos/Flutter/Flutter-Release.xcconfig b/macos/Flutter/Flutter-Release.xcconfig old mode 100755 new mode 100644 diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift old mode 100755 new mode 100644 index 2ce5852..ff40429 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -5,6 +5,7 @@ import FlutterMacOS import Foundation +import file_picker import firebase_auth import firebase_core import google_sign_in_ios @@ -14,6 +15,7 @@ import smart_auth import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { + FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin")) FLTFirebaseAuthPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseAuthPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin")) diff --git a/macos/Podfile b/macos/Podfile index 29c8eb3..ff5ddb3 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.14' +platform :osx, '10.15' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/macos/Runner/AppDelegate.swift b/macos/Runner/AppDelegate.swift old mode 100755 new mode 100644 index d53ef64..b3c1761 --- a/macos/Runner/AppDelegate.swift +++ b/macos/Runner/AppDelegate.swift @@ -1,9 +1,13 @@ import Cocoa import FlutterMacOS -@NSApplicationMain +@main class AppDelegate: FlutterAppDelegate { override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } + + override func applicationSupportsSecureRestorableState(_ app: NSApplication) -> Bool { + return true + } } diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json old mode 100755 new mode 100644 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png old mode 100755 new mode 100644 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png old mode 100755 new mode 100644 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png old mode 100755 new mode 100644 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png old mode 100755 new mode 100644 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png old mode 100755 new mode 100644 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png old mode 100755 new mode 100644 diff --git a/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png old mode 100755 new mode 100644 diff --git a/macos/Runner/Base.lproj/MainMenu.xib b/macos/Runner/Base.lproj/MainMenu.xib old mode 100755 new mode 100644 diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig old mode 100755 new mode 100644 diff --git a/macos/Runner/Configs/Debug.xcconfig b/macos/Runner/Configs/Debug.xcconfig old mode 100755 new mode 100644 diff --git a/macos/Runner/Configs/Release.xcconfig b/macos/Runner/Configs/Release.xcconfig old mode 100755 new mode 100644 diff --git a/macos/Runner/Configs/Warnings.xcconfig b/macos/Runner/Configs/Warnings.xcconfig old mode 100755 new mode 100644 diff --git a/macos/Runner/DebugProfile.entitlements b/macos/Runner/DebugProfile.entitlements.xml old mode 100755 new mode 100644 similarity index 100% rename from macos/Runner/DebugProfile.entitlements rename to macos/Runner/DebugProfile.entitlements.xml diff --git a/macos/Runner/Info.plist b/macos/Runner/Info.plist old mode 100755 new mode 100644 diff --git a/macos/Runner/MainFlutterWindow.swift b/macos/Runner/MainFlutterWindow.swift old mode 100755 new mode 100644 diff --git a/macos/Runner/Release.entitlements b/macos/Runner/Release.entitlements.xml old mode 100755 new mode 100644 similarity index 100% rename from macos/Runner/Release.entitlements rename to macos/Runner/Release.entitlements.xml diff --git a/macos/RunnerTests/RunnerTests.swift b/macos/RunnerTests/RunnerTests.swift old mode 100755 new mode 100644 diff --git a/pubspec.yaml b/pubspec.yaml old mode 100755 new mode 100644 diff --git a/test/widget_test.dart b/test/widget_test.dart old mode 100755 new mode 100644 diff --git a/web/assets/Sample.xlsx b/web/assets/Sample.xlsx old mode 100755 new mode 100644 diff --git a/web/assets/nhance-loader.gif b/web/assets/nhance-loader.gif old mode 100755 new mode 100644 diff --git a/web/favicon.png b/web/favicon.png old mode 100755 new mode 100644 diff --git a/web/icons/Icon-192.png b/web/icons/Icon-192.png old mode 100755 new mode 100644 diff --git a/web/icons/Icon-512.png b/web/icons/Icon-512.png old mode 100755 new mode 100644 diff --git a/web/icons/Icon-maskable-192.png b/web/icons/Icon-maskable-192.png old mode 100755 new mode 100644 diff --git a/web/icons/Icon-maskable-512.png b/web/icons/Icon-maskable-512.png old mode 100755 new mode 100644 diff --git a/web/index.html b/web/index.html old mode 100755 new mode 100644 diff --git a/web/manifest.json b/web/manifest.json old mode 100755 new mode 100644 diff --git a/windows/.gitignore b/windows/.gitignore old mode 100755 new mode 100644 diff --git a/windows/CMakeLists.txt b/windows/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/windows/flutter/CMakeLists.txt b/windows/flutter/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc old mode 100755 new mode 100644 diff --git a/windows/flutter/generated_plugin_registrant.h b/windows/flutter/generated_plugin_registrant.h old mode 100755 new mode 100644 diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake old mode 100755 new mode 100644 diff --git a/windows/runner/CMakeLists.txt b/windows/runner/CMakeLists.txt old mode 100755 new mode 100644 diff --git a/windows/runner/Runner.rc b/windows/runner/Runner.rc old mode 100755 new mode 100644 diff --git a/windows/runner/flutter_window.cpp b/windows/runner/flutter_window.cpp old mode 100755 new mode 100644 diff --git a/windows/runner/flutter_window.h b/windows/runner/flutter_window.h old mode 100755 new mode 100644 diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp old mode 100755 new mode 100644 diff --git a/windows/runner/resource.h b/windows/runner/resource.h old mode 100755 new mode 100644 diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico old mode 100755 new mode 100644 diff --git a/windows/runner/runner.exe.manifest b/windows/runner/runner.exe.manifest.xml old mode 100755 new mode 100644 similarity index 100% rename from windows/runner/runner.exe.manifest rename to windows/runner/runner.exe.manifest.xml diff --git a/windows/runner/utils.cpp b/windows/runner/utils.cpp old mode 100755 new mode 100644 diff --git a/windows/runner/utils.h b/windows/runner/utils.h old mode 100755 new mode 100644 diff --git a/windows/runner/win32_window.cpp b/windows/runner/win32_window.cpp old mode 100755 new mode 100644 diff --git a/windows/runner/win32_window.h b/windows/runner/win32_window.h old mode 100755 new mode 100644