MOE_DEV_NEW_TEMPORARY_DESIGN
Mohamed Mekawy 6 years ago
commit 5c4377034f

@ -1 +1 @@
to add ios - ionic cordova platform add ios
to add ios - ionic cordova platform add ios

@ -1,5 +1,5 @@
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.cloudsolutions.mohemm" version="1.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget id="com.cloudsolutions.alhabibmohemm" version="1.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>MOHEMM</name>
<description>an app created by cloud Solutions</description>
<author email="eservicescs@cloudsolution-sa.com" href="http://cloudsolution-sa.com">HMG</author>

@ -149,6 +149,10 @@ call npm install @ionic-native/file-path
call ionic cordova plugin add com-badrit-base64
call npm install @ionic-native/base64
@echo install OneSignal plugin
call ionic cordova plugin add onesignal-cordova-plugin
call npm install @ionic-native/onesignal
@echo reinitializing git repository
@echo git init
@echo git remote add origin https://enas_yaghi@hmg.git.cloudforge.com/patientappionic.git

@ -0,0 +1,167 @@
#!/bin/sh
echo start installing required native and 3rd party plugins
echo to update angular -> npm install -g @angular/cli
echo to update ionic -> npm install -g ionic
echo add browser, android , ios platforms commit non required
echo to add browser -> call ionic cordova platform add browser
echo to add ios -> call ionic cordova platform add ios
ionic cordova platform add android
echo copying android FCM google servcie file
cp ./google-services.json ./platforms/android/
npm i @angular/animations
npm i @swimlane/ngx-charts --save
echo primeng framework [angular]
npm install primeng --save
npm install primeicons --save
echo add css links for primeng in global.scss
echo @import "../node_modules/primeng/resources/themes/nova-light/theme.css";
echo @import "../node_modules/primeng/resources/primeng.min.css";
echo @import "../node_modules/primeicons/primeicons.css";
echo install chartjs as dependency for primeng chartjs
npm install chart.js --save
# echo add reference in [angular.json] in [scripts] array add (node_modules/chart.js/dist/Chart.js)
echo calendar https://mattlewis92.github.io/angular-calendar/#/kitchen-sink
npm install --save @ng-bootstrap/ng-bootstrap
npm install --save angular-calendar date-fns
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
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
ionic cordova plugin add cordova-sqlite-storage
npm install @ionic-native/sqlite
echo native storage
ionic cordova plugin add cordova-plugin-nativestorage
npm install @ionic-native/native-storage
echo bluetooth ble centeral //check interface assets/js/bletooth.js
ionic cordova plugin add cordova-plugin-ble-central
npm install @ionic-native/ble
echo launch navigator
echo warning : for now we stick with launch navigator 3 since 5 has issue
# call ionic cordova plugin add uk.co.workingedge.phonegap.plugin.launchnavigator --variable GOOGLE_API_KEY_FOR_ANDROID="AIzaSyC-XbzwGMyAVCnspof0cqiO4iLfKmeEYVA"
ionic cordova plugin add uk.co.workingedge.phonegap.plugin.launchnavigator@3
npm install @ionic-native/launch-navigator
echo themeablebrowser
ionic cordova plugin add cordova-plugin-themeablebrowser
npm install @ionic-native/themeable-browser
echo in app browser
ionic cordova plugin add cordova-plugin-inappbrowser
npm install @ionic-native/in-app-browser
echo globalization
ionic cordova plugin add cordova-plugin-globalization
npm install @ionic-native/globalization
echo android permissions plugin
ionic cordova plugin add cordova-plugin-android-permissions
npm install @ionic-native/android-permissions
echo sms reader https://www.npmjs.com/package/cordova-plugin-sms-receive
npm i cordova-plugin-sms-receive
cordova plugin add cordova-plugin-sms-receive
echo device information§
ionic cordova plugin add cordova-plugin-device
npm install @ionic-native/device
echo local notifications
ionic cordova plugin add cordova-plugin-local-notification
npm install @ionic-native/local-notifications
echo call phone number
ionic cordova plugin add call-number
npm install @ionic-native/call-number
echo badge
ionic cordova plugin add cordova-plugin-badge
npm install @ionic-native/badge
echo biometric features
ionic cordova plugin add cordova-plugin-fingerprint-aio --variable FACEID_USAGE_DESCRIPTION="User Authentication"
npm install @ionic-native/fingerprint-aio
echo install diagnostic
ionic cordova plugin add cordova.plugins.diagnostic
npm install @ionic-native/diagnostic
echo install background-geolocation
ionic cordova plugin add cordova-plugin-mauron85-background-geolocation@alpha --variable GOOGLE_PLAY_SERVICES_VERSION="16.0.0"
npm install @ionic-native/background-geolocation
echo install barcode plugin
ionic cordova plugin add phonegap-plugin-barcodescanner
npm install @ionic-native/barcode-scanner
echo install camera plugin
ionic cordova plugin add cordova-plugin-camera
npm install @ionic-native/camera
echo install keyboard plugin
ionic cordova plugin add cordova-plugin-ionic-keyboard
npm install @ionic-native/keyboard
echo install opentok required permissions
ionic cordova plugin add cordova-opentok-android-permissions
echo install health plugin
ionic cordova plugin add cordova-plugin-health --variable HEALTH_READ_PERMISSION="App needs read access to read heart rate" --variable HEALTH_WRITE_PERMISSION="App needs write access for heart rate" --variable GMS_VERSION="16.0.1"
npm install @ionic-native/health
echo install App Availability Plugin
ionic cordova plugin add cordova-plugin-appavailability
npm install @ionic-native/app-availability
echo install rate plugin
ionic cordova plugin add cordova-plugin-apprate
npm install @ionic-native/app-rate
echo reinitializing git repository
echo git init
echo git remote add origin https://enas_yaghi@hmg.git.cloudforge.com/patientappionic.git
echo git push -f origin master
echo update project from package.js change if necessary
echo to install all dependencies in package.json
echo npm cache clean --force
echo exact version -> npm install --save --save-exact react
echo latest versions based on package.json rules -> npm install
echo to build or serve for (( production ))
echo export NODE_OPTIONS=--max-old-space-size=4096
echo ionic serve --prod -> for serving in production
echo ionic cordova build android --release --aot --minifyjs --optimizejs --minifycss
echo ionic cordova build ios --release --aot --minifyjs --optimizejs --minifycss

@ -1 +1 @@
to update ionic - install -g ionic
latest versions based on package.json rules - install

