Compare commits

...

15 Commits

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<widget id="com.cloudsolutions.mohemm" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <widget id="hmg.cloudSolutions.mohem" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>MyApp</name> <name>MyApp</name>
<description>An awesome Ionic/Cordova app.</description> <description>An awesome Ionic/Cordova app.</description>
<author email="hi@ionicframework.com" href="http://ionicframework.com/">Ionic Framework Team</author> <author email="hi@ionicframework.com" href="http://ionicframework.com/">Ionic Framework Team</author>
@ -86,10 +86,6 @@
<plugin name="cordova-plugin-ionic-webview" spec="^4.0.0" /> <plugin name="cordova-plugin-ionic-webview" spec="^4.0.0" />
<plugin name="call-number" spec="^1.0.1" /> <plugin name="call-number" spec="^1.0.1" />
<plugin name="cordova-android-support-gradle-release" spec="^2.1.0" /> <plugin name="cordova-android-support-gradle-release" spec="^2.1.0" />
<plugin name="phonegap-plugin-push" spec="2.2.3">
<variable name="GOOGLE_PLAY_SERVICES_VERSION" value="16.0.0" />
<variable name="FCM_VERSION" value="15.0.0" />
</plugin>
<plugin name="cordova-sqlite-storage" spec="^3.2.0" /> <plugin name="cordova-sqlite-storage" spec="^3.2.0" />
<plugin name="cordova-plugin-nativestorage" spec="^2.3.2" /> <plugin name="cordova-plugin-nativestorage" spec="^2.3.2" />
<plugin name="cordova-plugin-ble-central" spec="^1.2.2" /> <plugin name="cordova-plugin-ble-central" spec="^1.2.2" />

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?> <?xml version='1.0' encoding='utf-8'?>
<widget id="com.cloudsolutions.alhabibmohemm" version="1.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <widget id="hmg.cloudSolutions.mohem" version="1.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>MOHEMM</name> <name>MOHEMM</name>
<description>an app created by cloud Solutions</description> <description>an app created by cloud Solutions</description>
<author email="eservicescs@cloudsolution-sa.com" href="http://cloudsolution-sa.com">HMG</author> <author email="eservicescs@cloudsolution-sa.com" href="http://cloudsolution-sa.com">HMG</author>
@ -95,10 +95,6 @@
<variable name="ANDROID_SUPPORT_ANNOTATIONS_VERSION" value="27.+" /> <variable name="ANDROID_SUPPORT_ANNOTATIONS_VERSION" value="27.+" />
</plugin> </plugin>
<plugin name="cordova-android-support-gradle-release" spec="^3.0.1" /> <plugin name="cordova-android-support-gradle-release" spec="^3.0.1" />
<plugin name="phonegap-plugin-push" spec="^2.3.0">
<variable name="GOOGLE_PLAY_SERVICES_VERSION" value="16.0.0" />
<variable name="FCM_VERSION" value="15.0.0" />
</plugin>
<plugin name="cordova-sqlite-storage" spec="^3.4.0" /> <plugin name="cordova-sqlite-storage" spec="^3.4.0" />
<plugin name="cordova-plugin-nativestorage" spec="^2.3.2" /> <plugin name="cordova-plugin-nativestorage" spec="^2.3.2" />
<plugin name="cordova-plugin-ble-central" spec="^1.2.4" /> <plugin name="cordova-plugin-ble-central" spec="^1.2.4" />
@ -124,7 +120,6 @@
<plugin name="cordova-plugin-file" spec="^6.0.2" /> <plugin name="cordova-plugin-file" spec="^6.0.2" />
<plugin name="cordova-plugin-filepath" spec="^1.5.6" /> <plugin name="cordova-plugin-filepath" spec="^1.5.6" />
<plugin name="com-badrit-base64" spec="^0.2.0" /> <plugin name="com-badrit-base64" spec="^0.2.0" />
<plugin name="onesignal-cordova-plugin" spec="^2.7.0" />
<plugin name="cordova-plugin-fingerprint-aio" spec="^3.0.0"> <plugin name="cordova-plugin-fingerprint-aio" spec="^3.0.0">
<variable name="FACEID_USAGE_DESCRIPTION" value="User Authentication" /> <variable name="FACEID_USAGE_DESCRIPTION" value="User Authentication" />
</plugin> </plugin>

@ -1,35 +1,42 @@
{ {
"project_info": { "project_info": {
"project_number": "608631731238", "project_number": "679409052782",
"firebase_url": "https://mohemm-cs.firebaseio.com", "firebase_url": "https://mohemm-dce93.firebaseio.com",
"project_id": "mohemm-cs", "project_id": "mohemm-dce93",
"storage_bucket": "mohemm-cs.appspot.com" "storage_bucket": "mohemm-dce93.appspot.com"
}, },
"client": [ "client": [
{ {
"client_info": { "client_info": {
"mobilesdk_app_id": "1:608631731238:android:3a8384007f8700ec", "mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f",
"android_client_info": { "android_client_info": {
"package_name": "com.cloudsolutions.mohemm" "package_name": "hmg.cloudSolutions.mohem"
} }
}, },
"oauth_client": [ "oauth_client": [
{ {
"client_id": "608631731238-83a5qndedia496ssa6ekkd3db5jo8khr.apps.googleusercontent.com", "client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
"client_type": 3 "client_type": 3
} }
], ],
"api_key": [ "api_key": [
{ {
"current_key": "AIzaSyB5zpz9vC2NOxsU1dPr0TK0dVaMY5D4Mjg" "current_key": "AIzaSyDgWjuSBIKGghWxYg_KGBRIZTi-O_UA8mU"
} }
], ],
"services": { "services": {
"appinvite_service": { "appinvite_service": {
"other_platform_oauth_client": [ "other_platform_oauth_client": [
{ {
"client_id": "608631731238-83a5qndedia496ssa6ekkd3db5jo8khr.apps.googleusercontent.com", "client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
"client_type": 3 "client_type": 3
},
{
"client_id": "679409052782-3teqf8vdh9e1suvnhddj3pgmna7vg5rt.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.cloudsolutions.mohemm"
}
} }
] ]
} }

@ -38,11 +38,6 @@ call npm install --save angular-calendar date-fns
@echo install android support gradle release because of barcode scanner to install missing android attributes @echo install android support gradle release because of barcode scanner to install missing android attributes
call ionic cordova plugin add cordova-android-support-gradle-release --fetch call ionic cordova plugin add cordova-android-support-gradle-release --fetch
@echo push notifications
call ionic cordova plugin add phonegap-plugin-push --variable GOOGLE_PLAY_SERVICES_VERSION="16.0.0" --variable FCM_VERSION="15.0.0"
call npm install @ionic-native/push
@echo sqlite storage @echo sqlite storage
call ionic cordova plugin add cordova-sqlite-storage call ionic cordova plugin add cordova-sqlite-storage
call npm install @ionic-native/sqlite call npm install @ionic-native/sqlite

@ -39,12 +39,6 @@ echo calendar https://mattlewis92.github.io/angular-calendar/#/kitchen-sink
echo install android support gradle release because of barcode scanner to install missing android attributes echo install android support gradle release because of barcode scanner to install missing android attributes
ionic cordova plugin add cordova-android-support-gradle-release --fetch ionic cordova plugin add cordova-android-support-gradle-release --fetch
echo push notifications
ionic cordova plugin add phonegap-plugin-push --variable GOOGLE_PLAY_SERVICES_VERSION="16.0.0" --variable FCM_VERSION="15.0.0"
npm install @ionic-native/push
echo sqlite storage echo sqlite storage
ionic cordova plugin add cordova-sqlite-storage ionic cordova plugin add cordova-sqlite-storage
npm install @ionic-native/sqlite npm install @ionic-native/sqlite

@ -1,35 +1,42 @@
{ {
"project_info": { "project_info": {
"project_number": "448880075189", "project_number": "679409052782",
"firebase_url": "https://al-habib-mohemm.firebaseio.com", "firebase_url": "https://mohemm-dce93.firebaseio.com",
"project_id": "al-habib-mohemm", "project_id": "mohemm-dce93",
"storage_bucket": "al-habib-mohemm.appspot.com" "storage_bucket": "mohemm-dce93.appspot.com"
}, },
"client": [ "client": [
{ {
"client_info": { "client_info": {
"mobilesdk_app_id": "1:448880075189:android:5bb4821d515a826d88b9fc", "mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f",
"android_client_info": { "android_client_info": {
"package_name": "com.cloudsolutions.alhabibmohemm" "package_name": "hmg.cloudSolutions.mohem"
} }
}, },
"oauth_client": [ "oauth_client": [
{ {
"client_id": "448880075189-49hc2l78pr9hsmr9p3k7j411r40diej8.apps.googleusercontent.com", "client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
"client_type": 3 "client_type": 3
} }
], ],
"api_key": [ "api_key": [
{ {
"current_key": "AIzaSyC8nrli7eyuRNow8nF-QHvDMOxqUkj6fEw" "current_key": "AIzaSyDgWjuSBIKGghWxYg_KGBRIZTi-O_UA8mU"
} }
], ],
"services": { "services": {
"appinvite_service": { "appinvite_service": {
"other_platform_oauth_client": [ "other_platform_oauth_client": [
{ {
"client_id": "448880075189-49hc2l78pr9hsmr9p3k7j411r40diej8.apps.googleusercontent.com", "client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
"client_type": 3 "client_type": 3
},
{
"client_id": "679409052782-3teqf8vdh9e1suvnhddj3pgmna7vg5rt.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.cloudsolutions.mohemm"
}
} }
] ]
} }

@ -38,11 +38,6 @@ call npm install --save angular-calendar date-fns
@echo install android support gradle release because of barcode scanner to install missing android attributes @echo install android support gradle release because of barcode scanner to install missing android attributes
call ionic cordova plugin add cordova-android-support-gradle-release --fetch call ionic cordova plugin add cordova-android-support-gradle-release --fetch
@echo push notifications
call ionic cordova plugin add phonegap-plugin-push --variable GOOGLE_PLAY_SERVICES_VERSION="16.0.0" --variable FCM_VERSION="15.0.0"
call npm install @ionic-native/push
@echo sqlite storage @echo sqlite storage
call ionic cordova plugin add cordova-sqlite-storage call ionic cordova plugin add cordova-sqlite-storage
call npm install @ionic-native/sqlite call npm install @ionic-native/sqlite
@ -149,9 +144,9 @@ call npm install @ionic-native/file-path
call ionic cordova plugin add com-badrit-base64 call ionic cordova plugin add com-badrit-base64
call npm install @ionic-native/base64 call npm install @ionic-native/base64
@echo install OneSignal plugin @echo install Firebasex plugin
call ionic cordova plugin add onesignal-cordova-plugin call ionic cordova plugin add cordova-plugin-firebasex
call npm install @ionic-native/onesignal call npm install @ionic-native/firebase-x
@echo reinitializing git repository @echo reinitializing git repository
@echo git init @echo git init

@ -40,11 +40,6 @@ echo install android support gradle release because of barcode scanner to insta
ionic cordova plugin add cordova-android-support-gradle-release --fetch ionic cordova plugin add cordova-android-support-gradle-release --fetch
echo push notifications
ionic cordova plugin add phonegap-plugin-push --variable GOOGLE_PLAY_SERVICES_VERSION="16.0.0" --variable FCM_VERSION="15.0.0"
npm install @ionic-native/push
echo sqlite storage echo sqlite storage
ionic cordova plugin add cordova-sqlite-storage ionic cordova plugin add cordova-sqlite-storage
npm install @ionic-native/sqlite npm install @ionic-native/sqlite

3859
Mohem/package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -21,38 +21,37 @@
"@angular/platform-browser": "^7.2.2", "@angular/platform-browser": "^7.2.2",
"@angular/platform-browser-dynamic": "^7.2.2", "@angular/platform-browser-dynamic": "^7.2.2",
"@angular/router": "^7.2.2", "@angular/router": "^7.2.2",
"@ionic-native/android-permissions": "^5.17.0", "@ionic-native/android-permissions": "^5.18.0",
"@ionic-native/app-availability": "^5.17.0", "@ionic-native/app-availability": "^5.18.0",
"@ionic-native/app-rate": "^5.17.0", "@ionic-native/app-rate": "^5.18.0",
"@ionic-native/background-geolocation": "^5.4.0", "@ionic-native/background-geolocation": "^5.4.0",
"@ionic-native/badge": "^5.17.0", "@ionic-native/badge": "^5.18.0",
"@ionic-native/barcode-scanner": "^5.17.0", "@ionic-native/barcode-scanner": "^5.18.0",
"@ionic-native/base64": "^5.17.0", "@ionic-native/base64": "^5.18.0",
"@ionic-native/ble": "^5.17.0", "@ionic-native/ble": "^5.18.0",
"@ionic-native/call-number": "^5.17.0", "@ionic-native/call-number": "^5.18.0",
"@ionic-native/camera": "^5.17.0", "@ionic-native/camera": "^5.18.0",
"@ionic-native/core": "^5.8.0", "@ionic-native/core": "^5.8.0",
"@ionic-native/date-picker": "^5.10.0", "@ionic-native/date-picker": "^5.10.0",
"@ionic-native/device": "^5.17.0", "@ionic-native/device": "^5.18.0",
"@ionic-native/diagnostic": "^5.17.0", "@ionic-native/diagnostic": "^5.18.0",
"@ionic-native/file": "^5.17.0", "@ionic-native/file": "^5.18.0",
"@ionic-native/file-path": "^5.17.0", "@ionic-native/file-path": "^5.18.0",
"@ionic-native/fingerprint-aio": "^5.17.1", "@ionic-native/fingerprint-aio": "^5.18.0",
"@ionic-native/firebase-x": "^5.19.1",
"@ionic-native/geolocation": "^5.10.0", "@ionic-native/geolocation": "^5.10.0",
"@ionic-native/globalization": "^5.17.0", "@ionic-native/globalization": "^5.18.0",
"@ionic-native/health": "^5.4.0", "@ionic-native/health": "^5.4.0",
"@ionic-native/in-app-browser": "^5.17.0", "@ionic-native/in-app-browser": "^5.17.0",
"@ionic-native/keyboard": "^5.17.0", "@ionic-native/keyboard": "^5.17.0",
"@ionic-native/launch-navigator": "^5.17.0", "@ionic-native/launch-navigator": "^5.17.0",
"@ionic-native/local-notifications": "^5.17.0", "@ionic-native/local-notifications": "^5.17.0",
"@ionic-native/native-storage": "^5.17.0", "@ionic-native/native-storage": "^5.17.0",
"@ionic-native/onesignal": "^5.19.0",
"@ionic-native/open-native-settings": "^5.14.0", "@ionic-native/open-native-settings": "^5.14.0",
"@ionic-native/push": "^5.17.0",
"@ionic-native/splash-screen": "^5.0.0", "@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/sqlite": "^5.17.0", "@ionic-native/sqlite": "^5.18.0",
"@ionic-native/status-bar": "^5.0.0", "@ionic-native/status-bar": "^5.0.0",
"@ionic-native/themeable-browser": "^5.17.0", "@ionic-native/themeable-browser": "^5.18.0",
"@ionic-native/zbar": "^5.10.0", "@ionic-native/zbar": "^5.10.0",
"@ionic/angular": "^4.1.0", "@ionic/angular": "^4.1.0",
"@ng-bootstrap/ng-bootstrap": "^4.2.2", "@ng-bootstrap/ng-bootstrap": "^4.2.2",
@ -62,7 +61,7 @@
"call-number": "~0.0.2", "call-number": "~0.0.2",
"chart.js": "^2.9.3", "chart.js": "^2.9.3",
"com-badrit-base64": "^0.2.0", "com-badrit-base64": "^0.2.0",
"cordova-android": "8.1.0", "cordova-android": "^8.1.0",
"cordova-android-support-gradle-release": "^3.0.1", "cordova-android-support-gradle-release": "^3.0.1",
"cordova-browser": "5.0.4", "cordova-browser": "5.0.4",
"cordova-ios": "4.5.5", "cordova-ios": "4.5.5",
@ -71,6 +70,8 @@
"cordova-plugin-actionsheet": "^2.3.3", "cordova-plugin-actionsheet": "^2.3.3",
"cordova-plugin-add-swift-support": "^2.0.2", "cordova-plugin-add-swift-support": "^2.0.2",
"cordova-plugin-android-permissions": "^1.0.2", "cordova-plugin-android-permissions": "^1.0.2",
"cordova-plugin-androidx": "^1.0.2",
"cordova-plugin-androidx-adapter": "^1.1.0",
"cordova-plugin-appavailability": "^0.4.2", "cordova-plugin-appavailability": "^0.4.2",
"cordova-plugin-apprate": "^1.4.0", "cordova-plugin-apprate": "^1.4.0",
"cordova-plugin-badge": "^0.8.8", "cordova-plugin-badge": "^0.8.8",
@ -82,6 +83,7 @@
"cordova-plugin-file": "^6.0.2", "cordova-plugin-file": "^6.0.2",
"cordova-plugin-filepath": "^1.5.6", "cordova-plugin-filepath": "^1.5.6",
"cordova-plugin-fingerprint-aio": "^3.0.0", "cordova-plugin-fingerprint-aio": "^3.0.0",
"cordova-plugin-firebasex": "^7.0.1",
"cordova-plugin-geolocation": "^4.0.2", "cordova-plugin-geolocation": "^4.0.2",
"cordova-plugin-globalization": "^1.11.0", "cordova-plugin-globalization": "^1.11.0",
"cordova-plugin-inappbrowser": "^3.1.0", "cordova-plugin-inappbrowser": "^3.1.0",
@ -102,11 +104,10 @@
"mx.ferreyra.callnumber": "0.0.2", "mx.ferreyra.callnumber": "0.0.2",
"ng2-file-upload": "^1.3.0", "ng2-file-upload": "^1.3.0",
"ng2-pdf-viewer": "^5.3.2", "ng2-pdf-viewer": "^5.3.2",
"ngx-gauge": "^1.0.0-beta.10",
"npm": "^6.13.1", "npm": "^6.13.1",
"onesignal-cordova-plugin": "^2.7.0",
"phonegap-plugin-barcodescanner": "^8.1.0", "phonegap-plugin-barcodescanner": "^8.1.0",
"phonegap-plugin-multidex": "^1.0.0", "phonegap-plugin-multidex": "^1.0.0",
"phonegap-plugin-push": "^2.3.0",
"primeicons": "^1.0.0", "primeicons": "^1.0.0",
"primeng": "^7.1.3", "primeng": "^7.1.3",
"run": "1.4.0", "run": "1.4.0",
@ -136,6 +137,7 @@
"karma-coverage-istanbul-reporter": "~2.0.1", "karma-coverage-istanbul-reporter": "~2.0.1",
"karma-jasmine": "~1.1.2", "karma-jasmine": "~1.1.2",
"karma-jasmine-html-reporter": "^0.2.2", "karma-jasmine-html-reporter": "^0.2.2",
"node-sass": "^4.13.0",
"protractor": "~5.4.0", "protractor": "~5.4.0",
"ts-node": "~8.0.0", "ts-node": "~8.0.0",
"tslint": "~5.12.0", "tslint": "~5.12.0",
@ -162,17 +164,19 @@
"cordova-plugin-ionic-webview": { "cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+" "ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
}, },
"cordova-android-support-gradle-release": {}, "cordova-android-support-gradle-release": {
"cordova.plugins.diagnostic": {}, "ANDROID_SUPPORT_VERSION": "27.+"
},
"cordova.plugins.diagnostic": {
"ANDROID_SUPPORT_VERSION": "28.+"
},
"cordova-open-native-settings": {}, "cordova-open-native-settings": {},
"cordova-plugin-camera": {}, "cordova-plugin-camera": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-file": {}, "cordova-plugin-file": {},
"cordova-plugin-filepath": {}, "cordova-plugin-filepath": {},
"com-badrit-base64": {}, "com-badrit-base64": {},
"phonegap-plugin-push": {
"GOOGLE_PLAY_SERVICES_VERSION": "16.0.0",
"FCM_VERSION": "15.0.0"
},
"cordova-sqlite-storage": {}, "cordova-sqlite-storage": {},
"cordova-plugin-ble-central": {}, "cordova-plugin-ble-central": {},
"uk.co.workingedge.phonegap.plugin.launchnavigator": {}, "uk.co.workingedge.phonegap.plugin.launchnavigator": {},
@ -184,9 +188,22 @@
"cordova-opentok-android-permissions": {}, "cordova-opentok-android-permissions": {},
"cordova-plugin-appavailability": {}, "cordova-plugin-appavailability": {},
"cordova-plugin-apprate": {}, "cordova-plugin-apprate": {},
"onesignal-cordova-plugin": {},
"cordova-plugin-fingerprint-aio": { "cordova-plugin-fingerprint-aio": {
"FACEID_USAGE_DESCRIPTION": "User Authentication" "FACEID_USAGE_DESCRIPTION": "User Authentication"
},
"cordova-plugin-firebasex": {
"FIREBASE_ANALYTICS_COLLECTION_ENABLED": "true",
"FIREBASE_PERFORMANCE_COLLECTION_ENABLED": "true",
"FIREBASE_CRASHLYTICS_COLLECTION_ENABLED": "true",
"ANDROID_ICON_ACCENT": "#FF00FFFF",
"ANDROID_PLAY_SERVICES_TAGMANAGER_VERSION": "17.0.0",
"ANDROID_FIREBASE_ANALYTICS_VERSION": "17.2.1",
"ANDROID_FIREBASE_MESSAGING_VERSION": "20.0.0",
"ANDROID_FIREBASE_CONFIG_VERSION": "19.0.3",
"ANDROID_FIREBASE_PERF_VERSION": "19.0.1",
"ANDROID_FIREBASE_AUTH_VERSION": "19.1.0",
"ANDROID_CRASHLYTICS_VERSION": "2.10.1",
"ANDROID_CRASHLYTICS_NDK_VERSION": "2.1.1"
} }
}, },
"platforms": [ "platforms": [

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 154 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 132 KiB

@ -1,25 +1,109 @@
<!-- <ion-nav [root]="rootPage" #mycontent swipeBackEnabled="false"></ion-nav> --> <!-- <ion-nav [root]="rootPage" #mycontent swipeBackEnabled="false"></ion-nav> -->
<!-- (ionWillOpen)="menuOpened(true)" --> <!-- (ionWillOpen)="menuOpened(true)" -->
<ion-app [dir]="direction"> <ion-app [dir]="direction">
<ion-split-pane> <ion-split-pane>
<ion-menu [side]=" direction === 'rtl' ? 'end' : 'start'" [swipeGesture]="false"> <ion-menu [side]=" direction === 'rtl' ? 'end' : 'start'" [swipeGesture]="false">
<ion-content class="sidebar-menu"> <ion-content class="sidebar-menu">
<div class="header-div"> <div class="header-div">
<div class="centerDiv"> <div>
<p class="TxtPlace">{{ts.trPK('home','hello')}}, {{User_name_Emp}}</p> <ion-button class="closeIcon" (click)="closeMenu()">
<!-- <div> <img src="{{user_image}}" class="profileImg"></div> --> <img style= "height: 18px !important;" src="../assets/imgs/close_menu_icon.png "></ion-button>
<div><img class="menuImg" [src]="user_image"></div>
</div> </div>
<div style="border-bottom: rgb(190, 186, 186) solid 1px;" >
<img class="mohemmLogo" src="../assets/imgs/menu_mohemm_logo.png" ></div>
<hr>
</div> </div>
<ion-list>
<ion-item (click)="openNotification()">
<div class="centerDiv homeBox" (click)="openPersonalInfo()">
<div class="profileDiv">
<!-- <ion-img class="profileImg" src="{{user_image}}"></ion-img> -->
<img class="profileImg" [src]="user_image">
<p class="TxtPlace">{{User_name_Emp}}</p>
<p class="TxtPlaces"> {{User_Job_name}}</p>
</div>
</div>
<!-- <div class="changeImgBtn">
<button ion-button icon-only menuToggle class="menubutton" (click)="changeImage()">
<ion-icon (click)="changeImage();" class="changeIcon" name="md-create"></ion-icon></button>
</div> -->
<!-- <div class="changeImgBtn">
<ion-button class="editIcon" (click)="changeImage()">
<img style= "height: 13px !important;" src="../assets/imgs/edit_icon.png ">
</ion-button>
<img class="menuImg" [src]="user_image"></div> -->
<!-- <div class="centerDiv">
<p class="TxtPlace">{{ts.trPK('home')}}, {{User_name_Emp}}</p>
//<div> <img src="{{user_image}}" class="profileImg"></div>
//<div><img class="menuImg" [src]="user_image"></div>
<p class="TxtPlaces">{{ts.trPK('home')}}, {{User_Job_name}}</p>
</div> -->
<div style="border-bottom: rgb(190, 187, 187) solid 1px;" >
<button class="logout" ion-button (click)="logout();" > {{ts.trPK('home','logout')}}</button>
</div>
<!-- <div>
<ion-item (click)="logout();">
<ion-thumbnail slot="start" class="menu-thumb"> <ion-thumbnail slot="start" class="menu-thumb">
<img width="30" src="../assets/imgs/bell.png" item-left> <img width="30" src="../assets/imgs/signout.png" item-left>
</ion-thumbnail> </ion-thumbnail>
<ion-label> <ion-label>
{{ts.trPK('home','worklist')}} {{ts.trPK('home','logout')}}
</ion-label>
</ion-item>
</div> -->
<br>
<ion-list>
<ion-item (click)="profile()">
<ion-thumbnail slot="start" class="menu-thumb">
<img style= "height: 24px !important;" src="../assets/imgs/profile_icon.png" item-left>
</ion-thumbnail>
<ion-label class="profile">
{{ts.trPK('userProfile','title')}}
</ion-label>
</ion-item>
<ion-item (click)="openChangePassword()">
<ion-thumbnail slot="start" class="menu-thumb">
<img style= "height: 25px !important;" src="../assets/imgs/lock_icon.png" item-left>
</ion-thumbnail>
<ion-label class="changepassword" >
{{ts.trPK('login','changepassword')}}
<ion-badge [ngClass]=" direction === 'rtl' ? 'end-badge' : 'start-badge'" slot="end" color="danger" class="main-badge">{{notBadge}}</ion-badge> <ion-badge [ngClass]=" direction === 'rtl' ? 'end-badge' : 'start-badge'" slot="end" color="danger" class="main-badge">{{notBadge}}</ion-badge>
</ion-label> </ion-label>
@ -29,15 +113,15 @@
</button> --> </button> -->
</ion-item> </ion-item>
<ion-item (click)="profile()"> <!-- <ion-item (click)="profile()">
<ion-thumbnail slot="start" class="menu-thumb"> <ion-thumbnail slot="start" class="menu-thumb">
<img width="30" src="../assets/imgs/username.png" item-left> <img width="30" src="../assets/imgs/profile_icon.png" item-left>
</ion-thumbnail> </ion-thumbnail>
<ion-label> <ion-label>
{{ts.trPK('userProfile','title')}} {{ts.trPK('userProfile','title')}}
</ion-label> </ion-label>
</ion-item> </ion-item> -->
<ion-item (click)="logout();"> <!-- <ion-item (click)="logout();">
<ion-thumbnail slot="start" class="menu-thumb"> <ion-thumbnail slot="start" class="menu-thumb">
@ -47,7 +131,7 @@
{{ts.trPK('home','logout')}} {{ts.trPK('home','logout')}}
</ion-label> </ion-label>
</ion-item> </ion-item> -->
</ion-list> </ion-list>
<div class="" style="text-align:center"> <div class="" style="text-align:center">
@ -55,7 +139,7 @@
<p class="companyTxt">{{CompanyImageDescription}}</p> <p class="companyTxt">{{CompanyImageDescription}}</p>
</div> </div>
<div class="menuFooter"> <div class="menuFooter">
<div> <img src="../assets/imgs/CS.png" class="CompanyImg"></div> <!-- <div> <img src="../assets/imgs/CS.png" class="CompanyImg"></div> -->
<p class="companyTxt">{{companyDesc}}</p> <p class="companyTxt">{{companyDesc}}</p>
</div> </div>
</ion-content> </ion-content>

@ -8,9 +8,86 @@ header
.content-ios:not([no-bounce])>.scroll-content::before { .content-ios:not([no-bounce])>.scroll-content::before {
bottom: 0; bottom: 0;
} }
.mohemmLogo{
max-width: 46% !important;
border: 0 !important;
margin-left: 70px !important;
margin-top: -24px !important;
margin-bottom: 11px;
}
.closeIcon{
height: 10px !important;
margin-left: 255px !important;
margin-top: 0px !important;
background: transparent;
--background: white !important;
}
.menubutton{
white-space: normal;
color: var(--light);
text-transform: capitalize;
min-height: 39px;
background: #f0ecec;
font-size: 2rem;
position: absolute;
width: 35px !important;
height: 19px;
box-shadow: 3px 0px 7px 0px #c5c2c2;
border-radius: 50%;
}
.changeIcon{
/* background: #c1c1c1; */
width: 21px;
/* height: 26px; */
border-radius: 50% !important;
position: relative;
color: #7f8c8d;
}
.changeImgBtn{
// margin: 0;
position: absolute;
top: 18%;
left: 68%;
// -ms-transform: translate(-50%, -50%);
// transform: translate(-50%, -50%);
}
.logout{
background-color:#22C6B3;
border: none;
color:white;
// padding: 20px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 12px;
margin-left: 120px !important;
margin-top: 15px !important;
margin-bottom: 20px !important;
border-radius: 30px;
// width: 40px;
height: 26px;
padding: 6px 24px;
}
.menuImg{ .menuImg{
width: 80px; width: 105px !important;
height: 80px; height: 105px !important;
margin-left: 90px !important;
display: inline-flex; display: inline-flex;
overflow: hidden; overflow: hidden;
background: transparent; background: transparent;
@ -122,17 +199,15 @@ header
margin-left: 0.2cm; margin-left: 0.2cm;
} }
.sidebar-menu .header-div { .sidebar-menu .header-div {
background: var(--primary);
background: -moz-linear-gradient(45deg, var(--primary) 0%, var(--secondary) 36%, var(--secondary) 59%, var(--customnavy) 100%);
background: -webkit-linear-gradient(45deg, var(--primary) 0%, var(--secondary) 36%, var(--secondary) 59%, var(--customnavy) 100%);
background: linear-gradient(45deg, var(--primary) 0%, var(--secondary) 36%, var(--secondary) 59%, var(--customnavy) 100%);
color: var(--light);
text-transform: capitalize; text-transform: capitalize;
height: 120px; height: 100px;
position: relative; position: relative;
display: block; display: block;
margin-bottom: 40px; margin-bottom: -28px;
} }
.list-md .item-block .item-inner, .list-md .item-block .item-inner,
@ -154,8 +229,20 @@ button.menu-item.item.item-block.item-ios {
.TxtPlace { .TxtPlace {
margin: 0; margin: 0;
padding: 40px 0 10px 0; padding: 0;
text-align: center; text-align: center;
font-weight: bolder;
color: black;
font-size: 16px;
}
.TxtPlaces{
margin: 0;
padding: 0;
text-align: center;
font-weight: bolder;
font-size: 14px;
color: darkgray;
} }
.menuFooter { .menuFooter {
@ -189,6 +276,30 @@ button.menu-item.item.item-block.item-ios {
text-align: center; text-align: center;
} }
ion-thumbnail.menu-thumb{ ion-thumbnail.menu-thumb{
width:30px; width:20px;
height:30px; height:20px;
// margin-top: 5px !important;
}
.changepassword{
color: black !important;
font-weight: bolder !important;
}
.profile{
color: black !important;
font-weight: bolder !important;
}
.profileImg{
width: 160px;
height: 160px;
display: -webkit-inline-box;
display: inline-flex;
overflow: hidden;
background: transparent;
border-radius: 70% !important;
position: relative;
top: 7px;
} }

@ -28,6 +28,7 @@ export class AppComponent implements OnInit, AfterViewInit {
companyUrl: string = "../assets/imgs/CS.png"; companyUrl: string = "../assets/imgs/CS.png";
companyDesc: string = "Powered By Cloud Solutions"; companyDesc: string = "Powered By Cloud Solutions";
public direction = "ltr"; public direction = "ltr";
User_Job_name: string;
constructor( constructor(
public ts: TranslatorService, public ts: TranslatorService,
private cs: CommonService, private cs: CommonService,
@ -38,8 +39,7 @@ export class AppComponent implements OnInit, AfterViewInit {
private menu: MenuController, private menu: MenuController,
private authService: AuthenticationService, private authService: AuthenticationService,
private sanitizer: DomSanitizer, private sanitizer: DomSanitizer,
public pushService: PushService, public pushService: PushService
) { ) {
this.events.subscribe("img-change", displayImg => { this.events.subscribe("img-change", displayImg => {
console.log("app compont: "+displayImg); console.log("app compont: "+displayImg);
@ -72,7 +72,6 @@ export class AppComponent implements OnInit, AfterViewInit {
private startReceivingPushService() { private startReceivingPushService() {
this.pushService.startReceiving(); this.pushService.startReceiving();
} }
subscribeEvents() { subscribeEvents() {
this.events.subscribe("setMenu", () => { this.events.subscribe("setMenu", () => {
@ -91,6 +90,8 @@ export class AppComponent implements OnInit, AfterViewInit {
this.user_image = user.EMPLOYEE_IMAGE this.user_image = user.EMPLOYEE_IMAGE
? "data:image/png;base64," + user.EMPLOYEE_IMAGE ? "data:image/png;base64," + user.EMPLOYEE_IMAGE
: "../assets/imgs/profile.png"; : "../assets/imgs/profile.png";
this.User_Job_name=user.JOB_NAME;
console.log(user); console.log(user);
} else { } else {
console.log(user); console.log(user);
@ -125,8 +126,13 @@ export class AppComponent implements OnInit, AfterViewInit {
this.cs.openLogin(); this.cs.openLogin();
} }
// profile() {
// this.cs.openProfile();
// this.menu.toggle();
// }
profile() { profile() {
this.cs.openProfile(); this.cs.openEditProfile();
this.menu.toggle(); this.menu.toggle();
} }
openNotification(){ openNotification(){
@ -135,4 +141,19 @@ export class AppComponent implements OnInit, AfterViewInit {
this.menu.toggle(); this.menu.toggle();
} }
openChangePassword(){
this.cs.openChangePassword();
this.menu.toggle();
}
private changeImage() {
this.cs.openChangeImagePage();
this.menu.toggle();
}
closeMenu(){
this.menu.toggle();
}
} }

@ -5,7 +5,6 @@ import { HmgCommonModule } from './hmg-common/hmg-common.module';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular'; import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx'; import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx'; import { StatusBar } from '@ionic-native/status-bar/ngx';
import { OneSignal } from '@ionic-native/onesignal/ngx';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module'; import { AppRoutingModule } from './app-routing.module';
@ -16,6 +15,8 @@ import {Camera,CameraOptions,PictureSourceType} from'@ionic-native/Camera/ngx';
import { FilePath } from "@ionic-native/file-path/ngx"; import { FilePath } from "@ionic-native/file-path/ngx";
import { File } from "@ionic-native/file/ngx"; import { File } from "@ionic-native/file/ngx";
import { Base64 } from "@ionic-native/base64/ngx"; import { Base64 } from "@ionic-native/base64/ngx";
import { FirebaseX } from '@ionic-native/firebase-x/ngx';
@NgModule({ @NgModule({
declarations: [AppComponent], declarations: [AppComponent],
entryComponents: [], entryComponents: [],
@ -37,7 +38,7 @@ import { Base64 } from "@ionic-native/base64/ngx";
File, File,
FilePath, FilePath,
Base64, Base64,
OneSignal, FirebaseX,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy } { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
], ],
bootstrap: [AppComponent] bootstrap: [AppComponent]

@ -15,6 +15,7 @@ import { LoginRequest } from "src/app/hmg-common/services/authentication/models/
import { Password } from '../models/password'; import { Password } from '../models/password';
import { CheckUserAuthenticationRequest } from 'src/app/hmg-common/services/authentication/models/check-user-auth.request'; import { CheckUserAuthenticationRequest } from 'src/app/hmg-common/services/authentication/models/check-user-auth.request';
import { CheckAppVersionResponse } from 'src/app/hmg-common/services/authentication/models/check-app-version.response'; import { CheckAppVersionResponse } from 'src/app/hmg-common/services/authentication/models/check-app-version.response';
import { PushService } from 'src/app/hmg-common/services/push/push.service';
@Component({ @Component({
selector: "login", selector: "login",
@ -52,7 +53,8 @@ export class LoginComponent implements OnInit, OnDestroy {
public device: Device, public device: Device,
public splash: SplashScreen, public splash: SplashScreen,
public sharedData: SharedDataService, public sharedData: SharedDataService,
public plt: Platform public plt: Platform,
public pushService: PushService
) { } ) { }
ngOnInit() { ngOnInit() {
@ -107,8 +109,18 @@ export class LoginComponent implements OnInit, OnDestroy {
} }
public onLogin() { public onLogin() {
this.checkAppUpdated(); let deviceToken = localStorage.getItem('deviceToken');
// this.checkUserAuthentication(); if (deviceToken) {
console.log('login enabled first time: ' + deviceToken);
this.checkAppUpdated();
} else {
this.pushService.startReceiving();
setTimeout(() => {
deviceToken = localStorage.getItem('deviceToken');
this.checkAppUpdated();
console.log('login enabled second time: ' + deviceToken);
}, 1000);
}
} }
public checkAppUpdated() { public checkAppUpdated() {

@ -33,6 +33,7 @@ import { KeysPipe } from './pipes/keys/keys.pipe';
import { SegmentContentComponent } from './ui/segment-content/segment-content.component'; import { SegmentContentComponent } from './ui/segment-content/segment-content.component';
import { GraphComponent } from './ui/graph/graph.component'; import { GraphComponent } from './ui/graph/graph.component';
import { NgxChartsModule } from '@swimlane/ngx-charts'; import { NgxChartsModule } from '@swimlane/ngx-charts';
import { ExpandableComponent } from './ui/expandable/expandable.component'; import { ExpandableComponent } from './ui/expandable/expandable.component';
import { ProjectsService } from './services/projects/projects.service'; import { ProjectsService } from './services/projects/projects.service';
import { NationalityService } from './services/nationality/nationality.service'; import { NationalityService } from './services/nationality/nationality.service';
@ -100,6 +101,8 @@ import {FileUploderProfileComponent} from './ui/file-uploder-profile/file-uplode
import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx'; import { OpenNativeSettings } from '@ionic-native/open-native-settings/ngx';
import { AccordinCustomComponent } from './ui/accordin-custom/accordin-custom.component'; import { AccordinCustomComponent } from './ui/accordin-custom/accordin-custom.component';
import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-custom/accordin-tab-custom.component' import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-custom/accordin-tab-custom.component'
import {DashboredService} from './services/dashbored/dashbored.service';
import {NgxGaugeModule} from 'ngx-gauge';
@NgModule({ @NgModule({
imports: [ imports: [
CommonModule, CommonModule,
@ -109,7 +112,8 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus
HttpClientModule, HttpClientModule,
NgxChartsModule, NgxChartsModule,
ListboxModule, ListboxModule,
PdfViewerModule PdfViewerModule,
NgxGaugeModule
], ],
declarations: [ declarations: [
NumberRangeComponent, NumberRangeComponent,
@ -218,9 +222,11 @@ import { AccordinTabCustomComponent} from './ui/accordin-custom/accordin-tab-cus
WorkListAttachViewComponent, WorkListAttachViewComponent,
FileUploderProfileComponent, FileUploderProfileComponent,
AccordinTabCustomComponent, AccordinTabCustomComponent,
AccordinCustomComponent AccordinCustomComponent,
NgxGaugeModule
], ],
providers: [ providers: [
DashboredService,
ConnectorService, ConnectorService,
TranslatorService, TranslatorService,
Globalization, Globalization,

@ -78,5 +78,8 @@ MobileNumber:string;
LogInTokenID:string; LogInTokenID:string;
CompanyImageDescription: string; CompanyImageDescription: string;
CompanyImageURL: string; CompanyImageURL: string;
SERVICE_DAYS:Number;
SERVICE_MONTHS:Number;
SERVICE_YEARS:Number;
} }

@ -990,6 +990,9 @@ export class CommonService {
public openProfile() { public openProfile() {
this.nav.navigateForward(["/profile/home"]); this.nav.navigateForward(["/profile/home"]);
} }
public openEditProfile() {
this.nav.navigateForward(["/profile/editprofile"]);
}
public openAccuralPage() { public openAccuralPage() {
this.nav.navigateForward(["/accrual-balances/home"]); this.nav.navigateForward(["/accrual-balances/home"]);
} }
@ -1080,6 +1083,13 @@ export class CommonService {
public openConfirmLoginPage() { public openConfirmLoginPage() {
this.nav.navigateForward(["/authentication/confirmLogin"]); this.nav.navigateForward(["/authentication/confirmLogin"]);
} }
public openEditprofile() {
this.nav.navigateForward(["/profile/editProfile"]);
}
public openPerformanceevaluation() {
this.nav.navigateForward(["/profile/performanceevaluation"]);
}
public reload(url: string, from: string) { public reload(url: string, from: string) {
console.log("force reload called from:" + from); console.log("force reload called from:" + from);

@ -0,0 +1,9 @@
export class AttendanceTrackingList{
public SCHEDULED_HOURS :string;
public SPENT_HOURS : string;
public REMAINING_HOURS : string;
public RETURN_STATUS : string;
public RETURN_MSG : string;
}

@ -0,0 +1,9 @@
export class OpenMissingSwipesList{
public OPEN_MISSING_SWIPES :number;
public RETURN_STATUS : string;
public RETURN_MSG : string;
}

@ -0,0 +1,4 @@
export class OrganizationsSalariesList{
public ORGANIZATION_NAME :string;
public ORGANIZATIONS_SALARIES : number;
}

@ -0,0 +1,6 @@
export class PerformanceAppraisalList{
public APPRAISAL_SCORE :string;
public APPRAISAL_YEAR : number;
}

@ -0,0 +1,8 @@
import { Response } from "src/app/hmg-common/services/models/response";
import { AttendanceTrackingList } from './AttensanceTrackingList';
export class AttendanceTrackingResponse extends Response{
public GetGetAttendanceTrackingList : AttendanceTrackingList[];
}

@ -0,0 +1,12 @@
import { TestBed } from '@angular/core/testing';
import { DashboredService } from './dashbored.service';
describe('DashboredService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: DashboredService = TestBed.get(DashboredService);
expect(service).toBeTruthy();
});
});

@ -0,0 +1,99 @@
import { Injectable } from '@angular/core';
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
import { ConnectorService } from "src/app/hmg-common/services/connector/connector.service";
import { Observable } from 'rxjs';
import { Request } from "src/app/hmg-common/services/models/request";
import { OrganizationSalariesResponse } from './organization-salaries.response';
import { OpenMissingSwipesResponse } from './open-missing-swipes.response';
import { PerformanceAppraisalResponse } from './performance-appraisal.response';
import {AttendanceTrackingResponse} from './attendance-tracking.response'
import {OpenPeriodDatesResponse} from '../../services/dashbored/models/openPeriodDatesResponse'
import {GetSubordinatesLeavesRequest} from './models/GetSubordinatesLeavesRequest';
import {GetSubordinatesLeavesResponse} from './models/GetSubordinatesLeavesResponse';
import {GetSubordinatesAttdStatusRequest} from './models/GetSubordinatesAttdStatusRequest';
import {GetSubordinatesAttdStatusResponse} from './models/GetSubordinatesAttdStatusResponse';
import {GetOpenNotificationsResponse} from './models/GetOpenNotificationsResponse'
@Injectable({
providedIn: 'root'
})
export class DashboredService {
public static organizationSalariesUrl="Services/ERP.svc/REST/GET_ORGANIZATIONS_SALARIES"
public static openmissingswipesUrl="Services/ERP.svc/REST/GET_OPEN_MISSING_SWIPES"
public static performanceappraisalUrl="Services/ERP.svc/REST/GET_Performance_Appraisal"
public static attendancetrackingUrl="Services/ERP.svc/REST/GET_Attendance_Tracking"
public static getOpenPeriodDates = 'Services/ERP.svc/REST/GET_OPEN_PERIOD_DATES';
public static getOpenNotifications = 'Services/ERP.svc/REST/GET_OPEN_NOTIFICATIONS';
public static getSubordinatesLeaves = 'Services/ERP.svc/REST/GET_SUBORDINATES_LEAVES';
public static getSubordinatesAttStatus = 'Services/ERP.svc/REST/GET_SUBORDINATES_ATTD_STATUS';
constructor(
public con: ConnectorService,
public authService: AuthenticationService,
) { }
public getOrganizationSalaries(onError ?:any ,oerrorLable ?:any):Observable<OrganizationSalariesResponse>{
const request = new Request();
this.authService.authenticateRequest(request);
return this.con.post(
DashboredService.organizationSalariesUrl,
request,
onError,
oerrorLable
);}
public getOpenMissingSwipes(onError ?:any ,oerrorLable ?:any):Observable<OpenMissingSwipesResponse>{
const request = new Request();
this.authService.authenticateRequest(request);
return this.con.post(
DashboredService.openmissingswipesUrl,
request,
onError,
oerrorLable
);
}
public getPerformanceAppraisal(onError ?:any ,oerrorLable ?:any):Observable<PerformanceAppraisalResponse>{
const request = new Request();
this.authService.authenticateRequest(request);
return this.con.post(
DashboredService.performanceappraisalUrl,
request,
onError,
oerrorLable
);
}
public getAttendanceTracking(onError ?:any ,oerrorLable ?:any):Observable<AttendanceTrackingResponse>{
const request = new Request();
this.authService.authenticateRequest(request);
return this.con.post(
DashboredService.attendancetrackingUrl,
request,
onError,
oerrorLable
);
}
public getOpenPeriodDates( onError?: any, errorLabel?: string): Observable<OpenPeriodDatesResponse> {
const request = new Request();
this.authService.authenticateRequest(request);
return this.con.post(DashboredService.getOpenPeriodDates, request, onError, errorLabel);
}
public getOpenNotifications( onError?: any, errorLabel?: string): Observable<GetOpenNotificationsResponse> {
const request = new Request();
this.authService.authenticateRequest(request);
return this.con.post(DashboredService.getOpenNotifications, request, onError, errorLabel);
}
public getSubordinatesLeaves( req:GetSubordinatesLeavesRequest,onError?: any, errorLabel?: string): Observable<GetSubordinatesLeavesResponse> {
this.authService.authenticateRequest(req);
return this.con.post(DashboredService.getSubordinatesLeaves, req, onError, errorLabel);
}
public getSubordinatesAttStatus( req:GetSubordinatesAttdStatusRequest, onError?: any, errorLabel?: string): Observable<GetSubordinatesAttdStatusResponse> {
this.authService.authenticateRequest(req);
return this.con.post(DashboredService.getSubordinatesAttStatus, req, onError, errorLabel);
}
}

@ -0,0 +1,11 @@
export class GetOpenNotificationsList
{
public ITEM_TYPE: number;
public ITEM_TYPE_DISPLAY_NAME:number;
public OPEN_NTF_NUMBER:number;
}

@ -0,0 +1,7 @@
import { GetOpenNotificationsList } from './GetOpenNotificationsList';
import { Response } from '../../../services/models/response'
export class GetOpenNotificationsResponse extends Response {
public GetOpenNotificationsList: GetOpenNotificationsList [];
}

@ -0,0 +1,16 @@
export class GetSubordinatesAttdStatusList
{
public NUMBER_OF_EMPLOYEES: number;
public LATE_IN:number;
public EARLY_OUT:number;
public ON_TIME:number;
public ABSENCE:number;
}

@ -0,0 +1,7 @@
import { Request } from '../../../services/models/request'
export class GetSubordinatesAttdStatusRequest extends Request{
//public static SHARED_DATA = '';
public P_SCHEDULE_DATE_FROM :any;
public P_SCHEDULE_DATE_TO :any;
}

@ -0,0 +1,7 @@
import { GetSubordinatesAttdStatusList } from './GetSubordinatesAttdStatusList';
import { Response } from '../../../services/models/response'
export class GetSubordinatesAttdStatusResponse extends Response {
public GetSubordinatesAttdStatusList: GetSubordinatesAttdStatusList [];
}

@ -0,0 +1,35 @@
export class GetSubordinatesLeavesList
{
public LVL: number;
public EMPLOYEE_NUMBER:String;
public EMPLOYEE_NAME:String;
public ORGANIZATION_ID:number;
public ORGANIZATION_NAME:String
public SUPERVISOR_NUMBER:String;
public SUPERVISOR_NAME:String;
public SUPERVISOR_ORGANIZATION_ID:number;
public SUPERVISOR_ORGANIZATION_NAME:String;
public EVENT_DATE:any;//DATE;
public LEAVE_TYPE:String;
public DATE_START:any;//DATE;
public DATE_END:any;//DATE;
public ABSENCE_ATTENDANCE_TYPE_NAME:String;
public CALENDAR_ENTRY_DESC:String;
public STATUS:String;
}

@ -0,0 +1,8 @@
import { Request } from '../../../services/models/request'
export class GetSubordinatesLeavesRequest extends Request{
//public static SHARED_DATA = '';
public P_DATE_FROM :any;
public P_DATE_TO :any;
}

@ -0,0 +1,7 @@
import { GetSubordinatesLeavesList } from './GetSubordinatesLeavesList';
import { Response } from '../../../services/models/response'
export class GetSubordinatesLeavesResponse extends Response {
public GetSubordinatesLeavesList: GetSubordinatesLeavesList [];
}

@ -0,0 +1,7 @@
export class OpenPeriodDatesList {
public P_CLOSING_PERIOD_DATE: any;
public P_PERIOD_END_DATE: any;
public P_PERIOD_START_DATE: any;
public P_RETURN_MSG: string;
public P_RETURN_STATUS: string;
}

@ -0,0 +1,7 @@
import { OpenPeriodDatesList } from './openPeriodDatesList';
import { Response } from '../../../services/models/response'
export class OpenPeriodDatesResponse extends Response {
public openPeriodDatesList: OpenPeriodDatesList [];
}

@ -0,0 +1,8 @@
import { Response } from "src/app/hmg-common/services/models/response";
import { OpenMissingSwipesList } from './OpenMissingSwipesList';
export class OpenMissingSwipesResponse extends Response{
public GetGetOpenMissingSwipesList : OpenMissingSwipesList[];
}

@ -0,0 +1,6 @@
import { Response } from "src/app/hmg-common/services/models/response";
import { OrganizationsSalariesList } from './OrganizationsSalariesList';
export class OrganizationSalariesResponse extends Response{
public GetGetOrganizationsSalariesList : OrganizationsSalariesList[];
}

@ -0,0 +1,11 @@
import { Response } from "src/app/hmg-common/services/models/response";
import { PerformanceAppraisalList } from './PerformanceAppraisalList';
export class PerformanceAppraisalResponse extends Response{
public GetPerformanceAppraisalList :PerformanceAppraisalList[];
public static PERFORMANCE_DATA = "PERFORMANCE_DATA"
}

@ -16,7 +16,8 @@ import { SessionModel } from './models/session.model';
import { AuthenticatedUser } from '../authentication/models/authenticated-user'; import { AuthenticatedUser } from '../authentication/models/authenticated-user';
// import { NotificationsCenterService } from 'src/app/eservices/notifications-center/service/notifications-center.service'; // import { NotificationsCenterService } from 'src/app/eservices/notifications-center/service/notifications-center.service';
// import { NotificationsComponent } from 'src/app/eservices/notifications-center/notifications/notifications.component'; // import { NotificationsComponent } from 'src/app/eservices/notifications-center/notifications/notifications.component';
import {OneSignal} from '@ionic-native/onesignal/ngx' import { FirebaseX } from '@ionic-native/firebase-x/ngx';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
}) })
@ -37,13 +38,13 @@ export class PushService {
public ngZone: NgZone, public ngZone: NgZone,
// public notifyService: NotificationsCenterService, // public notifyService: NotificationsCenterService,
public events: Events, public events: Events,
private oneSignal: OneSignal, public firebasex: FirebaseX,
) { } ) { }
public startReceiving() { public startReceiving() {
this.processStartReceiving(); // this.processStartReceiving();
this.processStartReceivingWithFirebase();
} }
private processStartReceiving1() { private processStartReceiving1() {
// if (this.cs.isCordova()) { // if (this.cs.isCordova()) {
@ -160,11 +161,15 @@ export class PushService {
} }
private registerInBackend(data: any) { private registerInBackend(data: any) {
console.log("registerInBackend"); console.log('firebasex Token ID: ' + data);
if (data) {
this.cs.sharedService.setSharedData(data, AuthenticationService.DEVICE_TOKEN);
localStorage.setItem('deviceToken', data);
}
if (this.authService.isAuthenticated()) { if (this.authService.isAuthenticated()) {
this.registerAuthenticatedUser(data.registrationId); this.registerAuthenticatedUser(data);
} else { } else {
this.registerNotAuthenticatedUser(data.registrationId); this.registerNotAuthenticatedUser(data);
} }
} }
@ -210,45 +215,17 @@ export class PushService {
} }
private processStartReceivingWithFirebase() {
private processStartReceiving() { this.firebasex.getToken().then(token => {
console.log('processStartReceiving'); console.log(token);
this.registerInBackend(token);
console.log("processStartReceiving openConference"); });
this.oneSignal.startInit('8d9b8313-0365-4934-a2a9-fdee5aeac66e', PushService.SENDER_ID); this.firebasex.onTokenRefresh().subscribe(token => {
this.oneSignal.inFocusDisplaying(this.oneSignal.OSInFocusDisplayOption.Notification); console.log(token);
this.oneSignal.handleNotificationReceived().subscribe(data => this.onPushReceived(data.payload)); this.registerInBackend(token);
this.oneSignal.handleNotificationOpened().subscribe(data => this.onPushOpened(data.notification.payload));
console.log("this.oneSignal: "+ this.oneSignal.getIds());
this.oneSignal.endInit();
this.oneSignal.getIds().then(result => {
console.log("result.userId: " +result.userId);
//there is no part for notLoggedInUserURL () as patient app
if(result.userId){
this.cs.sharedService.setSharedData(result.userId, AuthenticationService.DEVICE_TOKEN);
localStorage.setItem("deviceToken", result.userId);
}
this.registerInBackend(result.userId);
}, err => {
console.log("getIds() error: "+err);
}); });
// if (this.cs.isCordova()) {
// console.log('Notification Channel Called');
// if (this.platform.is('android')) {
// this.stopNotifications(() => {
// });
// } else {
// //initialize code
// }
// }
} }
public onPushReceived(payload: any) { public onPushReceived(payload: any) {
console.log(JSON.parse(JSON.stringify(payload))); console.log(JSON.parse(JSON.stringify(payload)));
console.log('Push-Received whole payload: ' + payload); console.log('Push-Received whole payload: ' + payload);

@ -1,10 +1,28 @@
<div class="centerDiv changeImgBtn"> <!-- <div class="centerDiv changeImgBtn">
<ion-button class="btnImge" color="customnavy" ion-button (click)="openFile()" expand="block" fill="outline"> <ion-button class="btnImge" color="customnavy" ion-button (click)="openFile()" expand="block" fill="outline">
<!-- <ion-icon class="changeIcon" name="camera" ></ion-icon> --> <ion-icon class="changeIcon" name="camera" ></ion-icon>
{{'userProfile,changeImg' | translate}} {{'userProfile,changeImg' | translate}}
</ion-button> </ion-button>
</div> </div> -->
<div class="centerDiv changeImgBtn">
<button ion-button class="btnImge" (click)="openFile()">
<img style= "height: 28px !important;" src="../assets/imgs/camera_icon.png ">
</button>
</div>
<!-- <div class="centerDiv changeImgBtn">
<button ion-button class="btnImge" (click)="openFile()">
<ion-icon class="changeIcon" name="camera" ></ion-icon>
</button>
</div> -->

@ -8,13 +8,24 @@
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
.btnImge{ .btnImge{
button{ // button{
border-color:transparent !important; border-color:transparent !important;
} --background: #22C6B3 !important;
background: #22C6B3 !important;
height: 57px !important;
width: 60px !important;
border-radius: 50% !important;
// }
} }
//test //test
.changeIcon{ .changeIcon{
background: #19a163; background: #22C6B3 !important;
width: 15px; border-radius: 50% !important;
height: 15px; width: 73px;
height: 55px;
color: white !important;
width: 80px;
height: 71px;
} }

@ -11,9 +11,9 @@
<img class="menuImg" src="../assets/imgs/home/burgerMenu.png"/> <img class="menuImg" src="../assets/imgs/home/burgerMenu.png"/>
<ion-badge id="homeBadgeBtn" slot="end" color="danger">{{notBadge}}</ion-badge> <ion-badge id="homeBadgeBtn" slot="end" color="danger">{{notBadge}}</ion-badge>
</button> </button>
<button ion-button icon-only menuToggle class="menubuttonTrans" (click)="openMenu()"> <!-- <button ion-button icon-only menuToggle class="menubuttonTrans" (click)="openMenu()">
<img class="transImg" src="../assets/imgs/home/arabicSwitch.png"/> <img class="transImg" src="../assets/imgs/home/arabicSwitch.png"/>
</button> </button> -->
<div class="centerDiv homeBox" (click)="openPersonalInfo()"> <div class="centerDiv homeBox" (click)="openPersonalInfo()">
<p class="TxtPlace">{{ts.trPK('home','hello')}}, {{userData.EMPLOYEE_DISPLAY_NAME}}</p> <p class="TxtPlace">{{ts.trPK('home','hello')}}, {{userData.EMPLOYEE_DISPLAY_NAME}}</p>
<div class="profileDiv"> <div class="profileDiv">
@ -84,7 +84,7 @@
</button> </button>
</ion-col> </ion-col>
<ion-col size="6" class="col-grid"> <!-- <ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="Change_password()"> <button ion-button block class="serviceItem" (click)="Change_password()">
<ion-img class="serviceItemImg" src="../assets/imgs/home/announcements.png"></ion-img> <ion-img class="serviceItemImg" src="../assets/imgs/home/announcements.png"></ion-img>
<p>{{ts.trPK('login','announcement')}}</p> <p>{{ts.trPK('login','announcement')}}</p>
@ -95,7 +95,7 @@
<ion-img class="serviceItemImg" src="../assets/imgs/home/timeAttendance.png"></ion-img> <ion-img class="serviceItemImg" src="../assets/imgs/home/timeAttendance.png"></ion-img>
<p>{{ts.trPK('home','timeAndAttendance')}}</p> <p>{{ts.trPK('home','timeAndAttendance')}}</p>
</button> </button>
</ion-col> </ion-col> -->
<!-- <ion-col size="6" class="col-grid"> <!-- <ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="openPayslip()"> <button ion-button block class="serviceItem" (click)="openPayslip()">

@ -25,6 +25,18 @@ import { DomSanitizer } from '@angular/platform-browser';
import {FileUploderProfileComponent} from '../hmg-common/ui/file-uploder-profile/file-uploder-profile.component' import {FileUploderProfileComponent} from '../hmg-common/ui/file-uploder-profile/file-uploder-profile.component'
import { SharedDataService } from '../hmg-common/services/shared-data-service/shared-data.service'; import { SharedDataService } from '../hmg-common/services/shared-data-service/shared-data.service';
import { DevicePermissionsService } from '../hmg-common/services/device-permissions/device-permissions.service'; import { DevicePermissionsService } from '../hmg-common/services/device-permissions/device-permissions.service';
import { DashboredService } from '../hmg-common/services/dashbored/dashbored.service';
import { OrganizationSalariesResponse } from '../hmg-common/services/dashbored/organization-salaries.response';
import { OpenMissingSwipesResponse} from '../hmg-common/services/dashbored/open-missing-swipes.response';
import {PerformanceAppraisalResponse} from '../hmg-common/services/dashbored/performance-appraisal.response';
import { AttendanceTrackingResponse } from '../hmg-common/services/dashbored/attendance-tracking.response';
import { OpenPeriodDatesResponse } from '../hmg-common/services/dashbored/models/openPeriodDatesResponse';
import {GetSubordinatesAttdStatusRequest} from '../hmg-common/services/dashbored/models/GetSubordinatesAttdStatusRequest';
import {GetSubordinatesLeavesRequest} from '../hmg-common/services/dashbored/models/GetSubordinatesLeavesRequest'
import {GetOpenNotificationsResponse}from '../hmg-common/services/dashbored/models/GetOpenNotificationsResponse'
import {GetSubordinatesAttdStatusResponse}from '../hmg-common/services/dashbored/models/GetSubordinatesAttdStatusResponse'
import {GetSubordinatesLeavesResponse}from '../hmg-common/services/dashbored/models/GetSubordinatesLeavesResponse'
@Component({ @Component({
selector: "app-home", selector: "app-home",
@ -66,7 +78,8 @@ export class HomePage implements OnInit {
//private transfer: Transfer, //private transfer: Transfer,
private file: File, private file: File,
//private filePath: FilePath //private filePath: FilePath
private permissions: DevicePermissionsService private permissions: DevicePermissionsService,
public DS :DashboredService
) { ) {
this.events.subscribe("img-change", displayImg => { this.events.subscribe("img-change", displayImg => {
@ -133,17 +146,17 @@ export class HomePage implements OnInit {
} }
} }
getCount() { getCount() {
const req: any = {}; // const req: any = {};
this.menuService.getNotificationCount(req).subscribe((result: any) => { // this.menuService.getNotificationCount(req).subscribe((result: any) => {
if (this.common.validResponse(result)) { // if (this.common.validResponse(result)) {
this.notBadge = // this.notBadge =
result.GetOpenNotificationsNumList.P_OPEN_NOTIFICATIONS_NUM; // result.GetOpenNotificationsNumList.P_OPEN_NOTIFICATIONS_NUM;
if (this.notBadge <= 0) { // if (this.notBadge <= 0) {
this.notBadge = null; // this.notBadge = null;
} // }
this.events.publish("getNotCount", this.notBadge); // this.events.publish("getNotCount", this.notBadge);
} // }
}); // });
} }
// ionViewDidLoad() { // ionViewDidLoad() {
// this.geolocation // this.geolocation
@ -377,4 +390,90 @@ export class HomePage implements OnInit {
openPersonalInfo() { openPersonalInfo() {
this.common.openProfile(); this.common.openProfile();
} }
/*************************************Dashboards Services**********************************************************8 */
showOrganizationSalaries(){
this.DS.getOrganizationSalaries() .subscribe((result: OrganizationSalariesResponse ) => {
});;
} }
showOpenMissingSwipes(){
this.DS.getOpenMissingSwipes() .subscribe((result: OpenMissingSwipesResponse) => {
});;
}
showPerformanceAppraisal(){
this.DS.getPerformanceAppraisal() .subscribe((result: PerformanceAppraisalResponse) => {
});
}
showAttendanceTracking(){
this.DS.getAttendanceTracking() .subscribe((result: AttendanceTrackingResponse) => {
});;
}
openPeriodDateDashbored(){
this.DS.getOpenPeriodDates( ()=> {console.log("Error ");} ).subscribe((result:OpenPeriodDatesResponse)=>{
if (this.common.validResponse(result)) {
console.log("response");
}
});
}
openNotificationsDashbored(){
this.DS.getOpenNotifications( ()=> {console.log("Error ");} ).subscribe((result:GetOpenNotificationsResponse)=>{
if (this.common.validResponse(result)) {
console.log("response");
console.log(result);
}
});
}
getSubordinatesLeaves(){
let request:GetSubordinatesLeavesRequest=new GetSubordinatesLeavesRequest();
request.P_DATE_FROM="/Date(1578603600000+0300)/"; //test
request.P_DATE_TO="/Date(1576011600000+0300)/"; //test
this.DS.getSubordinatesLeaves( request,()=> {console.log("Error ");} ).subscribe((result:GetSubordinatesLeavesResponse)=>{
if (this.common.validResponse(result)) {
console.log("response");
console.log(result);
}
});
}
getSubordinatesAttStatus(){
let request: GetSubordinatesAttdStatusRequest = new GetSubordinatesAttdStatusRequest();
request.P_SCHEDULE_DATE_FROM="/Date(1578603600000+0300)/"; //test
request.P_SCHEDULE_DATE_TO="/Date(1576011600000+0300)/";//test
this.DS.getSubordinatesAttStatus( request,()=> {console.log("Error ");} ).subscribe((result:GetSubordinatesAttdStatusResponse)=>{
if (this.common.validResponse(result)) {
console.log("response");
console.log(result);
}
});
}
}

@ -7,7 +7,6 @@ import { WorKListResponse } from "../models/workListResponse";
import { WorklistService } from "../service/worklist.service"; import { WorklistService } from "../service/worklist.service";
import { IonInfiniteScroll } from '@ionic/angular'; import { IonInfiniteScroll } from '@ionic/angular';
import { WorklistMainService } from '../service/work-list.main.service'; import { WorklistMainService } from '../service/work-list.main.service';
@Component({ @Component({
selector: "app-home", selector: "app-home",
templateUrl: "./home.component.html", templateUrl: "./home.component.html",
@ -48,7 +47,7 @@ export class HomeComponent implements OnInit {
public common: CommonService, public common: CommonService,
public ts: TranslatorService, public ts: TranslatorService,
public WorklistService: WorklistService, public WorklistService: WorklistService,
public workListService: WorklistMainService public workListService: WorklistMainService,
) { ) {
this.WorkListObj = new WorkListRequest(); this.WorkListObj = new WorkListRequest();
this.WorkListObj.P_NOTIFICATION_TYPE = "1"; this.WorkListObj.P_NOTIFICATION_TYPE = "1";
@ -332,4 +331,6 @@ export class HomeComponent implements OnInit {
this.isSearch = !this.isSearch; this.isSearch = !this.isSearch;
} }
} }

@ -0,0 +1,77 @@
<ion-content class="colorBG">
<div class="header-div">
<ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-buttons>
<p class="proTitles">{{ts.trPK('userProfile','title')}}</p>
<div>
<div class="centerDiv homeBox" (click)="openPersonalInfo()">
<!-- <div class="profileDiv"> -->
<img class="profileImg" [src]="user_image">
</div>
<!-- <ion-img class="profileImg" [src]="imageSrc"></ion-img> -->
<div *ngIf="personalInfo">
<p class="empName">{{User_name_Emp}}</p>
<p class="empJob"> {{User_Job_name}}</p>
</div>
</div>
</div>
<ion-grid *ngIf="personalInfo">
<div class="gridService">
<ion-row>
<ion-col class="columns">
<label class="service">{{personalInfo.SERVICE_YEARS}}</label>
<br> <label class="services">YEARS</label>
</ion-col>
<ion-col class="columns">
<label class="service">{{personalInfo.SERVICE_MONTHS}}</label>
<br> <label class="services">MONTHS</label>
</ion-col>
<ion-col class="columns">
<label class="service">{{personalInfo.SERVICE_DAYS}}</label>
<br> <label class="services">DAYS</label>
</ion-col>
</ion-row>
</div>
</ion-grid>
<div class="list">
<ion-list class="list-ios">
<div class="p">
<p>Years of Services</p>
</div>
<ion-item class="itemline" (click)="openEditprofile()">
<ion-thumbnail slot="start" class="menu-thumb">
<img style= "height: 22px !important;" src="../assets/imgs/profile_icon.png" item-left>
</ion-thumbnail>
<ion-label class="profile">
{{ts.trPK('userProfile','edit-profile')}}
</ion-label>
<ion-icon style= "width: 20px; height: 22px !important;" name="arrow-forward" item-right></ion-icon>
</ion-item>
<ion-item class="itemlins" (click)="openPerormance()">
<ion-thumbnail slot="start" class="menu-thumb">
<ion-icon style= "width: 23px; height: 24px !important;" name="speedometer" item-left></ion-icon>
</ion-thumbnail>
<ion-label class="profile">
{{ts.trPK('userProfile','performance-evaluation')}}
</ion-label>
<ion-icon style= "width: 20px; height: 22px !important;" name="arrow-forward" item-right></ion-icon>
</ion-item>
</ion-list>
</div>
</ion-content>

@ -0,0 +1,153 @@
.list-ios {
margin-left: 0;
margin-right: 0;
margin-top: 32px;
margin-bottom: 32px;
background: var(--ion-item-background,var(--ion-background-color,#fff));
}
.colorBG{
--background: #f0efef;
}
.header-div{
text-transform: capitalize;
background: #22C6B3;
display: block;
position: relative;
height: 160px;
margin-bottom: 60px;
}
.profileImg{
width: 160px;
height: 160px;
display: -webkit-inline-box;
display: inline-flex;
overflow: hidden;
/* background: transparent; */
border-radius: 78% !important;
position: relative;
top: 34px;
// background: white;
background: transparent;
margin-left: -3px;
}
.proTitles {
margin: 0;
padding: 0;
font-size: 16px;
text-align: center;
font-weight: bolder;
color: white;
margin-top: -33px;
}
.Text {
margin: 0;
padding: 0;
text-align: center;
font-weight: bolder;
color: black;
font-size: 16px;
margin-top: 34px;
margin-bottom: 10px;
text-align: center;
}
ion-thumbnail.menu-thumb{
width:20px;
height:20px;
// margin-top: 5px !important;
}
.profile{
color: black !important;
// font-weight: bolder !important;
}
.gridService{
// background-color: #094875;
margin-top: 87px;
border-radius: 10px;
margin-bottom: -49px;
margin-left: 14px;
margin-right: 14px;
}
.columns{
margin: 10px;
background: #094875;
border-radius: 27px;
padding-left: 30px;
padding-right: 6px;
padding-top: 19px;
padding-bottom: 26px;
}
.service{
font-size: 28px;
// font-weight: bolder;
color: white;
letter-spacing: 1px;
font-weight: bold;
}
.services{
font-size: 12px;
color: white;
}
.list{
margin-left: 14px;
margin-right: 14px;
border-radius: 10px;
background: white;
border: solid #bebbbb !important;
padding: 2px;
}
.p{
color: black !important;
font-size: medium;
text-align: center;
border-bottom: rgb(190, 187, 187) solid 1px;
}
.itemline{
border-bottom: rgb(190, 187, 187) solid 1px;
}
.itemlins{
border-bottom: rgb(190, 187, 187) solid 1px;
margin-bottom: 209px;
}
.empName {
margin: 0;
padding: 0;
text-align: center;
font-weight: bolder;
color: black;
font-size: 16px;
margin-top: 38px;
}
.empJob{
margin: 0;
padding: 0;
text-align: center;
color: black;
font-size: 16px;
margin-top: 4px;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { EditProfileComponent } from './edit-profile.component';
describe('EditProfileComponent', () => {
let component: EditProfileComponent;
let fixture: ComponentFixture<EditProfileComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ EditProfileComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EditProfileComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,112 @@
import { Component, OnInit } from '@angular/core';
import { Platform, Events, MenuController } from "@ionic/angular";
import { CommonService } from "src/app/hmg-common/services/common/common.service";
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
import { AuthenticatedUser } from "src/app/hmg-common/services/authentication/models/authenticated-user";
import { PerformanceAppraisalResponse } from 'src/app/hmg-common/services/dashbored/performance-appraisal.response';
import { DashboredService } from 'src/app/hmg-common/services/dashbored/dashbored.service';
import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';
// import { DomSanitizer } from '@angular/platform-browser';
@Component({
selector: 'app-edit-profile',
templateUrl: './edit-profile.component.html',
styleUrls: ['./edit-profile.component.scss'],
})
export class EditProfileComponent implements OnInit {
User_name_Emp: string = "";
User_Job_name: string;
private menu: MenuController;
setImage:any;
// imageSrc: any = "../assets/imgs/profile.png";
user_image: any = "../assets/imgs/profile.png";
personalInfo: any;
appraisalArr :any =[];
public performanceData: any=[];
public static PERFORMANCE_DATA = 'perAppData';
constructor(
public ts: TranslatorService,
public cs: CommonService,
public authService: AuthenticationService,
public DS :DashboredService,
public sharedData: SharedDataService
// private events: Events,
// private sanitizer: DomSanitizer,
)
{
// this.events.subscribe("img-change", displayImg => {
// console.log("app compont: "+displayImg);
// this.user_image = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);
// });
}
ngOnInit() {
this.getProfile();
}
getProfile() {
console.log("getProfile");
this.authService
.loadAuthenticatedUser()
.subscribe((user: AuthenticatedUser) => {
if (user) {
this.personalInfo = user;
this.User_name_Emp=this.personalInfo.EMPLOYEE_NAME;
this.User_Job_name=this.personalInfo.JOB_NAME;
this.user_image = user.EMPLOYEE_IMAGE
? "data:image/png;base64," + user.EMPLOYEE_IMAGE
: "../assets/imgs/profile.png";
console.log("name: "+ this.personalInfo.EMPLOYEE_NAME);
console.log("user name: "+ user.EMPLOYEE_NAME);
console.log("name: "+ this.personalInfo.JOB_NAME);
console.log("job name: "+ user.JOB_NAME);
}});
}
openEditprofile(){
this.cs.openProfile();
}
openPerormance(){
this.showPerformanceAppraisal();
}
showPerformanceAppraisal(){
this.DS.getPerformanceAppraisal(()=>{
this.showPerformanceAppraisal();
}).subscribe((result: PerformanceAppraisalResponse) => {
this.handlePerformanceAppraisalResult(result);
});
}
private handlePerformanceAppraisalResult(result){
if (this.cs.validResponse(result)) {
if (this.cs.hasData(result.GetPerformanceAppraisalList)) {
this.appraisalArr =result.GetPerformanceAppraisalList;
this.performanceData=[];
for(let i=0;i<this.appraisalArr.length;i++){
this.performanceData.push({name:this.appraisalArr[i].APPRAISAL_YEAR,value :this.appraisalArr[i].APPRAISAL_SCORE});
}
console.log("PerformanceAppraisalResponse");
this.sharedData.setSharedData(this.performanceData, PerformanceAppraisalResponse.PERFORMANCE_DATA);
//localStorage.setItem("performanceData", this.performanceData)
this.cs.openPerformanceevaluation();
}
}
}
}

@ -1,111 +1,168 @@
<ion-header> <!-- <ion-header>
<div class="profileHead">
<ion-toolbar class="header-toolbar"> <ion-toolbar class="header-toolbar">
<ion-buttons slot="start"> <ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button> <ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-buttons> </ion-buttons>
<ion-title color="light" > {{ts.trPK('userProfile','title')}}</ion-title> <ion-title color="light" > {{ts.trPK('userProfile','title')}}</ion-title>
</ion-toolbar> </ion-toolbar>
</ion-header> </div>
</ion-header> -->
<ion-content>
<ion-card *ngIf="personalInfo"> <ion-content class="colorBG">
<div class="header-div">
<ion-card-header class="boxHdr"> <ion-buttons slot="start">
<div class="hrTitle">{{personalInfo.EMPLOYEE_NAME}}</div> <ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-card-header> </ion-buttons>
<ion-card-content> <p class="proTitles">{{ts.trPK('userProfile','title')}}</p>
<div>
<div class="centerDiv profileDiv"> <!-- <div class="centerDiv profileDiv"> -->
<!-- <p class="TxtPlace boldTxt">{{User_name_Emp}}</p> --> <div class="centerDiv homeBox">
<ion-img class="profileImg" [src]="imageSrc"></ion-img> <div class="centerDiv homeBox" (click)="openPersonalInfo()">
</div> <!-- <div class="profileDiv"> -->
<ion-grid class="profile-grid"> <img class="profileImg" [src]="imageSrc">
<div> </div>
<ion-row> <!-- <ion-img class="profileImg" [src]="imageSrc"></ion-img> -->
<ion-col class="colBold" size="5"> <!-- <div class="Text">{{personalInfo.EMPLOYEE_NAME}}</div> -->
<label> {{ts.trPK('userProfile','empNo')}}</label> <div *ngIf="personalInfo">
</ion-col> <p class="Text">{{personalInfo.EMPLOYEE_NAME}}</p>
<ion-col size="7"> </div>
<label>{{personalInfo.EMPLOYEE_NUMBER}}</label> </div>
</ion-col>
</ion-row>
<div class="changeImgBtn">
<ion-row> <button ion-button icon-only menuToggle class="menubutton" (click)="ChangeImage()">
<ion-col class="colBold" size="5"> <ion-icon (click)="ChangeImage();" class="changeIcon" name="md-create"></ion-icon>
<label>{{ts.trPK('userProfile','busG')}}</label> </button>
</ion-col> </div>
<ion-col size="7">
<label>{{personalInfo.BUSINESS_GROUP_NAME}}</label> </div> <!-- end header-div -->
</ion-col>
</ion-row>
<ion-row> <div>
<ion-col class="colBold" size="5">
<label>{{ts.trPK('userProfile','job')}}</label> <!-- <ion-card *ngIf="personalInfo"> -->
</ion-col>
<ion-col size="7"> <!-- <ion-card-header class="boxHdr">
<label>{{personalInfo.JOB_NAME}}</label> <div class="hrTitle">{{personalInfo.EMPLOYEE_NAME}}</div>
</ion-col> </ion-card-header> -->
</ion-row> <!-- <ion-card-content> -->
<ion-row> <div *ngIf="personalInfo">
<ion-col class="colBold" size="5">
<label>{{ts.trPK('userProfile','locName')}}</label> <ion-grid>
</ion-col> <div class="profileGrid">
<ion-col size="7"> <ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
<label>{{personalInfo.LOCATION_NAME}}</label> <ion-col class="line">
</ion-col> <ion-row>
</ion-row> <label class="lebl">
<ion-row> {{ts.trPK('userProfile','empNo')}}</label></ion-row>
<ion-col class="colBold" size="5"> <ion-row > <label
<label>{{ts.trPK('userProfile','payrol')}}</label> class="rowBolds">{{personalInfo.EMPLOYEE_NUMBER}}</label> </ion-row>
</ion-col> </ion-col>
<ion-col size="7"> <ion-col>
<label>{{personalInfo.PAYROLL_NAME}}</label> <ion-row> <label class="lebl">{{ts.trPK('userProfile','category')}}</label>
</ion-col> </ion-row>
</ion-row> <ion-row>
<ion-row> <label class="rowBolds">{{personalInfo.EMPLOYMENT_CATEGORY_MEANING}}</label> </ion-row>
<ion-col class="colBold" size="5"> </ion-col>
<label>{{ts.trPK('userProfile','orgEmail')}}</label> </ion-row>
</ion-col>
<ion-col size="7"> <ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
<label>{{personalInfo.EMPLOYEE_EMAIL_ADDRESS}}</label> <ion-col>
</ion-col> <ion-row>
</ion-row> <label class="lebl">{{ts.trPK('userProfile','address')}}</label>
<ion-row> </ion-row>
<ion-col class="colBold" size="5"> <ion-row>
<label>{{ts.trPK('userProfile','orgName')}} </label> <label class="rowBolds"></label>
</ion-col> </ion-row>
<ion-col size="7"> </ion-col>
<label>{{personalInfo.ORGANIZATION_NAME}}</label> </ion-row>
</ion-col>
</ion-row> <ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
<ion-row> <ion-col>
<ion-col class="colBold" size="5"> <ion-row>
<label>{{ts.trPK('userProfile','position')}}</label> <label class="lebl">{{ts.trPK('general','mobile')}}</label>
</ion-col> </ion-row>
<ion-col size="7"> <ion-row>
<label>{{personalInfo.POSITION_NAME}}</label> <label class="rowBolds">{{personalInfo.EMPLOYEE_MOBILE_NUMBER}}</label>
</ion-col> </ion-row>
</ion-row> </ion-col>
<ion-row> </ion-row>
<ion-col class="colBold" size="5">
<label>{{ts.trPK('userProfile','grade')}} </label> <ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
</ion-col> <ion-col>
<ion-col size="7"> <ion-row>
<label>{{personalInfo.GRADE_NAME}}</label> <label class="lebl">{{ts.trPK('userProfile','busG')}}</label>
</ion-col> </ion-row>
</ion-row> <ion-row> <label class="rowBolds">{{personalInfo.BUSINESS_GROUP_NAME}}</label>
<ion-row> </ion-row>
<ion-col class="colBold" size="5"> </ion-col>
<label>{{ts.trPK('userProfile','category')}}</label> </ion-row>
</ion-col>
<ion-col size="7">
<label>{{personalInfo.EMPLOYMENT_CATEGORY_MEANING}}</label> <ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
</ion-col> <ion-col>
</ion-row> <ion-row>
</div> <label class="lebl">{{ts.trPK('userProfile','job')}}</label>
</ion-grid> </ion-row>
</div> <ion-row>
</ion-card-content> <label class="rowBolds">{{personalInfo.JOB_NAME}}</label>
</ion-card> </ion-row>
</ion-content> </ion-col>
</ion-row>
<ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
<ion-col>
<ion-row>
<label class="lebl">{{ts.trPK('userProfile','payrol')}}</label>
</ion-row>
<ion-row>
<label class="rowBolds">{{personalInfo.PAYROLL_NAME}}</label>
</ion-row>
</ion-col>
</ion-row>
<ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
<ion-col>
<ion-row>
<label class="lebl">{{ts.trPK('userProfile','orgEmail')}}</label>
</ion-row>
<ion-row>
<label class="rowBolds">{{personalInfo.EMPLOYEE_EMAIL_ADDRESS}}</label>
</ion-row>
</ion-col>
</ion-row>
<ion-row style="border-bottom: rgb(190, 187, 187) solid 1px;">
<ion-col>
<ion-row>
<label class="lebl">{{ts.trPK('userProfile','position')}}</label>
</ion-row>
<ion-row>
<label class="rowBolds">{{personalInfo.POSITION_NAME}}</label>
</ion-row>
</ion-col>
</ion-row>
<ion-row>
<ion-col>
<ion-row>
<label class="lebl">{{ts.trPK('userProfile','grade')}} </label>
</ion-row>
<ion-row>
<label class="rowBolds">{{personalInfo.GRADE_NAME}}</label>
</ion-row>
</ion-col>
</ion-row>
</div>
</ion-grid>
</div>
<!-- </ion-card-content> -->
<!-- </ion-card> -->
</div>
</ion-content>

@ -1,3 +1,132 @@
ion-col.colBold, ion-col.colBold > label{ ion-col.colBold, ion-col.colBold > label{
font-weight:bold; font-weight:bold;
} }
.colorBG{
--background: #f0efef;
}
.header-div{
text-transform: capitalize;
background: #22C6B3;
display: block;
position: relative;
height: 160px;
margin-bottom: 60px;
}
// .profileCont{
// background-color: #d9d7d7 !important;
.menubutton{
white-space: normal;
color: var(--light);
text-transform: capitalize;
min-height: 39px;
background: #f0ecec;
font-size: 2rem;
position: absolute;
width: 35px !important;
height: 19px;
box-shadow: 3px 0px 7px 0px #c5c2c2;
border-radius: 50%;
}
.changeIcon{
/* background: #c1c1c1; */
width: 21px;
/* height: 26px; */
border-radius: 50% !important;
position: relative;
color: #7f8c8d;
}
.changeImgBtn{
position: absolute;
top: 80%;
left: 65%;
}
.profileImg{
width: 160px;
height: 160px;
display: -webkit-inline-box;
display: inline-flex;
overflow: hidden;
// background: transparent;
border-radius: 69% !important;
position: relative;
top: 34px;
// background: white;
background: transparent;
}
.Text {
margin: 0;
padding: 0;
text-align: center;
font-weight: bolder;
color: black;
font-size: 16px;
margin-top: 34px;
text-align: center;
}
.line{
padding-top: 0px !important;
/* margin-bottom: 0px; */
/* margin: 0px; */
border-right: 1px #c5c2c2 solid !important;
line-height: 10px !important;
}
.proTitles {
margin: 0;
padding: 0;
font-size: 16px;
text-align: center;
font-weight: bolder;
color: white;
margin-top: -33px;
}
.profileGrid{
border: #bebbbb solid 1px;
border-radius: 9px;
padding: 0px;
margin-top: 54px;
margin-left: 10px;
margin-right: 10px;
margin-bottom: 10px;
color: black;
// font-weight: bold;
background: white;
}
.lebl{
color: black;
font-size: 14px !important;
font-weight: bold !important;
padding-top: 9px;
padding-left: 5px;
}
.rowBolds{
color: black !important;
font-size: 14px !important;
/* padding: 6px !important; */
padding-bottom: 9px;
padding-left: 5px;
padding-top: 4px;
}

@ -14,6 +14,7 @@ export class HomeComponent implements OnInit {
personalInfo: any; personalInfo: any;
setImage:any; setImage:any;
imageSrc: any = "../assets/imgs/profile.png"; imageSrc: any = "../assets/imgs/profile.png";
// user_image: any = "../assets/imgs/profile.png";
constructor( constructor(
public ts: TranslatorService, public ts: TranslatorService,
public cs: CommonService, public cs: CommonService,
@ -39,11 +40,15 @@ export class HomeComponent implements OnInit {
this.getProfile(); this.getProfile();
} }
getProfile() { getProfile() {
console.log("getProfile");
this.authService this.authService
.loadAuthenticatedUser() .loadAuthenticatedUser()
.subscribe((user: AuthenticatedUser) => { .subscribe((user: AuthenticatedUser) => {
if (user) { if (user) {
this.personalInfo = user; this.personalInfo = user;
console.log("name: "+ this.personalInfo.EMPLOYEE_NAME);
console.log("user name: "+ user.EMPLOYEE_NAME);
if(this.cs.getUpdateImage().status){ if(this.cs.getUpdateImage().status){
// this.imageSrc = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+this.cs.getUpdateImage().img); // this.imageSrc = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+this.cs.getUpdateImage().img);
this.imageSrc = "data:image/png;base64,"+this.cs.getUpdateImage().img; this.imageSrc = "data:image/png;base64,"+this.cs.getUpdateImage().img;
@ -60,4 +65,10 @@ export class HomeComponent implements OnInit {
} }
}); });
} }
private ChangeImage() {
this.cs.openChangeImagePage();
}
} }

@ -0,0 +1,77 @@
<ion-content class="colorBG">
<div class="header-div">
<ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-buttons>
<p class="proTitles">{{ts.trPK('userProfile','performance')}}</p>
<div class="profilediv" (click)="openPersonalInfo()">
<img class="profileImg" [src]="user_image">
</div>
<!-- <ion-img class="profileImg" [src]="imageSrc"></ion-img> -->
<ion-grid>
<div class="grid">
<ion-row>
<p class="Text">Performance Evaluation</p>
<div class="gauge">
<ngx-charts-gauge [view]="view" [scheme]="colorScheme" [results]="performanceData" [min]="0" [max]="100"
[angleSpan]="240" [startAngle]="-120" [bigSegments]="5"
[smallSegments]="10" (select)="onSelect($event)">
</ngx-charts-gauge>
</div>
</ion-row>
</div>
<!-- <div>
<div *ngFor="let data of performanceData">
<ion-row class="gridvalue">
<ion-col >
<div class="performancecolor" [style.background]="data.color"></div>
<br>
<label class="label"> Your Performance In </label>
<label class="labelvalue"> {{data.value}} </label>
<label class="label"> {{data.name}} </label>
</ion-col>
</ion-row>
</div>
</div> -->
<!-- class="gridvalue" -->
<!-- ///// -->
<div>
<div *ngIf="performanceData">
<div >
<ion-row >
<ion-col *ngFor="let data of performanceData ;let i = index" [ngClass]="length % 2 != 0 && i == length - 1 ? 'rightgrid' : 'leftgrid'" >
<div class="performancecolor" [style.background]="data.color"></div>
<br>
<label class="label"> Your Performance In </label>
<label class="label"> {{data.name}} </label>
<br>
<label class="labelvalue"> {{data.value}} </label>
<label class="percentage"> %</label>
</ion-col>
</ion-row>
</div>
</div>
</div>
</ion-grid>
</div>
</ion-content>

@ -0,0 +1,144 @@
.colorBG{
--background: #f0efef;
}
.header-div{
text-transform: capitalize;
background: #22C6B3;
display: block;
position: relative;
height: 160px;
margin-bottom: 60px;
padding-top: 10px;
}
.btnBack{
background: var(--customnavy);
white-space: normal;
color: var(--light);
text-transform: capitalize;
min-height: 45px;
margin-top: -8px !important;
}
.profilediv{
margin-left: 337px;
}
.profileImg{
width: 25px;
height: 24px;
/* display: -webkit-inline-box; */
/* display: inline-flex; */
overflow: hidden;
background: transparent;
border-radius: 90% !important;
position: relative;
top: -22px;
// margin-left: 337px;
}
.proTitles {
margin: 0;
padding: 0;
font-size: 16px;
text-align: center;
font-weight: bolder;
color: white;
margin-top: -33px;
}
.grid{
background-color: #f9f9f9;
margin-top: 9px;
margin-bottom: 7px !important;
border-radius: 21px;
margin-bottom: 26px;
margin-left: 14px;
margin-right: 14px;
padding-bottom: 1px;
border: solid #d7d4d4 !important;
}
.Text {
margin: 0;
padding: 0;
text-align: center;
font-weight: bolder;
color: black;
font-size: 16px;
margin-top: 5px;
margin-bottom: 10px;
text-align: center;
margin-left: 74px;
}
.leftgrid{
margin-left: 10px;
background: white;
border: solid #d7d4d4;
margin: 7px;
border-radius: 24px;
width: 30% !important;
padding-bottom: 9px;
padding-top: 11px;
padding-left: 10px;
}
.rightgrid{
margin-left: 10px;
background: white;
border: solid #d7d4d4;
// margin: 7px;
border-radius: 24px;
width: 30% !important;
padding-bottom: 9px;
padding-top: 11px;
padding-left: 10px;
margin-right: 189px;
}
.performancecolor{
border: solid #bebbbb 1px !important;
border-radius: 13px;
margin-top: 0px !important;
height: 10px;
padding-right: 8px !important;
width: 65px;
margin-bottom: -10px;
}
.label{
font-size: 13px !important;
margin-top: -7px !important;
font-weight: bold !important;
}
.labelvalue{
font-size: 28px !important;
font-weight: bold !important;
margin-top: 7px !important;
margin-left: 72px !important;
}
.percentage{
font-size: 15px !important;
margin-top: 15px !important;
}
.gauge{
transform: translate(-24px, -65px);
margin-bottom: -187px;
margin-top: -20px;
}

@ -0,0 +1,27 @@
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { PerformanceEvaluationComponent } from './performance-evaluation.component';
describe('PerformanceEvaluationComponent', () => {
let component: PerformanceEvaluationComponent;
let fixture: ComponentFixture<PerformanceEvaluationComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ PerformanceEvaluationComponent ],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(PerformanceEvaluationComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

@ -0,0 +1,88 @@
import { Component, OnInit, NgModule } from '@angular/core';
import { Platform, Events, MenuController } from "@ionic/angular";
import { CommonService } from "src/app/hmg-common/services/common/common.service";
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
import { DashboredService } from 'src/app/hmg-common/services/dashbored/dashbored.service';
import { PerformanceAppraisalResponse } from 'src/app/hmg-common/services/dashbored/performance-appraisal.response';
// import { DomSanitizer } from '@angular/platform-browser';
// import {NgxGaugeModule} from 'ngx-gauge';
import { AuthenticatedUser } from "src/app/hmg-common/services/authentication/models/authenticated-user";
@Component({
selector: 'app-performance-evaluation',
templateUrl: './performance-evaluation.component.html',
styleUrls: ['./performance-evaluation.component.scss'],
})
export class PerformanceEvaluationComponent implements OnInit {
personalInfo: any;
user_image: any = "../assets/imgs/profile.png";
setImage:any;
view: any = [380, 450];
public performanceData: any=[];
public length;
constructor( public ts: TranslatorService,
public cs: CommonService,
public DS :DashboredService,
public authService: AuthenticationService,
// private events: Events,
// private sanitizer: DomSanitizer,
) {
// this.events.subscribe("img-change", displayImg => {
// console.log("app compont: "+displayImg);
// this.user_image = this.sanitizer.bypassSecurityTrustUrl("data:Image/*;base64,"+displayImg);
// });
}
colorScheme = {
domain: ['#22C6B3', '#094875','#3CB9D5','#1FA269','#0D155E']
};
ngOnInit() {
this.getProfile();
this.performanceData = this.cs.sharedService.getSharedData(
PerformanceAppraisalResponse.PERFORMANCE_DATA,
true
);
console.log(this.performanceData.length);
//i % 2 == 0
this.length=this.performanceData.length;
for(let i=0;i<this.performanceData.length;i++){
this.performanceData[i].color =this.colorScheme.domain[i];
console.log( i+" : "+this.performanceData[i].name)
}
console.log( this.performanceData[0].color)
}
getProfile() {
console.log("getProfile");
this.authService
.loadAuthenticatedUser()
.subscribe((user: AuthenticatedUser) => {
if (user) {
this.personalInfo = user;
this.user_image = user.EMPLOYEE_IMAGE
? "data:image/png;base64," + user.EMPLOYEE_IMAGE
: "../assets/imgs/profile.png";
}});
}
}

@ -3,7 +3,7 @@
<ion-buttons slot="start"> <ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button> <ion-back-button color="light" class="btnBack" defaultHref="/home"></ion-back-button>
</ion-buttons> </ion-buttons>
<ion-title color="light" > {{ts.trPK('userProfile','title')}}</ion-title> <ion-title color="light" > {{ts.trPK('userProfile','changepicture')}}</ion-title>
<ion-buttons slot="end"> <ion-buttons slot="end">
<button style="color: white !important;" class="headerBtn" *ngIf="saveChange != ''" (click)="updateImageProfile();" > <button style="color: white !important;" class="headerBtn" *ngIf="saveChange != ''" (click)="updateImageProfile();" >
{{ts.trPK('general','save')}} {{ts.trPK('general','save')}}

@ -22,8 +22,9 @@
// // margin:0 auto 40px; // // margin:0 auto 40px;
position: relative; position: relative;
width: 400px; width: 234px;
height: 400px; height: 215px;
margin-top: 33px !important;
margin: auto; margin: auto;
display: block; display: block;
// background: red; // background: red;
@ -31,8 +32,8 @@ height: 400px;
background: transparent; background: transparent;
border-radius: 50% !important; border-radius: 50% !important;
color:#fff; color:#fff;
background-color: rgba(0,0,0,0.1); // background-color: rgba(0,0,0,0.1);
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); // box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
img{ img{
-webkit-border-radius:50% !important; -webkit-border-radius:50% !important;

@ -5,10 +5,17 @@ import { Routes, RouterModule } from '@angular/router';
import { HmgCommonModule } from '../hmg-common/hmg-common.module'; import { HmgCommonModule } from '../hmg-common/hmg-common.module';
import { IonicModule } from '@ionic/angular'; import { IonicModule } from '@ionic/angular';
import { NgxChartsModule } from '@swimlane/ngx-charts';
import { ProfilePage } from './profile.page'; import { ProfilePage } from './profile.page';
import { HomeComponent } from './home/home.component'; import { HomeComponent } from './home/home.component';
import {EditProfileComponent} from './edit-profile/edit-profile.component';
import {ProfileImageComponent} from './profile-image/profile-image.component' import {ProfileImageComponent} from './profile-image/profile-image.component'
import {PerformanceEvaluationComponent} from './performance-evaluation/performance-evaluation.component'
import { from } from 'rxjs';
const routes: Routes = [ const routes: Routes = [
{ {
path: '', path: '',
@ -29,7 +36,31 @@ const routes: Routes = [
component: ProfileImageComponent component: ProfileImageComponent
} }
], ],
}
},
{
path: '',
component: ProfilePage,
children: [
{
path: 'editprofile',
component: EditProfileComponent
}
],
},
{
path: '',
component: ProfilePage,
children: [
{
path: 'performanceevaluation',
component: PerformanceEvaluationComponent
}
],
},
]; ];
@NgModule({ @NgModule({
@ -38,8 +69,10 @@ const routes: Routes = [
FormsModule, FormsModule,
IonicModule, IonicModule,
HmgCommonModule, HmgCommonModule,
NgxChartsModule,
RouterModule.forChild(routes) RouterModule.forChild(routes)
], ],
declarations: [ProfilePage , HomeComponent,ProfileImageComponent] declarations: [ProfilePage , HomeComponent,ProfileImageComponent,EditProfileComponent,PerformanceEvaluationComponent]
}) })
export class ProfilePageModule {} export class ProfilePageModule {}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 726 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B

@ -25,6 +25,7 @@
"en": "Register", "en": "Register",
"ar": "التسجيل" "ar": "التسجيل"
}, },
"sign-out": { "sign-out": {
"en": "Are you sure you want to Sign Out", "en": "Are you sure you want to Sign Out",
"ar": "هل أنت متأكد من إغلاق الحساب" "ar": "هل أنت متأكد من إغلاق الحساب"
@ -877,6 +878,22 @@
"en": "My Profile", "en": "My Profile",
"ar": "معلوماتي" "ar": "معلوماتي"
}, },
"edit-profile": {
"en": "Edit Profile",
"ar": "تعديل المعلومات"
},
"performance-evaluation": {
"en": "Performance Evaluation",
"ar": "تقييم الاداء"
},
"performance": {
"en": "Performance",
"ar": "الاداء"
},
"changepicture":{
"en":"Change Picture",
"ar":"تغيير الصوره"
},
"empNo": { "empNo": {
"en": "Employee Number", "en": "Employee Number",
"ar": "الرقم الوظيفي" "ar": "الرقم الوظيفي"
@ -893,6 +910,10 @@
"en": "Location Name", "en": "Location Name",
"ar": "اسم الموقع" "ar": "اسم الموقع"
}, },
"address": {
"en": "Address",
"ar": "العنوان"
},
"payrol": { "payrol": {
"en": "Payroll", "en": "Payroll",
"ar": "كشف الرواتب" "ar": "كشف الرواتب"

@ -0,0 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgpFHLFUMeYsa60Ljq
iLNjrd5vW54LWW29shqYplVrbJGgCgYIKoZIzj0DAQehRANCAATtOB42ERmP9URQ
ERKOSOsNs84YYhYOYgJWzEl8vawi4mUI2MaliCdXkTxzqChTWuPw2YN4n1ebAclM
GEIcObMj
-----END PRIVATE KEY-----

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>448880075189-tcgggmh2ua9tsmdr97c1ttcgrmf5kg5m.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.448880075189-tcgggmh2ua9tsmdr97c1ttcgrmf5kg5m</string>
<key>API_KEY</key>
<string>AIzaSyB--KUTUYVpcdxpETCEsdhKs5cV3QawW7Q</string>
<key>GCM_SENDER_ID</key>
<string>448880075189</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.cloudsolutions.alhabibmohemm</string>
<key>PROJECT_ID</key>
<string>al-habib-mohemm</string>
<key>STORAGE_BUCKET</key>
<string>al-habib-mohemm.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:448880075189:ios:c6fd2b86fe7b388088b9fc</string>
<key>DATABASE_URL</key>
<string>https://al-habib-mohemm.firebaseio.com</string>
</dict>
</plist>

@ -0,0 +1,47 @@
{
"project_info": {
"project_number": "448880075189",
"firebase_url": "https://al-habib-mohemm.firebaseio.com",
"project_id": "al-habib-mohemm",
"storage_bucket": "al-habib-mohemm.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:448880075189:android:5bb4821d515a826d88b9fc",
"android_client_info": {
"package_name": "com.cloudsolutions.alhabibmohemm"
}
},
"oauth_client": [
{
"client_id": "448880075189-49hc2l78pr9hsmr9p3k7j411r40diej8.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyC8nrli7eyuRNow8nF-QHvDMOxqUkj6fEw"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "448880075189-49hc2l78pr9hsmr9p3k7j411r40diej8.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "448880075189-tcgggmh2ua9tsmdr97c1ttcgrmf5kg5m.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.cloudsolutions.alhabibmohemm"
}
}
]
}
}
}
],
"configuration_version": "1"
}

@ -0,0 +1,6 @@
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQg+oBl9YdOiMRXfQZe
nIe6tR1tojoOvvcohNJmJtH+SsagCgYIKoZIzj0DAQehRANCAATDY9E82MAgMI/g
bKF1t4zLHJ1Yt9uoOnedNYsfyZLhh3l3ZyXRj02uDXz04AsNbNFjkLJXPc4xY9ad
+A4rY70x
-----END PRIVATE KEY-----

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>679409052782-3teqf8vdh9e1suvnhddj3pgmna7vg5rt.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.679409052782-3teqf8vdh9e1suvnhddj3pgmna7vg5rt</string>
<key>API_KEY</key>
<string>AIzaSyCjMjhbeS7qilBoP4SH0t3SgkkHryf34JA</string>
<key>GCM_SENDER_ID</key>
<string>679409052782</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.cloudsolutions.mohemm</string>
<key>PROJECT_ID</key>
<string>mohemm-dce93</string>
<key>STORAGE_BUCKET</key>
<string>mohemm-dce93.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:679409052782:ios:ace07cf8ba043b48a78a7f</string>
<key>DATABASE_URL</key>
<string>https://mohemm-dce93.firebaseio.com</string>
</dict>
</plist>

@ -0,0 +1,47 @@
{
"project_info": {
"project_number": "679409052782",
"firebase_url": "https://mohemm-dce93.firebaseio.com",
"project_id": "mohemm-dce93",
"storage_bucket": "mohemm-dce93.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:679409052782:android:dba155ac0859d7fea78a7f",
"android_client_info": {
"package_name": "hmg.cloudSolutions.mohem"
}
},
"oauth_client": [
{
"client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyDgWjuSBIKGghWxYg_KGBRIZTi-O_UA8mU"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "679409052782-mtd6d8rjltucnm9uatn6g7et08sm6lbv.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "679409052782-3teqf8vdh9e1suvnhddj3pgmna7vg5rt.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.cloudsolutions.mohemm"
}
}
]
}
}
}
],
"configuration_version": "1"
}

@ -0,0 +1,17 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICoTCCAYkCAQAwXDEzMDEGCSqGSIb3DQEJARYkQ2hvdWRocnkuTWFzb29kQGNs
b3Vkc29sdXRpb24tc2EuY29tMRgwFgYDVQQDDA9DaG91ZGhyeSBNYXNvb2QxCzAJ
BgNVBAYTAlNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApkQA87EF
GiHTVqx7SWD+3qaVSHTFrTCro9DJZ5na/WGsF06xfoZJT/S5jFW5DlWHWsJak/vx
BqsuH3VGTEneoEiWc+Zyh6Lb6SvgDmfee2MB+k8E6dHE4Z5Z7aiBXSTjIjKcWEjj
41++FVihddY+p9723WFhcEWcA2Nq2p9KSZlKZNqui5xU/16z6RW7YSu0ylBUE8+g
E5GLzRgALzoSNT5OedXqdIoR9k1Jds2ep+DKqjl35hKOX215b3tzfyamPK2i1UHB
eaYBXnObkyJe4EIcqlTM8Eeo23yxsHYyRrJmJDDm4GaXRXrQ2193XpLHNlq88no5
wgI+yYsb7zvwowIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAIQsZ1fP8XImSQ+L
TvR4mT98DI5Ld/xLnw/LXRNJrZVtxMjdUwwcMhvxbfGX4Ji4wpttkzbkr86Jyh+U
dbfVqHKLIGo8xjYl4uCcjYIqnY2hBduv+/aWWoFAJ9w5tv8Oo/3hasF97zQi+vZh
Uzqdp/8IWb8/QGE2HRqKbSUMKBeUzDmyQTnM7QeS5kuT5MQZjDnFLV2v3Sxa383L
9jFqNQjS7b1mcVJ4/HsW7yUYoDZ8C90fUp2zs5k4SFad8MG4J1IsoshXuBgBvcFg
haDt0P+hh6QVk9yf4zGgcbU7501ya5T5MgZ8moxnlklf3mqGUCK2IU8PBc2IquyG
2PrSkpI=
-----END CERTIFICATE REQUEST-----
Loading…
Cancel
Save