@ -743,33 +743,54 @@
}
},
"@ionic-native/android-permissions": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/android-permissions/-/android-permissions-5.8.0.tgz",
"integrity": "sha512-02VOlzmYmYl07f2XqLt7itCUBrS/kO8XP/0+b0R4p3ozZBxnEp/DKCjJoswiZpa++fmf9b3PfpJnPBGTyC/U0Q==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/android-permissions/-/android-permissions-5.16.0.tgz",
"integrity": "sha512-fOxH00vISgc+eNI3gwiQK1dzOFJ9z1fssiv8fWheJmjmX4F9owRw0phV0RTBHIg3HFSXumrycET47RnZOQRILA==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/app-availability": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/app-availability/-/app-availability-5.8.0.tgz",
"integrity": "sha512-v/7g7TGKZoC2WMIpnJPcpM7atzT8bejrRhgpOv1XyDTmQk0dz5ziSv4I42R30PN6jPwUkHKZI06LD1e1rZ8YbA==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/app-availability/-/app-availability-5.16.0.tgz",
"integrity": "sha512-tkzAfGCwINusbMKLslFXJMSX8ml3tu1oDdfpUy7W2ag81P5tB/9Z4D8FWp8leKuqDO7kJceZgtV6yem2FUFb4A==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/app-rate": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/app-rate/-/app-rate-5.8.0.tgz",
"integrity": "sha512-GugKjCv5ZcozCkl7G7pFbRIgutipXUXgsNUqcSmAmDwYoXTqfIgNeIBRCmCGW40b6bqNyXVpEdcMGEHnZVWh5w==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/app-rate/-/app-rate-5.16.0.tgz",
"integrity": "sha512-Kh9Ko/4kk/U2JUrf7E0hIHOOMKS8sU8UwiBTuH2gUp/RC+Hm4dLcFgTFOoJy3sYJX40bFjvWFQOUve3RY91HsQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/background-geolocation": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/background-geolocation/-/background-geolocation-5.8.0.tgz",
"integrity": "sha512-/2PmhKHMkYMESKAHqt0w7CUtzmdrrjG9OED9iHS67jR+04qu2pZCd/LQK3y8njfszxZE/9XyfUpI8UghImks9g==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/background-geolocation/-/background-geolocation-5.16.0.tgz",
"integrity": "sha512-rjkLLFAv5LrrN4yZ+UiLLUCraPsLf3t4VdYtfpNothPlHyvvx4sNGo4WuK/nLwr1NVc/NjMvf+SXHrJoMD0mIw==",
"requires": {
"@types/cordova": "^0.0.34"
},
@ -782,19 +803,33 @@
}
},
"@ionic-native/badge": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/badge/-/badge-5.8.0.tgz",
"integrity": "sha512-rhLyEP8p6jKA7/ynr+R/FMM+i4bkJzMMdGz+jfFvsIEDDSxdsi/hDeW9wkBDkiyA+paKRj3lEzc49gmX1bNFnQ==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/badge/-/badge-5.16.0.tgz",
"integrity": "sha512-jSUpX8r3IjSqDG3urs0IQQ1mVTkPnHYh9XloVrcGXppLlC5zvJ+B2PtWeWpQRa+cb7e+oK66QY9fr2/eAElkqQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/barcode-scanner": {
"version": "5.14.0",
"resolved": "https://registry.npmjs.org/@ionic-native/barcode-scanner/-/barcode-scanner-5.14.0.tgz",
"integrity": "sha512-FwTHQD5TUaR441V76IoXQmrSdz7AZ/qBfrfh/rDaXWgYHg7iJA3prOlBPCW+YGfLV3qvlRJeq/ASub/JkTBDrg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/barcode-scanner/-/barcode-scanner-5.16.0.tgz",
"integrity": "sha512-j1zqSZKbQUdX+lduLAYa49/U8lWIFX4MNpTLxfTFZLQjFNSrYarZJoijL15cvRUYkmN8TTJQ5x8bVaRL/t7eqA==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/base64": {
@ -813,17 +848,39 @@
}
},
"@ionic-native/ble": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/ble/-/ble-5.8.0.tgz",
"integrity": "sha512-qlu6At74EqRcDVsdhXoDrJh6Vm1DTdVJUyQxAfMrIFYh6v75+XuGhcWl048FpOuvXs8+P9O9S3cM9QA+f4DLPw==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/ble/-/ble-5.16.0.tgz",
"integrity": "sha512-lp6D1msCtObPuhZrNezudXMKmauIOr4bKHO7/8LESFI2eurdrVtJNNZAhbBPnJp7OjeiolQpTHBQBZM1Od/tIQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/call-number": {
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/call-number/-/call-number-5.16.0.tgz",
"integrity": "sha512-LFqQ0y0R72ksC6hSlgIUDh6ul64JA5zmAV4AoaZ2/gfTR48xx+g3mVcs4i4Mn7YNj+gLddjHfZ69TOVMCJwbVw==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/camera": {
"version": "5.14.0",
"resolved": "https://registry.npmjs.org/@ionic-native/camera/-/camera-5.14.0.tgz",
"integrity": "sha512-BykX5nOtwA/D8jmMgbsAJz3Vw45Uw26XKQRNPAqsthcS+jxoSbFeEsdWbSZjiCFVX1M+d7irq7GCi3H9SJ2bAA==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/camera/-/camera-5.16.0.tgz",
"integrity": "sha512-JrZkScGDy5pbqr1Ld+FrRgaOoEcGpWw9Hd9LgfzlD/Xs3B0ZEMp8sE8UnrIbDxPKQ/5bXV5WxC6mTNmYLKAszg==",
"requires": {
"@types/cordova": "^0.0.34"
},
@ -852,17 +909,24 @@
}
},
"@ionic-native/device": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/device/-/device-5.8.0.tgz",
"integrity": "sha512-JXx7gR4cEKKwtLqKjTcAT9O8xQfANo3tEM0RJCbrHi9rUmx3xF9Y5WpqFK/eayyXt8J5+8HktZkAy+K/u0/D1A==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/device/-/device-5.16.0.tgz",
"integrity": "sha512-pQQn0YcYCTu+lVhOvIxmvE3XU21CGQrmwr/w7M0Mf8T9h+6bB9o6OMF1Q2WmbXtx3MeEGVB4HopGQ+ZDQL35MQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/diagnostic": {
"version": "5.14.0",
"resolved": "https://registry.npmjs.org/@ionic-native/diagnostic/-/diagnostic-5.14.0.tgz",
"integrity": "sha512-hptAqkpfyORE3uJamItsBVBVdQwjU/4aO8JLtnueTadGSbPNQfYoXpYONZzz8/qOkrw+Uvqr6/e7Eu9Lsk0Iyg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/diagnostic/-/diagnostic-5.16.0.tgz",
"integrity": "sha512-QgjwvWkrigJi/r+z8Ru1HZq6r1rem7PsN02ax/bEEcYy/p0zVr+75anQRzTyEC6IK3RkjRJ5a0kkB/YeT3+uoQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
@ -905,11 +969,18 @@
}
},
"@ionic-native/fingerprint-aio": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/fingerprint-aio/-/fingerprint-aio-5.8.0.tgz",
"integrity": "sha512-KVLV5a7zErFZBr18J+dQPBo5G7QoS6xOFKC+8lPRIKGlTVGEFUNAW66yyJk+qJTpRI966YKhGHKqcDsGplRnqA==",
"version": "5.17.1",
"resolved": "https://registry.npmjs.org/@ionic-native/fingerprint-aio/-/fingerprint-aio-5.17.1.tgz",
"integrity": "sha512-G4aFyF1Tm9lorX7UDQNNf+4jjzVIr2aGlU3vjyn0F+pJR52W+IP9sLtNWy2n9ocJw+Ap0VbBna9/207YSKszQA==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/geolocation": {
@ -921,17 +992,24 @@
}
},
"@ionic-native/globalization": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/globalization/-/globalization-5.8.0.tgz",
"integrity": "sha512-rIpce2YY3qFh5Gszpm9VhXbX+QR73WLwC8A2Rz3EZBS63lL9UR/THlXE2J5IJpY2pD0tXf8sgAtItUM8AlPOvg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/globalization/-/globalization-5.16.0.tgz",
"integrity": "sha512-bY3D8Z/hpboaNEo1vhZYUOtxD5oep05vQfWfkoIr3Rx2WLHDDDTQtNpKdvh5bqU3nwVbvvn0Jwe8c+unbWQCyQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/health": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/health/-/health-5.8.0.tgz",
"integrity": "sha512-zpBJJYuX3Oe39qhMSXeUb6Zreco5pu5fJBOuhPQy2pexgh6GwdEctNNC37SdHq2MK9afzraj+aiVJlNhDsLDsQ==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/health/-/health-5.16.0.tgz",
"integrity": "sha512-TJi9zfNE5OjY8IaV6vRIw6pkYIzDIfGuEw6nT4QRt5Kg4IlRh4Hao3GU7tWpAwmj4xWSWCYjLUK2gZp1q2xYQA==",
"requires": {
"@types/cordova": "^0.0.34"
},
@ -944,35 +1022,93 @@
}
},
"@ionic-native/in-app-browser": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/in-app-browser/-/in-app-browser-5.8.0.tgz",
"integrity": "sha512-47QonrALGE8HHNm6+d3IQn8gbT0u2IvaPeRcUJNWhE+7LHPe6uBIcDN1pd4LyLOTA/KT/hQjGnZ414B6P9yuTg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/in-app-browser/-/in-app-browser-5.16.0.tgz",
"integrity": "sha512-OgrHGzY6Mf4mZCqMTdH4N+Z+SGMKPmvbnFokGFl/kmpLL83tSfO26E7PbSFMCCJPxsnI4X9bm9EXuzTrUPzhtg==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/keyboard": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/keyboard/-/keyboard-5.8.0.tgz",
"integrity": "sha512-uJ017rW3BE/FsucyXls4hgC7h07F6cKkurWzoOml6Cvb25vequNs859ZiBN4ahmRgKRaYPKPnw7K7wWqyCyvbg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/keyboard/-/keyboard-5.16.0.tgz",
"integrity": "sha512-WG0k2gI72nmyv8sH+5Q1Fp4WIKUBBF5es60pzwgqmo/Wle3EqneRHIVW445/Vrh93DFYMgZR0MPQlzjbzD40kQ==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/launch-navigator": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/launch-navigator/-/launch-navigator-5.8.0.tgz",
"integrity": "sha512-DoAm4y/UbpvfrYEDTqJvfx5xPk934Ta4XennDF8yk0o0oYCOk/9w/ULFcTk/kIvLVioR+kNMexlCR0jJPj7jyA==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/launch-navigator/-/launch-navigator-5.16.0.tgz",
"integrity": "sha512-oFtaw8Bdv66CHluyCOaWfceVSExBhfRsC1OBF7zTKqVzyGEqW6qS1uYtWWQJiOkaW7TOHJu/xEiELmIBhQVmtA==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/local-notifications": {
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/local-notifications/-/local-notifications-5.16.0.tgz",
"integrity": "sha512-JdwCjT4YwR+N56J0kRGHus1n5WuIxxMZzgXfVP/nhZYcT7GCchfVySbgMY6tUTZkpBhpgosHDz334Fe82zzpig==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/native-storage": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/native-storage/-/native-storage-5.8.0.tgz",
"integrity": "sha512-wrvW+zIXuzHmt+mDSBITdlqo7bAze8TdkTQXRivimAdnnixOYlI9Q696qEitSyComj6OO5NR1rEiASCDTjJwOw==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/native-storage/-/native-storage-5.16.0.tgz",
"integrity": "sha512-ZPY/c7mEVx/cVMoZcU0MhgrSsSi2BGn7Hjmu2+tLBURU6QDR+PRB83DGcjQRPDe1+7gCH7npp/rg0kfsniSxyg==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/onesignal": {
"version": "5.17.1",
"resolved": "https://registry.npmjs.org/@ionic-native/onesignal/-/onesignal-5.17.1.tgz",
"integrity": "sha512-LjT9hHmEsbuqNYMsJmi6yliVpQSgskOvi7leGEr+hpHwgK+5dWLg1MMtoSFvvcxC54jJlZVQhjqvFS2Jp6IXuA==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/open-native-settings": {
@ -991,11 +1127,18 @@
}
},
"@ionic-native/push": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/push/-/push-5.8.0.tgz",
"integrity": "sha512-JLfw8fMzZIskKU3fG7UO4POQTNoIY2IfGKYV8Q+cf45LFg+tLJSlN14y0ZPr3bm7y9DacQtiKQsErpIZLT64yw==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/push/-/push-5.16.0.tgz",
"integrity": "sha512-c1uQBtQh4sPlZn7e1dnM1WLS6CD42zml8caRohUh4IJWRFN4s4QNgr2dHndxk6+Z977emIrHHxqhdVkagtcGAg==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/splash-screen": {
@ -1014,11 +1157,18 @@
}
},
"@ionic-native/sqlite": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/sqlite/-/sqlite-5.8.0.tgz",
"integrity": "sha512-VpVt0peSqxzEYIftzLJupIJnXePPLMmCu7XSW5BxfnV7faVKpezhLUiHgt6CctDz1FZGMT/SsfOW4WIvvY4x4w==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/sqlite/-/sqlite-5.16.0.tgz",
"integrity": "sha512-30OKEO4OWEOIfrtMdyXOxBDc7Kj0V0rl3EYSFYXIliIZzyRYOidn4iLg483+xUHFzofI+qeGZ71HgH12ltOcZw==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/status-bar": {
@ -1037,11 +1187,18 @@
}
},
"@ionic-native/themeable-browser": {
"version": "5.8.0",
"resolved": "https://registry.npmjs.org/@ionic-native/themeable-browser/-/themeable-browser-5.8.0.tgz",
"integrity": "sha512-MDdvWCxJT+pCzRU54ytTYMpVjj3aREN68PhNEdCOQlVWSelRIefkA04ycrSr6v2Un2skIeWRuM7WCcVfEM0IQg==",
"version": "5.16.0",
"resolved": "https://registry.npmjs.org/@ionic-native/themeable-browser/-/themeable-browser-5.16.0.tgz",
"integrity": "sha512-ZBs4Ay/rg7od+qBvj3X2arp1HueB7cn2SD+2aMEvwiIVZXAY2NJLuMy5gqeFK/2UFtpDW8W1TqFne09aIPsYQw==",
"requires": {
"@types/cordova": "^0.0.34"
},
"dependencies": {
"@types/cordova": {
"version": "0.0.34",
"resolved": "https://registry.npmjs.org/@types/cordova/-/cordova-0.0.34.tgz",
"integrity": "sha1-6nrd907Ow9dimCegw54smt3HPQQ="
}
}
},
"@ionic-native/zbar": {
@ -1089,9 +1246,9 @@
}
},
"@ng-bootstrap/ng-bootstrap": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.1.tgz",
"integrity": "sha512-7etP9X9jKIkbuDzU3ngI2jQhHQDZxIu0ErvlkHb7u7YH9akIOLVkXvz2mTMvcFABWZhze64UjFuEgR46b6WGSw==",
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/@ng-bootstrap/ng-bootstrap/-/ng-bootstrap-4.2.2.tgz",
"integrity": "sha512-v8QmC17bv9he5Ep6zutaI9aQ2w/2NqySP0fejOKe7cacKpGUqsLIakpyd2FD7mfZu7pSCCtHYpRWR+h6yq+Ngg==",
"requires": {
"tslib": "^1.9.0"
}
@ -1609,18 +1766,18 @@
}
},
"angular-draggable-droppable": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/angular-draggable-droppable/-/angular-draggable-droppable-4.3.2.tgz",
"integrity": "sha512-x3Fg+mggoBumO41XNzEztWnl92ymGXoVgrYKX2InnIg8i/PIGv7npi8pBvMzKQSKHWtqww3nBHAVcWmIE/3Z0g==",
"version": "4.3.8",
"resolved": "https://registry.npmjs.org/angular-draggable-droppable/-/angular-draggable-droppable-4.3.8.tgz",
"integrity": "sha512-IIl3M+oXvaWPfLrbJdvdWcZLJb6/FqhImELNqBhbTlYMudyiJaLn1lUFYWz8xDti+b1eUoJpEPU3hliBYZmAvw==",
"requires": {
"dom-autoscroller": "^2.3.4",
"tslib": "^1.9.0"
}
},
"angular-resizable-element": {
"version": "3.2.4",
"resolved": "https://registry.npmjs.org/angular-resizable-element/-/angular-resizable-element-3.2.4.tgz",
"integrity": "sha512-Qd/WRTaJgmDJoeWzmK0F52I3X0nLtFPirmsVC2ceic4EQ/3X2yYFCOWgCtH+PvMZct6Whoky3OQLqCpFXQsKHQ==",
"version": "3.2.6",
"resolved": "https://registry.npmjs.org/angular-resizable-element/-/angular-resizable-element-3.2.6.tgz",
"integrity": "sha512-8vp5w4YFIrZ2M8EmGpIt/yMwLBjkUJe7aPLPxDDQhi5HQWF0HLJ6lb4tXgEzW572roxNnHFg105EM6XGAMZDIg==",
"requires": {
"tslib": "^1.9.0"
}
@ -2667,28 +2824,21 @@
"dev": true
},
"chart.js": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.8.0.tgz",
"integrity": "sha512-Di3wUL4BFvqI5FB5K26aQ+hvWh8wnP9A3DWGvXHVkO13D3DSnaSsdZx29cXlEsYKVkn1E2az+ZYFS4t0zi8x0w==",
"version": "2.9.2",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.2.tgz",
"integrity": "sha512-AagP9h27gU7hhx8F64BOFpNZGV0R1Pz1nhsi0M1+KLhtniX6ElqLl0z0obKSiuGMl9tcRe6ZhruCGCJWmH6snQ==",
"requires": {
"chartjs-color": "^2.1.0",
"moment": "^2.10.2"
}
},
"chartjs-color": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.3.0.tgz",
"integrity": "sha512-hEvVheqczsoHD+fZ+tfPUE+1+RbV6b+eksp2LwAhwRTVXEjCSEavvk+Hg3H6SZfGlPh/UfmWKGIvZbtobOEm3g==",
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz",
"integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
"requires": {
"chartjs-color-string": "^0.6.0",
"color-convert": "^0.5.3"
},
"dependencies": {
"color-convert": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
"integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0="
}
"color-convert": "^1.9.3"
}
},
"chartjs-color-string": {
@ -2905,7 +3055,6 @@
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
"requires": {
"color-name": "1.1.3"
}
@ -3920,9 +4069,9 @@
}
},
"cordova-common": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.2.0.tgz",
"integrity": "sha512-EvlQ6PirfR65hGDoQvsluW00uSS2MTVIRKQ3c1Xvsddx7D5T5JgF3fHWkGik/Y/8yNcpI0zI2NcJyie2z/ak2A==",
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/cordova-common/-/cordova-common-3.2.1.tgz",
"integrity": "sha512-xg0EnjnA6EipxXG8cupdlYQYeDA6+ghbN+Pjq88xN1LInwP6Bo7IyGBdSV5QnfjOvzShF9BBwSxBAv0FOO0C2Q==",
"requires": {
"ansi": "^0.3.1",
"bplist-parser": "^0.1.0",
@ -3962,9 +4111,9 @@
}
},
"graceful-fs": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
"integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
},
"strip-bom": {
"version": "3.0.0",
@ -4272,6 +4421,16 @@
"resolved": "https://registry.npmjs.org/cordova-open-native-settings/-/cordova-open-native-settings-1.5.2.tgz",
"integrity": "sha512-UvcTZAH3/r3U/jred2bOqoYIXUo5Gmq0in6fgkqvwgRCcOSQtQJWnUqg4i0RlHkEd1zKDi61JdpeSyJT+K8ZRQ=="
},
"cordova-opentok-android-permissions": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cordova-opentok-android-permissions/-/cordova-opentok-android-permissions-1.0.1.tgz",
"integrity": "sha1-/mYUXx3eHx/LKTHzy1Fuzb9dESg="
},
"cordova-plugin-actionsheet": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-actionsheet/-/cordova-plugin-actionsheet-2.3.3.tgz",
"integrity": "sha1-6SYbLQBKjaQHOI1g31NMFWxS/xE="
},
"cordova-plugin-add-swift-support": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-add-swift-support/-/cordova-plugin-add-swift-support-2.0.2.tgz",
@ -4294,6 +4453,26 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-android-permissions/-/cordova-plugin-android-permissions-1.0.0.tgz",
"integrity": "sha1-nnwRa+Zo6336QUkbE9jUfalUgUk="
},
"cordova-plugin-appavailability": {
"version": "0.4.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-appavailability/-/cordova-plugin-appavailability-0.4.2.tgz",
"integrity": "sha1-oBeq8PiCfuWZ3HeLYkXcwTULy6g="
},
"cordova-plugin-apprate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-apprate/-/cordova-plugin-apprate-1.4.0.tgz",
"integrity": "sha512-4HflFYuxzctnxQHYL9L5og7GVtVDQuqFX4WGXBzslln8V9/ODCafBTTtLSt+EKoIOJvL1iD5dztYkfyDn7HpBg=="
},
"cordova-plugin-badge": {
"version": "0.8.8",
"resolved": "https://registry.npmjs.org/cordova-plugin-badge/-/cordova-plugin-badge-0.8.8.tgz",
"integrity": "sha512-RhIBtd5xhD/iLnxjt35jvOae28oNW/wtMZBOmQR3Rf0y4wirvA1bpAZEhBoFqL+rZGhsd6ddOdQXdex1T0DRyQ=="
},
"cordova-plugin-ble-central": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/cordova-plugin-ble-central/-/cordova-plugin-ble-central-1.2.4.tgz",
"integrity": "sha512-NBRcAiH+VbKbmM3iNY3Psa4jGDYjWm/KGB3sikv0Fv0ZWfsI7XqjX6Fs6hmQJ+M7/X4qe/s8zDwRkQgU7ZOrjw=="
},
"cordova-plugin-camera": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-camera/-/cordova-plugin-camera-4.1.0.tgz",
@ -4309,6 +4488,11 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-device/-/cordova-plugin-device-2.0.3.tgz",
"integrity": "sha512-Jb3V72btxf3XHpkPQsGdyc8N6tVBYn1vsxSFj43fIz9vonJDUThYPCJJHqk6PX6N4dJw6I4FjxkpfCR4LDYMlw=="
},
"cordova-plugin-dialogs": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-dialogs/-/cordova-plugin-dialogs-2.0.2.tgz",
"integrity": "sha512-FUHI6eEVeoz2VkxbF0P56QlUQLGzXcvw3i4xuXyM9gEct6Y+FA3Xzgl2pJTZcTg5wRqLWzN08kgNoHPkom15pw=="
},
"cordova-plugin-file": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-file/-/cordova-plugin-file-6.0.2.tgz",
@ -4319,6 +4503,14 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-filepath/-/cordova-plugin-filepath-1.5.6.tgz",
"integrity": "sha512-YvrnXfoq4hzruVXnKo2qAiWlJ6xqo9RWLycEOI13WAIb69pzVvvFHXLREv7otSXkTn2tugpHQWcopxnPPOvFtA=="
},
"cordova-plugin-fingerprint-aio": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-fingerprint-aio/-/cordova-plugin-fingerprint-aio-2.0.0.tgz",
"integrity": "sha512-2F+T27HUYLMCkvX56yNJ7ZtY6r/Bl4nkskUyBtkh5nuUMRvZI7Fzyde7JUtD08JrJUpqvC4d6FmLm984w/NK5w==",
"requires": {
"cordova-plugin-add-swift-support": "^2.0.2"
}
},
"cordova-plugin-geolocation": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-geolocation/-/cordova-plugin-geolocation-4.0.2.tgz",
@ -4329,6 +4521,16 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-globalization/-/cordova-plugin-globalization-1.11.0.tgz",
"integrity": "sha1-6sMVgQAphJOvowvolA5pj2HvvP4="
},
"cordova-plugin-health": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-health/-/cordova-plugin-health-1.1.3.tgz",
"integrity": "sha512-hX2C95AetTbeQ5OXOu7xugDQhJVhSe7hnbmN3EJccbRvy5dN/vaWE/MaYhdzZxrOzYSd2V/z6lLJliWVX5bRjA=="
},
"cordova-plugin-inappbrowser": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/cordova-plugin-inappbrowser/-/cordova-plugin-inappbrowser-3.1.0.tgz",
"integrity": "sha512-YqrZfYgbGTS20SFID0mrRxud312VH072QVlFonCAkPgtGg1Svy7lELOCNFd+KU7t4mVtZeTEjZPEeefvjaetwQ=="
},
"cordova-plugin-ionic-keyboard": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-ionic-keyboard/-/cordova-plugin-ionic-keyboard-2.1.3.tgz",
@ -4339,11 +4541,26 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-ionic-webview/-/cordova-plugin-ionic-webview-4.1.0.tgz",
"integrity": "sha512-aY1yI042TMgyDoh07rUSxSedlTwQfrvS44UnpakmCqmA/BapjSv88ixa5qUun95vwsYdTERX2VJp6h/YrR1lFQ=="
},
"cordova-plugin-local-notification": {
"version": "0.9.0-beta.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-local-notification/-/cordova-plugin-local-notification-0.9.0-beta.2.tgz",
"integrity": "sha512-63n77K1pt8dnbWnNR8QWETi9Glezi1bvNHvHWmGNIOv0xCb0phZnm+Ku49BQ+omwe8Z5voMvrA4I03SYPpv38w=="
},
"cordova-plugin-mauron85-background-geolocation": {
"version": "3.0.0-alpha.50",
"resolved": "https://registry.npmjs.org/cordova-plugin-mauron85-background-geolocation/-/cordova-plugin-mauron85-background-geolocation-3.0.0-alpha.50.tgz",
"integrity": "sha512-TVdsJ4gPOuFANB3SX/bDLp4igK6o5nPXO95+tv9RpLr5Rwh2XhiozmEpaC0mnMFiuKi6j1xbaZLklhhVBwC14w=="
},
"cordova-plugin-nativestorage": {
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-nativestorage/-/cordova-plugin-nativestorage-2.3.2.tgz",
"integrity": "sha512-olg/BzYRk0NGbKQ5f7rf21RYQEyJI19CCZn6RpVMO9/kbRRFqae/6ixjDNy81dXSu2TQ42brjBddGe1Qpn5ViA=="
},
"cordova-plugin-sms-receive": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/cordova-plugin-sms-receive/-/cordova-plugin-sms-receive-1.0.2.tgz",
"integrity": "sha512-y2QMX709RgrbCHVDHAewjvXi50h+u+VcuCQADPJS+tH/BosFie+x1vo5mMwysuIEiaQ25b0qhIzo63RCyT5Fyw=="
},
"cordova-plugin-splashscreen": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/cordova-plugin-splashscreen/-/cordova-plugin-splashscreen-5.0.3.tgz",
@ -4354,15 +4571,33 @@
"resolved": "https://registry.npmjs.org/cordova-plugin-statusbar/-/cordova-plugin-statusbar-2.4.3.tgz",
"integrity": "sha512-ThmXzl6QIKWFXf4wWw7Q/zpB+VKkz3VM958+5A0sXD4jmR++u7KnGttLksXshVwWr6lvGwUebLYtIyXwS4Ovcg=="
},
"cordova-plugin-themeablebrowser": {
"version": "0.2.18",
"resolved": "https://registry.npmjs.org/cordova-plugin-themeablebrowser/-/cordova-plugin-themeablebrowser-0.2.18.tgz",
"integrity": "sha512-FdE1L3wItbTtUudysX/QxN6DTnfGPTMiS4Np/XKeSfYM0bU8sP6DhUIUp1vA8GAulihkEfbNIvy68oVkx2xtFQ=="
},
"cordova-plugin-whitelist": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/cordova-plugin-whitelist/-/cordova-plugin-whitelist-1.3.4.tgz",
"integrity": "sha512-EYC5eQFVkoYXq39l7tYKE6lEjHJ04mvTmKXxGL7quHLdFPfJMNzru/UYpn92AOfpl3PQaZmou78C7EgmFOwFQQ=="
},
"cordova-sqlite-storage": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/cordova-sqlite-storage/-/cordova-sqlite-storage-3.4.0.tgz",
"integrity": "sha512-Uavq3HulVIYXxTFCp5aafiQhYrZF0/cGlyN76RYhIftcD5IRhza9+ghhV5abJYvuGlzY+p9dM5hPcjnYxfAH+g==",
"requires": {
"cordova-sqlite-storage-dependencies": "2.1.0"
}
},
"cordova-sqlite-storage-dependencies": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/cordova-sqlite-storage-dependencies/-/cordova-sqlite-storage-dependencies-2.1.0.tgz",
"integrity": "sha512-m0cPOWPzckAqS0/e7v+xtcM+FrHrw63qgh5T91JdkXMKCK8sN9bDoqVNJHZ5E9y7sRO7liMUIDm6Dz439RYqGA=="
},
"cordova-support-google-services": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/cordova-support-google-services/-/cordova-support-google-services-1.1.0.tgz",
"integrity": "sha1-RjTFIgD4cGDReV6yhw6ZRC12Lm0="
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/cordova-support-google-services/-/cordova-support-google-services-1.3.2.tgz",
"integrity": "sha512-RtEWzULreUX662MFWopGhFispLiHX7gUf2GijPOC2mY2oCNuUobj2mO4tl5q7PYbOreSxq+PrSekhmS6TAAWdw=="
},
"cordova.plugins.diagnostic": {
"version": "5.0.1",
@ -4674,9 +4909,9 @@
"integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo="
},
"d3-brush": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.6.tgz",
"integrity": "sha512-lGSiF5SoSqO5/mYGD5FAeGKKS62JdA1EV7HPrU2b5rTX4qEJJtpjaGLJngjnkewQy7UnGstnFd3168wpf5z76w==",
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.3.tgz",
"integrity": "sha512-v8bbYyCFKjyCzFk/tdWqXwDykY8YWqhXYjcYxfILIit085VZOpj4XJKOMccTsvWxgzSLMJQg5SiqHjslsipEDg==",
"requires": {
"d3-dispatch": "1",
"d3-drag": "1",
@ -4700,9 +4935,9 @@
"integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI="
},
"d3-color": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.8.tgz",
"integrity": "sha512-yeANXzP37PHk0DbSTMNPhnJD+Nn4G//O5E825bR6fAfHH43hobSBpgB9G9oWVl9+XgUaQ4yCnsX1H+l8DoaL9A=="
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz",
"integrity": "sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg=="
},
"d3-dispatch": {
"version": "1.0.3",
@ -4745,9 +4980,9 @@
}
},
"d3-format": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz",
"integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ=="
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.1.tgz",
"integrity": "sha512-TUswGe6hfguUX1CtKxyG2nymO+1lyThbkS1ifLX0Sr+dOQtAD5gkrffpHnx+yHNKUZ0Bmg5T4AjUQwugPDrm0g=="
},
"d3-geo": {
"version": "1.9.1",
@ -4839,9 +5074,9 @@
"integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ=="
},
"d3-time-format": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz",
"integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==",
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.1.tgz",
"integrity": "sha512-VA6WqORO1+H1SvSzgl2oT0z3niANh3opa8Cencpen1LFthw/bEX71R/DgjPlWw78J4UHmD0jCPP1W0HpwMkhjg==",
"requires": {
"d3-time": "1"
}
@ -5467,26 +5702,33 @@
}
},
"es-abstract": {
"version": "1.14.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.14.2.tgz",
"integrity": "sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg==",
"version": "1.16.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.2.tgz",
"integrity": "sha512-jYo/J8XU2emLXl3OLwfwtuFfuF2w6DYPs+xy9ZfVyPkDcrauu6LYrw/q2TyCtrbc/KUdCiC5e9UajRhgNkVopA==",
"requires": {
"es-to-primitive": "^1.2.0",
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.0",
"has-symbols": "^1.0.1",
"is-callable": "^1.1.4",
"is-regex": "^1.0.4",
"object-inspect": "^1.6.0",
"object-inspect": "^1.7.0",
"object-keys": "^1.1.1",
"string.prototype.trimleft": "^2.0.0",
"string.prototype.trimright": "^2.0.0"
"string.prototype.trimleft": "^2.1.0",
"string.prototype.trimright": "^2.1.0"
},
"dependencies": {
"object-inspect": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
"integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw=="
}
}
},
"es-to-primitive": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz",
"integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==",
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
"requires": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@ -6893,9 +7135,9 @@
"dev": true
},
"handlebars": {
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.1.tgz",
"integrity": "sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==",
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.5.3.tgz",
"integrity": "sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA==",
"dev": true,
"requires": {
"neo-async": "^2.6.0",
@ -6975,9 +7217,9 @@
"dev": true
},
"has-symbols": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz",
"integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q="
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
"integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg=="
},
"has-unicode": {
"version": "2.0.1",
@ -7480,6 +7722,11 @@
}
}
},
"install": {
"version": "0.8.9",
"resolved": "https://registry.npmjs.org/install/-/install-0.8.9.tgz",
"integrity": "sha1-n0tcDRhR74cunfheT3Fi1OXc2+0="
},
"internal-ip": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz",
@ -7758,11 +8005,11 @@
"dev": true
},
"is-symbol": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz",
"integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
"integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
"requires": {
"has-symbols": "^1.0.0"
"has-symbols": "^1.0.1"
}
},
"is-typedarray": {
@ -9116,6 +9363,11 @@
"integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
"dev": true
},
"mx.ferreyra.callnumber": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/mx.ferreyra.callnumber/-/mx.ferreyra.callnumber-0.0.2.tgz",
"integrity": "sha512-J9FJiMrfWG9Q8AQEz/cgYLcXTTD/Z5+vfq29hn8K7yVWjxkSzr7zFi7Dpn8wcv2iKHBHDJY+U0z8yoAzDugXMw=="
},
"nan": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
@ -9579,6 +9831,11 @@
"wrappy": "1"
}
},
"onesignal-cordova-plugin": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/onesignal-cordova-plugin/-/onesignal-cordova-plugin-2.7.0.tgz",
"integrity": "sha512-ZkvF9uus+WdX+9Nh2p0OlZ6gUJHqKI88IQz78wW1Dat0kPmQvi8bYFi+MI8LYTkg2IFza6W0IbVVkEw7ye58cw=="
},
"onetime": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
@ -10060,6 +10317,14 @@
"resolved": "https://registry.npmjs.org/phonegap-plugin-multidex/-/phonegap-plugin-multidex-1.0.0.tgz",
"integrity": "sha512-1wvc3iQOQpEBaQbXgLxA2JUiLSQ2azdF/bF29ghXDiQJWSpQ1BF8gSuqttM8WZoj081Ps8OKL0gYxdDBkFNPqA=="
},
"phonegap-plugin-push": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/phonegap-plugin-push/-/phonegap-plugin-push-2.3.0.tgz",
"integrity": "sha512-0R35BGVvvNzov3fckBspc7snwsIdClIBhI7jUCIa7AgSZy2Lrwm8kPuLTyzMVSNR3MJTxWX6s06aDlVL7EvQ3w==",
"requires": {
"install": "^0.8.2"
}
},
"pify": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
@ -10120,9 +10385,9 @@
}
},
"positioning": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/positioning/-/positioning-1.4.0.tgz",
"integrity": "sha512-LbN+mgAXtcDdN46xMJ3yZwjndqqYJODaO5qKmU+MVMu5tL3K2dlm1Qha/zh1k2JAFym5HDaZpnPfO4gr91VTRw=="
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/positioning/-/positioning-1.5.1.tgz",
"integrity": "sha512-Al3inO/WAlq7Q986pghpdWC9fsSCCKxOAwRt8ZGpcQn58SP8RJX7bjC53I7xeq9ngN+odcyF4B+wMdpyyiF5wQ=="
},
"posix-character-classes": {
"version": "0.1.1",
@ -12191,9 +12456,9 @@
"integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
},
"glob": {
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz",
"integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==",
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@ -12698,6 +12963,11 @@
}
}
},
"uk.co.workingedge.phonegap.plugin.launchnavigator": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/uk.co.workingedge.phonegap.plugin.launchnavigator/-/uk.co.workingedge.phonegap.plugin.launchnavigator-3.2.2.tgz",
"integrity": "sha1-g7rPTQyjspbtFL5tQpRzHQd4jkQ="
},
"ultron": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",

@ -21,75 +21,97 @@
"@angular/platform-browser": "^7.2.2",
"@angular/platform-browser-dynamic": "^7.2.2",
"@angular/router": "^7.2.2",
"@ionic-native/android-permissions": "^5.8.0",
"@ionic-native/app-availability": "^5.8.0",
"@ionic-native/app-rate": "^5.8.0",
"@ionic-native/background-geolocation": "^5.4.0",
"@ionic-native/badge": "^5.8.0",
"@ionic-native/barcode-scanner": "^5.14.0",
"@ionic-native/android-permissions": "^5.16.0",
"@ionic-native/app-availability": "^5.16.0",
"@ionic-native/app-rate": "^5.16.0",
"@ionic-native/background-geolocation": "^5.16.0",
"@ionic-native/badge": "^5.16.0",
"@ionic-native/barcode-scanner": "^5.16.0",
"@ionic-native/base64": "^5.15.1",
"@ionic-native/ble": "^5.8.0",
"@ionic-native/camera": "^5.14.0",
"@ionic-native/ble": "^5.16.0",
"@ionic-native/call-number": "^5.16.0",
"@ionic-native/camera": "^5.16.0",
"@ionic-native/core": "^5.8.0",
"@ionic-native/date-picker": "^5.10.0",
"@ionic-native/device": "^5.8.0",
"@ionic-native/diagnostic": "^5.14.0",
"@ionic-native/device": "^5.16.0",
"@ionic-native/diagnostic": "^5.16.0",
"@ionic-native/file": "^5.15.1",
"@ionic-native/file-path": "^5.15.1",
"@ionic-native/fingerprint-aio": "^5.8.0",
"@ionic-native/fingerprint-aio": "^5.17.1",
"@ionic-native/geolocation": "^5.10.0",
"@ionic-native/globalization": "^5.8.0",
"@ionic-native/health": "^5.4.0",
"@ionic-native/in-app-browser": "^5.8.0",
"@ionic-native/keyboard": "^5.8.0",
"@ionic-native/launch-navigator": "^5.8.0",
"@ionic-native/native-storage": "^5.8.0",
"@ionic-native/globalization": "^5.16.0",
"@ionic-native/health": "^5.16.0",
"@ionic-native/in-app-browser": "^5.16.0",
"@ionic-native/keyboard": "^5.16.0",
"@ionic-native/launch-navigator": "^5.16.0",
"@ionic-native/local-notifications": "^5.16.0",
"@ionic-native/native-storage": "^5.16.0",
"@ionic-native/onesignal": "^5.17.1",
"@ionic-native/open-native-settings": "^5.14.0",
"@ionic-native/push": "^5.8.0",
"@ionic-native/push": "^5.16.0",
"@ionic-native/splash-screen": "^5.0.0",
"@ionic-native/sqlite": "^5.8.0",
"@ionic-native/sqlite": "^5.16.0",
"@ionic-native/status-bar": "^5.0.0",
"@ionic-native/themeable-browser": "^5.8.0",
"@ionic-native/themeable-browser": "^5.16.0",
"@ionic-native/zbar": "^5.10.0",
"@ionic/angular": "^4.1.0",
"@ng-bootstrap/ng-bootstrap": "^4.2.1",
"@ng-bootstrap/ng-bootstrap": "^4.2.2",
"@swimlane/ngx-charts": "^10.1.0",
"angular-calendar": "^0.26.11",
"app": "0.1.0",
"chart.js": "^2.8.0",
"chart.js": "^2.9.2",
"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-browser": "5.0.4",
"cordova-ios": "4.5.5",
"cordova-open-native-settings": "^1.5.2",
"cordova-opentok-android-permissions": "^1.0.1",
"cordova-plugin-actionsheet": "^2.3.3",
"cordova-plugin-add-swift-support": "^2.0.2",
"cordova-plugin-android-permissions": "^1.0.0",
"cordova-plugin-appavailability": "^0.4.2",
"cordova-plugin-apprate": "^1.4.0",
"cordova-plugin-badge": "^0.8.8",
"cordova-plugin-ble-central": "^1.2.4",
"cordova-plugin-camera": "^4.1.0",
"cordova-plugin-datepicker": "^0.9.3",
"cordova-plugin-device": "^2.0.3",
"cordova-plugin-dialogs": "^2.0.2",
"cordova-plugin-file": "^6.0.2",
"cordova-plugin-filepath": "^1.5.6",
"cordova-plugin-fingerprint-aio": "^2.0.0",
"cordova-plugin-geolocation": "^4.0.2",
"cordova-plugin-globalization": "^1.11.0",
"cordova-plugin-health": "^1.1.3",
"cordova-plugin-inappbrowser": "^3.1.0",
"cordova-plugin-ionic-keyboard": "^2.1.3",
"cordova-plugin-ionic-webview": "4.1.0",
"cordova-plugin-local-notification": "^0.9.0-beta.2",
"cordova-plugin-mauron85-background-geolocation": "^3.0.0-alpha.50",
"cordova-plugin-nativestorage": "^2.3.2",
"cordova-plugin-sms-receive": "^1.0.2",
"cordova-plugin-splashscreen": "^5.0.3",
"cordova-plugin-statusbar": "^2.4.3",
"cordova-plugin-themeablebrowser": "^0.2.18",
"cordova-plugin-whitelist": "^1.3.4",
"cordova-support-google-services": "^1.1.0",
"cordova-sqlite-storage": "^3.4.0",
"cordova-support-google-services": "^1.3.2",
"cordova.plugins.diagnostic": "^5.0.1",
"core-js": "^2.5.4",
"date-fns": "^1.30.1",
"mx.ferreyra.callnumber": "0.0.2",
"ng2-file-upload": "^1.3.0",
"ng2-pdf-viewer": "^5.3.2",
"onesignal-cordova-plugin": "^2.7.0",
"phonegap-plugin-barcodescanner": "8.1.0",
"phonegap-plugin-multidex": "^1.0.0",
"phonegap-plugin-push": "^2.3.0",
"primeicons": "^1.0.0",
"primeng": "^7.1.3",
"run": "1.4.0",
"rxjs": "^6.3.3",
"rxjs": "~6.3.3",
"uk.co.workingedge.phonegap.plugin.launchnavigator": "^3.2.2",
"xlsx": "^0.14.3",
"zone.js": "~0.8.29"
},
@ -140,20 +162,48 @@
"cordova-plugin-ionic-webview": {
"ANDROID_SUPPORT_ANNOTATIONS_VERSION": "27.+"
},
"cordova-android-support-gradle-release": {
"ANDROID_SUPPORT_VERSION": "27.+"
},
"cordova.plugins.diagnostic": {
"ANDROID_SUPPORT_VERSION": "28.+"
},
"cordova-android-support-gradle-release": {},
"cordova.plugins.diagnostic": {},
"cordova-open-native-settings": {},
"cordova-plugin-camera": {
"ANDROID_SUPPORT_V4_VERSION": "27.+"
},
"cordova-plugin-camera": {},
"cordova-plugin-file": {},
"cordova-plugin-filepath": {},
"com-badrit-base64": {},
"call-number": {}
"call-number": {},
"phonegap-plugin-push": {
"GOOGLE_PLAY_SERVICES_VERSION": "16.0.0",
"FCM_VERSION": "15.0.0",
"ANDROID_SUPPORT_V13_VERSION": "27.+"
},
"cordova-sqlite-storage": {},
"cordova-plugin-ble-central": {},
"uk.co.workingedge.phonegap.plugin.launchnavigator": {},
"cordova-plugin-themeablebrowser": {},
"cordova-plugin-inappbrowser": {},
"cordova-plugin-sms-receive": {},
"cordova-plugin-local-notification": {},
"cordova-plugin-fingerprint-aio": {
"FACEID_USAGE_DESCRIPTION": "User Authentication"
},
"cordova-plugin-mauron85-background-geolocation": {
"GOOGLE_PLAY_SERVICES_VERSION": "16.0.0",
"ANDROID_SUPPORT_LIBRARY_VERSION": "26+",
"ICON": "@mipmap/icon",
"SMALL_ICON": "@mipmap/icon",
"ACCOUNT_NAME": "@string/app_name",
"ACCOUNT_LABEL": "@string/app_name",
"ACCOUNT_TYPE": "$PACKAGE_NAME.account",
"CONTENT_AUTHORITY": "$PACKAGE_NAME"
},
"cordova-opentok-android-permissions": {},
"cordova-plugin-health": {
"HEALTH_READ_PERMISSION": "App needs read access to read heart rate",
"HEALTH_WRITE_PERMISSION": "App needs write access for heart rate",
"GMS_VERSION": "16.0.1"
},
"cordova-plugin-appavailability": {},
"cordova-plugin-apprate": {},
"onesignal-cordova-plugin": {}
},
"platforms": [
"browser",

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { AbsenceNotificationBodyItems } from './AbsenceNotificationBodtItems';
export class AbsenceNotificatonBodyResponse extends Response {

@ -1,4 +1,4 @@
import {Response} from './response'
import { Response } from 'src/app/hmg-common/services/models/response';
import {AbsenceAttahcment} from './abs.attach'
export class AbsenceAttahcmentResponse extends Response{
public static SHARED_DATA = 'absence-attachment';

@ -1,4 +1,6 @@
import {Response} from './response'
import { Response } from 'src/app/hmg-common/services/models/response';
export class AbsenceDffResponse extends Response{
public static SHARED_DATA = 'absence_dff_resp';
public P_TRANSACTION_ID:number;

@ -1,4 +1,4 @@
import {Response} from './response'
import { Response } from 'src/app/hmg-common/services/models/response';
export class AbsenceResponse extends Response{
public static SHARED_DATA = 'absence_tr_id';
public P_TRANSACTION_ID:number;

@ -1,4 +1,4 @@
import { Request } from './request';
import { Request } from '../../hmg-common/services/models/request';
export class AbsenceTransaction extends Request{
public static SHARED_DATA = 'absence_transaction';

@ -1,4 +1,4 @@
import {Request} from './request'
import { Request } from '../../hmg-common/services/models/request';
export class ReplacementServiceRequest extends Request{
P_SEARCH_USER_NAME:string;

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import {replacmentinfo} from './replacment-info';
export class ReplacmentResponse extends Response {

@ -1,7 +1,7 @@
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 { Observable } from 'rxjs';
import {Request} from '../models/request'
import { ReplacementServiceRequest } from '../models/replacement-Service.request';

@ -20,7 +20,8 @@ import { DateInput } from "../../uI-elements/date.input";
import { TimeInput } from "../../uI-elements/time.input";
import { DateTimeInput } from "../../uI-elements/date-time.input";
import { DatePicker } from "@ionic-native/date-picker/ngx";
import { Request } from "../models/request";
import { Request } from '../../hmg-common/services/models/request';
// import { Request } from "../models/request";
import * as moment from "moment";
import {ReplacementListComponent} from "../../vacation-rule/replacement-list/replacement-list.component";
import {ReplacmentResponse} from "../models/replacment-response";

@ -8,7 +8,7 @@
<div class="centerDiv">
<p class="TxtPlace">{{ts.trPK('home','hello')}}, {{User_name_Emp}}</p>
<!-- <div> <img src="{{user_image}}" class="profileImg"></div> -->
<div><img class="profileImg" [src]="user_image"></div>
<div><img class="menuImg" [src]="user_image"></div>
</div>

@ -8,6 +8,16 @@ header
.content-ios:not([no-bounce])>.scroll-content::before {
bottom: 0;
}
.menuImg{
width: 80px;
height: 80px;
display: inline-flex;
overflow: hidden;
background: transparent;
border-radius: 50% !important;
position: relative;
top: 0px;
}
.menu-header .logo {
position: absolute;

@ -7,7 +7,7 @@ import { AuthenticatedUser } from "./hmg-common/services/authentication/models/a
import { TabsBarComponent } from "./hmg-common/ui/tabs-bar/tabs-bar.component";
import { KeyboardService } from "./hmg-common/services/keyboard/keyboard.service";
import { SMSCheckResponse } from "src/app/hmg-common/services/authentication/models/smscheck.response";
import { PushService } from '../../src/app/hmg-common/services/push/push.service';
import { LazyLoadingService } from "./hmg-common/services/lazy-loading/lazy-loading.service";
import { DomSanitizer } from '@angular/platform-browser';
@ -38,6 +38,7 @@ export class AppComponent implements OnInit, AfterViewInit {
private menu: MenuController,
private authService: AuthenticationService,
private sanitizer: DomSanitizer,
public pushService: PushService,
) {
this.events.subscribe("img-change", displayImg => {
@ -50,6 +51,7 @@ export class AppComponent implements OnInit, AfterViewInit {
}
ngOnInit() {
this.initializeApp();
}
ngAfterViewInit() {}
initializeApp() {
@ -63,9 +65,15 @@ export class AppComponent implements OnInit, AfterViewInit {
this.watchLanguageChangeEvents();
this.subscribeEvents();
this.keyboardService.watchKeyboard();
this.startReceivingPushService();
});
});
}
private startReceivingPushService() {
this.pushService.startReceiving();
}
subscribeEvents() {
this.events.subscribe("setMenu", () => {
const user = this.authService

@ -5,6 +5,7 @@ import { HmgCommonModule } from './hmg-common/hmg-common.module';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { OneSignal } from '@ionic-native/onesignal/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
@ -36,6 +37,7 @@ import { Base64 } from "@ionic-native/base64/ngx";
File,
FilePath,
Base64,
OneSignal,
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]

@ -20,7 +20,7 @@ import { SmsPageModule } from 'src/app/hmg-common/ui/sms/sms.module';
import { SmsPageComponent } from './sms-page/sms-page.page';
import { CheckUserComponent } from './check-user/check-user.component';
import { ChangePasswordComponent } from './change-password/change-password.component';
import {ConfirmLoginComponent} from '../authentication/confirm-login/confirm-login.component'
const routes: Routes = [
@ -47,6 +47,10 @@ const routes: Routes = [
{
path: 'changepassowrd',
component: ChangePasswordComponent
},
{
path: 'confirmLogin',
component: ConfirmLoginComponent
}
]
}
@ -72,7 +76,8 @@ const routes: Routes = [
ForgotComponent,
SmsPageComponent,
CheckUserComponent,
ChangePasswordComponent
ChangePasswordComponent,
ConfirmLoginComponent
],
providers:[
FingerprintAIO,

@ -0,0 +1,50 @@
<ion-header>
<ion-toolbar class="header-toolbar">
<ion-buttons slot="start">
<ion-back-button color="light" class="btnBack" ></ion-back-button>
</ion-buttons>
<ion-title color="light" > {{'login,verify-login' | translate}}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content padding>
<ion-grid>
<ion-row class="ion-justify-content-center">
<ion-col [size]="4">
<img [src]="logo" class="logo" />
</ion-col>
</ion-row>
<ion-row class="description">
<ion-col size="12">
<!-- <type-writer *ngIf="onlySMSBox" [text]="'login,verify-login-with' | translate" class="description"
color="primary" fontSize="0.55cm" lineHeight="1cm" fontSize="0.55cm"></type-writer>
-->
<div *ngIf="onlySMSBox"><p>{{ts.trPK('login','verify-login-with')}}</p></div>
<!-- <type-writer *ngIf="!onlySMSBox" [text]="'login, verify-fingerprint' | translate" class="description"
color="primary" fontSize="0.55cm" lineHeight="1cm" fontSize="0.55cm"></type-writer>
-->
<div *ngIf="!onlySMSBox"><p>{{ts.trPK('login','verify-fingerprint')}}</p></div>
</ion-col>
</ion-row>
<page-trailer [small]="true"></page-trailer>
<ion-row [dir]="direction" class="zoomIn">
<ng-container *ngFor="let buttonsGroup of buttons">
<ion-col *ngFor="let button of buttonsGroup" [size]="6">
<app-button (click)="confirm(button)" [title]="button.title | translate " [icon]="button.icon"
[settings]="button.settings" [strong]="button.txt" [class]="button.class" [disabled]="button.disabled"
*ngIf="button.visible">
</app-button>
</ion-col>
</ng-container>
</ion-row>
</ion-grid>
</ion-content>

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

@ -0,0 +1,789 @@
import { Component, OnInit } from '@angular/core';
import {ButtonSettings} from "src/app/hmg-common/ui/button/models/button-settingsl";
import {TranslatorService} from "src/app/hmg-common/services/translator/translator.service";
import { CommonService } from 'src/app/hmg-common/services/common/common.service';
import { LoginRequest } from 'src/app/hmg-common/services/authentication/models/login.request';
import { AuthenticationService } from 'src/app/hmg-common/services/authentication/authentication.service';
import { SharedDataService } from 'src/app/hmg-common/services/shared-data-service/shared-data.service';
import { SendActivationByType } from '../models/sendActivationByType';
import { FingerprintAIO } from '@ionic-native/fingerprint-aio/ngx';
import { GetLoginInfoRequest } from "../../hmg-common/services/authentication/models/get-login-info.request";
import { GetLoginInfoResponse } from "../../hmg-common/services/authentication/models/get-login-info.response";
import { SMSCheckRequest } from "src/app/hmg-common/services/authentication/models/smscheck.request";
import { SMSCheckResponse } from "src/app/hmg-common/services/authentication/models/smscheck.response";
import { PushService } from 'src/app/hmg-common/services/push/push.service';
import { Platform } from '@ionic/angular';
@Component({
selector: 'app-confirm-login',
templateUrl: './confirm-login.component.html',
styleUrls: ['./confirm-login.component.scss'],
})
export class ConfirmLoginComponent implements OnInit {
public logo = "assets/imgs/CS.png";
public buttons:any=[];
isFaceorFinger: any;
onlySMSBox: any = true;
loginData:any;
selectedOption: any;
lastLogin: any;
loginTokenID:any
deviceToken:any;
constructor(
public ts: TranslatorService,
public cs: CommonService,
public authService: AuthenticationService,
public sharedData: SharedDataService,
private faio: FingerprintAIO,
public pushService: PushService,
public platform: Platform,
) {
this.loginData= this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
console.log(this.loginData);
this.deviceToken= this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false);
console.log("deviceToken :"+this.deviceToken);
//if device token undefind
if(this.deviceToken == undefined){
this.deviceToken = localStorage.getItem("deviceToken");
}
this.lastLogin = this.cs.sharedService.getSharedData(AuthenticationService.LAST_LOGIN, false);
}
ngOnInit() {
//**checkIfAvailable FAIO **//
this.checkIfAvailable();
//**getSharedData of IMEI_USER_DATA and REGISTER_DATA_FOR_LOGIIN to set defult value **//
// this.setDefault();
this.button();
}
checkIfAvailable() {
this.faio.isAvailable().then(
options => {
this.isFaceorFinger = options;
// && this.lastLogin === 1
// if (this.isFaceorFinger === 'finger' || this.isFaceorFinger === 'biometric') {
// this.selectedOption = 2;
// this.cs.presentConfirmDialog(
// this.ts.trPK("login", "biometric-support"),
// () => {
// this.presentBiometricDialog();
// this.cs.sharedService.setSharedData(
// this.selectedOption,
// AuthenticationService.LAST_LOGIN
// );
// },
// () => { }
// );
// }
this.button();
},
() => {
this.isFaceorFinger = null;
this.button();
}
);
}
button() {
console.log("button");
this.buttons = [
[{
title: "login,verify-with-fingerprint",
url: null,
icon: "assets/icon/login/102.png",
settings: new ButtonSettings(true, true, true, true),
value: 2,
disabled: this.isFaceorFinger === "finger" || this.isFaceorFinger === "biometric" ? false : true,
visible: this.onlySMSBox
},
{
title: "login,verify-with-faceid",
url: null,
icon: "assets/icon/login/101.png",
settings: new ButtonSettings(true, true, true, true),
value: 3,
disabled: this.isFaceorFinger === "face" ? false : true,
visible: this.onlySMSBox
},
{
title: "login,verify-with-whatsapp",
url: null,
icon: "assets/icon/login/104.png",
settings: new ButtonSettings(true, true, true, true),
value: 4,
visible: true
},
{
title: "login,verify-with-sms",
url: null,
icon: "assets/icon/login/103.png",
settings: new ButtonSettings(true, true, true, true),
value: 1,
visible: true
}
]
];
}
confirm(el: any) {
console.log("confirm:"+ el );
this.selectedOption = this.selectedOption && !this.onlySMSBox ? this.selectedOption : el.value;
switch (el.value) {
case 1:
console.log(el.value);
this.loginWithSMS(el);
break;
case 2:
console.log(el.value);
this.loginWithFingurePrint(el);
break;
case 3:
console.log(el.value);
this.faceReconization(el);
break;
case 4:
console.log(el.value);
this.loginWithWhatsapp(el);
break;
default:
break;
}
this.cs.sharedService.setSharedData(
this.selectedOption,
AuthenticationService.LAST_LOGIN
);
}
loginWithSMS(el) {
console.log("loginWithSMS: "+ el);
if (!el.disabled) {
// if (this.user && !this.registerd_data) {
//calling because i dont have token id which required to the send activation code
/// this.checkUserAuthentication(1);
// this.checkUserAuthentication(); ***
// } else {
if (this.loginData.LogInTokenID) {
this.sendActivationCode(1);
} else {
// this.checkUserAuthentication(1);
// this.checkUserAuthentication();**
}
// }
}
}
loginWithWhatsapp(el) {
if (!el.disabled) {
// if (this.user && !this.registerd_data) {
//calling because i dont have token id which required to the send activation code
// this.checkUserAuthentication(2);
// } else {
if (this.loginData.LogInTokenID) {
this.sendActivationCode(2);
} else {
// this.checkUserAuthentication(2);
}
// }
}
}
public sendActivationCode(type: number) {
let request = new SendActivationByType();
this.authService.setPublicFields(request);
request.OTP_SendType = type;
request.MobileNumber = this.loginData.MobileNumber;
request.IsMobileFingerPrint =0;
request.P_USER_NAME=this.loginData.P_USER_NAME;
request.LogInTokenID =this.loginData.LogInTokenID;
request.P_LEGISLATION_CODE ="SA";
// request.VersionID ="2.0";
// request.LanguageID = imeiData && imeiData.PreferredLanguage || request.LanguageID;
this.authService
.sendActivationCodeByType(
request,
() => { },
this.ts.trPK("general", "ok")
)
.subscribe((result: any) => {
if (result.isSMSSent) {
this.cs.sharedService.setSharedData({
MobileNumber: this.loginData.mobileNumber,
loginType: this.selectedOption
},
SMSCheckRequest.SHARED_DATA
);
this.cs.openSMSPage();
}
});
}
loginWithFingurePrint(el: any) {
if (!el.disabled) {
this.startBiometricLoginIfAvailable();
}
}
faceReconization(el: any) {
if (!el.disabled) {
this.startBiometricLoginIfAvailable();
}
}
private startBiometricLoginIfAvailable() {
// this.setting.isBiometricsEnabled().then(result => {
// console.log(result);
this.faio.isAvailable().then(
options => {
// if biometric supported
//if (result) {
// ask if login with face or finger
this.presentBiometricDialog();
// } else {
// //ask to enable biometric
// this.getPermissionToActivateBiometric();
// }
},
() => {
alert("not avaliable ")
// if biometric not supported do nothing unless
// user session time out from last login
// if (AuthenticationService.isRequireRelogin()) {
// this.initializeInputsFromSessionTimeOut(user);
// }
// this.hideSplashScreen(true);
}
);
//});
}
private presentBiometricDialog() {
this.faio
.show({
title: 'Biometric Authetnciation', // (Android Only) | optional | Default: "<APP_NAME> Biometric Sign On"
// subtitle: 'Coolest Plugin ever' ,// (Android Only) | optional | Default: null
// description: this.ts.trPK("general", "auth-please"),// optional | Default: null
fallbackButtonTitle: this.ts.trPK("general", "use-pin"), // optional | When disableBackup is false defaults to "Use Pin".
// When disableBackup is true defaults to "Cancel"
disableBackup:true, // optional | default: false
// clientId: "Fingerprint Authetnciation",
// clientSecret: "Ate343_9347lajF", // Only necessary for Android
// disableBackup: true, // Only for Android(optional)
// localizedFallbackTitle: this.ts.trPK("general", "use-pin"), // Only for iOS
// localizedReason: this.ts.trPK("general", "auth-please") // Only for iOS
})
.then((result: any) => {
console.log("1");
// this.deviceToken= this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false);
let request = new GetLoginInfoRequest();
this.authService.setPublicFields(request);
request.MobileNumber = this.loginData.MobileNumber;
request.P_USER_NAME=this.loginData.P_USER_NAME;
request.UserName=this.loginData.P_USER_NAME;
request.LogInTokenID =this.loginData.LogInTokenID;
request.CompanyID =1;//cs=1 , HMG=2
request.DeviceType= this.cs.getDeviceType();
request.DeviceToken=this.deviceToken;
this.getMobileInfo(request);
})
.catch((error: any) => {
console.log(error);
});
}
private getMobileInfo(request: GetLoginInfoRequest) {
console.log("2");
this.authService.getLoginInfo(request,() => { },this.ts.trPK("general", "ok")).subscribe((result: GetLoginInfoResponse) => {
console.log("authService.getLoginInfo");
if(result.Mohemm_GetPatientID_List.length > 0){
if ( result.Mohemm_GetPatientID_List[0].LoginType == 2 || result.Mohemm_GetPatientID_List[0].LoginType == 3) {
this.loginTokenID = result.LogInTokenID;
this.checkSMS();
} else {
this.onlySMSBox = false;
this.button();
}
}else {
this.onlySMSBox = false;
this.button();
}
});
}
public checkSMS() {
const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
const request = new SMSCheckRequest();
request.LogInTokenID = data.LogInTokenID;
request.activationCode = "";
request.P_USER_NAME = data.P_USER_NAME;
request.MobileNumber = data.MobileNumber;
this.authService
.checkSMS(request, () => {}, this.ts.trPK("general", "ok"))
.subscribe((result: SMSCheckResponse) => {
console.log(result);
if (this.cs.validResponse(result)) {
AuthenticationService.servicePrivilage=result.Privilege_List;
this.authService.setAuthenticatedUser(result).subscribe(() => {
if (this.platform.is("mobile")) {
this.insertMobileLogin();
}
this.cs.openHome();
});
}
});
}
public insertMobileLogin(){
let request = new GetLoginInfoRequest();
this.authService.setPublicFields(request);
request.MobileNumber = this.loginData.MobileNumber;
request.P_USER_NAME=this.loginData.P_USER_NAME;
request.UserName=this.loginData.P_USER_NAME;
request.LogInTokenID =this.loginData.LogInTokenID;
request.CompanyID =1;//CompanyID
request.DeviceType= this.cs.getDeviceType();
request.DeviceToken=this.deviceToken;
//request.TokenID=
request.LoginType=this.selectedOption;
this.authService
.insertMobileLoginInfo(
request,
() => { },
this.ts.trPK("general", "ok")
)
.subscribe((result: any) => {
console.log(result);
console.log("succssful insertMobileLoginInfo" );
});
}
}

@ -121,7 +121,7 @@ export class LoginComponent implements OnInit, OnDestroy {
this.handleAppUpdate(result)
});
} else if (result.MessageStatus == 1) {
this.checkUserAuthentication();
this.checkUserAuthentication();
}
});
}
@ -164,7 +164,10 @@ export class LoginComponent implements OnInit, OnDestroy {
this.sharedData.setSharedData(this.loginData, AuthenticationService.LOGIN_DATA);
this.cs.sharedService.setSharedData(this.loginData.P_USER_NAME, LoginRequest.SHARED_DATA);
this.remeberMyInfo();
this.cs.openSMSPage();
//this.cs.openSMSPage(); phase#1 one type of OTP
this.cs.openConfirmLoginPage();//phase#2 add 4 types for OTP
} else {
console.log("result.IsPasswordExpired");
console.log(result.IsPasswordExpired);

@ -1,4 +1,4 @@
import { Request } from 'src/app/hmg-common/services/models/request';
import { Request } from '../../hmg-common/services/models/request';
export class ForgetPassword extends Request {
public static IS_FORGET_PSW:string="is_forget_password";
public P_NEW_PASSWORD: string;

@ -1,4 +1,4 @@
import { Request } from 'src/app/hmg-common/services/models/request';
import { Request } from '../../hmg-common/services/models/request';
export class Password extends Request {

@ -0,0 +1,34 @@
import { Request } from 'src/app/hmg-common/services/models/request';
export class SendActivationByType extends Request {
P_USER_NAME: string; // id
UserName:string;
MobileNumber: string; // phone number
ZipCode: string;
LogInTokenID: string;
OTP_SendType:number;
IsMobileFingerPrint:number;
P_LEGISLATION_CODE:string;
// VersionID:string;
// Test
//{
// "Channel":31,
// "LanguageID":2,
// "LogInTokenID":"Wfm9uDlWhEi3vFsQMqUz3w==",
// "MobileNumber":"0508079569",
// "P_USER_NAME":"191817",
// "UserName":"191817",
// "VersionID":2.0,
// "P_LEGISLATION_CODE":"SA",
// "IsMobileFingerPrint":0,
// "OTP_SendType":1
// }
}

@ -1,184 +1,462 @@
import { Component, OnInit } from "@angular/core";
import { ElementRef } from "@angular/core";
import { NavController } from "@ionic/angular";
import { NavController, Platform } from "@ionic/angular";
import { TranslatorService } from "src/app/hmg-common/services/translator/translator.service";
import { CommonService } from "src/app/hmg-common/services/common/common.service";
import { SharedDataService } from "src/app/hmg-common/services/shared-data-service/shared-data.service";
import { SMSCheckRequest } from "src/app/hmg-common/services/authentication/models/smscheck.request";
import { LoginModel } from "../models/LoginModel";
import { AuthenticationService } from "src/app/hmg-common/services/authentication/authentication.service";
import { SMSCheckResponse } from "src/app/hmg-common/services/authentication/models/smscheck.response";
import { Password } from "../models/password";
import { GetLoginInfoRequest } from 'src/app/hmg-common/services/authentication/models/get-login-info.request';
@Component({
selector: "app-sms-page",
templateUrl: "./sms-page.page.html",
styleUrls: ["./sms-page.page.scss"]
})
export class SmsPageComponent implements OnInit {
public static LOGIN_DATA = "LOGIN_DATA";
Channel: number = 0;
activationCode: string;
P_SESSION_ID: number;
P_USER_NAME: string;
timeInSeconds: any;
time: any;
runTimer: any;
hasStarted: any;
hasFinished: any;
remainingTime: any;
displayTime: any;
loginTokenID: string;
public isForgetPwd: boolean = false;
public isExpiredPwd: boolean = false;
public count: number = 0;
private loginData = new LoginModel();
public deviceToken:any;
public loginTypeData:any;
constructor(
public navCtrl: NavController,
public translate: TranslatorService,
public common: CommonService,
private elementRef: ElementRef,
public authService: AuthenticationService,
public sharedData: SharedDataService
public sharedData: SharedDataService,
public platform: Platform,
) {}
ngOnInit() {
this.count = 0;
this.initTimer();
this.startTimer();
this.isForgetPwd =
this.sharedData.getSharedData(Password.IS_FORGET_PSW) || false;
this.isExpiredPwd =
this.sharedData.getSharedData(Password.IS_EXPIRED_PSW) || false;
this.loginData= this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
console.log("loginData : "+ this.loginData);
this.deviceToken= this.common.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false);
if(this.deviceToken == undefined){
this.deviceToken = localStorage.getItem("deviceToken");
}
console.log("deviceToken :"+this.deviceToken);
this.loginTypeData= this.common.sharedService.getSharedData(SMSCheckRequest.SHARED_DATA, false);
console.log("loginType :"+this.loginTypeData.loginType);
}
initTimer() {
// Pomodoro is usually for 25 minutes
if (!this.timeInSeconds) {
this.timeInSeconds = 600;
}
this.time = this.timeInSeconds;
this.runTimer = false;
this.hasStarted = false;
this.hasFinished = false;
this.remainingTime = this.timeInSeconds;
this.displayTime = this.common.getSecondsAsDigitalClock(this.remainingTime);
}
startTimer() {
this.runTimer = true;
this.hasStarted = true;
this.timerTick();
}
pauseTimer() {
this.runTimer = false;
}
resumeTimer() {
this.startTimer();
}
timerTick() {
setTimeout(() => {
if (!this.runTimer) {
return;
}
this.remainingTime--;
this.displayTime = this.common.getSecondsAsDigitalClock(
this.remainingTime
);
if (this.remainingTime > 0) {
this.timerTick();
} else {
this.hasFinished = true;
this.pauseTimer();
this.navCtrl.pop();
}
}, 1000);
}
ionViewWillLeave() {
this.pauseTimer();
}
checkOTPLength(){
console.log(this.activationCode.length);
if(this.activationCode.length==4){
this.checkVerificationCode();
}
}
checkVerificationCode() {
if (this.count < 3) {
if (
this.activationCode == undefined ||
this.activationCode == null ||
this.activationCode == ""
) {
// this.common.showAlert(this.translate.translate('verificationcode.emptyCode'));
} else {
this.count = this.count + 1;
if (this.isForgetPwd || this.isExpiredPwd) {
this.checkForgetPwdSMS();
} else {
this.checkSMS();
}
}
} else {
let msg: string = this.translate.trPK("general", "noOfTriesLogin");
this.common.JustAlertDialog(this.translate.trPK("general", "ok"), msg);
}
}
public checkSMS() {
// alert("checkSMS in page")
const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
const request = new SMSCheckRequest();
request.LogInTokenID = data.LogInTokenID;
request.activationCode = this.activationCode;
request.P_USER_NAME = data.P_USER_NAME;
request.MobileNumber = data.MobileNumber;
this.authService
.checkSMS(request, () => {}, this.translate.trPK("general", "ok"))
.subscribe((result: SMSCheckResponse) => {
console.log(result);
if (this.common.validResponse(result)) {
AuthenticationService.servicePrivilage=result.Privilege_List;
this.authService.setAuthenticatedUser(result).subscribe(() => {
//call insert Mobile Login
if (this.platform.is("mobile")) {
this.insertMobileLogin();
}
this.common.openHome();
});
}
});
}
public insertMobileLogin(){
// alert("insertMobileLogin");
let request = new GetLoginInfoRequest();
this.authService.setPublicFields(request);
request.MobileNumber = this.loginData.MobileNumber;
request.P_USER_NAME=this.loginData.P_USER_NAME;
request.UserName=this.loginData.P_USER_NAME;
request.LogInTokenID =this.loginData.LogInTokenID;
request.CompanyID =1;//CompanyID
request.DeviceType= this.common.getDeviceType();
request.DeviceToken=this.deviceToken;
request.LoginType=this.loginTypeData.loginType;
this.authService
.insertMobileLoginInfo(
request,
() => { },
this.translate.trPK("general", "ok")
)
.subscribe((result: any) => {
console.log("successful insertMobileLogin" );
});
}
public checkForgetPwdSMS() {
const data = this.sharedData.getSharedData(AuthenticationService.LOGIN_DATA, false);
const request = new SMSCheckRequest();
request.LogInTokenID = data.LogInTokenID;
request.activationCode = this.activationCode;
request.P_USER_NAME = data.P_USER_NAME;
console.log(data.LogInTokenID);
console.log(data.P_USER_NAME);
this.authService
.checkForgetSMS(request, () => {}, this.translate.trPK("general", "ok"))
.subscribe((result: SMSCheckResponse) => {
console.log(result);
if (this.common.validResponse(result)) {
console.log(result);
if (this.isForgetPwd) {
this.common.openForgotPassword();
}
if(this.isExpiredPwd) {
this.sharedData.setSharedData(true,Password.IS_EXPIRED_PSW);
this.common.openChangePassword();
}
}
});
}
}
}

@ -1,11 +1,13 @@
import { Injectable } from "@angular/core";
import { Request } from "../models/request";
import { Request } from 'src/app/hmg-common/services/models/request';
// import { Request } from "../models/request";
import { TranslatorService } from "../translator/translator.service";
import { ConnectorService } from "../connector/connector.service";
import { Observable, throwError } from "rxjs";
//import { CheckPatientRegisterationRequest } from "./models/check-patient-registeration.request";
import { LoginRequest } from "./models/login.request";
import { Response } from "../models/response";
// import { Response } from "../models/response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { AuthenticatedUser } from "./models/authenticated-user";
import { CommonService } from "../common/common.service";
import { CheckUserAuthenticationRequest } from "./models/check-user-auth.request";
@ -29,6 +31,7 @@ import { SMSCheckResponse } from "./models/smscheck.response";
import { ForgetPassword } from 'src/app/authentication/models/forget.password';
import { CheckAppVersionResponse } from './models/check-app-version.response';
import { PrivilageModel } from './models/privilage-model';
import { SendActivationByType } from 'src/app/authentication/models/sendActivationByType';
@Injectable({
providedIn: "root"
@ -51,6 +54,10 @@ export class AuthenticationService {
public static smsCheckForget='Services/ERP.svc/REST/CheckPublicActivationCode';
public static smsSendCode='Services/ERP.svc/REST/SendPublicActivationCode';
public static sendActivationCodeByType = 'Services/ERP.svc/REST/Mohemm_SendActivationCodebyOTPNotificationType';
public static getMobileLoginInfo ='Services/ERP.svc/REST/Mohemm_GetMobileLoginInfo';
public static insertMobileLoginInfo ='Services/ERP.svc/REST/Mohemm_InsertMobileLoginInfo';
/* register methods */
public static checkPatientForRegisterationURL = 'Services/Authentication.svc/REST/CheckPatientForRegisteration';
@ -73,7 +80,9 @@ export class AuthenticationService {
public static FAMILY_LOGIN_EVENT = 'family-login-event';
public static AUTHENTICATED_USER_KEY = 'save-authenticated-user';
public static LOGIN_DATA="logindata";
public static DEVICE_TOKEN = "device_token";
public static LAST_LOGIN = 'last-login';
// private static user: AuthenticatedUser;
constructor(
@ -97,6 +106,7 @@ export class AuthenticationService {
request.TokenID = user.TokenID;
request.P_USER_NAME = user.EMPLOYEE_NUMBER;
request.UserName = user.EMPLOYEE_NUMBER;
request.P_EMAIL_ADDRESS = user.EMPLOYEE_EMAIL_ADDRESS;
if (AuthenticationService.requireRelogin) {
this.sessionTimeOutDialog();
@ -115,7 +125,7 @@ export class AuthenticationService {
}
public setPublicFields(request: Request): Request {
request.VersionID = 1.4;
request.VersionID = 2.0;//2.0,1.4
request.Channel = 31;
request.LanguageID = TranslatorService.getCurrentLanguageCode();
//request.IPAdress = '10.10.10.10';
@ -300,7 +310,7 @@ export class AuthenticationService {
): Observable<GetLoginInfoResponse> {
this.setPublicFields(request);
return this.con.post(
AuthenticationService.getLoginInfoURL,
AuthenticationService.getMobileLoginInfo,
request,
onError,
errorLabel
@ -543,6 +553,14 @@ export class AuthenticationService {
return this.con.post(AuthenticationService.forgotFileIDURL, request, onError, errorLabel);
}
public insertMobileLoginInfo(request: GetLoginInfoRequest,onError: any, errorLabel: string): Observable<GetLoginInfoResponse> {
this.authenticateRequest(request);
return this.con.post(AuthenticationService.insertMobileLoginInfo,request,onError,errorLabel);
}
public isSAUDIIDValid(id: string): boolean {
if (!id) {
@ -670,4 +688,21 @@ export class AuthenticationService {
);
}
}
}
//**************************//
public sendActivationCodeByType(
request: SendActivationByType,
onError: any,
errorLabel: string
): Observable<CheckUserAuthenticationResponse> {
this.setPublicFields(request);
//below afifi code
//return this.con.post(AuthenticationService.checkUserAuthURL, request, onError, errorLabel); //afifi code, edit it to display the error msg into pop up ofverfication code
return this.con.post(
AuthenticationService.sendActivationCodeByType,
request,
onError,
errorLabel
);
}}

@ -1,4 +1,5 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class CheckActivationCodeRequest extends Request {
FingerPrintPatientIdentificationID?: string ; // ""

@ -1,4 +1,5 @@
import { Response } from '../../models/response';
// import { Response } from '../../models/response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { PatientUserModel } from './PatientUserModel';
import { AuthenticatedUser } from './authenticated-user';

@ -1,4 +1,5 @@
import { Response } from '../../models/response';
//import { Response } from '../../models/response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class CheckAppVersionResponse extends Response {
public IOSLink :string;

@ -1,5 +1,5 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class CheckRegisterationCodeRequest extends Request {
ForRegisteration: boolean;
LogInTokenID: string; // null if not exist

@ -1,4 +1,5 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class CheckUserAuthenticationRequest extends Request {
// PatientIdentificationID: string; // id

@ -1,4 +1,5 @@
import { Response } from '../../models/response';
//import { Response } from '../../models/response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { BasicInfo } from './basic.info';
import { MemberList } from './member.list';

@ -1,4 +1,5 @@
import { Response } from '../../models/response';
//import { Response } from '../../models/response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class ForgotFileIDResponse extends Response {
ReturnMessage: string;

@ -1,30 +1,35 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
import { AuthenticatedUser } from './authenticated-user';
import { CountryCode } from 'src/app/hmg-common/ui/mobile-number/international-mobile/models/country-code.model';
export class GetLoginInfoRequest extends Request {
NationalID: string;
MobileNo: string;
UserName: string;
MobileNumber: string;
LogInTokenID: string;
DeviceToken: string;
PatientID: number;
ProjectOutSA: boolean;
LoginType: number; // 2 by patient id , 1 by identification number
ZipCode: string;
PatientMobileNumber: string; // same as mobileNO,
SearchType: number; // 2
PatientIdentificationID: string // ""
isRegister: boolean; // false
constructor(user: AuthenticatedUser) {
super();
LanguageID: number;
P_USER_NAME: string;
Channel:number;
CompanyID:number;
DeviceType:string;
LoginType:number;
// constructor(user: AuthenticatedUser) {
// super();
// this.NationalID = user.IdentificationNo;
// this.MobileNo = this.PatientMobileNumber = user.MobileNo;
// this.DeviceToken = user.deviceToken;
// this.PatientID = user.PatientID;
// this.ProjectOutSA = user.PatientOutSA ;
this.LoginType = 2;
this.ZipCode = CountryCode.localCode( user.ZipCode);
this.SearchType = 2;
this.PatientIdentificationID = '';
this.isRegister = false;
}
// this.LoginType = 2;
// this.ZipCode = CountryCode.localCode( user.ZipCode);
// this.SearchType = 2;
// this.PatientIdentificationID = '';
// this.isRegister = false;
//}
}

@ -1,8 +1,11 @@
import { Response } from '../../models/response';
//import { Response } from '../../models/response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class GetLoginInfoResponse extends Response {
SMSLoginRequired: boolean;
isSMSSent: boolean;
LogInTokenID: string;
PatientOutSA: boolean;
Mohemm_GetPatientID_List:any
isActiveCode: boolean;
// PatientOutSA: boolean;
}

@ -1,4 +1,5 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class LoginRequest extends Request {
PatientID: number; // 0

@ -1,4 +1,5 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
import { RegisterInformationPatientModel } from './register-information-patient.model';
export class RegisterInformationRequest extends Request {

@ -1,6 +1,9 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class SMSCheckRequest extends Request {
LogInTokenID: string ;
activationCode?: string;
public static SHARED_DATA = 'check_activation_shared_data';
}

@ -1,4 +1,5 @@
import { Response } from '../../models/response';
//import { Response } from '../../models/response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { AuthenticatedUser } from './authenticated-user';
import { PrivilageModel } from './privilage-model';
export class SMSCheckResponse extends Response {

@ -10,7 +10,8 @@ import {
import { Router } from "@angular/router";
import { TranslatorService } from "../translator/translator.service";
import { AlertControllerService } from "../../ui/alert/alert-controller.service";
import { Response } from "../models/response";
//import { Response } from "../models/response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { Location, DatePipe } from "@angular/common";
import { ThemeableBrowser } from "@ionic-native/themeable-browser/ngx";
import { BrowserConfig } from "./models/browser-config";
@ -436,7 +437,9 @@ export class CommonService {
public getDeviceType(): string {
if (this.platform.is("mobile")) {
return "Mobile " + (this.platform.is("ios") ? "Iphone" : "android");
// return "Mobile " + (this.platform.is("ios") ? "Iphone" : "android");
return (this.platform.is("ios") ? "Iphone" : "android");
} else {
return "Desktop";
}
@ -1016,6 +1019,9 @@ export class CommonService {
public openDeductionsPage() {
this.nav.navigateForward(["/payslip/Deductions"]);
}
public openConfirmLoginPage() {
this.nav.navigateForward(["/authentication/confirmLogin"]);
}
public reload(url: string, from: string) {
console.log("force reload called from:" + from);

@ -7,7 +7,8 @@ import {
import { Observable, throwError, TimeoutError } from "rxjs";
import { catchError, retry, tap, timeout } from "rxjs/operators";
import { CommonService } from "../common/common.service";
import { Response } from "../models/response";
//import { Response } from "../models/response";
import { Response } from 'src/app/hmg-common/services/models/response';
@Injectable({
providedIn: "root"
@ -23,9 +24,8 @@ export class ConnectorService {
public static timeOut = 30 * 1000;
// public static host = 'http://10.50.100.113:6060/'; // development service
public static host = "https://uat.hmgwebservices.com/";
public static host = "https://uat.hmgwebservices.com/";
//public static host = 'https://hmgwebservices.com/';
//public static host = 'http://10.200.204.11:4444/'; // production service
// public static host = 'http://10.50.100.198:6060/';
// public static host = 'http://10.50.100.113:6060/'; // development service
/* public static host = 'http://10.50.100.198:6060/';

@ -3,7 +3,8 @@ import {Http, Response, Headers, } from "@angular/http";
import {AuthenticationService} from "../authentication/authentication.service";
import { Observable } from 'rxjs';
import {MenuEntries} from './models/menu-entries.request';
import {Request} from '../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
//import {Request} from '../models/request';
import {MenuResponse} from './models/menu-response'
import { ConnectorService } from '../connector/connector.service';
@Injectable()

@ -1,4 +1,5 @@
import { Request } from '../models/request';
// import { Request } from '../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class MenuEntries extends Request {
public P_MENU_TYPE:string;
public P_SELECTED_EMPLOYEE_NUMBER:string;

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class AppointmentRequest extends Request{
public AppointmentNo: number;

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class EmailRequest extends Request {
DoctorName: string;

@ -18,4 +18,8 @@ export class Request {
public P_MOBILE_NUMBER: string;
public P_EMAIL_ADDRESS: string;
public P_NOTIFICATION_ID: number;
// public P_LEGISLATION_CODE: string;
// public OTP_SendType: number;
// public IsMobileFingerPrint: boolean;
}

@ -1,5 +1,6 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { RegisterNormalUserRequest } from './register-normal-user.request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class RegisterAuthenticatedUserRequest extends RegisterNormalUserRequest {
PatientMobileNumber: string;

@ -1,4 +1,5 @@
import { Request } from '../../models/request';
// import { Request } from '../../models/request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class RegisterNormalUserRequest extends Request {
ChannelID: number;

@ -5,7 +5,8 @@ import { TranslatorService } from '../translator/translator.service';
import { NotificationModel } from './models/notification.model';
import { SharedDataService } from '../shared-data-service/shared-data.service';
import { ConnectorService } from '../connector/connector.service';
import { Response } from '../models/response';
//import { Response } from '../models/response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { RegisterAuthenticatedUserRequest } from './models/register-authenticated-user.request';
import { Platform, Events } from '@ionic/angular';
import { RegisterNormalUserRequest } from './models/register-normal-user.request';
@ -15,16 +16,16 @@ import { SessionModel } from './models/session.model';
import { AuthenticatedUser } from '../authentication/models/authenticated-user';
// import { NotificationsCenterService } from 'src/app/eservices/notifications-center/service/notifications-center.service';
// import { NotificationsComponent } from 'src/app/eservices/notifications-center/notifications/notifications.component';
import {OneSignal} from '@ionic-native/onesignal/ngx'
@Injectable({
providedIn: 'root'
})
export class PushService {
private static notLoggedInUserURL = 'Services/MobileNotifications.svc/REST/PushNotification_InsertPatientDeviceInformation';
private static loggedInUserURL = 'Services/MobileNotifications.svc/REST/Insert_PatientMobileDeviceInfo';
public static SENDER_ID = '679409052782';//'815750722565';
public static CHANNEL_ID = '815750722565';
public static CHANNEL_ID = '679409052782';//'815750722565';
constructor(
// public push: Push,
public cs: CommonService,
@ -35,14 +36,16 @@ export class PushService {
private authService: AuthenticationService,
public ngZone: NgZone,
// public notifyService: NotificationsCenterService,
public events: Events
public events: Events,
private oneSignal: OneSignal,
) { }
public startReceiving() {
this.processStartReceiving();
}
private processStartReceiving() {
private processStartReceiving1() {
// if (this.cs.isCordova()) {
// this.stopNotifications(() => {
// this.push.hasPermission()
@ -157,6 +160,7 @@ export class PushService {
}
private registerInBackend(data: any) {
console.log("registerInBackend");
if (this.authService.isAuthenticated()) {
this.registerAuthenticatedUser(data.registrationId);
} else {
@ -206,4 +210,57 @@ export class PushService {
}
private processStartReceiving() {
console.log('processStartReceiving');
console.log("processStartReceiving openConference");
this.oneSignal.startInit('8d9b8313-0365-4934-a2a9-fdee5aeac66e', PushService.SENDER_ID);
this.oneSignal.inFocusDisplaying(this.oneSignal.OSInFocusDisplayOption.Notification);
this.oneSignal.handleNotificationReceived().subscribe(data => this.onPushReceived(data.payload));
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) {
console.log(JSON.parse(JSON.stringify(payload)));
console.log('Push-Received whole payload: ' + payload);
}
public onPushOpened(payload: any) {
console.log(JSON.parse(JSON.stringify(payload)));
console.log('Push-opened whole payload: ' + payload);
console.log("onPushOpened openConference");
this.processNotification(payload);
}
}

@ -7,7 +7,7 @@
-->
<!--
<div (click)="onClicked()" [ngStyle]="style" class="custom-button">
<img [src]="icon" class="icon" >
@ -18,4 +18,3 @@
</div>
-->

@ -11,11 +11,11 @@
border-width: 0.02cm;
}
.custom-button:hover {
-webkit-box-shadow: 0px 0px 8px 2px #d1212747;;
-moz-box-shadow: 0px 0px 8px 2px #d1212747;;
box-shadow: 0px 0px 8px 2px #d1212747;;
}
// .custom-button:hover {
// -webkit-box-shadow: 0px 0px 8px 2px #d1212747;;
// -moz-box-shadow: 0px 0px 8px 2px #d1212747;;
// box-shadow: 0px 0px 8px 2px #d1212747;;
// }

@ -8,13 +8,9 @@ import { TranslatorService } from '../../services/translator/translator.service'
styleUrls: ['./button.component.scss'],
})
export class ButtonComponent implements OnInit {
constructor() {
}
ngOnInit() {
}
/*
@Input() strong: boolean;
@Input() class: any = '';
@Input() icon: string;
@Input() title: string;
@Output() trigger = new EventEmitter();
@ -29,7 +25,7 @@ export class ButtonComponent implements OnInit {
}
ngOnInit() {
this.direction = TranslatorService.getCurrentDirection();
this.direction = TranslatorService.getCurrentLanguageName();
if (this.settings) {
this.style =
{
@ -40,13 +36,19 @@ export class ButtonComponent implements OnInit {
};
}
/*
const element = document.getElementById('modal');
element.addEventListener('click', e => {
e.stopImmediatePropagation();
});
*/
}
private isEnabled(enabled: boolean): string {
return enabled ? '30px' : '0px';
return enabled ? '6px' : '0px';
}
public onClicked() {
console.log(this.disabled);
if (!this.disabled) {
this.trigger.emit();
}
@ -62,17 +64,20 @@ export class Modal implements OnInit {
ngOnInit() {
console.log(' on initialization');
//this.elRef.nativeElement.addEventListener('mouseenter', this.onMouseEnter);
}
ngOnDestroy() {
// this.elRef.nativeElement.removeEventListener('mouseenter', this.onMouseEnter);
}
onMouseEnter() {
// alert("Don't touch my bacon!")
}
@HostListener('click', ['$event'])
onClick(event: any) {
alert('click');
// alert('click');
// event.preventPropagation();
}
*/
}

@ -5,12 +5,15 @@
<ion-badge id="homeBadgeBtn" item-end>{{notBadge}}</ion-badge>
</ion-toolbar>
</ion-header> -->
<ion-content >
<ion-content class="colorBG">
<div class="header-div">
<button ion-button icon-only menuToggle class="menubutton" (click)="openMenu()">
<ion-icon name="menu"></ion-icon>
<img class="menuImg" src="../assets/imgs/home/burgerMenu.png"/>
<ion-badge id="homeBadgeBtn" slot="end" color="danger">{{notBadge}}</ion-badge>
</button>
<button ion-button icon-only menuToggle class="menubuttonTrans" (click)="openMenu()">
<img class="transImg" src="../assets/imgs/home/arabicSwitch.png"/>
</button>
<div class="centerDiv homeBox" (click)="openPersonalInfo()">
<p class="TxtPlace">{{ts.trPK('home','hello')}}, {{userData.EMPLOYEE_DISPLAY_NAME}}</p>
<div class="profileDiv">
@ -18,6 +21,7 @@
<img class="profileImg" [src]="user_image">
</div>
</div>
<div class="changeImgBtn">
@ -49,29 +53,49 @@
</ion-col>
<ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="getDeviceLocation()">
<ion-img class="serviceItemImg" src="../assets/imgs/attend.png"></ion-img>
<ion-img class="serviceItemImg" src="../assets/imgs/home/attendanceSwipe.png"></ion-img>
<p>{{ts.trPK('attendance','attendance')}}</p>
</button>
</ion-col>
<ion-col size="6" class="col-grid" >
<button ion-button block class="serviceItem" id="vacationRule" (click)="Vacation_Rule()">
<ion-img class="serviceItemImg" src="../assets/imgs/vacationrule.png"></ion-img>
<ion-img class="serviceItemImg" src="../assets/imgs/home/vacationRule.png"></ion-img>
<p>{{ts.trPK('vacation-rule','vacationRule')}}</p>
</button>
</ion-col>
<ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" id="accrualBalance" (click)="accrualBalance()">
<ion-img class="serviceItemImg" src="../assets/imgs/accu.png"></ion-img>
<ion-img class="serviceItemImg" src="../assets/imgs/home/accrualBalances.png"></ion-img>
<p>{{ts.trPK('absenceList','accrualBalances')}}</p>
</button>
</ion-col>
<ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="Change_password()">
<ion-img class="serviceItemImg" src="../assets/imgs/changepass.png"></ion-img>
<ion-img class="serviceItemImg" src="../assets/imgs/home/changePasword.png"></ion-img>
<p>{{ts.trPK('changePassword','changePassword')}}</p>
</button>
</ion-col>
<ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="Change_password()">
<ion-img class="serviceItemImg" src="../assets/imgs/home/paySlip.png"></ion-img>
<p>{{ts.trPK('login','payslip')}}</p>
</button>
</ion-col>
<ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="Change_password()">
<ion-img class="serviceItemImg" src="../assets/imgs/home/announcements.png"></ion-img>
<p>{{ts.trPK('login','announcement')}}</p>
</button>
</ion-col>
<ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="Change_password()">
<ion-img class="serviceItemImg" src="../assets/imgs/home/timeAttendance.png"></ion-img>
<p>{{ts.trPK('home','timeAndAttendance')}}</p>
</button>
</ion-col>
<!-- <ion-col size="6" class="col-grid">
<button ion-button block class="serviceItem" (click)="openPayslip()">

@ -5,6 +5,10 @@
-moz-box-shadow: none;
background: transparent !important;
}
.colorBG{
--background: #f0efef;
}
.menubutton{
white-space: normal;
color: var(--light);
@ -13,7 +17,18 @@
background: transparent;
font-size: 2rem;
position: absolute;
top: 40px;
top: 40px;
}
.menubuttonTrans{
white-space: normal;
color: var(--light);
text-transform: capitalize;
min-height: 47px;
background: transparent;
font-size: 2rem;
position: absolute;
top: 40px;
left: 315px
}
#homeBadgeBtn{
position: absolute;
@ -35,14 +50,15 @@ top: 40px;
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, (--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%);
background: linear-gradient(90deg, #85C48D 0%, #85C48D 13%, #2BB5C6 98%, #2BB5C6 100%);
color:var(--light);
text-transform: capitalize;
display: block;
position: relative;
height: 120px;
height: 210px;
margin-bottom:60px;
border-radius: 0px 0px 70px 70px;
}
.dash-header{
@ -59,12 +75,22 @@ top: 40px;
}
.serviceItem {
min-height: 160px !important;
padding: 0;
width:100%;
border: 2px solid #e4e5e7;
background: transparent !important;
// min-height: 160px !important;
// padding: 0;
// width: 95%;
// border: 0px solid #e4e5e7;
// background: white;
// color: var(--dark);
// border-radius: 7px;
min-height: 200px !important;
padding-top: 0;
width: 95%;
margin-left: 4px;
margin-bottom: 13px;
border: 0px solid #e4e5e7;
background: white;
color: var(--dark);
border-radius: 7px;
p{
margin-top: 0px; margin-bottom:0px;
font-weight: normal;
@ -110,7 +136,18 @@ top: 40px;
}
//test
.changeIcon{
background: #19a163;
width: 15px;
height: 15px;
background: #c1c1c1;
width: 40px;
height: 39px;
border-radius: 50% !important;
position: relative;
left: 51px;
top:16px;
}
.menuImg{
max-width: 30px;
}
.transImg{
max-width: 45px;
}

@ -1,14 +1,14 @@
<ion-header >
<ion-toolbar class="header-toolbar">
<ion-title color="light"> {{ts.trPK('home','worklist')}}</ion-title>
<ion-buttons slot="start">
<nav-buttons backLink="/home"></nav-buttons>
</ion-buttons>
</ion-toolbar>
<ion-header>
<ion-toolbar class="header-toolbar">
<ion-title color="light"> {{ts.trPK('home','worklist')}}</ion-title>
<ion-buttons slot="start">
<nav-buttons backLink="/home"></nav-buttons>
</ion-buttons>
</ion-toolbar>
</ion-header>
<ion-content [ngClass]=" direction == 'ltr' ? 'left' : 'right'">
<!-- first select type view -->
<ion-item>
<!-- <ion-item>
<ion-label>{{ts.trPK('worklist','view')}}</ion-label>
<ion-select okText="{{ts.trPK('general','ok')}}" cancelText="{{ts.trPK('general','cancel')}}" [(ngModel)]="notificationType"
(ionChange)=onChangeView($event)>
@ -32,41 +32,121 @@
<ion-select-option value="5">{{ts.trPK('worklist','none')}}</ion-select-option>
</ion-select>
</ion-item>
</ion-item> -->
<ion-grid>
<ion-row>
<ion-col size='3' class="ion-no-padding , menuListCol">
<ion-list class="menuList">
<ion-item class="menuListItem" lines="none">
<ion-button class="menuListBtn" (click)="AllNotification()">
<img *ngIf="!isAll" src="../assets/imgs/menuTabs/All1.png" />
<img *ngIf="isAll" src="../assets/imgs/menuTabs/All2.png" />
</ion-button>
</ion-item>
<ion-item class="menuListItem" lines="none">
<!-- <ion-item lines="none" class="activeTabMenu"*ngIf="isPR"></ion-item> -->
<!-- <ion-button class="menuListBtn" (click)="PRNotification()"><p style="color: black;">PR</p></ion-button> -->
<ion-button ion-button class="menuListBtn" (click)="PRNotification()">
<img *ngIf="!isPR" src="../assets/imgs/menuTabs/PR1.png" />
<img *ngIf="isPR" src="../assets/imgs/menuTabs/PR2.png" />
</ion-button>
</ion-item>
<ion-item class="menuListItem" lines="none">
<ion-button class="menuListBtn" (click)="PONotification()">
<img *ngIf="!isPO" src="../assets/imgs/menuTabs/PO1.png" />
<img *ngIf="isPO" src="../assets/imgs/menuTabs/PO2.png" />
</ion-button>
</ion-item>
<ion-item class="menuListItem" lines="none">
<ion-button class="menuListBtn" (click)="MRNotification()">
<img *ngIf="!isMR" src="../assets/imgs/menuTabs/MR1.png" />
<img *ngIf="isMR" src="../assets/imgs/menuTabs/MR2.png" />
</ion-button>
</ion-item>
<ion-item class="menuListItem" lines="none">
<ion-button class="menuListBtn" (click)="HRNotification()">
<img *ngIf="!isHR" src="../assets/imgs/menuTabs/HR1.png" />
<img *ngIf="isHR" src="../assets/imgs/menuTabs/HR2.png" />
</ion-button>
</ion-item>
<ion-item class="menuListItem" lines="none">
<ion-button class="menuListBtn" (click)="ITGNotification()">
<img *ngIf="!isITG" src="../assets/imgs/menuTabs/ITG1.png" />
<img *ngIf="isITG" src="../assets/imgs/menuTabs/ITG2.png" />
</ion-button>
</ion-item>
</ion-list>
</ion-col>
<ion-col size='9' class="notifincationList">
<ion-list class="notification-list" *ngIf="!noData">
<div class="timeline">
<ion-item class="itemListNotification" *ngFor="let notificationList of filteredNotificationList"
lines='none'>
<div class="item-date"> {{notificationList.BEGIN_DATE | dateString }} </div>
<div class="timeline-item" slot="start">
<!-- <div class="item-date"> {{notificationList.BEGIN_DATE }} </div> -->
<div class="timeline-thumb bg-color-dot timeline-icon">
</div>
</div>
<ion-label (click)="openNotificationDetail(notificationList)"> {{notificationList.SUBJECT}}
</ion-label>
</ion-item>
</div>
</ion-list>
<ion-list class="emptyItem" *ngIf="noData">
<ion-item class="itemListNotification" lines='none'>
<ion-label> There is no Notification
</ion-label>
</ion-item>
</ion-list>
<!-- <ion-list class="notification-list " *ngIf="isPR">
<div class="timeline">
<p>PR</p>
</div>
</ion-list>
<div *ngIf="HideDateInput==true">
<ion-item>
<ion-label>{{ts.trPK('worklist','sent')}} </ion-label>
<ion-datetime placeholder="{{ts.trPK('worklist','enter')}}" displayFormat="DD-MMM-YYYY" pickerFormat="DD-MMM-YYYY"
[(ngModel)]="InputDate"></ion-datetime>
</ion-item>
</div>
<div *ngIf="HideTextInput==true">
<ion-item>
<ion-input placeholder="{{ts.trPK('worklist','enter')}}" [(ngModel)]="inputSearch">
</ion-input>
</ion-item>
</div>
<ion-list class="notification-list ">
<div class="timeline">
<ion-item *ngFor="let notificationList of WorkListResObj">
<div class="timeline-item" slot="start">
<!-- <div class="item-date"> {{notificationList.BEGIN_DATE }} </div> -->
<div class="item-date"> {{notificationList.BEGIN_DATE | dateString }} </div>
<div class="timeline-thumb bg-color-dot timeline-icon">
<ion-list class="notification-list " *ngIf="isPO">
<div class="timeline">
<p>PO</p>
</div>
</div>
</ion-list>
<ion-label (click)="openNotificationDetail(notificationList)"> {{notificationList.SUBJECT}}
</ion-label>
<ion-list class="notification-list " *ngIf="isMR">
<div class="timeline">
<p>MR</p>
</div>
</ion-list>
<ion-list class="notification-list " *ngIf="isHR">
<div class="timeline">
<p>HR</p>
</div>
</ion-list>
<ion-list class="notification-list " *ngIf="isITG">
<div class="timeline">
<p>ITG</p>
</div>
</ion-list> -->
</ion-col>
</ion-row>
</ion-grid>
</ion-item>
</div>
</ion-list>
<!-- *ngIf="rowsNo <= noOfrows" -->
@ -75,11 +155,73 @@
</ion-infinite-scroll>
</ion-content>
<ion-footer>
<div class="centerDiv">
<ion-footer class="footerSearchBtn" *ngIf="!isSearch">
<ion-button color="customnavy" expand="full" fill="outline" (click)="searchBtn()">{{ts.trPK('worklist','search')}}
</ion-button>
</ion-footer>
<ion-footer class="footerSearchBtn" *ngIf="isSearch">
<ion-grid>
<ion-row>
<!-- <ion-col size='3'> </ion-col> -->
<ion-col>
<div class="viewAndSearch">
<ion-item lines="none">
<ion-label>{{ts.trPK('worklist','view')}}</ion-label>
<ion-select okText="{{ts.trPK('general','ok')}}" cancelText="{{ts.trPK('general','cancel')}}"
[(ngModel)]="notificationType" (ionChange)=onChangeView($event)>
<ion-select-option value="1" selected="true">{{ts.trPK('worklist','openNot')}}</ion-select-option>
<ion-select-option value="2">{{ts.trPK('worklist','fyi')}}</ion-select-option>
<ion-select-option value="3">{{ts.trPK('worklist','toDo')}}</ion-select-option>
<ion-select-option value="4">{{ts.trPK('worklist','all')}}</ion-select-option>
<ion-select-option value="5">{{ts.trPK('worklist','meNot')}} </ion-select-option>
</ion-select>
</ion-item>
</div>
<div class="viewAndSearch">
<ion-item>
<ion-label>{{ts.trPK('worklist','searchby')}}</ion-label>
<ion-select okText="{{ts.trPK('general','ok')}}" cancelText="{{ts.trPK('general','cancel')}}"
[(ngModel)]="searchBy" (ionChange)="getValueSelected($event)">
<ion-select-option value="1">{{ts.trPK('worklist','from')}}</ion-select-option>
<ion-select-option value="2">{{ts.trPK('worklist','subject')}}</ion-select-option>
<ion-select-option value="3">{{ts.trPK('worklist','sent')}}</ion-select-option>
<ion-select-option value="4">{{ts.trPK('worklist','itemType')}}</ion-select-option>
<ion-select-option value="5">{{ts.trPK('worklist','none')}}</ion-select-option>
</ion-select>
</ion-item>
<div>
<div *ngIf="HideDateInput==true">
<ion-item lines='none'>
<ion-label>{{ts.trPK('worklist','sent')}} </ion-label>
<ion-datetime placeholder="{{ts.trPK('worklist','enter')}}" displayFormat="DD-MMM-YYYY"
pickerFormat="DD-MMM-YYYY" [(ngModel)]="InputDate"></ion-datetime>
</ion-item>
</div>
<div *ngIf="HideTextInput==true">
<ion-item>
<ion-input placeholder="{{ts.trPK('worklist','enter')}}" [(ngModel)]="inputSearch">
</ion-input>
</ion-item>
</div>
</div>
<div>
<ion-button class="toSearchBtn" color="customnavy" expand="full" fill="outline"
(click)="getAllPushNotificationFun()">
{{ts.trPK('worklist','search')}}</ion-button>
<ion-button class="toSearchBtn" color="customnavy" expand="full" fill="outline" (click)="searchBtn()">
{{ts.trPK('general','close')}}</ion-button>
</div>
<ion-button color="customnavy" (click)="getAllPushNotificationFun()">{{ts.trPK('worklist','search')}}</ion-button>
</div>
<ion-button color="customnavy" (click)="Details()">Call details ITG</ion-button>
<ion-button color="customnavy" (click)="Count()">Call count ITG</ion-button>
<!--
<ion-button color="customnavy" (click)="getAllPushNotificationFun()">{{ts.trPK('worklist','search')}}</ion-button> -->
</div>
</ion-col>
</ion-row>
</ion-grid>
</ion-footer>

@ -27,7 +27,8 @@
position: absolute;
top: 0;
bottom: 0;
width: 4px;
width: 1.5%;
height: 99%;
background: #e4e4e4;
z-index: 1;
/* margin-left: -10px; */
@ -95,28 +96,30 @@
}
.notification-list{
background: none;
ion-item{
// margin-top: 5px;
// margin-bottom: 5px;
background-color: transparent;
.item-date{
width: 55px;
font-size: 14px;
width: 100%;
font-size: 16px;
font-weight: bold;
text-align: center;
text-align: start;
padding: 0;
margin: 0;
position: absolute;
left: 0;
top: 0;
top: 12%;
}
ion-label , [item-end]{
white-space: normal;
font-size: 14px;
padding-top: 15%;
// :root[dir="ltr"]{
// margin-left: 10px;
// }
@ -135,17 +138,22 @@ ion-input ,ion-datetime{
border-bottom: #dedede 1px solid;
}
.left {
--background: #f0efef;
.timeline:before{
left: 62px;
left: 21px;
}
.notification-list ion-item{
padding-left: 3px;
margin-left: -12%;
}
.timeline-thumb{
left: 37px;
left: 9%;
top: 30%;
}
}
.right {
--background: #f0efef;
.timeline:before{
right: 62px;
}
@ -156,4 +164,56 @@ ion-input ,ion-datetime{
right: 37px;
}
}
.menuList{
margin-left: -40px;
height: 160%;
padding-top: 370%;
}
.colorBG{
--background: #f0efef;
}
.menuListCol{
padding-left: 50px;
margin-left: -33px;
}
.menuListItem{
padding-top: 9%;
margin: -20%;
padding-left: 13%;
}
.menuListBtn{
width: 100%;
background: white;
--background: white;
}
.activeTabMenu{
--background: #ff726f;
}
.notifincationList{
margin-left: 5%;
margin-top: 6%;
}
.itemListNotification{
padding-bottom: 18px;
}
.footerSearchBtn{
padding: 0px !important;
background: #f0efef !important;
}
.viewAndSearch{
margin-bottom: 13px;
}
.toSearchBtn{
margin-top: 4%;
}
.emptyItem{
white-space: normal;
padding-left: 10%;
}

@ -6,6 +6,7 @@ import * as moment from "moment";
import { WorKListResponse } from "../models/workListResponse";
import { WorklistService } from "../service/worklist.service";
import { IonInfiniteScroll } from '@ionic/angular';
import { WorklistMainService } from '../service/work-list.main.service';
@Component({
selector: "app-home",
@ -14,8 +15,8 @@ import { IonInfiniteScroll } from '@ionic/angular';
})
export class HomeComponent implements OnInit {
// @ViewChild(Navbar) navBar: Navbar;
public static NOTIFICATION_DATA='notification_data';
public static NOTIFICATION_ARR='notification_arr';
public static NOTIFICATION_DATA = 'notification_data';
public static NOTIFICATION_ARR = 'notification_arr';
@ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll;
private WorkListObj: WorkListRequest;
WorkListResObj: any; //WorKListResponse;
@ -32,12 +33,22 @@ export class HomeComponent implements OnInit {
HideDateInput: boolean = false;
HideTextInput: boolean = false;
InputDate: string;
filteredNotificationList: any;
IsReachEnd: boolean = false;
public noData: boolean = false;
public isAll: boolean = true;
public isPR: boolean = false;
public isPO: boolean = false;
public isMR: boolean = false;
public isHR: boolean = false;
public isITG: boolean = false;
public isSearch: boolean = false;
public direction = 'ltr';
constructor(
public common: CommonService,
public ts: TranslatorService,
public WorklistService: WorklistService
public WorklistService: WorklistService,
public workListService: WorklistMainService
) {
this.WorkListObj = new WorkListRequest();
this.WorkListObj.P_NOTIFICATION_TYPE = "1";
@ -135,6 +146,7 @@ export class HomeComponent implements OnInit {
if (this.common.hasData(result.GetWorkList)) {
this.WorkListObj.P_PAGE_NUM++;
this.WorkListResObj = result.GetWorkList;
this.filteredNotificationList = this.WorkListResObj;
this.common.sharedService.setSharedData(this.WorkListResObj, HomeComponent.NOTIFICATION_ARR);
let lastItemIndex = this.WorkListResObj.length - 1;
if (result.GetWorkList[lastItemIndex]) {
@ -191,4 +203,110 @@ export class HomeComponent implements OnInit {
if (this.infiniteScroll) this.infiniteScroll.complete();
}
} //end infiniteScroll
Count() {
this.workListService.getITGCount()
.subscribe((result: any) => {
console.log("ENAD ITG COUNT:")
console.log(result);
});
}
filterNotificationByRequestType(reqType) {
let filterdType = [];
if (reqType == "All") {
this.filteredNotificationList = this.WorkListResObj;
if (this.filteredNotificationList == [] || this.filteredNotificationList == null || this.filteredNotificationList == "") {
this.noData = true;
return false;
} else {
this.noData = false;
return false;
}
}
for (let i = 0; i < this.WorkListResObj.length; i++) {
if (reqType == this.WorkListResObj[i].REQUEST_TYPE) {
filterdType.push(this.WorkListResObj[i]);
}
}
this.filteredNotificationList = filterdType;
if (this.filteredNotificationList == [] || this.filteredNotificationList == null || this.filteredNotificationList == "") {
this.noData = true;
return false;
} else {
this.noData = false;
return false;
}
}
Details() {
this.workListService.getITGDetails()
.subscribe((result: any) => {
console.log("ENAD ITG Details:")
console.log(result);
});
}
AllNotification() {
this.filterNotificationByRequestType("All");
this.isAll = true;
this.isPR = false;
this.isPO = false;
this.isMR = false;
this.isHR = false;
this.isITG = false;
}
PRNotification() {
this.filterNotificationByRequestType("PR");
this.isAll = false;
this.isPR = true;
this.isPO = false;
this.isMR = false;
this.isHR = false;
this.isITG = false;
}
PONotification() {
this.filterNotificationByRequestType("PO");
this.isAll = false;
this.isPR = false;
this.isPO = true;
this.isMR = false;
this.isHR = false;
this.isITG = false;
}
MRNotification() {
this.filterNotificationByRequestType("MO");
this.isAll = false;
this.isPR = false;
this.isPO = false;
this.isMR = true;
this.isHR = false;
this.isITG = false;
}
HRNotification() {
this.filterNotificationByRequestType("HR");
this.isAll = false;
this.isPR = false;
this.isPO = false;
this.isMR = false;
this.isHR = true;
this.isITG = false;
}
ITGNotification() {
// this.Details();
this.isAll = false;
this.isPR = false;
this.isPO = false;
this.isMR = false;
this.isHR = false;
this.isITG = true;
}
searchBtn() {
this.isSearch = !this.isSearch;
}
}

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { AbsenceNotificationBodyItems } from './AbsenceNotificationBodtItems';
export class AbsenceNotificatonBodyResponse extends Response {

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class WorkListActionHistoryRequest extends Request{
//public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class WorkListActionHistoryResponse extends Response {
//public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { EITNotificationBodyItems } from './EITNotificationBodyItems';
export class EITNotificatonBodyResponse extends Response {

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
export class GetMoItemHistoryList extends Response {
public REQUEST_NUMBER: string;

@ -1,4 +1,5 @@
import { Request } from "./request";
// import { Request } from "./request";
import { Request } from 'src/app/hmg-common/services/models/request';
export class MOItemHistoryReq extends Request {
//public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { GetMoItemHistoryList } from './MOItemHistoryList';
export class MOItemHistoryRes extends Response {

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { MONotificationBodyItems } from './MONotificationBodyItems';
export class MONotificatonBodyResponse extends Response {

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class WorkListActionRequest extends Request{
// public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Request } from "./request";
// import { Request } from "./request";
import { Request } from 'src/app/hmg-common/services/models/request';
export class WorkListBodyRequest extends Request {
// public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class WorkListButtonRequest extends Request{
//public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class NotificatonButtonResponse extends Response {
//public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class NotificationGetAttachResponse extends Response {
public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
export class GetItemHistoryList extends Response {
public OU_NAME: string;

@ -1,4 +1,5 @@
import { Request } from "./request";
// import { Request } from "./request";
import { Request } from 'src/app/hmg-common/services/models/request';
export class POItemHistoryRequest extends Request {
//public static SHARED_DATA = '';

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { GetItemHistoryList } from "./POItemHistoryList";
export class POItemHistoryRes extends Response {

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { PoHeaderNotificationBodyItems } from "./PoHeaderNotificationBodyItems";
import { PoLinesNotificationBodyItems } from "./PoLinesNotificationBodyItems";

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { PONotificatonBodyList } from "./PONotificationBodyList";
export class PONotificatonBodyResponse extends Response {

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { PRLinesNotificationBodyItems } from "./PRLinesNotificationBodyItems";
import { PRHeaderNotificationBodyItems } from "./PRHeaderNotificationBodyItems";

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import { PRNotificatonBodyList } from './PRNotificationBodyList';
export class PRNotificatonBodyResponse extends Response {

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import {RFCEmployeeList } from './RFCEmployee';
export class WorKListRFCEmployeeResponse extends Response {

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class WorkListReplacmentEmployeeRequest extends Request{
public P_PAGE_NUM : any;

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import {ReplacmentEmployeeList } from './ReplacmentEmployeeList';
export class WorKListReplacmentEmployeeResponse extends Response {

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class WorkListSubmitterInfoRequest extends Request{
public P_NOTIFICATION_TYPE: string;//string

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { WorklistsubmitterInfoItems } from './WorklistsubmitterInfoItems';
export class WorklistsubmitterInfoResponse extends Response {

@ -0,0 +1,9 @@
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class GetItgCount extends Response {
public BUTTON_SEQ = -1;
public BUTTON_LABEL = '';
public BUTTON_ACTION = '';
}

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
export class QuotationAnalysisList extends Response {
public QUOT_NUM: string;

@ -1,4 +1,5 @@
import { Request } from "./request";
// import { Request } from "./request";
import { Request } from 'src/app/hmg-common/services/models/request';
export class QuotationAnalysisRequest extends Request {
public P_PO_HEADER_ID: number;

@ -1,4 +1,5 @@
import { Response } from "./response";
//import { Response } from "./response";
import { Response } from 'src/app/hmg-common/services/models/response';
import {QuotationAnalysisList } from "./quotationAnalysisList";
export class QuotationAnalysisResponse extends Response {

@ -1,4 +1,5 @@
import { Request } from './request';
// import { Request } from './request';
import { Request } from 'src/app/hmg-common/services/models/request';
export class WorkListRequest extends Request{
public static SHARED_DATA = 'login-request';

@ -1,4 +1,5 @@
import { Response } from './response';
//import { Response } from './response';
import { Response } from 'src/app/hmg-common/services/models/response';
import { WorkListResItems } from './workListResItems';
export class WorKListResponse extends Response {

@ -17,6 +17,8 @@ import { StaticInjector } from "@angular/core/src/di/injector";
import { POItemHistoryRes } from "../models/POItemHistoryRes";
import { MOItemHistoryRes } from "../models/MOItemHistoryRes";
import { QuotationAnalysisResponse } from '../models/quotationAnalysisRes';
import { Request } from 'src/app/hmg-common/services/models/request';
import { LoginModel } from '../../authentication/models/LoginModel';
@Injectable()
export class WorklistMainService {
@ -41,11 +43,17 @@ export class WorklistMainService {
"Services/ERP.svc/REST/NOTIFICATION_GET_RESPOND_ATTRIBUTES";
public static getQutationAnalysisUrl =
"Services/ERP.svc/REST/GET_QUOTATION_ANALYSIS";
public static getITGFormTaskCount =
'http://10.80.100.124:7086/Services/COCWS.svc/REST/ITGGetTaskCountRequestType';
public static getITGFormTaskDetails =
'http://10.80.100.124:7086/Services/COCWS.svc/REST/ITGFormsPendingTasks';
constructor(
public api: ConnectorService,
public authService: AuthenticationService
) {}
) { }
public getEITNotificationBody(
WorkListBodyRequest: any,
@ -226,4 +234,30 @@ export class WorklistMainService {
errorLabel
);
}
public getITGCount( onError?: any, errorLabel?: string): Observable<any> {
const request = new Request;
console.log(request)
this.authService.authenticateRequest(request);
return this.api.postToken(
WorklistMainService.getITGFormTaskCount,
request,
onError,
errorLabel
);
}
public getITGDetails( onError?: any, errorLabel?: string): Observable<any> {
const request = new Request;
console.log(request)
this.authService.authenticateRequest(request);
return this.api.postToken(
WorklistMainService.getITGFormTaskDetails,
request,
onError,
errorLabel
);
}
}

@ -116,7 +116,7 @@ export class WorklistMainComponent implements OnInit {
this.worklistMainService
.getPRNotificationBody(notificationBodyObj)
.subscribe((result: PRNotificatonBodyResponse) => {
//this.handleWorkListBodyResult(result, "MO");
this.handleWorkListBodyResult(result, "PR");
});
}
@ -168,10 +168,17 @@ export class WorklistMainComponent implements OnInit {
this.notificationBodyRes =
result.GetAbsenceCollectionNotificationBodyList;
}
}else if (Type == "PR") {
if (result.GetAbsenceCollectionNotificationBodyList) {
this.notificationBodyRes =
result.GetAbsenceCollectionNotificationBodyList;
}
}
}
} //End handleWorkListBodyResult
getNotificationButtons(notificationButtonsObj) {
this.worklistMainService
.getNotificationButtons(notificationButtonsObj)

@ -1,7 +1,7 @@
import { Injectable } from '@angular/core';
import { ConnectorService } from '../../hmg-common/services/connector/connector.service';
import { AuthenticationService } from '../../hmg-common/services/authentication/authentication.service';
import { Observable } from "rxjs";
import { Observable } from 'node_modules/@angular/cli/node_modules/rxjs';
@Injectable({
providedIn: 'root'

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save